summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike McQuaid <mike@mikemcquaid.com>2015-04-17 18:27:28 -0700
committerCarlos Martín Nieto <cmn@dwim.me>2015-04-23 17:07:37 +0200
commitc02a0e46eb0ec68a4069edf34a537cf319be51b6 (patch)
tree097f5a683f1c769f410b0664a3106d01b6cd6f89
parentc6bf03b44f2c2e2fcac13f6047a87ca61a539925 (diff)
downloadlibgit2-c02a0e46eb0ec68a4069edf34a537cf319be51b6.tar.gz
attr_file: fix subdirectory attr case.
Closes #2966.
-rw-r--r--src/attr_file.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/attr_file.c b/src/attr_file.c
index 8997946b9..eed39661f 100644
--- a/src/attr_file.c
+++ b/src/attr_file.c
@@ -394,6 +394,7 @@ bool git_attr_fnmatch__match(
if ((match->flags & GIT_ATTR_FNMATCH_DIRECTORY) && !path->is_dir) {
int matchval;
+ char *matchpath;
/* for attribute checks or root ignore checks, fail match */
if (!(match->flags & GIT_ATTR_FNMATCH_IGNORE) ||
@@ -403,7 +404,13 @@ bool git_attr_fnmatch__match(
/* for ignore checks, use container of current item for check */
path->basename[-1] = '\0';
flags |= FNM_LEADING_DIR;
- matchval = p_fnmatch(match->pattern, path->path, flags);
+
+ if (match->containing_dir)
+ matchpath = path->basename;
+ else
+ matchpath = path->path;
+
+ matchval = p_fnmatch(match->pattern, matchpath, flags);
path->basename[-1] = '/';
return (matchval != FNM_NOMATCH);
}