mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
pathspec: fix pathspecs with '/' at the end
Removing (and ignoring) them is wrong, since that means that a pathspec of "xxxx/" would match a regular filename of "xxxx", which is obviously incorrect.
This commit is contained in:
parent
381ca9a3bc
commit
1d9e6f92bc
@ -21,9 +21,13 @@ static int matches_pathspec(const char *name, struct path_spec *s, int cnt)
|
||||
namelen = strlen(name);
|
||||
for (i = 0; i < cnt; i++) {
|
||||
int len = s[i].len;
|
||||
if (! strncmp(s[i].spec, name, len) &&
|
||||
len <= namelen &&
|
||||
(name[len] == 0 || name[len] == '/'))
|
||||
if (namelen < len)
|
||||
continue;
|
||||
if (memcmp(s[i].spec, name, len))
|
||||
continue;
|
||||
if (s[i].spec[len-1] == '/' ||
|
||||
name[len] == 0 ||
|
||||
name[len] == '/')
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
@ -44,12 +48,8 @@ void diffcore_pathspec(const char **pathspec)
|
||||
speccnt = i;
|
||||
spec = xmalloc(sizeof(*spec) * speccnt);
|
||||
for (i = 0; pathspec[i]; i++) {
|
||||
int l;
|
||||
spec[i].spec = pathspec[i];
|
||||
l = strlen(pathspec[i]);
|
||||
while (l > 0 && pathspec[i][l-1] == '/')
|
||||
l--;
|
||||
spec[i].len = l;
|
||||
spec[i].len = strlen(pathspec[i]);
|
||||
}
|
||||
|
||||
for (i = 0; i < q->nr; i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user