Re: [PATCH v2 28/29] blame: emit a better error on 'git blame directory'
From: Elijah Newren <hidden>
Date: 2021-03-16 06:56:41
On Mon, Mar 15, 2021 at 7:13 PM Ævar Arnfjörð Bjarmason [off-list ref] wrote:
quoted hunk ↗ jump to hunk
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 <redacted> --- 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
Given that the commit message says the change was about modifying the error message shown, why does the new test not check for the error message?