Re: [PATCH 2/4] log and rev-list: Fixed newline termination issues with --graph
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:44:27
Junio C Hamano [off-list ref] writes:
I suspect that --pretty=format: (i.e. userformat) should have a way to explicitly tell which is wanted. Perhaps we can keep the separator semantics not to break existing users, and introduce a dummy expand item (say, '%_') and when it appears in the pattern it would ask for the terminator semantics instead? In any case, I'm happy to see that somebody started looking into this, as this "separator vs terminator" issue in userformat has been nagging me for quite a while. It might be good idea to have the change independently from the graph extension first and then build the graph stuff on top of the solidified base. I dunno...
Some alternatives to specify terminator semantics I considered are:
(1) Presence of %_ in "--pretty=format:..." triggers terminator
semantics and %_ itself interpolates an empty string; otherwise
separator semantics is used.
(2) Presence of %n in "--pretty=format:..." means a multi-line output and
uses separator as before; lack of %n means it is a one-line format
and uses terminator.
(3) A new option --pretty=tformat:... (i.e. tformat instead of format)
means LF (or NUL) is used as terminator instead of separator;
(4) A new syntax --pretty=format/... (i.e. slash instead of the usual
colon) means LF (or NUL) is used as terminator instead of separator;
The first one is what I suggested in the message, but it feels somewhat
hacky. I suspect that the second one would catch 99% of the cases, but it
is DWIM and it is known that DWIM can go wrong. I favor design along
the lines of (3) or (4), which I think would be much cleaner.
I however do not particularly like either "tformat" which is a non-word,
nor ":" vs "/" whose differences do not intuitively translate to
"separator vs terminator" distinction.