From: Miklos Vajna Date: Thu, 19 Jun 2008 23:22:34 GMT Subject: [PATCH 09/11] Introduce filter_independent() in commit.c Message-ID: <0d95a099ad6e47c60894983ab7bfd94a3aeddce7.1213917600.git.vmiklos@frugalware.org> In-Reply-To: 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 --- 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; + return ret; +} diff --git a/commit.h b/commit.h index dcec7fb..0aef7e4 100644 --- a/commit.h +++ b/commit.h @@ -131,6 +131,7 @@ extern struct commit_list *get_shallow_commits(struct object_array *heads, int depth, int shallow_flag, int not_shallow_flag); int in_merge_bases(struct commit *, struct commit **, int); +struct commit_list *filter_independent(unsigned char *head, struct commit_list *heads); extern int interactive_add(int argc, const char **argv, const char *prefix); extern int rerere(void); -- 1.5.6