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

Re: diffstat summary mode change bug

From
Stefan Beller <sbeller@google.com>
Date
Sep 27, 2017, 21:09 UTC
Message-ID
<CAGZ79kbCgTNaunfneWHP3xkLeXwW72CZZWs7Sv8A7QL_UYE_HQ@mail.gmail.com>
In-Reply-To
<CA+55aFxwNOLaoeg64CYb-a6c89ceVbfc0b5vG_WCzyNBwynwfQ@mail.gmail.com>

On Wed, Sep 27, 2017 at 2:02 PM, Linus Torvalds <torvalds@linux-foundation.org> wrote:

Show 33 quoted lines
> On Wed, Sep 27, 2017 at 1:40 PM, Stefan Beller <sbeller@google.com> wrote:
>>
>> I disagree with this analysis, as the fix you propose adds the
>> new line unconditionally, i.e. this code path would be broken
>> regardless of "show filename or not".
>
> Right. Because it is what we want.
>
> The old code (before that commit) used to have two different cases:
>
>                 fprintf(file, "%s mode change %06o => %06o%c",
> line_prefix, p->one->mode,
>                         p->two->mode, show_name ? ' ' : '\n');
>
> ie if "show_name" was set, it would *not* print a newline, and print a
> space instead.
>
> But then on the very next line, it used to do:
>
>                 if (show_name) {
>                         write_name_quoted(p->two->path, file, '\n');
>
> ie now it prints the filename, and then prints the newline.
>
> End result: it used to *always* print the newline. Either it printed
> it at the end of the mode (for the non-show_name case), or it printed
> it at the end of the filename (for the show_name case).
>
> Your patch removed the '\n' entirely.
>
> My patch makes it unconditional, which it was before your patch (it
> was "conditional" only in where it was printed, not _whether_ it was
> printed).
I agree with this.
Show 14 quoted lines
>
>> I wonder why our tests failed to tell us about this.
>>
>> Specifically we have t4100/t-apply-4.expect
>>   mode change 100644 => 100755 t/t0000-basic.sh
>>   mode change 100644 => 100755 t/test-lib.sh
>> which would seem to exercise this code path.
>
> That only tests "git apply --stat --summary".
>
> It doesn't test "git diff" at all.
>
> And the "mode change" printout is entirely different code (see apply.c
> vs diff.c).

Why doesn't this surprise me at all? (Whenever I write emails I assume the best of Gits code base, such as non-duplicated code. "It's all in the mighty diff machinery".)

In that case let me write a test for this and resubmit your fix without whitespace mangling.

Thanks, Stefan

Previous: Linus TorvaldsNext: Stefan Beller
Message 4 of 19 in “diffstat summary mode change bug”
  1. Linus TorvaldsSep 27, 2017
  2. Stefan BellerSep 27, 2017
  3. Linus TorvaldsSep 27, 2017
  4. Stefan BellerSep 27, 2017
  5. diff: correct newline in summary for renamed filesStefan Beller, Sep 27, 2017
  6. Linus TorvaldsSep 27, 2017
  7. Jeff KingSep 27, 2017
  8. Jeff KingSep 27, 2017
  9. Stefan BellerSep 27, 2017
  10. Jeff KingSep 27, 2017
  11. diff: correct newline in summary for renamed filesStefan Beller, Sep 27, 2017
  12. Jonathan NiederSep 27, 2017
  13. Ramsay JonesSep 27, 2017
  14. Stefan BellerSep 27, 2017
  15. Jeff KingSep 28, 2017
  16. Junio C HamanoSep 28, 2017
  17. Jeff KingSep 28, 2017
  18. Stefan BellerSep 27, 2017
  19. Junio C HamanoSep 28, 2017

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.