On Tue, Mar 17, 2020 at 12:18 PM Jeff King <peff@xxxxxxxx> wrote: > > On Tue, Mar 17, 2020 at 10:37:13AM -0500, Robert Dailey wrote: > > > > It works perfectly right now except for the case where `%b` is empty. > > > In that case, I just want one newline after `%s` instead of 2. Is > > > there a way to make my second `%n` conditional on `%b` having a value? > > [...] > > Another solution I tried is `%+b`, based on this documentation: > > That's what I would have suggested. And it does seem to work if you do: > > git log --format='* %s%n%+b' > > but not when you add in the indentation and wrapping: > > git log --format='* %s%n%w(100,2,2)%+b' > > Which is unfortunate, but I think makes sense: the wrapping sees the > extra newline as part of the text to be wrapped, so it gets folded into > the first line. > > I think what you really want is a conditional that can cover multiple > placeholders, and put the wrapped body inside that. You can do that with > the for-each-ref placeholders, which have a real "%(if)...%(end)" block. > But I don't think the pretty-format placeholders have an equivalent. It > would be nice to unify them one day, but progress has been slow on that > front. > > I wonder in the meantime if it would be possible to introduce a block > syntax to the pretty formats, like: > > git log --format='* %s%n%+{%w(100,2,2)%b}' > > or something. I don't know the conditional code well enough to say > whether that would be a trivial patch or a horribly complicated one. :) Thanks for the information. It could also be that for something this complex, expecting Git to do it internally might be unreasonable. I'll try to come up with a bash script to replace the alias. It'll be a lot more verbose but I can take more of a "string builder" approach in an actual script which might be more intuitive. I just wanted to check for any bugs/built-in behavior before I go that route.