Re: [RFC] Porting builtin/branch.c to use the printing options of ref-filter.{c,h}
- From
Karthik Nayak <karthik.188@gmail.com>
- Date
- Aug 26, 2015, 06:39 UTC
- Message-ID
- <CAOLa=ZRZpy8_KGNZL1TahEkOOdQ35e1168pwuCpkxbogRDXNnw@mail.gmail.com>
- In-Reply-To
- <xmqq4mjnyzfy.fsf@gitster.dls.corp.google.com>
On Wed, Aug 26, 2015 at 12:20 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 22 quoted lines
> Karthik Nayak <karthik.188@gmail.com> writes: > >> I'm working on porting over the printing options of ref-filter to `git >> branch -l`. >> This is a follow up to >> http://article.gmane.org/gmane.comp.version-control.git/276377 >> >> Theres a slight issue with this which I'd like to discuss about. >> >> When we use `-a` option in `git branch -l` >> It lists local branches and remotes with each having a different output format. >> This with reference to ref-filter would mean either >> >> 1. Change format in between local and remote refs > > I thought the end result of consolidation would be for for-each-ref, > branch -l, and tag -l to be "first collect what to show, and then > show them according to a single format given". How could it be > possible to switch format? It's not even like each element collected > in the first phase is marked so that the second "display" phase know > which one is which. >
Absolutely right! Currently this is not even possible, It was just a shot in the dark. I was just shooting out possibilities I could think of :)
Show 11 quoted lines
>> 2. Have a format like %(if)...local check....%(then)....local branch >> format....%(else)....remote format %(end). > > That, if we had a working if/then/else/end, would be a good > demonstration of it. > > If this were only for internal use by "branch -l", it might be > overkill, but the end users with for-each-ref --format options would > want to do the same thing as built-in patterns, so it is a good goal > to aim at. >
I have a version of that running in my local repo, I'll probably post a WIP soon, when I get this done.
Show 10 quoted lines
>> I prefer the latter, but that might lead to a large format. Any suggestions? > > A less ambitious option might be: > > 3. Invent "%(refname:<some magic>)" format similar to > %(refname:short) but does your thing depending on the prefix > refs/heads/ and refs/remotes/. > > but that will not work if the difference between local and remote > format is not merely textual (e.g. paint them in different color).
It's more than just colors. The whole format changes.
$ git branch -a For local: "%(if)%(HEAD)%(then)%(HEAD) %(color:green)%(refname:short)%(else) %(refname:short)%(end)" For remote: " remotes/%(color:red)%(refname:short)%(color:reset)%(if)%(symref)%(then) -> %(symref:short)%(end)"
On Wed, Aug 26, 2015 at 1:36 AM, Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> wrote:
Show 5 quoted lines
> > Hmm, yes, colors would be difficult to get with this solution. Perhaps a > %(refname:autoprefix,autocolor) that would pick the color and do the > textual rendering? >
That sounds, good, probably could work on something of this sort.
-- Regards, Karthik Nayak