summaryrefslogtreecommitdiff
path: root/commit.c
diff options
context:
space:
mode:
authorChristian Couder <chriscool@tuxfamily.org>2014-07-07 06:35:37 (GMT)
committerJunio C Hamano <gitster@pobox.com>2014-07-07 22:32:21 (GMT)
commit063da62b02aeafe58fdacce0ea48c0761b06df60 (patch)
tree56b0db184d387b64fb3e12cdf5cd7d857216f655 /commit.c
parent6f92e5ff3cdc813de8ef5327fd4bad492fb7d6c9 (diff)
downloadgit-063da62b02aeafe58fdacce0ea48c0761b06df60.zip
git-063da62b02aeafe58fdacce0ea48c0761b06df60.tar.gz
git-063da62b02aeafe58fdacce0ea48c0761b06df60.tar.bz2
commit: add for_each_mergetag()
In the same way as there is for_each_ref() to iterate on refs, for_each_mergetag() allows the caller to iterate on the mergetags of a given commit. Use it to rewrite show_mergetag() used in "git log". Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit.c')
-rw-r--r--commit.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/commit.c b/commit.c
index 4ff8077..94b1af9 100644
--- a/commit.c
+++ b/commit.c
@@ -1316,6 +1316,19 @@ struct commit_extra_header *read_commit_extra_headers(struct commit *commit,
return extra;
}
+void for_each_mergetag(each_mergetag_fn fn, struct commit *commit, void *data)
+{
+ struct commit_extra_header *extra, *to_free;
+
+ to_free = read_commit_extra_headers(commit, NULL);
+ for (extra = to_free; extra; extra = extra->next) {
+ if (strcmp(extra->key, "mergetag"))
+ continue; /* not a merge tag */
+ fn(commit, extra, data);
+ }
+ free_commit_extra_headers(to_free);
+}
+
static inline int standard_header_field(const char *field, size_t len)
{
return ((len == 4 && !memcmp(field, "tree ", 5)) ||