Re: [RFC] revision: Add --sticky-default option
- From
- Andreas Gruenbacher <agruenba@redhat.com>
- Date
- Oct 18, 2018, 12:17 UTC
- Message-ID
- <CAHc6FU7m=ikPyvzh0ztyOgfQjGD0oKEfGVxeRPRBy1Lh0VD+Fg@mail.gmail.com>
- In-Reply-To
- <xmqqlg6vu4dw.fsf@gitster-ct.c.googlers.com>
On Thu, 18 Oct 2018 at 08:59, Junio C Hamano <gitster@pobox.com> wrote:
Show 18 quoted lines
> Jeff King <peff@peff.net> writes: > > Just to play devil's advocate, how about this: > > > > git log --branches=jk/* --not origin/master > > > > Right now that shows nothing if there are no matching branches. But I > > think under the proposed behavior, it would start showing HEAD, which > > seems counter-intuitive. > > > > Or are we going to count any positive selector as a positive ref, even > > if it matches nothing? > > That sounds like an intuitive behaviour of the command, but I may > change my mind when I look at other examples. > > When viewing that "--branches=jk/*" example in isolation, yes, these > positive selectors that could produce positive revs should defeat > the --default, especially when it is built-in (like "log").
I agree, that's the kind of behavior I had in mind. (And I think that's also what the code implements.)
Show 6 quoted lines
> When given by the user, I am not sure. With something like this: > > git rev-list --default=HEAD --branches=jk/* ^master > > clearly the user anticipates that jk/* may or may not produce any > positive refs; otherwise there is no point specifying the default.
With positive selectors, it is meaningful if the selectors match nothing. So in the above example, if jk/* matches nothing, I would really expect no output, and the default should not be applied. So we should just document that --default=<rev> only sets the default in case the default is used.
Show 11 quoted lines
> But anyway...
>
> > I could buy that, though it means that the
> > command above is subtly different from one or both of:
> >
> > branches() {
> > git for-each-ref --format='%(refname)' refs/heads/jk/*
> > }
> >
> > # is --stdin a selector, too?
> > branches | git log --stdin --not origin/masterYes, it's a positive selector (since --not doesn't apply to --stdin).
> > # here we have no idea that the user did a query and must show HEAD > > git log $(branches) --not origin/master
In this case, 'git log' is more used like git rev-list which doesn't default to HEAD. The 'git log --no-default' would neatly restore sanity here.
Show 5 quoted lines
> OK, scrap that---just as I predicted a few minutes ago, I now think > that "do we have a positive selector that can produce zero or more > result?" is an ill-defined question X-<. > > Thanks for a doze of sanity.
Andreas