On 11/22, Junio C Hamano wrote: > Brandon Williams <bmwill@xxxxxxxxxx> writes: > > > diff --git a/tree-walk.c b/tree-walk.c > > index 828f435..ff77605 100644 > > --- a/tree-walk.c > > +++ b/tree-walk.c > > @@ -1004,6 +1004,19 @@ static enum interesting do_match(const struct name_entry *entry, > > */ > > if (ps->recursive && S_ISDIR(entry->mode)) > > return entry_interesting; > > + > > + /* > > + * When matching against submodules with > > + * wildcard characters, ensure that the entry > > + * at least matches up to the first wild > > + * character. More accurate matching can then > > + * be performed in the submodule itself. > > + */ > > + if (ps->recursive && S_ISGITLINK(entry->mode) && > > + !ps_strncmp(item, match + baselen, > > + entry->path, > > + item->nowildcard_len - baselen)) > > + return entry_interesting; > > } > > This one (and the other hunk) feels more correct than the previous > round. One thing to keep in mind however is that ps->recursive is > about "do we show a tree as a tree aka 040000, or do we descend into > it to show its contents?", not about "do we recurse into submodules?", > AFAICT. > > So this change may have an impact on "git ls-tree -r" with pathspec; > I offhand do not know if that impact is undesirable or not. A test > or two may be in order to illustrate what happens? With a submodule > at "sub/module", running "git ls-tree -r HEAD -- sub/module/*" or > something like that, perhaps? Maybe unrelated, but it looks like wildcard characters are overridden in ls-tree.c per '170260ae'. As such wildmatching just doesn't work with ls-tree. so `git ls-tree -r HEAD -- "*"` results in no hits. -- Brandon Williams