[PATCH v2 28/29] blame: emit a better error on 'git blame directory'
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Mar 16, 2021, 02:13 UTC
- Message-ID
- <20210316021312.13927-29-avarab@gmail.com>
- In-Reply-To
- <20210308150650.18626-1-avarab@gmail.com>
Change an early check for non-blobs in verify_working_tree_path() to let any such objects pass, and instead die shortly thereafter in the fake_working_tree_commit() caller's type check.
Now e.g. doing "git blame t" in git.git emits:
fatal: unsupported file type t
Instead of:
fatal: no such path 't' in HEAD
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- blame.c | 8 ++------ t/t8004-blame-with-conflicts.sh | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/blame.c b/blame.c index 9e0543e13d4..7da162cd582 100644 --- a/blame.c +++ b/blame.c @@ -100,12 +100,8 @@ static void verify_working_tree_path(struct repository *r, for (parents = work_tree->parents; parents; parents = parents->next) { const struct object_id *commit_oid = &parents->item->object.oid; - struct object_id blob_oid; - unsigned short mode; - int ret = get_tree_entry_mode(r, commit_oid, path, &blob_oid, - &mode); - - if (!ret && oid_object_info(r, &blob_oid, NULL) == OBJ_BLOB) + struct object_id oid; + if (!get_tree_entry_path(r, commit_oid, path, &oid)) return; } diff --git a/t/t8004-blame-with-conflicts.sh b/t/t8004-blame-with-conflicts.sh index 35414a53363..6caa504a0ea 100755 --- a/t/t8004-blame-with-conflicts.sh +++ b/t/t8004-blame-with-conflicts.sh @@ -73,4 +73,24 @@ test_expect_success 'blame does not crash with conflicted file in stages 1,3' ' git blame file1 ' +test_expect_success 'setup second case' ' + git merge --abort +' + +test_expect_success 'blame on directory/file conflict' ' + mkdir d && + test_commit second && + test_commit d/file && + test_must_fail git blame d 2>expected && + + git reset --hard second && + >d && + git add d && + git commit -m"a not-a-dir" && + test_must_fail git merge d/file && + + test_must_fail git blame d 2>actual && + test_cmp expected actual +' + test_done
-- 2.31.0.rc2.211.g1d0b8788b3