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"); If that were the case, we are expressing only one bit of information (do we limit to cwd, or do we work on full-tree?), but there must have been a reason why we added two bits and made them mutually incompatible so that we can express three possibilities. 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"); 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. Thanks.