Thread (5 messages) flat view 5 messages, 4 authors, 2016-06-15

Re: [PATCH 2/4] log and rev-list: Fixed newline termination issues with --graph

From: Jakub Narebski <hidden>
Date: 2016-06-15 22:44:27

Junio C Hamano [off-list ref] writes:
Junio C Hamano [off-list ref] writes:
quoted
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.
Or %_ might interpolate to _single_ separator, swallowing all
separators that follows it (something like collapsing whitespace).
Either that, or %_ interpolate to separator value, and %*_ collapses
separators (terminators).
 
Bit less hacky, bit more geeky.
 (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.
I guess that literal newline in format would also mean multi-line
output.  Also '%b' (body) should mean multi-line output.


BTW. rpm uses [% ... ] to iterate over a set of (parallel) arrays
in --queryformat, which is a bit similar to --pretty=format:<fmt>,
e.g. 'rpm -q --queryformat "[%-50{FILENAMES} %10{FILESIZES}\n]'

BTW2. git-for-each-ref uses _different_ kind of format, %(<name>) and
not %<char>.
 (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.
"|" instead of ":" wouldn't be a good idea?

-- 
Jakub Narebski
Poland
ShadeHawk on #git
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help