tree-walk.c: don't match submodule entries for 'submod/anything'
commit35a9f1e99c5d31635bb78a4f2d498e72c04fc471
authorSZEDER Gábor <szeder.dev@gmail.com>
Fri, 5 Jun 2020 13:00:23 +0000 (5 13:00 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 8 Jun 2020 19:28:48 +0000 (8 12:28 -0700)
treea1eff83ae768415f71974d4fbc5a0b0b47e71671
parentf32dde8c12d941065be848a9f66239df96bde216
tree-walk.c: don't match submodule entries for 'submod/anything'

Submodules should be handled the same as regular directories with
respect to the presence of a trailing slash, i.e. commands like:

  git diff rev1 rev2 -- $path
  git rev-list HEAD -- $path

should produce the same output whether $path is 'submod' or 'submod/'.
This has been fixed in commit 74b4f7f277 (tree-walk.c: ignore trailing
slash on submodule in tree_entry_interesting(), 2014-01-23).

Unfortunately, that commit had the unintended side effect to handle
'submod/anything' the same as 'submod' and 'submod/' as well, e.g.:

  $ git log --oneline --name-only -- sha1collisiondetection/whatever
  4125f78222 sha1dc: update from upstream
  sha1collisiondetection
  07a20f569b Makefile: fix unaligned loads in sha1dc with UBSan
  sha1collisiondetection
  23e37f8e9d sha1dc: update from upstream
  sha1collisiondetection
  86cfd61e6b sha1dc: optionally use sha1collisiondetection as a submodule
  sha1collisiondetection

Fix this by rejecting submodules as partial pathnames when their
trailing slash is followed by anything.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t4010-diff-pathspec.sh
tree-walk.c