tests: clean after SANITY tests

Some of our tests try to make sure Git behaves sensibly in a
read-only directory, by dropping 'w' permission bit before doing a
test and then restoring it after it is done.  The latter is needed
for the test framework to clean after itself without leaving a
leftover directory that cannot be removed.

Ancient parts of tests however arrange the above with

	chmod a-w . &&
	... do the test ...
	status=$?
	chmod 775 .
	(exit $status)

which obviously would not work if the test somehow dies before it
has the chance to do "chmod 775".  Rewrite them by following a more
robust pattern recently written tests use, which is

	test_when_finished "chmod 775 ." &&
	chmod a-w . &&
	... do the test ...

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano
2018-06-15 11:13:39 -07:00
parent fc54c1af3e
commit 037714252f
5 changed files with 6 additions and 9 deletions

View File

@ -287,6 +287,7 @@ test_expect_success 'init notices EEXIST (2)' '
' '
test_expect_success POSIXPERM,SANITY 'init notices EPERM' ' test_expect_success POSIXPERM,SANITY 'init notices EPERM' '
test_when_finished "chmod +w newdir" &&
rm -fr newdir && rm -fr newdir &&
mkdir newdir && mkdir newdir &&
chmod -w newdir && chmod -w newdir &&

View File

@ -19,8 +19,8 @@ test_expect_success 'mktemp to nonexistent directory prints filename' '
test_expect_success POSIXPERM,SANITY 'mktemp to unwritable directory prints filename' ' test_expect_success POSIXPERM,SANITY 'mktemp to unwritable directory prints filename' '
mkdir cannotwrite && mkdir cannotwrite &&
chmod -w cannotwrite &&
test_when_finished "chmod +w cannotwrite" && test_when_finished "chmod +w cannotwrite" &&
chmod -w cannotwrite &&
test_must_fail test-mktemp cannotwrite/testXXXXXX 2>err && test_must_fail test-mktemp cannotwrite/testXXXXXX 2>err &&
grep "cannotwrite/test" err grep "cannotwrite/test" err
' '

View File

@ -179,6 +179,8 @@ test_expect_success 'funny symlink in work tree' '
test_expect_success SANITY 'funny symlink in work tree, un-unlink-able' ' test_expect_success SANITY 'funny symlink in work tree, un-unlink-able' '
test_when_finished "chmod u+w a 2>/dev/null; rm -fr a b" &&
rm -fr a b && rm -fr a b &&
git reset --hard && git reset --hard &&
@ -188,10 +190,6 @@ test_expect_success SANITY 'funny symlink in work tree, un-unlink-able' '
' '
# clean-up from the above test
chmod a+w a 2>/dev/null
rm -fr a b
test_expect_success 'D/F setup' ' test_expect_success 'D/F setup' '
git reset --hard && git reset --hard &&

View File

@ -175,8 +175,8 @@ EOF
test_expect_success POSIXPERM,SANITY 'shallow fetch from a read-only repo' ' test_expect_success POSIXPERM,SANITY 'shallow fetch from a read-only repo' '
cp -R .git read-only.git && cp -R .git read-only.git &&
find read-only.git -print | xargs chmod -w &&
test_when_finished "find read-only.git -type d -print | xargs chmod +w" && test_when_finished "find read-only.git -type d -print | xargs chmod +w" &&
find read-only.git -print | xargs chmod -w &&
git clone --no-local --depth=2 read-only.git from-read-only && git clone --no-local --depth=2 read-only.git from-read-only &&
git --git-dir=from-read-only/.git log --format=%s >actual && git --git-dir=from-read-only/.git log --format=%s >actual &&
cat >expect <<EOF && cat >expect <<EOF &&

View File

@ -1099,6 +1099,7 @@ EOF
' '
test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository' ' test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository' '
test_when_finished "chmod 775 .git" &&
( (
chmod a-w .git && chmod a-w .git &&
# make dir1/tracked stat-dirty # make dir1/tracked stat-dirty
@ -1108,9 +1109,6 @@ test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository'
# make sure "status" succeeded without writing index out # make sure "status" succeeded without writing index out
git diff-files | grep dir1/tracked git diff-files | grep dir1/tracked
) )
status=$?
chmod 775 .git
(exit $status)
' '
(cd sm && echo > bar && git add bar && git commit -q -m 'Add bar') && git add sm (cd sm && echo > bar && git add bar && git commit -q -m 'Add bar') && git add sm