Re: [PATCH 09/11] Introduce filter_independent() in commit.c
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:44:47
Miklos Vajna [off-list ref] writes:
quoted hunk ↗ jump to hunk
This is similar to git-show-branch --independent: It filters out commits which are reachable from any other item from the input list. Signed-off-by: Miklos Vajna <redacted> --- commit.c | 16 ++++++++++++++++ commit.h | 1 + 2 files changed, 17 insertions(+), 0 deletions(-)diff --git a/commit.c b/commit.c index 6052ca3..0dbf4b7 100644 --- a/commit.c +++ b/commit.c@@ -705,3 +705,19 @@ int in_merge_bases(struct commit *commit, struct commit **reference, int num) free_commit_list(bases); return ret; } + +struct commit_list *filter_independent(unsigned char *head, + struct commit_list *heads) +{ + struct commit_list *i, *bases, *ret = NULL; + struct commit_list **pptr = &ret; + + commit_list_insert(lookup_commit(head), &heads); + + bases = get_octopus_merge_bases(heads); + + for (i = heads; i; i = i->next) + if (!(i->item->object.flags & RESULT)) + pptr = &commit_list_insert(i->item, pptr)->next;
Hmm. How well was this function tested? Because RESULT is an implementation detail of merge_bases(), I do not think we would want to expose it outside of it. More worryingly, the flag is supposed to be cleaned from the objects after get_merge_bases() returns. I am not sure what you'll learn by looking at the flag here.