mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-06 21:44:58 +00:00
Add support for ** matches in ignores
This is an experimental addition to add ** support to fnmatch pattern matching in libgit2. It needs more testing.
This commit is contained in:
parent
923c84008d
commit
2b6b85f116
@ -30,6 +30,7 @@ p_fnmatchx(const char *pattern, const char *string, int flags, size_t recurs)
|
||||
const char *stringstart;
|
||||
char *newp;
|
||||
char c, test;
|
||||
int recurs_flags = flags & ~FNM_PERIOD;
|
||||
|
||||
if (recurs-- == 0)
|
||||
return FNM_NORES;
|
||||
@ -53,9 +54,13 @@ p_fnmatchx(const char *pattern, const char *string, int flags, size_t recurs)
|
||||
break;
|
||||
case '*':
|
||||
c = *pattern;
|
||||
/* Collapse multiple stars. */
|
||||
while (c == '*')
|
||||
|
||||
/* Apply '**' to overwrite PATHNAME match */
|
||||
if (c == '*') {
|
||||
flags &= ~FNM_PATHNAME;
|
||||
while (c == '*')
|
||||
c = *++pattern;
|
||||
}
|
||||
|
||||
if (*string == '.' && (flags & FNM_PERIOD) &&
|
||||
(string == stringstart ||
|
||||
@ -80,7 +85,7 @@ p_fnmatchx(const char *pattern, const char *string, int flags, size_t recurs)
|
||||
while ((test = *string) != EOS) {
|
||||
int e;
|
||||
|
||||
e = p_fnmatchx(pattern, string, flags & ~FNM_PERIOD, recurs);
|
||||
e = p_fnmatchx(pattern, string, recurs_flags, recurs);
|
||||
if (e != FNM_NOMATCH)
|
||||
return e;
|
||||
if (test == '/' && (flags & FNM_PATHNAME))
|
||||
|
@ -54,6 +54,19 @@ void test_attr_ignore__ignore_root(void)
|
||||
assert_is_ignored(true, "NewFolder/NewFolder/File.txt");
|
||||
}
|
||||
|
||||
void test_attr_ignore__full_paths(void)
|
||||
{
|
||||
cl_git_rewritefile("attr/.gitignore", "Folder/*/Contained");
|
||||
|
||||
assert_is_ignored(true, "Folder/Middle/Contained");
|
||||
assert_is_ignored(false, "Folder/Middle/More/More/Contained");
|
||||
|
||||
cl_git_rewritefile("attr/.gitignore", "Folder/**/Contained");
|
||||
|
||||
assert_is_ignored(true, "Folder/Middle/Contained");
|
||||
assert_is_ignored(true, "Folder/Middle/More/More/Contained");
|
||||
}
|
||||
|
||||
|
||||
void test_attr_ignore__skip_gitignore_directory(void)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user