Re: [PATCH] pretty: add format specifiers: %gr, %gt, %gI, gi
- From
Theodore Ts'o <tytso@mit.edu>
- Date
- Jul 11, 2016, 16:43 UTC
- Message-ID
- <20160711164317.GB3890@thunk.org>
- In-Reply-To
- <20160711050201.GA18031@sigill.intra.peff.net>
On Mon, Jul 11, 2016 at 01:02:02AM -0400, Jeff King wrote:
Show 15 quoted lines
> Yeah, I'd have hoped for %gd, as well. One thing I think we should move
> towards in the long run is giving more readable names to our
> placeholders for git-log, the way for-each-ref and cat-file do (but
> keeping the existing ones for compatibility and as a shorthand).
>
> So ideally the answer in the long run is:
>
> %(reflog-ref)@{%(reflog-index)}
>
> or possibly:
>
> %(reflog:index)
>
> for the whole thing. Or something like that. I haven't thought that hard
> about the exact syntax.Yes, FWIW, I agree that long term, using % followed by one or two characters is just a mess, and using some kind of human-readable format is going to make a lot of sense. I can imagine a few places where I might still want to type --format=%at in some kind of ad-hoc shell command, but in most places, if you're using a complex --format specifier, it's going either in a shell script or in a .gitconfig file, where being verbose is probably more of an advantage than a disadvantage.
Show 5 quoted lines
> 1. It's half-implemented. Why can we do format X, but not format Y > (for that matter, why can you do %ct, but there is no --date format > that matches it?). That sort of non-orthogonality ends up > frustrating for users and makes git look creaky and poorly thought > out.
Git *is* creaky and not thought-out in advance; that's just the nature of how most successful open source projects grow; might as well be proud of it. :-) As Greg K-H has said: "We believe in evolution, and not intelligent design." :-)
Show 11 quoted lines
> > ... although I doubt whether git would ever want to do the equivalent of: > > > > gcloud compute images list --format='table[box,title=Images](name:sort=1,family)' > > > > which will print something like this: > > That's neat, though I think I'd really prefer just making it easy to get > the data out of git in a structured way, and then applying some cool > json-formatting script to it. Surely "turn this json into a table" is a > thing that could be solved once for everybody (I don't work with it > enough to know, but maybe "jq" can do that already).
Oh, agreed. I used that as over-the-top example of something we probably wouldn't want to put in the git core. jq can't, but I'm sure there must be some JSON tool out there which can.
Show 25 quoted lines
> But let's get back to reality for a moment. Here are some patches that
> address the issues you brought up above.
>
> [1/5]: doc/rev-list-options: clarify "commit@{Nth}" for "-g" option
> [2/5]: doc/rev-list-options: explain "-g" output formats
> [3/5]: doc/pretty-formats: describe index/time formats for %gd
> [4/5]: date: document and test "raw-local" mode
> [5/5]: date: add "unix" format
>
> The next step is either:
>
> - add specific reflog-time-formats, as your patch does
>
> - add a generic reflog-date placeholder, so you can do:
>
> git log --date=unix --format='%gT'
>
> or whatever. That still doesn't give you multiple date types in a
> single invocation, though. It's probably not much code to do so, but
> designing the syntax and supporting existing placeholders would be
> some work.
>
> I'm on the fence, so I'll let you decide how you want to proceed. I can
> live with "%gr" and "%gt", as they are at least symmetric with their
> author/committer counterparts.I'm on the fence myself. I can live with either, since either way the long message command line will be going in .gitconfig. I have a slight preference for %gr and %gt, as %gT isn't orthogonal with %ad/%cd, but I could be easily pursuaded otherwise.
Does anyone else have a strong opinion?
- Ted