mirror of
https://github.com/git/git
synced 2024-08-25 10:45:59 +00:00
Merge branch 'bm/merge-base-octopus-dedup' into maint
"git merge-base --octopus" used to leave cleaning up suboptimal result to the caller, but now it does the clean-up itself. * bm/merge-base-octopus-dedup: merge-base --octopus: reduce the result from get_octopus_merge_bases() merge-base: separate "--independent" codepath into its own helper
This commit is contained in:
commit
2cd861672e
|
@ -44,19 +44,36 @@ static struct commit *get_commit_reference(const char *arg)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int handle_octopus(int count, const char **args, int reduce, int show_all)
|
static int handle_independent(int count, const char **args)
|
||||||
{
|
{
|
||||||
struct commit_list *revs = NULL;
|
struct commit_list *revs = NULL;
|
||||||
struct commit_list *result;
|
struct commit_list *result;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (reduce)
|
for (i = count - 1; i >= 0; i--)
|
||||||
show_all = 1;
|
commit_list_insert(get_commit_reference(args[i]), &revs);
|
||||||
|
|
||||||
|
result = reduce_heads(revs);
|
||||||
|
if (!result)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
while (result) {
|
||||||
|
printf("%s\n", sha1_to_hex(result->item->object.sha1));
|
||||||
|
result = result->next;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int handle_octopus(int count, const char **args, int show_all)
|
||||||
|
{
|
||||||
|
struct commit_list *revs = NULL;
|
||||||
|
struct commit_list *result;
|
||||||
|
int i;
|
||||||
|
|
||||||
for (i = count - 1; i >= 0; i--)
|
for (i = count - 1; i >= 0; i--)
|
||||||
commit_list_insert(get_commit_reference(args[i]), &revs);
|
commit_list_insert(get_commit_reference(args[i]), &revs);
|
||||||
|
|
||||||
result = reduce ? reduce_heads(revs) : get_octopus_merge_bases(revs);
|
result = reduce_heads(get_octopus_merge_bases(revs));
|
||||||
|
|
||||||
if (!result)
|
if (!result)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -114,8 +131,10 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
|
||||||
if (reduce && (show_all || octopus))
|
if (reduce && (show_all || octopus))
|
||||||
die("--independent cannot be used with other options");
|
die("--independent cannot be used with other options");
|
||||||
|
|
||||||
if (octopus || reduce)
|
if (octopus)
|
||||||
return handle_octopus(argc, argv, reduce, show_all);
|
return handle_octopus(argc, argv, show_all);
|
||||||
|
else if (reduce)
|
||||||
|
return handle_independent(argc, argv);
|
||||||
|
|
||||||
rev = xmalloc(argc * sizeof(*rev));
|
rev = xmalloc(argc * sizeof(*rev));
|
||||||
while (argc-- > 0)
|
while (argc-- > 0)
|
||||||
|
|
|
@ -230,4 +230,43 @@ test_expect_success 'criss-cross merge-base for octopus-step' '
|
||||||
test_cmp expected.sorted actual.sorted
|
test_cmp expected.sorted actual.sorted
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'merge-base --octopus --all for complex tree' '
|
||||||
|
# Best common ancestor for JE, JAA and JDD is JC
|
||||||
|
# JE
|
||||||
|
# / |
|
||||||
|
# / |
|
||||||
|
# / |
|
||||||
|
# JAA / |
|
||||||
|
# |\ / |
|
||||||
|
# | \ | JDD |
|
||||||
|
# | \ |/ | |
|
||||||
|
# | JC JD |
|
||||||
|
# | | /| |
|
||||||
|
# | |/ | |
|
||||||
|
# JA | | |
|
||||||
|
# |\ /| | |
|
||||||
|
# X JB | X X
|
||||||
|
# \ \ | / /
|
||||||
|
# \__\|/___/
|
||||||
|
# J
|
||||||
|
test_commit J &&
|
||||||
|
test_commit JB &&
|
||||||
|
git reset --hard J &&
|
||||||
|
test_commit JC &&
|
||||||
|
git reset --hard J &&
|
||||||
|
test_commit JTEMP1 &&
|
||||||
|
test_merge JA JB &&
|
||||||
|
test_merge JAA JC &&
|
||||||
|
git reset --hard J &&
|
||||||
|
test_commit JTEMP2 &&
|
||||||
|
test_merge JD JB &&
|
||||||
|
test_merge JDD JC &&
|
||||||
|
git reset --hard J &&
|
||||||
|
test_commit JTEMP3 &&
|
||||||
|
test_merge JE JC &&
|
||||||
|
git rev-parse JC >expected &&
|
||||||
|
git merge-base --all --octopus JAA JDD JE >actual &&
|
||||||
|
test_cmp expected actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in a new issue