match_tree_entry(): a pathspec only matches at directory boundaries
Previously the code did a simple prefix match, which means that a path in a directory "frotz/" would have matched with pathspec "f". Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f0946cb826
commit
8092bfb6c2
@ -135,4 +135,10 @@ test_expect_success \
|
||||
EOF
|
||||
test_output'
|
||||
|
||||
test_expect_success 'ls-tree filter is leading path match' '
|
||||
git ls-tree $tree pa path3/a >current &&
|
||||
>expected &&
|
||||
test_output
|
||||
'
|
||||
|
||||
test_done
|
||||
|
8
tree.c
8
tree.c
@ -60,8 +60,12 @@ static int match_tree_entry(const char *base, int baselen, const char *path, uns
|
||||
/* If it doesn't match, move along... */
|
||||
if (strncmp(base, match, matchlen))
|
||||
continue;
|
||||
/* The base is a subdirectory of a path which was specified. */
|
||||
return 1;
|
||||
/* pathspecs match only at the directory boundaries */
|
||||
if (!matchlen ||
|
||||
base[matchlen] == '/' ||
|
||||
match[matchlen - 1] == '/')
|
||||
return 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Does the base match? */
|
||||
|
Loading…
Reference in New Issue
Block a user