From 063da62b02aeafe58fdacce0ea48c0761b06df60 Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Mon, 7 Jul 2014 08:35:37 +0200 Subject: 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 Signed-off-by: Junio C Hamano --- commit.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'commit.c') diff --git a/commit.c b/commit.c index 4ff8077db..94b1af939 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)) || -- cgit v1.2.1