Skip to content

Commit

Permalink
t3600: fix broken "choking git rm" test
Browse files Browse the repository at this point in the history
The test 'choking "git rm" should not let it die with cruft' is
supposed to check 'git rm's behavior when interrupted by provoking a
SIGPIPE while 'git rm' is busily deleting files from a specially
crafted index.

This test is silently broken for the following reasons:

- The test crafts a special index by feeding a large number of index
  entries with null shas to 'git update-index --index-info'.  It was
  OK back then when this test was introduced in commit 0693f9d
  (Make sure lockfiles are unlocked when dying on SIGPIPE,
  2008-12-18), but since commit 4337b58 (do not write null sha1s to
  on-disk index, 2012-07-28) null shas are not allowed in the on-disk
  index causing 'git update-index' to error out.

- The barfing 'git update-index --index-info' should fail the test,
  but it remains unnoticed because of the severely broken && chain:
  the test's result depends solely on whether there is a stale lock
  file left behind, but after 'git update-index' errors out 'git rm'
  won't be executed at all.

To fix this test feed only non-null shas to 'git update-index' and
restore the && chain (partly by adding a missing && and by using the
test_when_finished helper instead of manual cleanup).

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
SZEDER Gábor authored and Junio C Hamano committed Oct 16, 2013
1 parent 4337b58 commit 056f34b
Showing 1 changed file with 4 additions and 7 deletions.
11 changes: 4 additions & 7 deletions t/t3600-rm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -240,18 +240,15 @@ test_expect_success 'refresh index before checking if it is up-to-date' '

test_expect_success 'choking "git rm" should not let it die with cruft' '
git reset -q --hard &&
test_when_finished "rm -f .git/index.lock && git reset -q --hard" &&
i=0 &&
while test $i -lt 12000
do
echo "100644 $_z40 0 some-file-$i"
echo "100644 1234567890123456789012345678901234567890 0 some-file-$i"
i=$(( $i + 1 ))
done | git update-index --index-info &&
git rm -n "some-file-*" | :;
test -f .git/index.lock
status=$?
rm -f .git/index.lock
git reset -q --hard
test "$status" != 0
git rm -n "some-file-*" | : &&
test_path_is_missing .git/index.lock
'

test_expect_success 'rm removes subdirectories recursively' '
Expand Down

0 comments on commit 056f34b

Please sign in to comment.