We do ignore trailing slash on a directory, so pathspec "abc/" matches
directory "abc". A submodule is also a directory. Apply the same logic
to it. This makes "git log submodule-path" and "git log submodule-path/"
produce the same output.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 t/t4010-diff-pathspec.sh | 17 +++++++++++++++++
 tree-walk.c              |  2 +-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/t/t4010-diff-pathspec.sh b/t/t4010-diff-pathspec.sh
index af5134b..15a4912 100755
--- a/t/t4010-diff-pathspec.sh
+++ b/t/t4010-diff-pathspec.sh
@@ -110,4 +110,21 @@ test_expect_success 'diff-tree -r with wildcard' '
        test_cmp expected result
 '
 
+test_expect_success 'setup submodules' '
+       test_tick &&
+       git init submod &&
+       ( cd submod && test_commit first; ) &&
+       git add submod &&
+       git commit -m first &&
+       ( cd submod && test_commit second; ) &&
+       git add submod &&
+       git commit -m second
+'
+
+test_expect_success 'diff-tree ignores trailing slash on submodule path' '
+       git diff --name-only HEAD^ HEAD submod >expect &&
+       git diff --name-only HEAD^ HEAD submod/ >actual &&
+       test_cmp expect actual
+'
+
 test_done
diff --git a/tree-walk.c b/tree-walk.c
index 680afda..c29b6a3 100644
--- a/tree-walk.c
+++ b/tree-walk.c
@@ -543,7 +543,7 @@ static int match_entry(const struct pathspec_item *item,
        if (matchlen > pathlen) {
                if (match[pathlen] != '/')
                        return 0;
-               if (!S_ISDIR(entry->mode))
+               if (!S_ISDIR(entry->mode) && !S_ISGITLINK(entry->mode))
                        return 0;
        }
 
-- 
1.8.5.2.240.g8478abd

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to