Re: [PATCH v2 28/29] blame: emit a better error on 'git blame directory'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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?




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux