зеркало из https://github.com/microsoft/git.git
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>
This commit is contained in:
Родитель
0b9a969e0f
Коммит
5240c9d75d
27
commit.c
27
commit.c
|
@ -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)
|
||||
{
|
||||
|
|
1
commit.h
1
commit.h
|
@ -121,6 +121,7 @@ int read_graft_file(const char *graft_file);
|
|||
struct commit_graft *lookup_commit_graft(const unsigned char *sha1);
|
||||
|
||||
extern struct commit_list *get_merge_bases(struct commit *rev1, struct commit *rev2, int cleanup);
|
||||
extern struct commit_list *get_octopus_merge_bases(struct commit_list *in);
|
||||
|
||||
extern int register_shallow(const unsigned char *sha1);
|
||||
extern int unregister_shallow(const unsigned char *sha1);
|
||||
|
|
Загрузка…
Ссылка в новой задаче