Re: [PATCH 8/8] t0012: test "-h" with builtins
- From
Jeff King <peff@peff.net>
- Date
- Jun 1, 2017, 05:35 UTC
- Message-ID
- <20170601053536.zflna2bzclhvbeso@sigill.intra.peff.net>
- In-Reply-To
- <xmqqinkg734c.fsf@gitster.mtv.corp.google.com>
On Thu, Jun 01, 2017 at 01:17:55PM +0900, Junio C Hamano wrote:
Show 15 quoted lines
> Jeff King <peff@peff.net> writes:
>
> > Anyway, the problem is sk/dash-is-previous, specifically fc5684b47
> > (revision.c: args starting with "-" might be a revision, 2017-02-25). It
> > looks like the revision parser used to just bail on "-h", because
> > revision.c would say "I don't recognize this" and then cmd_rev_list()
> > would similarly say "I don't recognize this" and call usage(). But now
> > we actually try to read it as a ref, which obviously requires being
> > inside a repository.
>
> Heh, I found another ;-)
>
> 95e98cd9 ("revision.c: use refs_for_each*() instead of
> for_each_*_submodule()", 2017-04-19), which is in the middle of
> Duy's nd/prune-in-worktree series, does this:Hrm, yeah. The problem is that handle_revision_pseudo_opt() initializes the ref store at the top of the function, even if we don't see any arguments that require us to use it (and obviously in the "-h" case, we don't).
That's an implementation detail that we could fix, but I do think in general that we should probably just declare it forbidden to call setup_revisions() when the repo hasn't been discovered.
Show 8 quoted lines
> I guess anything that calls setup_revisions() from the "git cmd -h" > bypass need to be prepared with that > > check_help_option(argc, argv, usage, options); > > thing. Which is a bit sad, but I tend to agree with you that > restructuring to make usage[] of everybody available to git.c > is probably too noisy for the benefit it would give us.
The other options are:
- reverting the "-h" magic in git.c. It really is the source of most
of this confusion, I think, because functions which assume RUN_SETUP
are having that assumption broken. But at the same time I do think
it makes "-h" a lot friendlier, and I'd prefer to keep it. - reverting the BUG() in setup_git_env(); this has been flushing out a
lot of bugs, and I think is worth keepingI did look at writing something like check_help_option(). One of the annoyances is that we have two different usage formats: one that's a straight string for usage(), and one that's an array-of-strings for parse_options(). We could probably unify those.
It doesn't actually save that much code, though. The real value is that it abstracts the "did git.c decide to skip RUN_SETUP?" logic.
-Peff