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

Re: [GSoC] [PATCH v2 1/3] t9811: avoid using pipes to expose exit codes

From
Anthony Wang <anthonywang513@gmail.com>
Date
Apr 7, 2025, 21:28 UTC
Message-ID
<20250407212834.53183-1-anthonywang03@icloud.com>
In-Reply-To
<xmqqo6x7nb2a.fsf@gitster.g>
From: Anthony Wang <anthonywang513@gmail.com>
On Mon, Apr 7, 2025 at 7:20 PM Junio C Hamano <gitster@pobox.com> wrote:
Show 8 quoted lines
> Anthony Wang <anthonywang513@gmail.com> writes:
> 
> > The exit code of the upstream in a pipe is suppressed
> > thus we lose any exit codes of git commands that are piped. In order to
> > ensure we pick up the exit code, we can write the output of the git command
> > to a file, testing the exit codes of both the commands.
> 
> Sort of correct, but ...

Would it be more correct to say that the shell only returns the exit code of the last command in the pipeline? Then, by writing out the output of the git command to a file, we can test the exit codes of both the commands? If not, I am not quite sure what the additional nuance is in this case.

Show 31 quoted lines
> 
> > ---
> >  t/t9811-git-p4-label-import.sh | 10 ++++++----
> >  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> Missing sign-off.
> 
> > diff --git a/t/t9811-git-p4-label-import.sh b/t/t9811-git-p4-label-import.sh
> > index 5ac5383fb7..5abac938d0 100755
> > --- a/t/t9811-git-p4-label-import.sh
> > +++ b/t/t9811-git-p4-label-import.sh
> > @@ -95,9 +95,10 @@ test_expect_success 'two labels on the same changelist' '
> >               cd "$git" &&
> >               git p4 sync --import-labels &&
> > 
> > -             git tag | grep TAG_F1 &&
> > -             git tag | grep -q TAG_F1_1 &&
> > -             git tag | grep -q TAG_F1_2 &&
> > +             git tag >output &&
> > +             grep TAG_F1 output &&
> > +             grep -q TAG_F1_1 output &&
> > +             grep -q TAG_F1_2 output &&
> 
> Think what these tests are trying to do.  After a "git p4 sync"
> operation, they want to ensure that tags TAG_F1_1 and TAG_F1_2
> exist?  Does the test want to see a tag "TAG_F1", or is it only that
> the test is written in a so sloppy way that grepping for TAG_F1 will
> be happy when any one of TAG_F1_1, TAG_F1_2 and TAG_F1_ONLY exists,
> making its purpose of verifying that the tags are in the expected
> state pretty much useless, and that is the reason why it needs to be
> followed up with the two extra tests?

I see, it seems I didn't fully consider the goals of the test. It does indeed seem like the test has some redundancies. If I am understanding correctly, the test grepping for TAG_F1 is not even necessary, and it seems like the tests for TAG_F1_1, TAG_F1_2 were added afterwards to ensure that grep TAG_F1 was not passing when TAG_F1_ONLY existed. If this is the case, would it be better to just remove the grep TAG_F1 test and just keep the two tests for TAG_F1_1 and TAG_F1_2? This would simplify the test and make it clearer that we are only interested in the existence of those two tags.

Show 16 quoted lines
> 
> What is the desired state you want to ensure after "git p4 sync"
> operation above?  I do not do "git p4", but you may know better than
> I do, as you are the one who is patching this test file ;-)  I am
> guessing that you want TAG_F1_1 and TAG_F1_2 to exist and you do not
> want TAG_F1_ONLY to exist?
> 
> If so, instead of grepping around, we should be testing that in a
> more direct way, perhaps with something like
> 
>         git show-ref --verify refs/tags/TAG_F1_1 &&
>         git show-ref --verify refs/tags/TAG_F1_2 &&
>         test_must_fail  git show-ref --verify refs/tags/TAG_F1_ONLY &&
> 
> no?
> 

Possibly, but I believe adding the test_must_fail check would be modifying the original intent of the test, as it would pass even with the existence of TAG_F1_ONLY. However, if we are only performing actions to cause TAG_F1_1 and TAG_F1_2 to exist, then it would be an issue if TAG_F1_ONLY existed.

My original plan was not to change any test coverage, and to only make small changes following the goals of the microproject, but if you think it would be beneficial to change the test to check for the absence of TAG_F1_ONLY, then I will proceed.

Show 12 quoted lines
> >               cd main &&
> > 
> > @@ -208,7 +209,8 @@ test_expect_success 'use git config to enable import/export of tags' '
> >               git p4 rebase --verbose &&
> >               git p4 submit --verbose &&
> >               git tag &&
> > -             git tag | grep TAG_F1_1
> > +             git tag >output &&
> > +             grep TAG_F1_1 output
> >       ) &&
> >       (
> >               cd "$cli" &&
Previous: Junio C HamanoNext: Junio C Hamano
Message 7 of 35 in “t9811: avoid using pipes”
  1. Anthony WangApr 5, 2025
  2. Patrick SteinhardtApr 7, 2025
  3. [GSoC] [PATCH v2 0/3] t9811: Improve test coverage and clarityAnthony Wang, Apr 7, 2025
  4. [GSoC] [PATCH v2 1/3] t9811: avoid using pipes to expose exit codesAnthony Wang, Apr 7, 2025
  5. Eric SunshineApr 7, 2025
  6. Junio C HamanoApr 7, 2025
  7. Anthony WangApr 7, 2025
  8. Junio C HamanoApr 8, 2025
  9. Anthony WangApr 8, 2025
  10. [GSoC] [PATCH v2 2/3] t9811: Remove the -q quiet mode from some instances of grepAnthony Wang, Apr 7, 2025
  11. Eric SunshineApr 7, 2025
  12. Junio C HamanoApr 7, 2025
  13. [GSoC] [PATCH v2 3/3] t9811: Change `grep` to `test_grep` for debug outputAnthony Wang, Apr 7, 2025
  14. [GSoC] [PATCH v3 0/3] t9811: Improve test coverage and clarityAnthony Wang, Apr 7, 2025
  15. [GSoC] [PATCH v3 1/3] t9811: avoid using pipes to expose exit codesAnthony Wang, Apr 7, 2025
  16. [GSoC] [PATCH v3 2/3] t9811: Remove the -q quiet mode from some instances of grepAnthony Wang, Apr 7, 2025
  17. [GSoC] [PATCH v3 3/3] t9811: Change `grep` to `test_grep` for debug outputAnthony Wang, Apr 7, 2025
  18. [GSoC] [PATCH v4 0/1] t9811: Improve test coverage and clarityAnthony Wang, Apr 8, 2025
  19. [GSoC] [PATCH v4 1/1] Remove the pipe following the `git tag`, ensuring the exit code is not hidden. Add explicit verification to check for expected and unexpected tags, increasing specificity and future-proofing a portion of the test.Anthony Wang, Apr 8, 2025
  20. Karthik NayakApr 8, 2025
  21. [GSoC] [PATCH v5 0/1] t9811: Improve test coverage and clarityAnthony Wang, Apr 8, 2025
  22. [GSoC] [PATCH v5 1/1] t9811: Improve test coverage and clarityAnthony Wang, Apr 8, 2025
  23. Junio C HamanoApr 8, 2025
  24. Eric SunshineApr 8, 2025
  25. Anthony WangApr 9, 2025
  26. Junio C HamanoApr 9, 2025
  27. [GSoC] [PATCH v6 0/1] t9811: be more precise to check importing of tagsAnthony Wang, Apr 12, 2025
  28. [GSoC] [PATCH v6 1/1] t9811: be more precise to check importing of tagsAnthony Wang, Apr 12, 2025
  29. Junio C HamanoApr 15, 2025
  30. Anthony WangApr 16, 2025
  31. [GSoC] [PATCH v7 0/1] t9811: be more precise to check importing of tagsAnthony Wang, Apr 16, 2025
  32. [GSoC] [PATCH v7 1/1] t9811: be more precise to check importing of tagsAnthony Wang, Apr 16, 2025
  33. Junio C HamanoApr 18, 2025
  34. Junio C HamanoApr 18, 2025
  35. Eric SunshineApr 18, 2025

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.