Skip to content

Commit

Permalink
Merge branch 'cc/for-each-mergetag'
Browse files Browse the repository at this point in the history
* cc/for-each-mergetag:
  commit: add for_each_mergetag()
  • Loading branch information
Junio C Hamano committed Jul 21, 2014
2 parents da33a97 + 063da62 commit dadb89d
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 11 deletions.
13 changes: 13 additions & 0 deletions commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)) ||
Expand Down
5 changes: 5 additions & 0 deletions commit.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
15 changes: 4 additions & 11 deletions log-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit dadb89d

Please sign in to comment.