On Mon, Mar 15, 2021 at 7:13 PM Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> wrote: > > 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 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?