mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![Junio C Hamano](/assets/img/avatar_default.png)
The test created an initial commit, made .git/objects unwritable and then exercised various codepaths to create loose commit, tree and blob objects to make sure the commands notice failures from these attempts. However, the initial commit was not preceded with test_tick, which made its object name depend on the timestamp. The names of all the later tree and blob objects the test tried to create were static. If the initial commit's object name happened to begin with the same two hexdigits as the tree or blob objects the test later attempted to create, the fan-out directory in which these tree or blob would be created is already created when the initial commit was made, and the object creation succeeds, and commands being tested should not notice any failure --- in short, the test was bogus. This makes the fan-out directories also unwritable, and adds test_tick before the commit object creation to make the test repeatable. The contents of the file to create a blob from "a" to "60" is to force the name of the blob object to begin with "1b", which shares the fan-out directory with the initial commit that is created with the test. This was useful when diagnosing the breakage of this test. Signed-off-by: Junio C Hamano <gitster@pobox.com>
69 lines
1.1 KiB
Bash
Executable file
69 lines
1.1 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='detect unwritable repository and fail correctly'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success setup '
|
|
|
|
>file &&
|
|
git add file &&
|
|
test_tick &&
|
|
git commit -m initial &&
|
|
echo >file &&
|
|
git add file
|
|
|
|
'
|
|
|
|
test_expect_success 'write-tree should notice unwritable repository' '
|
|
|
|
(
|
|
chmod a-w .git/objects .git/objects/?? &&
|
|
test_must_fail git write-tree
|
|
)
|
|
status=$?
|
|
chmod 775 .git/objects .git/objects/??
|
|
(exit $status)
|
|
|
|
'
|
|
|
|
test_expect_success 'commit should notice unwritable repository' '
|
|
|
|
(
|
|
chmod a-w .git/objects .git/objects/?? &&
|
|
test_must_fail git commit -m second
|
|
)
|
|
status=$?
|
|
chmod 775 .git/objects .git/objects/??
|
|
(exit $status)
|
|
|
|
'
|
|
|
|
test_expect_success 'update-index should notice unwritable repository' '
|
|
|
|
(
|
|
echo 6O >file &&
|
|
chmod a-w .git/objects .git/objects/?? &&
|
|
test_must_fail git update-index file
|
|
)
|
|
status=$?
|
|
chmod 775 .git/objects .git/objects/??
|
|
(exit $status)
|
|
|
|
'
|
|
|
|
test_expect_success 'add should notice unwritable repository' '
|
|
|
|
(
|
|
echo b >file &&
|
|
chmod a-w .git/objects .git/objects/?? &&
|
|
test_must_fail git add file
|
|
)
|
|
status=$?
|
|
chmod 775 .git/objects .git/objects/??
|
|
(exit $status)
|
|
|
|
'
|
|
|
|
test_done
|