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@xxxxxxxxx> --- 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