@matheusbsbs / matheus-bagliano / commits / 329636b435
Fork 0

t0004: fix timing bug

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>

Junio C Hamano committed Jul 12, 2008 at 04:15 UTC 329636b435a792cb10df8d49b791cdafd6d8189b
1 file changed +10 -9
t/t0004-unwritable.sh
+10 -9
@@ -8,6 +8,7 @@ test_expect_success setup '
8
9 >file &&
10 git add file &&
11 + test_tick &&
12 git commit -m initial &&
13 echo >file &&
14 git add file
@@ -17,11 +18,11 @@ test_expect_success setup '
18 test_expect_success 'write-tree should notice unwritable repository' '
19
20 (
20 - chmod a-w .git/objects
21 + chmod a-w .git/objects .git/objects/?? &&
22 test_must_fail git write-tree
23 )
24 status=$?
24 - chmod 775 .git/objects
25 + chmod 775 .git/objects .git/objects/??
26 (exit $status)
27
28 '
@@ -29,11 +30,11 @@ test_expect_success 'write-tree should notice unwritable repository' '
30 test_expect_success 'commit should notice unwritable repository' '
31
32 (
32 - chmod a-w .git/objects
33 + chmod a-w .git/objects .git/objects/?? &&
34 test_must_fail git commit -m second
35 )
36 status=$?
36 - chmod 775 .git/objects
37 + chmod 775 .git/objects .git/objects/??
38 (exit $status)
39
40 '
@@ -41,12 +42,12 @@ test_expect_success 'commit should notice unwritable repository' '
42 test_expect_success 'update-index should notice unwritable repository' '
43
44 (
44 - echo a >file &&
45 - chmod a-w .git/objects
45 + echo 6O >file &&
46 + chmod a-w .git/objects .git/objects/?? &&
47 test_must_fail git update-index file
48 )
49 status=$?
49 - chmod 775 .git/objects
50 + chmod 775 .git/objects .git/objects/??
51 (exit $status)
52
53 '
@@ -55,11 +56,11 @@ test_expect_success 'add should notice unwritable repository' '
56
57 (
58 echo b >file &&
58 - chmod a-w .git/objects
59 + chmod a-w .git/objects .git/objects/?? &&
60 test_must_fail git add file
61 )
62 status=$?
62 - chmod 775 .git/objects
63 + chmod 775 .git/objects .git/objects/??
64 (exit $status)
65
66 '