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>
main
Kristofer Karlsson 2026-05-16 15:59:41 +00:00 committed by Junio C Hamano
parent b80b462d7c
commit a30f132bcb
1 changed files with 45 additions and 0 deletions

View File

@ -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: