Skip to content

Commit

Permalink
t1450: increase test coverage of in-tree d/f detection
Browse files Browse the repository at this point in the history
Exercise the case of putting a conflict candidate file name back on the
stack because a matching directory might yet come up later.

Do that by factoring out the test code into a function to allow for more
concise notation in the form of parameters indicating names of trees
(with trailing slash) and blobs (without trailing slash) in no
particular order (they are sorted by git mktree).  Then add the new test
case as a second function call.

Fix a typo in the test title while at it ("dublicate").

Reported-by: Derrick Stolee <[email protected]>
Signed-off-by: René Scharfe <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
rscharfe authored and gitster committed May 21, 2020
1 parent 8671559 commit fc12aa7
Showing 1 changed file with 27 additions and 15 deletions.
42 changes: 27 additions & 15 deletions t/t1450-fsck.sh
Original file line number Diff line number Diff line change
Expand Up @@ -234,21 +234,33 @@ test_expect_success 'tree object with duplicate entries' '
test_i18ngrep "error in tree .*contains duplicate file entries" out
'

test_expect_success 'tree object with dublicate names' '
test_when_finished "remove_object \$blob" &&
test_when_finished "remove_object \$tree" &&
test_when_finished "remove_object \$badtree" &&
blob=$(echo blob | git hash-object -w --stdin) &&
printf "100644 blob %s\t%s\n" $blob x.2 >tree &&
tree=$(git mktree <tree) &&
printf "100644 blob %s\t%s\n" $blob x.1 >badtree &&
printf "100644 blob %s\t%s\n" $blob x >>badtree &&
printf "040000 tree %s\t%s\n" $tree x >>badtree &&
badtree=$(git mktree <badtree) &&
test_must_fail git fsck 2>out &&
test_i18ngrep "$badtree" out &&
test_i18ngrep "error in tree .*contains duplicate file entries" out
'
check_duplicate_names () {
expect=$1 &&
shift &&
names=$@ &&
test_expect_$expect "tree object with duplicate names: $names" '
test_when_finished "remove_object \$blob" &&
test_when_finished "remove_object \$tree" &&
test_when_finished "remove_object \$badtree" &&
blob=$(echo blob | git hash-object -w --stdin) &&
printf "100644 blob %s\t%s\n" $blob x.2 >tree &&
tree=$(git mktree <tree) &&
for name in $names
do
case "$name" in
*/) printf "040000 tree %s\t%s\n" $tree "${name%/}" ;;
*) printf "100644 blob %s\t%s\n" $blob "$name" ;;
esac
done >badtree &&
badtree=$(git mktree <badtree) &&
test_must_fail git fsck 2>out &&
test_i18ngrep "$badtree" out &&
test_i18ngrep "error in tree .*contains duplicate file entries" out
'
}

check_duplicate_names success x x.1 x/
check_duplicate_names success x x.1.2 x.1/ x/

test_expect_success 'unparseable tree object' '
test_oid_cache <<-\EOF &&
Expand Down

0 comments on commit fc12aa7

Please sign in to comment.