diff options
| author | Miklos Vajna <vmiklos@frugalware.org> | 2008-06-27 18:22:00 +0200 | 
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2008-06-30 22:45:51 -0700 | 
| commit | 5240c9d75d8e1b747da427ba6320432d3201168a (patch) | |
| tree | df51b4adadebc1f71fbb1fd3ba2fe1bdf99897db /commit.c | |
| parent | 0b9a969e0fbb0a09e9de931cfe27005cbfd6cb7d (diff) | |
| download | git-5240c9d75d8e1b747da427ba6320432d3201168a.tar.gz | |
Introduce get_octopus_merge_bases() in commit.c
This is like get_merge_bases() but it works for multiple heads, like
show-branch --merge-base.
Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit.c')
| -rw-r--r-- | commit.c | 27 | 
1 files changed, 27 insertions, 0 deletions
| @@ -600,6 +600,33 @@ static struct commit_list *merge_bases(struct commit *one, struct commit *two)  	return result;  } +struct commit_list *get_octopus_merge_bases(struct commit_list *in) +{ +	struct commit_list *i, *j, *k, *ret = NULL; +	struct commit_list **pptr = &ret; + +	for (i = in; i; i = i->next) { +		if (!ret) +			pptr = &commit_list_insert(i->item, pptr)->next; +		else { +			struct commit_list *new = NULL, *end = NULL; + +			for (j = ret; j; j = j->next) { +				struct commit_list *bases; +				bases = get_merge_bases(i->item, j->item, 1); +				if (!new) +					new = bases; +				else +					end->next = bases; +				for (k = bases; k; k = k->next) +					end = k; +			} +			ret = new; +		} +	} +	return ret; +} +  struct commit_list *get_merge_bases(struct commit *one,  					struct commit *two, int cleanup)  { | 
