t6600: add tests for duplicate tips in tips_reachable_from_bases()
When multiple refs point to the same commit, the reachability check must handle them correctly. Add three tests: - duplicate tips, all reachable - duplicate tips, none reachable - duplicate tips at the minimum generation (exercises the early-termination advancement logic) Suggested-by: Derrick Stolee <stolee@gmail.com> Signed-off-by: Kristofer Karlsson <krka@spotify.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Kristofer Karlsson committed
May 16, 2026 at 15:59 UTC
a30f132bcb62bc44053b1dba0940c2d4041c797a
1 file changed
+45
t/t6600-test-reach.sh
+45
index dc0421ed2f..9486002866 100755
--- a/t/t6600-test-reach.sh
+++ b/t/t6600-test-reach.sh
@@ -612,6 +612,51 @@ test_expect_success 'for-each-ref merged:none' '
--format="%(refname)" --stdin
'
+test_expect_success 'for-each-ref merged:duplicate, all reachable' '
+ git branch dup-a commit-3-3 &&
+ git branch dup-b commit-3-3 &&
+ cat >input <<-\EOF &&
+ refs/heads/commit-1-1
+ refs/heads/dup-a
+ refs/heads/dup-b
+ EOF
+ cat >expect <<-\EOF &&
+ refs/heads/commit-1-1
+ refs/heads/dup-a
+ refs/heads/dup-b
+ EOF
+ run_all_modes git for-each-ref --merged=commit-5-5 \
+ --format="%(refname)" --stdin
+'
+
+test_expect_success 'for-each-ref merged:duplicate, none reachable' '
+ cat >input <<-\EOF &&
+ refs/heads/dup-a
+ refs/heads/dup-b
+ refs/heads/commit-9-9
+ EOF
+ >expect &&
+ run_all_modes git for-each-ref --merged=commit-2-2 \
+ --format="%(refname)" --stdin
+'
+
+test_expect_success 'for-each-ref merged:duplicate at min generation' '
+ git branch dup-c commit-1-1 &&
+ git branch dup-d commit-1-1 &&
+ cat >input <<-\EOF &&
+ refs/heads/dup-c
+ refs/heads/dup-d
+ refs/heads/commit-5-5
+ EOF
+ cat >expect <<-\EOF &&
+ refs/heads/commit-5-5
+ refs/heads/dup-c
+ refs/heads/dup-d
+ EOF
+ run_all_modes git for-each-ref --merged=commit-5-5 \
+ --format="%(refname)" --stdin
+'
+
# For get_branch_base_for_tip, we only care about
# first-parent history. Here is the test graph with
# second parents removed: