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

Re: [RFC PATCH] diff: add option to report binary files in raw diffs

From
Justin Tobler <jltobler@gmail.com>
Date
Nov 7, 2025, 17:16 UTC
Message-ID
<ikzwvvyyhuhvr7picunl3r4zem4cn566zpjxpmh6u4oq6ncswa@cdfokimobtms>
In-Reply-To
<20251107083015.GA18670@tb-raspi4>
On 25/11/07 09:30AM, Torsten Bögershausen wrote:
Show 26 quoted lines
> On Thu, Nov 06, 2025 at 03:42:49PM -0600, Justin Tobler wrote:
> > On 25/11/05 12:04AM, Junio C Hamano wrote:
> > > Justin Tobler <jltobler@gmail.com> writes:
> > Currently the output in the next version will look like:
> > 
> >   :100644 100644 a1961526 e231acb1 binary=yy M	foo
> >   :100644 100644 31eedd5c 402a70d7 binary=nn M	bar
> >
> 
> I think that is a good solutution ;-)
> When I once developped the
> git ls-files --eol option someone (Junio ?) convinced my to
> use a TAB as a seperator.
> In this case just before the filename:
> 
> git ls-file --eol | xxd 
> 00000000: 692f 6c66 2020 2020 772f 6c66 2020 2020  i/lf    w/lf    
> 00000010: 6174 7472 2f20 2020 2020 2020 2020 2020  attr/           
> 00000020: 2020 2020 2020 092e 6369 7272 7573 2e79        ..cirrus.y
>                          ^^
> 00000030: 6d6c 0a                                   ml.
> 
> This makes the output both human readable and machine parsable:
> All info is before the TAB here. (And may be parsed again in a second
> round, if needed).
> Thoughts ?
So the raw diff format for a normal diff pair is as follows:
  :<src mode>SP<dst mode>SP<src sha>SP<dest sha>SP<status>[score]TAB<src path>[TAB<dest path>]LF

When the `-z` option is used, tab and LF are replaced with a NUL byte. So we do already use a tab to delimit between the score/paths. If we wanted to drop avoid using comma to delimit between extended raw diff output we could use a space instead and use TAB to indicate the end. Maybe something like:

  :100644 100644 a1961526 e231acb1 binary=yy crlf=nn    M    foo
  :100644 100644 31eedd5c 402a70d7 binary=nn crlf=yy    M    bar

or we could maybe move the extended info towards the start of the line and leave the remaining bits the same:

  :binary=yy crlf=nn    100644 100644 a1961526 e231acb1 M    foo
  :binary=nn crlf=yy    100644 100644 31eedd5c 402a70d7 M    bar

With either of these formats, the expectation would be parsers continue reading space delimited "key=value" pairs until they encounter a tab. I do think this latter format looks a bit nicer and I don't think it would meaningfully impact the complexity of the parser. Ultimately, I don't feel super strongly one way or the other though. I may go with this last format in the next version since it does look a little nicer IMO. I'm still very much interested in folks thoughts here though. :)

Thanks, -Justin

Previous: Junio C HamanoNext: Junio C Hamano
Message 9 of 12 in “diff: add option to report binary files in raw diffs”
  1. diff: add option to report binary files in raw diffsJustin Tobler, Nov 4, 2025
  2. Junio C HamanoNov 4, 2025
  3. Junio C HamanoNov 4, 2025
  4. Justin ToblerNov 5, 2025
  5. Junio C HamanoNov 5, 2025
  6. Justin ToblerNov 6, 2025
  7. Torsten BögershausenNov 7, 2025
  8. Junio C HamanoNov 7, 2025
  9. Justin ToblerNov 7, 2025
  10. Junio C HamanoNov 7, 2025
  11. Ben KnobleNov 5, 2025
  12. Justin ToblerNov 6, 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.