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:
@ -21,9 +21,13 @@ static int matches_pathspec(const char *name, struct path_spec *s, int cnt)
|
|||||||
namelen = strlen(name);
|
namelen = strlen(name);
|
||||||
for (i = 0; i < cnt; i++) {
|
for (i = 0; i < cnt; i++) {
|
||||||
int len = s[i].len;
|
int len = s[i].len;
|
||||||
if (! strncmp(s[i].spec, name, len) &&
|
if (namelen < len)
|
||||||
len <= namelen &&
|
continue;
|
||||||
(name[len] == 0 || name[len] == '/'))
|
if (memcmp(s[i].spec, name, len))
|
||||||
|
continue;
|
||||||
|
if (s[i].spec[len-1] == '/' ||
|
||||||
|
name[len] == 0 ||
|
||||||
|
name[len] == '/')
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -44,12 +48,8 @@ void diffcore_pathspec(const char **pathspec)
|
|||||||
speccnt = i;
|
speccnt = i;
|
||||||
spec = xmalloc(sizeof(*spec) * speccnt);
|
spec = xmalloc(sizeof(*spec) * speccnt);
|
||||||
for (i = 0; pathspec[i]; i++) {
|
for (i = 0; pathspec[i]; i++) {
|
||||||
int l;
|
|
||||||
spec[i].spec = pathspec[i];
|
spec[i].spec = pathspec[i];
|
||||||
l = strlen(pathspec[i]);
|
spec[i].len = strlen(pathspec[i]);
|
||||||
while (l > 0 && pathspec[i][l-1] == '/')
|
|
||||||
l--;
|
|
||||||
spec[i].len = l;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < q->nr; i++) {
|
for (i = 0; i < q->nr; i++) {
|
||||||
|
Reference in New Issue
Block a user