summaryrefslogtreecommitdiff
path: root/cache-tree.c
diff options
context:
space:
mode:
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>2021-10-12 14:30:49 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-10-12 18:16:59 (GMT)
commit4ef91a2d795c424eda2bec1bfbbd0c813bcc978a (patch)
tree964cf0dbd008401d8e9a265da7556608ac14ec6f /cache-tree.c
parent119b26d6b9a98fd22bbd340da39cf15d4712fb97 (diff)
downloadgit-4ef91a2d795c424eda2bec1bfbbd0c813bcc978a.zip
git-4ef91a2d795c424eda2bec1bfbbd0c813bcc978a.tar.gz
git-4ef91a2d795c424eda2bec1bfbbd0c813bcc978a.tar.bz2
commit: fix duplication regression in permission error output
Fix a regression in the error output emitted when .git/objects can't be written to. Before 9c4d6c0297b (cache-tree: Write updated cache-tree after commit, 2014-07-13) we'd emit only one "insufficient permission" error, now we'll do so again. The cause is rather straightforward, we've got WRITE_TREE_SILENT for the use-case of wanting to prepare an index silently, quieting any permission etc. error output. Then when we attempt to update to that (possibly broken) index we'll run into the same errors again. But with 9c4d6c0297b the gap between the cache-tree API and the object store wasn't closed in terms of asking write_object_file() to be silent. I.e. post-9c4d6c0297b the first call is to prepare_index(), and after that we'll call prepare_to_commit(). We only want verbose error output from the latter. So let's add and use that facility with a corresponding HASH_SILENT flag, its only user is cache-tree.c's update_one(), which will set it if its "WRITE_TREE_SILENT" flag is set. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'cache-tree.c')
-rw-r--r--cache-tree.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/cache-tree.c b/cache-tree.c
index 90919f9..f21bfc6 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -440,8 +440,9 @@ static int update_one(struct cache_tree *it,
} else if (dryrun) {
hash_object_file(the_hash_algo, buffer.buf, buffer.len,
tree_type, &it->oid);
- } else if (write_object_file(buffer.buf, buffer.len, tree_type,
- &it->oid)) {
+ } else if (write_object_file_flags(buffer.buf, buffer.len, tree_type,
+ &it->oid, flags & WRITE_TREE_SILENT
+ ? HASH_SILENT : 0)) {
strbuf_release(&buffer);
return -1;
}