Skip to content

Commit

Permalink
merge-base --octopus: reduce the result from get_octopus_merge_bases()
Browse files Browse the repository at this point in the history
Scripts that use "merge-base --octopus" could do the reducing
themselves, but most of them are expected to want to get the reduced
results without having to do any work themselves.

Tests are taken from a message by Василий Макаров
<einmalfel@gmail.com>

Signed-off-by: Junio C Hamano <gitster@pobox.com>

---

 We might want to vet the existing callers of the underlying
 get_octopus_merge_bases() and find out if _all_ of them are doing
 anything extra (like deduping) because the machinery can return
 duplicate results. And if that is the case, then we may want to
 move the dedupling down the callchain instead of having it here.
  • Loading branch information
Junio C Hamano committed Dec 30, 2013
1 parent e2f5df4 commit 8f29299
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 1 deletion.
2 changes: 1 addition & 1 deletion builtin/merge-base.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ static int handle_octopus(int count, const char **args, int show_all)
for (i = count - 1; i >= 0; i--)
commit_list_insert(get_commit_reference(args[i]), &revs);

result = get_octopus_merge_bases(revs);
result = reduce_heads(get_octopus_merge_bases(revs));

if (!result)
return 1;
Expand Down
39 changes: 39 additions & 0 deletions t/t6010-merge-base.sh
Original file line number Diff line number Diff line change
Expand Up @@ -230,4 +230,43 @@ test_expect_success 'criss-cross merge-base for octopus-step' '
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

0 comments on commit 8f29299

Please sign in to comment.