A v2 of a series that fixes duplicate permission output whe we write trees. Before: $ git commit -m"add another one" error: insufficient permission for adding an object to repository database .git/objects error: insufficient permission for adding an object to repository database .git/objects error: Error building trees After we only emit that "insufficient permission" line once. The only change since v1 is to make 1/2 and 2/2 flip a "test_expect_failure" to a "test_expect_success". Ævar Arnfjörð Bjarmason (2): unwritable tests: assert exact error output commit: fix duplication regression in permission error output cache-tree.c | 5 +++-- cache.h | 1 + object-file.c | 20 ++++++++++-------- object-store.h | 10 +++++++-- t/t0004-unwritable.sh | 47 +++++++++++++++++++++++++++++++++++++++---- 5 files changed, 67 insertions(+), 16 deletions(-) Range-diff against v1: 1: a5ef8ea47f4 ! 1: 74bc5568c88 unwritable tests: assert exact error output @@ Commit message of these error messages twice, let's assert what the output from "git commit" and friends is now in the case of permission errors. + As noted in [1] using test_expect_failure to mark up a TODO test has + some unexpected edge cases, e.g. we don't want to break --run=3 by + skipping the "test_lazy_prereq" here. This pattern allows us to test + just the test_cmp (and the "cat", which shouldn't fail) with the added + "test_expect_failure", we'll flip that to a "test_expect_success" in + the next commit. + + 1. https://lore.kernel.org/git/87tuhmk19c.fsf@xxxxxxxxxxxxxxxxxxx/T/#u + Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> ## t/t0004-unwritable.sh ## @@ t/t0004-unwritable.sh: test_expect_success setup ' test_when_finished "chmod 775 .git/objects .git/objects/??" && chmod a-w .git/objects .git/objects/?? && - test_must_fail git write-tree ++ test_must_fail git write-tree 2>out.write-tree ++' + ++test_lazy_prereq WRITE_TREE_OUT 'test -e "$TRASH_DIRECTORY"/out.write-tree' ++test_expect_success WRITE_TREE_OUT 'write-tree output on unwritable repository' ' + cat >expect <<-\EOF && + error: insufficient permission for adding an object to repository database .git/objects + fatal: git-write-tree: error building trees + EOF -+ test_must_fail git write-tree 2>actual && -+ test_cmp expect actual ++ test_cmp expect out.write-tree ' - test_expect_success POSIXPERM,SANITY 'commit should notice unwritable repository' ' + test_expect_success POSIXPERM,SANITY,!SANITIZE_LEAK 'commit should notice unwritable repository' ' test_when_finished "chmod 775 .git/objects .git/objects/??" && chmod a-w .git/objects .git/objects/?? && - test_must_fail git commit -m second ++ test_must_fail git commit -m second 2>out.commit ++' + ++test_lazy_prereq COMMIT_OUT 'test -e "$TRASH_DIRECTORY"/out.commit' ++test_expect_failure COMMIT_OUT 'commit output on unwritable repository' ' + cat >expect <<-\EOF && + error: insufficient permission for adding an object to repository database .git/objects -+ error: insufficient permission for adding an object to repository database .git/objects + error: Error building trees + EOF -+ test_must_fail git commit -m second 2>actual && -+ test_cmp expect actual ++ test_cmp expect out.commit ' test_expect_success POSIXPERM,SANITY 'update-index should notice unwritable repository' ' @@ t/t0004-unwritable.sh: test_expect_success setup ' echo 6O >file && chmod a-w .git/objects .git/objects/?? && - test_must_fail git update-index file ++ test_must_fail git update-index file 2>out.update-index ++' + ++test_lazy_prereq UPDATE_INDEX_OUT 'test -e "$TRASH_DIRECTORY"/out.update-index' ++test_expect_success UPDATE_INDEX_OUT 'update-index output on unwritable repository' ' + cat >expect <<-\EOF && + error: insufficient permission for adding an object to repository database .git/objects + error: file: failed to insert into database + fatal: Unable to process path file + EOF -+ test_must_fail git update-index file 2>actual && -+ test_cmp expect actual ++ test_cmp expect out.update-index ' test_expect_success POSIXPERM,SANITY 'add should notice unwritable repository' ' @@ t/t0004-unwritable.sh: test_expect_success setup ' echo b >file && chmod a-w .git/objects .git/objects/?? && - test_must_fail git add file ++ test_must_fail git add file 2>out.add ++' + ++test_lazy_prereq ADD_OUT 'test -e "$TRASH_DIRECTORY"/out.add' ++test_expect_success ADD_OUT 'add output on unwritable repository' ' + cat >expect <<-\EOF && + error: insufficient permission for adding an object to repository database .git/objects + error: file: failed to insert into database + error: unable to index file '\''file'\'' + fatal: updating files failed + EOF -+ test_must_fail git add file 2>actual && -+ test_cmp expect actual ++ test_cmp expect out.add ' test_done 2: 56b20f6024b ! 2: e6cd47355d5 commit: fix duplication regression in permission error output @@ object-store.h: int hash_object_file(const struct git_hash_algo *algo, const voi const char *type, struct object_id *oid, ## t/t0004-unwritable.sh ## -@@ t/t0004-unwritable.sh: test_expect_success POSIXPERM,SANITY 'commit should notice unwritable repository +@@ t/t0004-unwritable.sh: test_expect_success POSIXPERM,SANITY,!SANITIZE_LEAK 'commit should notice unwrit + ' + test_lazy_prereq COMMIT_OUT 'test -e "$TRASH_DIRECTORY"/out.commit' +-test_expect_failure COMMIT_OUT 'commit output on unwritable repository' ' ++test_expect_success COMMIT_OUT 'commit output on unwritable repository' ' cat >expect <<-\EOF && error: insufficient permission for adding an object to repository database .git/objects -- error: insufficient permission for adding an object to repository database .git/objects error: Error building trees - EOF - test_must_fail git commit -m second 2>actual && -- 2.33.0.1567.g7b23ce7ed9e