mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
tree_entry_interesting: a pathspec only matches at directory boundary
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: Björn Steinbrink <B.Steinbrink@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
5bd27ebb18
commit
f0946cb826
|
@ -62,4 +62,12 @@ test_expect_success \
|
|||
'git diff-index --cached $tree -- file0/ >current &&
|
||||
compare_diff_raw current expected'
|
||||
|
||||
test_expect_success 'diff-tree pathspec' '
|
||||
tree2=$(git write-tree) &&
|
||||
echo "$tree2" &&
|
||||
git diff-tree -r --name-only $tree $tree2 -- pa path1/a >current &&
|
||||
>expected &&
|
||||
test_cmp expected current
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
12
tree-diff.c
12
tree-diff.c
|
@ -118,10 +118,16 @@ static int tree_entry_interesting(struct tree_desc *desc, const char *base, int
|
|||
continue;
|
||||
|
||||
/*
|
||||
* The base is a subdirectory of a path which
|
||||
* was specified, so all of them are interesting.
|
||||
* If the base is a subdirectory of a path which
|
||||
* was specified, all of them are interesting.
|
||||
*/
|
||||
return 2;
|
||||
if (!matchlen ||
|
||||
base[matchlen] == '/' ||
|
||||
match[matchlen - 1] == '/')
|
||||
return 2;
|
||||
|
||||
/* Just a random prefix match */
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Does the base match? */
|
||||
|
|
Loading…
Reference in a new issue