aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2014-07-21 11:17:45 -0700
committerJunio C Hamano <gitster@pobox.com>2014-07-21 11:17:45 -0700
commitdadb89d92ce9c81846c1b4c743a41b6e845b572c (patch)
tree68ac1de1b3aaa912b83ff39d084f39ed8a07ea22
parentda33a97998f6d6206c08bd72a527f5b8e6e26d33 (diff)
parent063da62b02aeafe58fdacce0ea48c0761b06df60 (diff)
downloadgit-dadb89d92ce9c81846c1b4c743a41b6e845b572c.tar.gz
git-dadb89d92ce9c81846c1b4c743a41b6e845b572c.tar.xz
Merge branch 'cc/for-each-mergetag'
* cc/for-each-mergetag: commit: add for_each_mergetag()
-rw-r--r--commit.c13
-rw-r--r--commit.h5
-rw-r--r--log-tree.c15
3 files changed, 22 insertions, 11 deletions
diff --git a/commit.c b/commit.c
index f43970dca..f1c9d0e2b 100644
--- a/commit.c
+++ b/commit.c
@@ -1310,6 +1310,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)) ||
diff --git a/commit.h b/commit.h
index 2e1492a6e..b695aa4a5 100644
--- a/commit.h
+++ b/commit.h
@@ -312,6 +312,11 @@ extern struct commit_extra_header *read_commit_extra_headers(struct commit *, co
extern void free_commit_extra_headers(struct commit_extra_header *extra);
+typedef void (*each_mergetag_fn)(struct commit *commit, struct commit_extra_header *extra,
+ void *cb_data);
+
+extern void for_each_mergetag(each_mergetag_fn fn, struct commit *commit, void *data);
+
struct merge_remote_desc {
struct object *obj; /* the named object, could be a tag */
const char *name;
diff --git a/log-tree.c b/log-tree.c
index f87b7e891..0c53dc11a 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -414,10 +414,11 @@ static int is_common_merge(const struct commit *commit)
&& !commit->parents->next->next);
}
-static void show_one_mergetag(struct rev_info *opt,
+static void show_one_mergetag(struct commit *commit,
struct commit_extra_header *extra,
- struct commit *commit)
+ void *data)
{
+ struct rev_info *opt = (struct rev_info *)data;
unsigned char sha1[20];
struct tag *tag;
struct strbuf verify_message;
@@ -465,15 +466,7 @@ static void show_one_mergetag(struct rev_info *opt,
static void show_mergetag(struct rev_info *opt, struct commit *commit)
{
- 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 */
- show_one_mergetag(opt, extra, commit);
- }
- free_commit_extra_headers(to_free);
+ for_each_mergetag(show_one_mergetag, commit, opt);
}
void show_log(struct rev_info *opt)