On Thu, May 28, 2020 at 03:04:33PM -0700, Junio C Hamano wrote: > The documentation does not say paths can be wildcards. It allows a > list of "patterns to match" and never says they are wildcards. > > I think they take the traditional "leading paths" (i.e. by saying > "git ls-tree HEAD t/", you can show all paths that are under t/, > and is different from the "raw path" i.e. "git ls-tree HEAD t"). Hmm, that might be weird if we switch to the pathspec matching code, because we're sort-of recursive and sort-of not. E.g.: $ mkdir -p one/two/three $ echo content >one/two/three/file $ git init && git add . && git commit -m foo $ git ls-tree HEAD 040000 tree 8f303030860565e9c51101f993e1db4feb2792a7 one $ git ls-tree -r HEAD 100644 blob d95f3ad14dee633a758d2e331151e950dd13e4ed one/two/three/file git ls-tree HEAD one 040000 tree 8f303030860565e9c51101f993e1db4feb2792a7 one $ git ls-tree HEAD one/ 040000 tree c89b49675f4ccf1d03f7c95b5f072566ce0d7f83 one/two So the pathspec match triggers one level of recursion, which is unlike a pathspec used with non-recursive diff: $ git diff-tree --root --abbrev HEAD 6f4ed388a766b500bcf3bbd9877cc7213c76a959 :000000 040000 0000000 8f30303 A one $ git diff-tree --root --abbrev -r HEAD 6f4ed388a766b500bcf3bbd9877cc7213c76a959 :000000 100644 0000000 d95f3ad A one/two/three/file $ git diff-tree --root --abbrev HEAD one 6f4ed388a766b500bcf3bbd9877cc7213c76a959 :000000 040000 0000000 8f30303 A one $ git diff-tree --root --abbrev HEAD one/ 6f4ed388a766b500bcf3bbd9877cc7213c76a959 :000000 040000 0000000 8f30303 A one I think we should be able to reuse the pathspec matching code, but we may not be able to reuse other tree-walking bits. Or maybe we can. It looks like we already use read_tree_recursive(), so I guess our custom show_tree() callback is able to handle that. But definitely something to watch out for during any transition. -Peff