git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] t7406: Make a test_must_fail call fail for the right reason

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Aug 3, 2018, 23:40 UTC
Message-ID
<CAPig+cR75Q7HDipttU9dqtNjf23SYNJ98o=0-=JFtPgMMjFxHA@mail.gmail.com>
In-Reply-To
<20180803231407.10662-1-newren@gmail.com>
On Fri, Aug 3, 2018 at 7:14 PM Elijah Newren <newren@gmail.com> wrote:
Show 12 quoted lines
> A test making use of test_must_fail was failing like this:
>   fatal: ambiguous argument '|': unknown revision or path not in the working tree.
> when the intent was to verify that a specific string was not found
> in the output of the git diff command, i.e. that grep returned
> non-zero.  Fix the test to do that.
> ---
> diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh
> @@ -599,7 +599,7 @@ test_expect_success 'submodule update - update=none in .git/config but --checkou
>          git diff --raw | grep "        submodule" &&
>          git submodule update --checkout &&
> -        test_must_fail git diff --raw \| grep "        submodule" &&
> +        git diff --raw | test_must_fail grep " submodule" &&

Unfortunately, this is a mis-use of test_must_fail() which is intended only for Git commands; it does extra checking to ensure that the Git command failed in a sane way (say, by returning a failing exit status) rather than by crashing. It's not intended for use with system commands which are assumed to be bug-free.

Having a Git command upstream of a pipe is also discouraged since the pipe swallows its exit status, which means we won't know if the Git command actually crashed. So, what you really want is this:

    git diff --raw >out &&
    ! grep "<literal-tab>" out &&
(where <literal-tab> is a literal TAB)

Since this script has a number of instances of Git commands upstream pipes, it may not make sense to fix just this one. So, either a preparatory cleanup patch could fix them all at once, and then this patch could come on top or, if you don't want to fix all the pipe cases, you could do this instead:

    ! git diff --raw | grep "<literal-tab>" &&
Previous: Junio C HamanoNext: Eric Sunshine
Message 3 of 33 in “t7406: Make a test_must_fail call fail for the right reason”
  1. t7406: Make a test_must_fail call fail for the right reasonElijah Newren, Aug 3, 2018
  2. Junio C HamanoAug 3, 2018
  3. Eric SunshineAug 3, 2018
  4. Eric SunshineAug 3, 2018
  5. 0/2 Simple fixes to t7406Elijah Newren, Aug 6, 2018
  6. 1/3 t7406: simplify by using diff --name-only instead of diff --rawElijah Newren, Aug 6, 2018
  7. 2/3 t7406: avoid having git commands upstream of a pipeElijah Newren, Aug 6, 2018
  8. SZEDER GáborAug 6, 2018
  9. Elijah NewrenAug 6, 2018
  10. 3/3 t7406: make a test_must_fail call fail for the right reasonElijah Newren, Aug 6, 2018
  11. SZEDER GáborAug 7, 2018
  12. Elijah NewrenAug 7, 2018
  13. Martin ÅgrenAug 7, 2018
  14. Elijah NewrenAug 7, 2018
  15. 0/5 Simple fixes to t7406Elijah Newren, Aug 7, 2018
  16. 1/5 t7406: simplify by using diff --name-only instead of diff --rawElijah Newren, Aug 7, 2018
  17. Junio C HamanoAug 7, 2018
  18. Elijah NewrenAug 7, 2018
  19. Junio C HamanoAug 7, 2018
  20. 3/5 t7406: prefer test_* helper functions to test -[feds]Elijah Newren, Aug 7, 2018
  21. Junio C HamanoAug 7, 2018
  22. 5/5 t7406: fix call that was failing for the wrong reasonElijah Newren, Aug 7, 2018
  23. Junio C HamanoAug 7, 2018
  24. 4/5 t7406: avoid using test_must_fail for commands other than gitElijah Newren, Aug 7, 2018
  25. 2/5 t7406: avoid having git commands upstream of a pipeElijah Newren, Aug 7, 2018
  26. 0/5 Simple fixes to t7406Elijah Newren, Aug 8, 2018
  27. 5/5 t7406: avoid using test_must_fail for commands other than gitElijah Newren, Aug 8, 2018
  28. 2/5 t7406: simplify by using diff --name-only instead of diff --rawElijah Newren, Aug 8, 2018
  29. 4/5 t7406: prefer test_* helper functions to test -[feds]Elijah Newren, Aug 8, 2018
  30. 1/5 t7406: fix call that was failing for the wrong reasonElijah Newren, Aug 8, 2018
  31. 3/5 t7406: avoid having git commands upstream of a pipeElijah Newren, Aug 8, 2018
  32. SZEDER GáborAug 13, 2018
  33. Elijah NewrenAug 18, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.