summaryrefslogtreecommitdiff
path: root/commit.c
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2018-04-25 09:54:04 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-04-26 03:52:57 (GMT)
commitfef461ea5d53dd84c6d946f57a018ffc9f391a05 (patch)
tree08f1ddeb9c54d1b18d7cb874e487b15f7e298111 /commit.c
parentc5aa6db64f6f43621568bb1fec9360c25dbd2749 (diff)
downloadgit-fef461ea5d53dd84c6d946f57a018ffc9f391a05.zip
git-fef461ea5d53dd84c6d946f57a018ffc9f391a05.tar.gz
git-fef461ea5d53dd84c6d946f57a018ffc9f391a05.tar.bz2
commit: Let the callback of for_each_mergetag return on error
This is yet another patch to be filed under the keyword "libification". There is one subtle change in behavior here, where a `git log` that has been asked to show the mergetags would now stop reporting the mergetags upon the first failure, whereas previously, it would have continued to the next mergetag, if any. In practice, that change should not matter, as it is 1) uncommon to perform octopus merges using multiple tags as merge heads, and 2) when the user asks to be shown those tags, they really should be there. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit.c')
-rw-r--r--commit.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/commit.c b/commit.c
index ca474a7..2952ec9 100644
--- a/commit.c
+++ b/commit.c
@@ -1288,17 +1288,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)
+int for_each_mergetag(each_mergetag_fn fn, struct commit *commit, void *data)
{
struct commit_extra_header *extra, *to_free;
+ int res = 0;
to_free = read_commit_extra_headers(commit, NULL);
- for (extra = to_free; extra; extra = extra->next) {
+ for (extra = to_free; !res && extra; extra = extra->next) {
if (strcmp(extra->key, "mergetag"))
continue; /* not a merge tag */
- fn(commit, extra, data);
+ res = fn(commit, extra, data);
}
free_commit_extra_headers(to_free);
+ return res;
}
static inline int standard_header_field(const char *field, size_t len)