Re: Conditional newline in pretty format
- From
- Robert Dailey <rcdailey.lists@gmail.com>
- Date
- Mar 17, 2020, 17:27 UTC
- Message-ID
- <CAHd499AfYZth1oFii66iUMDJTKVaa-S1K37jt2V027EmYsGPkA@mail.gmail.com>
- In-Reply-To
- <20200317171853.GA6598@coredump.intra.peff.net>
On Tue, Mar 17, 2020 at 12:18 PM Jeff King <peff@peff.net> wrote:
Show 35 quoted lines
>
> 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.