diff options
author | Russell Belfer <rb@github.com> | 2014-04-18 14:42:40 -0700 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2014-04-18 14:42:40 -0700 |
commit | 916fcbd61754f74b350ca689e27563cdbded2d30 (patch) | |
tree | bb15608b4bde5f23660ae96c6b7cc30dc545d593 /src | |
parent | e3a2a04ceff1d3657629fd6a7245d9a9fc53f24b (diff) | |
download | libgit2-916fcbd61754f74b350ca689e27563cdbded2d30.tar.gz |
Fix ignore difference from git with trailing /*
Ignore patterns that ended with a trailing '/*' were still needing
to match against another actual '/' character in the full path.
This is not the same behavior as core Git.
Instead, we strip a trailing '/*' off of any patterns that were
matching and just take it to imply the FNM_LEADING_DIR behavior.
Diffstat (limited to 'src')
-rw-r--r-- | src/attr_file.c | 9 | ||||
-rw-r--r-- | src/attr_file.h | 1 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/attr_file.c b/src/attr_file.c index 8a8d86a2d..57b4da7dd 100644 --- a/src/attr_file.c +++ b/src/attr_file.c @@ -353,6 +353,8 @@ bool git_attr_fnmatch__match( if (match->flags & GIT_ATTR_FNMATCH_ICASE) flags |= FNM_CASEFOLD; + if (match->flags & GIT_ATTR_FNMATCH_LEADINGDIR) + flags |= FNM_LEADING_DIR; if (match->flags & GIT_ATTR_FNMATCH_FULLPATH) { filename = path->path; @@ -543,6 +545,13 @@ int git_attr_fnmatch__parse( if (--slash_count <= 0) spec->flags = spec->flags & ~GIT_ATTR_FNMATCH_FULLPATH; } + if (spec->length >= 2 && + pattern[spec->length - 1] == '*' && + pattern[spec->length - 2] == '/') { + spec->length -= 2; + spec->flags = spec->flags | GIT_ATTR_FNMATCH_LEADINGDIR; + /* leave FULLPATH match on, however */ + } if ((spec->flags & GIT_ATTR_FNMATCH_FULLPATH) != 0 && context != NULL && git_path_root(pattern) < 0) diff --git a/src/attr_file.h b/src/attr_file.h index c906be44d..09afa5bd4 100644 --- a/src/attr_file.h +++ b/src/attr_file.h @@ -30,6 +30,7 @@ #define GIT_ATTR_FNMATCH_MATCH_ALL (1U << 8) #define GIT_ATTR_FNMATCH_ALLOWNEG (1U << 9) #define GIT_ATTR_FNMATCH_ALLOWMACRO (1U << 10) +#define GIT_ATTR_FNMATCH_LEADINGDIR (1U << 11) #define GIT_ATTR_FNMATCH__INCOMING \ (GIT_ATTR_FNMATCH_ALLOWSPACE | \ |