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

Re: Fix "git log -z" behaviour

From
Junio C Hamano <junkio@cox.net>
Date
Feb 10, 2007, 07:32 UTC
Message-ID
<7vtzxumps5.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<7v7iusz3c2.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> writes:
Show 14 quoted lines
> Linus Torvalds <torvalds@linux-foundation.org> writes:
>
>> For the normal case where the termination character is '\n', this 
>> obviously doesn't change anything at all, since we just switched two 
>> identical characters around. So it's very safe - it doesn't change any 
>> normal usage, but it definitely fixes "git log -z".
>
> Gaah.
>
> I have already applied this but I think this has fallout for
> existing users of "-z --raw".  Nothing in-tree uses "git log" as
> the upstream of a pipe as far as I know because in-tree stuff
> tend to stick to plumbing when it comes to scripting, but I
> think your patch would affect the plumbing level as well.

I think the new semantics for -z ("inter-record termination is NUL") makes a lot more sense for "-p -z" format that shows commit log message and the patch text. It makes filtering the output with "grep -z" feel much more natural.

The new semantics is however quite inconsistent with the other formats: --raw, --name-only and --name-status. These already use NUL for separating pathnames and fields when -z is given, in order to allow scripts sensibly deal with pathname that contain funny characters (e.g. LF and HT). Nobody is likely to feed their output to "grep -z", but one problematic case I see is to use this:

	git log -z --raw -r --pretty=raw $commit
or its equivalent:
	git rev-list $commit |
        git diff-tree --stdin --raw -r --pretty=raw
to prepare data to feed something like fast-import.

But such newly written scripts can read from non -z and unwrap paths themselves just as easily (the pathname safety with NUL was invented before we started using c-quote consistently), so it might be Ok to leave them (slightly) broken.

So, I give up.
Previous: Junio C HamanoNext: Junio C Hamano
Message 13 of 34 in “git log filtering”
  1. Don ZickusFeb 7, 2007
  2. Jakub NarebskiFeb 7, 2007
  3. Uwe Kleine-KönigFeb 7, 2007
  4. Johannes SchindelinFeb 7, 2007
  5. Linus TorvaldsFeb 7, 2007
  6. Johannes SchindelinFeb 7, 2007
  7. Linus TorvaldsFeb 7, 2007
  8. Fix "git log -z" behaviourLinus Torvalds, Feb 7, 2007
  9. Junio C HamanoFeb 7, 2007
  10. Don ZickusFeb 7, 2007
  11. Linus TorvaldsFeb 7, 2007
  12. Junio C HamanoFeb 8, 2007
  13. Junio C HamanoFeb 10, 2007
  14. Junio C HamanoFeb 10, 2007
  15. Linus TorvaldsFeb 10, 2007
  16. Don ZickusFeb 7, 2007
  17. Linus TorvaldsFeb 7, 2007
  18. Linus TorvaldsFeb 7, 2007
  19. Junio C HamanoFeb 7, 2007
  20. Linus TorvaldsFeb 7, 2007
  21. Jeff KingFeb 8, 2007
  22. Johannes SchindelinFeb 8, 2007
  23. Jeff KingFeb 8, 2007
  24. Johannes SchindelinFeb 9, 2007
  25. Shawn O. PearceFeb 9, 2007
  26. Johannes SchindelinFeb 9, 2007
  27. Sergey VlasovFeb 9, 2007
  28. Jeff KingFeb 9, 2007
  29. Johannes SchindelinFeb 9, 2007
  30. Jeff KingFeb 9, 2007
  31. Johannes SchindelinFeb 9, 2007
  32. pcre performance, was Re: git log filteringJohannes Schindelin, Mar 7, 2007
  33. Paolo BonziniMar 7, 2007
  34. Horst H. von BrandFeb 8, 2007

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.