> ---
>  t/t6043-merge-rename-directories.sh | 337 
> ++++++++++++++++++++++++++++++++++++
>  1 file changed, 337 insertions(+)

> +test_expect_failure '10b-check: Overwrite untracked with dir rename + 
> delete' '
> +     (
> +             cd 10b &&
> +
> +             git checkout A^0 &&
> +             echo very >y/c &&
> +             echo important >y/d &&
> +             echo contents >y/e &&
> +
> +             test_must_fail git merge -s recursive B^0 >out 2>err &&
> +             test_i18ngrep "CONFLICT (rename/delete).*Version B^0 of y/d 
> left in tree at y/d~B^0" out &&
> +             test_i18ngrep "Error: Refusing to lose untracked file at y/e; 
> writing to y/e~B^0 instead" out &&
> +
> +             test 3 -eq $(git ls-files -s | wc -l) &&
> +             test 2 -eq $(git ls-files -u | wc -l) &&
> +             test 5 -eq $(git ls-files -o | wc -l) &&
> +
> +             test $(git rev-parse :0:y/b) = $(git rev-parse O:z/b) &&

There is a test helper for that :)

  test_cmp_rev :0:y/b O:z/b

Note, that this is not only a matter of useful output on failure, but
also that of correctness and robustness.  A failing command inside
those command substitutions won't cause the whole command above to
fail, and if both 'git rev-parse' were to fail without writing
anything to stdout, the whole condition would still be fulfilled:

  $ test $(false) = $(false) && echo true
  true

I noticed that this patch series adds several similar

  test $(git hash-object this) = $(git rev-parse that)

conditions.  Well, for that we don't have a test helper
function.  Similar 'hash-object = rev-parse' comparisons are already
present in two other test scripts, so perhaps it's worth adding a
helper function.  Or you could perhaps

  git cat-file -p that >out &&
  test_cmp this out

I also noticed that all existing 'hash-object = rev-parse' conditions
came from you, so I would leave it up to you to decide which is easier
to work with and whether it's worth it.


> +             test "very" = "$(cat y/c)" &&
> +
> +             test "important" = "$(cat y/d)" &&

The 'verbose' helper could make conditions like these more, well,
verbose about their failure:

  verbose test "very" = "$(cat y/c)" &&

> +             test "important" != "$(git rev-parse :3:y/d)" &&

I'm not sure what this condition is supposed to check.

I'm not particularly well versed in the intricacies of 'git rev-parse'
operating on different stages of the index, but to my understanding
'git rev-parse rev' either outputs the object name pointed by 'rev',
or 'rev' verbatim if that doesn't resolve to a valid object.  IOW, it
would never output "important" and the condition would always be
fulfilled.
What am I missing?

> +             test $(git rev-parse :3:y/d) = $(git rev-parse O:z/c) &&
> +
> +             test "contents" = "$(cat y/e)" &&
> +             test "contents" != "$(git rev-parse :3:y/e)" &&
> +             test $(git rev-parse :3:y/e) = $(git rev-parse B:z/e)
> +     )
> +'

Reply via email to