summaryrefslogtreecommitdiff
path: root/src/attr.c
diff options
context:
space:
mode:
authorRussell Belfer <arrbee@arrbee.com>2012-01-16 16:58:27 -0800
committerRussell Belfer <arrbee@arrbee.com>2012-01-16 16:58:27 -0800
commita51cd8e6f6724079a552b75e014f792f3f68e158 (patch)
treefcf526f2a7575e215d95589d1a8e07277981fd18 /src/attr.c
parent6e03b12f5715cb3f5cb5c8be6512e041cdf44a05 (diff)
downloadlibgit2-a51cd8e6f6724079a552b75e014f792f3f68e158.tar.gz
Fix handling of relative paths for attrs
Per issue #533, the handling of relative paths in attribute and ignore files was not right. Fixed this by pre-joining the relative path of the attribute/ignore file onto the match string when a full path match is required. Unfortunately, fixing this required a bit more code than I would have liked because I had to juggle things around so that the fnmatch parser would have sufficient information to prepend the relative path when it was needed.
Diffstat (limited to 'src/attr.c')
-rw-r--r--src/attr.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/attr.c b/src/attr.c
index dc42379ff..3fe76d124 100644
--- a/src/attr.c
+++ b/src/attr.c
@@ -214,7 +214,7 @@ int git_attr_cache__push_file(
git_vector *stack,
const char *base,
const char *filename,
- int (*loader)(git_repository *, const char *, git_attr_file **))
+ int (*loader)(git_repository *, const char *, git_attr_file *))
{
int error = GIT_SUCCESS;
git_attr_cache *cache = &repo->attrcache;
@@ -231,11 +231,12 @@ int git_attr_cache__push_file(
/* either get attr_file from cache or read from disk */
file = git_hashtable_lookup(cache->files, filename);
if (file == NULL && git_futils_exists(filename) == GIT_SUCCESS) {
- error = (*loader)(repo, filename, &file);
+ if ((error = git_attr_file__new(&file)) == GIT_SUCCESS)
+ error = (*loader)(repo, filename, file);
add_to_cache = (error == GIT_SUCCESS);
}
- if (file != NULL) {
+ if (error == GIT_SUCCESS && file != NULL) {
/* add file to vector, if we found it */
error = git_vector_insert(stack, file);