On Thu, Feb 9, 2017 at 12:39 AM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Duy Nguyen <pclouds@xxxxxxxxx> writes: > >> On Wed, Feb 8, 2017 at 12:12 PM, Linus Torvalds >> <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: >>> Two-patch series to follow. >> >> glossary-content.txt update for both patches would be nice. > > I am no longer worried about it as I saw somebody actually sent > follow-up patches on this, but I want to pick your brain on one > thing that is related to this codepath. > > We have PATHSPEC_PREFER_CWD and PATHSPEC_PREFER_FULL bits in flags, > added at fc12261fea ("parse_pathspec: add PATHSPEC_PREFER_{CWD,FULL} > flags", 2013-07-14), and I think the intent is some commands when > given no pathspec work on all paths in the current subdirectory > while others work on the full tree, regardless of where you are. > "grep" is in the former camp, "log" is in the latter. And there is > a check to catch a bug in a caller that sets both. > > I am wondering about this hunk (this is from the original commit > that added it): > > if (!entry) { > static const char *raw[2]; > > + if (flags & PATHSPEC_PREFER_FULL) > + return; > + > + if (!(flags & PATHSPEC_PREFER_CWD)) > + die("BUG: PATHSPEC_PREFER_CWD requires arguments"); > + > pathspec->items = item = xmalloc(sizeof(*item)); > memset(item, 0, sizeof(*item)); > item->match = prefix; > ... returns a single entry pathspec to cover cwd ... > > The BUG message is given when > > - The command got no pathspec from the caller; and > - PATHSPEC_PREFER_FULL is not set; and > - PATHSPEC_PREFER_CWD is NOT set. > > but the message says that the caller must have args when it sets > prefer-cwd. Is this a simple typo? If so what should it say? > > die("BUG: one of PATHSPEC_PREFER_FULL or _CWD must be set"); Without reading through your next mail, I'd say "BUG: this command requires arguments". > Does this third possibility (i.e. a caller is allowed to pass > "flags" that does not prefer either) exist to support a command > where the caller MUST have at least one pathspec? If that were the > case, this wouldn't be a BUG but an end-user error, e.g. > > die("at least one pathspec element is required"); Or this. Yes. I might have just been defensive at then and kept the third option open. > If you know offhand which callers pass neither of the two > PATHSPEC_PREFER_* bits and remember for what purpose you allowed > them to do so, please remind me. I'll keep digging in the meantime. I don't usually remember what I ate yesterday and this commit was from 2013 :D But I'll see if your findings spark anything in my brain. -- Duy