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

Re: textconv not invoked when viewing merge commit

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 16, 2011, 06:10 UTC
Message-ID
<7v39lid8uz.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20110416014758.GB23306@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 14 quoted lines
>> > Well, I know no tool parsing combined diff actually, so it's indeed a
>> > hypothetical case.
>> 
>> And the ones that have been parsing cdiff wouldn't have done anything good
>> before this change on such a binary blob anyway, no?
>
> No, but we can view the proposed change as fixing a bug for such a tool
> Whereas turning it into:
>
>   --Binary blob XXX
>   + Binary blob YYY
>    +Binary blob ZZZ
>
> is codifying ambiguous output, and making the tool forever broken.

Of course, if we did this for a plumbing command and when the user did not ask for --textconv, I would agree with your argument. Such an output makes it impossible to tell between the text files that had these lines and binary files.

What I am suggesting is to make any binary file use a fallback textconv "Binary blob $SHA-1", when the --textconv option is given from the command line and no textconv filter is configured for the path, in any textconv aware commands consistently, not limited to -c/--cc under discussion.

With the current codebase, such a change *would* break a bog-standard, two-way "git diff" for a binary file; we do want to see the traditional "Binary files differ" by not using the fallback textconv, but we cannot tell if the --textconv option was explicitly given from the command line with the test used in Michael's patch (i.e. ALLOW_TEXTCONV), because we set the bit by default for Porcelain commands. And showing "-Binary X" followed by "-Binary Y" is simply wrong and ambiguous, of course, in such a case. We need to be able to tell if an explicit --textconv was given or we have ALLOW_TEXTCONV merely because we are running a Porcelain.

But I suspect that isn't something we cannot fix---we can just use another bit to record that in the command line parser.

Once that is fixed, I don't think giving "Binary files differ" when the line-counter script reads from a plumbing command that was invoked explicitly with the --textconv command is any better than giving the above three lines. For a two-way merge, it does not matter much, but when viewing a merge with three or more parents, -c/--cc output that shows which sets of parents had the same blobs would be useful for humans (and tools) than a single "Binary files differ" output that does not tell any details. The line-counter script would be counting "forever broken" data when you feed your JPEG collection with exif extracting textconv filter anyway, and I do not necessarily think it would make things worse to give a fallback textconv filter to binary files that do not have one defined.

Previous: Jeff KingNext: Jeff King
Message 23 of 25 in “textconv not invoked when viewing merge commit”
  1. Peter OberndorferApr 11, 2011
  2. Michael J GruberApr 12, 2011
  3. Jeff KingApr 14, 2011
  4. Jeff KingApr 14, 2011
  5. Junio C HamanoApr 14, 2011
  6. Jeff KingApr 14, 2011
  7. Michael J GruberApr 14, 2011
  8. Junio C HamanoApr 14, 2011
  9. Junio C HamanoApr 14, 2011
  10. Jeff KingApr 14, 2011
  11. Junio C HamanoApr 14, 2011
  12. Jeff KingApr 14, 2011
  13. combine-diff: use textconv for combined diff formatMichael J Gruber, Apr 15, 2011
  14. Junio C HamanoApr 15, 2011
  15. Michael J GruberApr 16, 2011
  16. Junio C HamanoApr 16, 2011
  17. Jakub NarebskiApr 16, 2011
  18. Jeff KingApr 15, 2011
  19. Peter OberndorferApr 21, 2011
  20. Matthieu MoyApr 15, 2011
  21. Junio C HamanoApr 15, 2011
  22. Jeff KingApr 16, 2011
  23. Junio C HamanoApr 16, 2011
  24. Jeff KingApr 16, 2011
  25. Junio C HamanoApr 16, 2011

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.