Thread (38 messages) flat view 38 messages, 5 authors, 2016-06-15

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help