2008-04-24 00:47:17 +08:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='detect unwritable repository and fail correctly'
|
|
|
|
|
|
|
|
. ./test-lib.sh
|
|
|
|
|
|
|
|
test_expect_success setup '
|
|
|
|
|
|
|
|
>file &&
|
|
|
|
git add file &&
|
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>
2008-07-12 19:15:56 +08:00
|
|
|
test_tick &&
|
2008-04-24 00:47:17 +08:00
|
|
|
git commit -m initial &&
|
|
|
|
echo >file &&
|
|
|
|
git add file
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2009-03-14 05:55:27 +08:00
|
|
|
test_expect_success POSIXPERM 'write-tree should notice unwritable repository' '
|
2008-04-24 00:47:17 +08:00
|
|
|
|
|
|
|
(
|
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>
2008-07-12 19:15:56 +08:00
|
|
|
chmod a-w .git/objects .git/objects/?? &&
|
2008-04-24 00:47:17 +08:00
|
|
|
test_must_fail git write-tree
|
|
|
|
)
|
|
|
|
status=$?
|
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>
2008-07-12 19:15:56 +08:00
|
|
|
chmod 775 .git/objects .git/objects/??
|
2008-04-24 00:47:17 +08:00
|
|
|
(exit $status)
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2009-03-14 05:55:27 +08:00
|
|
|
test_expect_success POSIXPERM 'commit should notice unwritable repository' '
|
2008-04-24 00:47:17 +08:00
|
|
|
|
|
|
|
(
|
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>
2008-07-12 19:15:56 +08:00
|
|
|
chmod a-w .git/objects .git/objects/?? &&
|
2008-04-24 00:47:17 +08:00
|
|
|
test_must_fail git commit -m second
|
|
|
|
)
|
|
|
|
status=$?
|
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>
2008-07-12 19:15:56 +08:00
|
|
|
chmod 775 .git/objects .git/objects/??
|
2008-04-24 00:47:17 +08:00
|
|
|
(exit $status)
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2009-03-14 05:55:27 +08:00
|
|
|
test_expect_success POSIXPERM 'update-index should notice unwritable repository' '
|
2008-04-24 00:47:17 +08:00
|
|
|
|
|
|
|
(
|
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>
2008-07-12 19:15:56 +08:00
|
|
|
echo 6O >file &&
|
|
|
|
chmod a-w .git/objects .git/objects/?? &&
|
2008-04-24 00:47:17 +08:00
|
|
|
test_must_fail git update-index file
|
|
|
|
)
|
|
|
|
status=$?
|
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>
2008-07-12 19:15:56 +08:00
|
|
|
chmod 775 .git/objects .git/objects/??
|
2008-04-24 00:47:17 +08:00
|
|
|
(exit $status)
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2009-03-14 05:55:27 +08:00
|
|
|
test_expect_success POSIXPERM 'add should notice unwritable repository' '
|
2008-04-24 00:47:17 +08:00
|
|
|
|
|
|
|
(
|
|
|
|
echo b >file &&
|
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>
2008-07-12 19:15:56 +08:00
|
|
|
chmod a-w .git/objects .git/objects/?? &&
|
2008-04-24 00:47:17 +08:00
|
|
|
test_must_fail git add file
|
|
|
|
)
|
|
|
|
status=$?
|
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>
2008-07-12 19:15:56 +08:00
|
|
|
chmod 775 .git/objects .git/objects/??
|
2008-04-24 00:47:17 +08:00
|
|
|
(exit $status)
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_done
|