On Thu, 18 Oct 2018 at 08:59, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Jeff King <peff@xxxxxxxx> 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.) > 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. > 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/master Yes, 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. > 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