Commit ac16bd0a by Russell Belfer

Minor fixes

Only apply LEADING_DIR pattern munging to patterns in ignore and
attribute files, not to pathspecs used to select files to operate
on.  Also, allow internal macro definitions to be evaluated before
loading all external ones (important so that external ones can
make use of internal `binary` definition).
parent 916fcbd6
...@@ -294,7 +294,7 @@ int git_attr_add_macro( ...@@ -294,7 +294,7 @@ int git_attr_add_macro(
git_attr_rule *macro = NULL; git_attr_rule *macro = NULL;
git_pool *pool; git_pool *pool;
if ((error = attr_setup(repo)) < 0) if ((error = git_attr_cache__init(repo)) < 0)
return error; return error;
macro = git__calloc(1, sizeof(git_attr_rule)); macro = git__calloc(1, sizeof(git_attr_rule));
......
...@@ -545,7 +545,8 @@ int git_attr_fnmatch__parse( ...@@ -545,7 +545,8 @@ int git_attr_fnmatch__parse(
if (--slash_count <= 0) if (--slash_count <= 0)
spec->flags = spec->flags & ~GIT_ATTR_FNMATCH_FULLPATH; spec->flags = spec->flags & ~GIT_ATTR_FNMATCH_FULLPATH;
} }
if (spec->length >= 2 && if ((spec->flags & GIT_ATTR_FNMATCH_NOLEADINGDIR) == 0 &&
spec->length >= 2 &&
pattern[spec->length - 1] == '*' && pattern[spec->length - 1] == '*' &&
pattern[spec->length - 2] == '/') { pattern[spec->length - 2] == '/') {
spec->length -= 2; spec->length -= 2;
......
...@@ -31,10 +31,11 @@ ...@@ -31,10 +31,11 @@
#define GIT_ATTR_FNMATCH_ALLOWNEG (1U << 9) #define GIT_ATTR_FNMATCH_ALLOWNEG (1U << 9)
#define GIT_ATTR_FNMATCH_ALLOWMACRO (1U << 10) #define GIT_ATTR_FNMATCH_ALLOWMACRO (1U << 10)
#define GIT_ATTR_FNMATCH_LEADINGDIR (1U << 11) #define GIT_ATTR_FNMATCH_LEADINGDIR (1U << 11)
#define GIT_ATTR_FNMATCH_NOLEADINGDIR (1U << 12)
#define GIT_ATTR_FNMATCH__INCOMING \ #define GIT_ATTR_FNMATCH__INCOMING \
(GIT_ATTR_FNMATCH_ALLOWSPACE | \ (GIT_ATTR_FNMATCH_ALLOWSPACE | GIT_ATTR_FNMATCH_ALLOWNEG | \
GIT_ATTR_FNMATCH_ALLOWNEG | GIT_ATTR_FNMATCH_ALLOWMACRO) GIT_ATTR_FNMATCH_ALLOWMACRO | GIT_ATTR_FNMATCH_NOLEADINGDIR)
typedef enum { typedef enum {
GIT_ATTR_FILE__IN_MEMORY = 0, GIT_ATTR_FILE__IN_MEMORY = 0,
......
...@@ -83,7 +83,8 @@ int git_pathspec__vinit( ...@@ -83,7 +83,8 @@ int git_pathspec__vinit(
if (!match) if (!match)
return -1; return -1;
match->flags = GIT_ATTR_FNMATCH_ALLOWSPACE | GIT_ATTR_FNMATCH_ALLOWNEG; match->flags = GIT_ATTR_FNMATCH_ALLOWSPACE |
GIT_ATTR_FNMATCH_ALLOWNEG | GIT_ATTR_FNMATCH_NOLEADINGDIR;
ret = git_attr_fnmatch__parse(match, strpool, NULL, &pattern); ret = git_attr_fnmatch__parse(match, strpool, NULL, &pattern);
if (ret == GIT_ENOTFOUND) { if (ret == GIT_ENOTFOUND) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment