Merge branch 'bs/maint-1.6.0-tree-walk-prefix' into maint-1.6.1
* bs/maint-1.6.0-tree-walk-prefix: match_tree_entry(): a pathspec only matches at directory boundaries tree_entry_interesting: a pathspec only matches at directory boundary
This commit is contained in:
commit
652f0c8f1d
@ -135,4 +135,10 @@ test_expect_success \
|
|||||||
EOF
|
EOF
|
||||||
test_output'
|
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
|
test_done
|
||||||
|
@ -62,4 +62,12 @@ test_expect_success \
|
|||||||
'git diff-index --cached $tree -- file0/ >current &&
|
'git diff-index --cached $tree -- file0/ >current &&
|
||||||
compare_diff_raw current expected'
|
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
|
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;
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The base is a subdirectory of a path which
|
* If the base is a subdirectory of a path which
|
||||||
* was specified, so all of them are interesting.
|
* 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? */
|
/* Does the base match? */
|
||||||
|
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 it doesn't match, move along... */
|
||||||
if (strncmp(base, match, matchlen))
|
if (strncmp(base, match, matchlen))
|
||||||
continue;
|
continue;
|
||||||
/* The base is a subdirectory of a path which was specified. */
|
/* pathspecs match only at the directory boundaries */
|
||||||
return 1;
|
if (!matchlen ||
|
||||||
|
base[matchlen] == '/' ||
|
||||||
|
match[matchlen - 1] == '/')
|
||||||
|
return 1;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Does the base match? */
|
/* Does the base match? */
|
||||||
|
Loading…
Reference in New Issue
Block a user