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

Re: [PATCH v1] t2203: avoid masking exit codes in git status

From
Yushin Tian <a3205153416@gmail.com>
Date
Jan 18, 2026, 04:16 UTC
Message-ID
<CA+rU_o4TYi-9dTgReP6=+15SZ--gyZg7OK2rn=Rqji5sQ5P-bg@mail.gmail.com>
In-Reply-To
<xmqqy0lw5cmq.fsf@gitster.g>
Junio C Hamano <gitster@pobox.com> writes:
Show 11 quoted lines
>Looking at other parts of this patch makes me wonder if we can get
>away by filtering lines that match "^?" out, instead of explicitly
>naming 'actual' and 'tmp'.  It seems that the entire t2203 file does
>not care about untraacked files at all (in other words, there is no
>"expect" file that expects a line with '^?' in it), so rewriting the
>above (and everything that this patch touches) to use something like
>
>       git status --porcelain -uno >actual
>
>makes the intent clear (i.e., we do not care about untracked files)
>and simpler (i.e., we do not need "grep -v" to filter), wouldn't it?

You are right. Using `-uno` is much simpler and semantically closer to what the tests are checking (changes in the index, not untracked files). It also naturally avoids the exit code masking issue since the pipe is removed.

I have checked t2203 and confirmed that no test cases expect untracked files in their output.

I will send a v2 patch shortly with this change, and I'll also add the [gsoc] prefix which I missed in the first iteration.

Thanks for you suggestion!
Show 85 quoted lines
>
> Tian Yuchen <a3205153416@gmail.com> writes:
>
> >  test_expect_success 'git status' '
> > -     git status --porcelain | grep -v actual >actual &&
> > +     git status --porcelain >tmp &&
> > +     grep -v -e actual -e tmp tmp >actual &&
>
> Looking at other parts of this patch makes me wonder if we can get
> away by filtering lines that match "^?" out, instead of explicitly
> naming 'actual' and 'tmp'.  It seems that the entire t2203 file does
> not care about untraacked files at all (in other words, there is no
> "expect" file that expects a line with '^?' in it), so rewriting the
> above (and everything that this patch touches) to use something like
>
>         git status --porcelain -uno >actual
>
> makes the intent clear (i.e., we do not care about untracked files)
> and simpler (i.e., we do not need "grep -v" to filter), wouldn't it?
>
> >       cat >expect <<-\EOF &&
> >       DA 1.t
> >       A  elif
> > @@ -26,7 +27,8 @@ test_expect_success 'git status' '
> >  '
> >
> >  test_expect_success 'git status with porcelain v2' '
> > -     git status --porcelain=v2 | grep -v "^?" >actual &&
> > +     git status --porcelain=v2 >tmp &&
> > +     grep -v "^?" tmp >actual &&
> >       nam1=$(echo 1 | git hash-object --stdin) &&
> >       nam2=$(git hash-object elif) &&
> >       cat >expect <<-EOF &&
> > @@ -171,17 +173,20 @@ test_expect_success 'rename detection finds the right names' '
> >               mv first third &&
> >               git add -N third &&
> >
> > -             git status | grep -v "^?" >actual.1 &&
> > +             git status >tmp &&
> > +             grep -v "^?" tmp >actual.1 &&
> >               test_grep "renamed: *first -> third" actual.1 &&
> >
> > -             git status --porcelain | grep -v "^?" >actual.2 &&
> > +             git status --porcelain >tmp &&
> > +             grep -v "^?" tmp >actual.2 &&
> >               cat >expected.2 <<-\EOF &&
> >                R first -> third
> >               EOF
> >               test_cmp expected.2 actual.2 &&
> >
> >               hash=$(git hash-object third) &&
> > -             git status --porcelain=v2 | grep -v "^?" >actual.3 &&
> > +             git status --porcelain=v2 >tmp &&
> > +             grep -v "^?" tmp >actual.3 &&
> >               cat >expected.3 <<-EOF &&
> >               2 .R N... 100644 100644 100644 $hash $hash R100 third   first
> >               EOF
> > @@ -211,11 +216,13 @@ test_expect_success 'double rename detection in status' '
> >               mv second third &&
> >               git add -N third &&
> >
> > -             git status | grep -v "^?" >actual.1 &&
> > +             git status >tmp &&
> > +             grep -v "^?" tmp >actual.1 &&
> >               test_grep "renamed: *first -> second" actual.1 &&
> >               test_grep "renamed: *second -> third" actual.1 &&
> >
> > -             git status --porcelain | grep -v "^?" >actual.2 &&
> > +             git status --porcelain >tmp &&
> > +             grep -v "^?" tmp >actual.2 &&
> >               cat >expected.2 <<-\EOF &&
> >               R  first -> second
> >                R second -> third
> > @@ -223,7 +230,8 @@ test_expect_success 'double rename detection in status' '
> >               test_cmp expected.2 actual.2 &&
> >
> >               hash=$(git hash-object third) &&
> > -             git status --porcelain=v2 | grep -v "^?" >actual.3 &&
> > +             git status --porcelain=v2 >tmp &&
> > +             grep -v "^?" tmp >actual.3 &&
> >               cat >expected.3 <<-EOF &&
> >               2 R. N... 100644 100644 100644 $hash $hash R100 second  first
> >               2 .R N... 100644 100644 100644 $hash $hash R100 third   second
> >
> > base-commit: 7264e61d87e58b9d0f5e6424c47c11e9657dfb75
Previous: Junio C HamanoNext: Tian Yuchen
Message 3 of 4 in “t2203: avoid masking exit codes in git status”
  1. t2203: avoid masking exit codes in git statusTian Yuchen, Jan 17, 2026
  2. Junio C HamanoJan 17, 2026
  3. Yushin TianJan 18, 2026
  4. t2203: avoid masking exit codes in git statusTian Yuchen, Jan 18, 2026

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.