mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
write-tree: properly detect failure to write tree objects
Tomasz Fortuna reported that "git commit" does not error out properly when it cannot write tree objects out. "git write-tree" shares the same issue, as the failure to notice the error is deep in the logic to write tree objects out recursively. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
4f7ec79708
commit
edae5f0c20
@ -341,8 +341,11 @@ static int update_one(struct cache_tree *it,
|
||||
|
||||
if (dryrun)
|
||||
hash_sha1_file(buffer.buf, buffer.len, tree_type, it->sha1);
|
||||
else
|
||||
write_sha1_file(buffer.buf, buffer.len, tree_type, it->sha1);
|
||||
else if (write_sha1_file(buffer.buf, buffer.len, tree_type, it->sha1)) {
|
||||
strbuf_release(&buffer);
|
||||
return -1;
|
||||
}
|
||||
|
||||
strbuf_release(&buffer);
|
||||
it->entry_count = i;
|
||||
#if DEBUG
|
||||
|
67
t/t0004-unwritable.sh
Executable file
67
t/t0004-unwritable.sh
Executable file
@ -0,0 +1,67 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='detect unwritable repository and fail correctly'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success setup '
|
||||
|
||||
>file &&
|
||||
git add file &&
|
||||
git commit -m initial &&
|
||||
echo >file &&
|
||||
git add file
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'write-tree should notice unwritable repository' '
|
||||
|
||||
(
|
||||
chmod a-w .git/objects
|
||||
test_must_fail git write-tree
|
||||
)
|
||||
status=$?
|
||||
chmod 775 .git/objects
|
||||
(exit $status)
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'commit should notice unwritable repository' '
|
||||
|
||||
(
|
||||
chmod a-w .git/objects
|
||||
test_must_fail git commit -m second
|
||||
)
|
||||
status=$?
|
||||
chmod 775 .git/objects
|
||||
(exit $status)
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'update-index should notice unwritable repository' '
|
||||
|
||||
(
|
||||
echo a >file &&
|
||||
chmod a-w .git/objects
|
||||
test_must_fail git update-index file
|
||||
)
|
||||
status=$?
|
||||
chmod 775 .git/objects
|
||||
(exit $status)
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'add should notice unwritable repository' '
|
||||
|
||||
(
|
||||
echo b >file &&
|
||||
chmod a-w .git/objects
|
||||
test_must_fail git add file
|
||||
)
|
||||
status=$?
|
||||
chmod 775 .git/objects
|
||||
(exit $status)
|
||||
|
||||
'
|
||||
|
||||
test_done
|
Loading…
Reference in New Issue
Block a user