summaryrefslogtreecommitdiff
path: root/src/attr.c
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2014-04-17 11:53:13 -0700
committerRussell Belfer <rb@github.com>2014-04-17 15:04:41 -0700
commit823c0e9cc142529912976f2e6abff3db456cb204 (patch)
treec07051b17bfcff2ef3edc24da05a8bb5ed6616e1 /src/attr.c
parente6e8530aa6c8773dd523fd6fe07629b9481a8fee (diff)
downloadlibgit2-823c0e9cc142529912976f2e6abff3db456cb204.tar.gz
Fix broken logic for attr cache invalidation
The checks to see if files were out of date in the attibute cache was wrong because the cache-breaker data wasn't getting stored correctly. Additionally, when the cache-breaker triggered, the old file data was being leaked.
Diffstat (limited to 'src/attr.c')
-rw-r--r--src/attr.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/attr.c b/src/attr.c
index 2e314998f..622874348 100644
--- a/src/attr.c
+++ b/src/attr.c
@@ -260,26 +260,26 @@ typedef struct {
} attr_walk_up_info;
static int attr_decide_sources(
- uint32_t flags, bool has_wd, bool has_index, git_attr_cache_source *srcs)
+ uint32_t flags, bool has_wd, bool has_index, git_attr_file_source *srcs)
{
int count = 0;
switch (flags & 0x03) {
case GIT_ATTR_CHECK_FILE_THEN_INDEX:
if (has_wd)
- srcs[count++] = GIT_ATTR_CACHE__FROM_FILE;
+ srcs[count++] = GIT_ATTR_FILE__FROM_FILE;
if (has_index)
- srcs[count++] = GIT_ATTR_CACHE__FROM_INDEX;
+ srcs[count++] = GIT_ATTR_FILE__FROM_INDEX;
break;
case GIT_ATTR_CHECK_INDEX_THEN_FILE:
if (has_index)
- srcs[count++] = GIT_ATTR_CACHE__FROM_INDEX;
+ srcs[count++] = GIT_ATTR_FILE__FROM_INDEX;
if (has_wd)
- srcs[count++] = GIT_ATTR_CACHE__FROM_FILE;
+ srcs[count++] = GIT_ATTR_FILE__FROM_FILE;
break;
case GIT_ATTR_CHECK_INDEX_ONLY:
if (has_index)
- srcs[count++] = GIT_ATTR_CACHE__FROM_INDEX;
+ srcs[count++] = GIT_ATTR_FILE__FROM_INDEX;
break;
}
@@ -289,7 +289,7 @@ static int attr_decide_sources(
static int push_attr_file(
git_repository *repo,
git_vector *list,
- git_attr_cache_source source,
+ git_attr_file_source source,
const char *base,
const char *filename)
{
@@ -297,7 +297,7 @@ static int push_attr_file(
git_attr_file *file = NULL;
error = git_attr_cache__get(
- &file, repo, source, base, filename, git_attr_file__parse_buffer, NULL);
+ &file, repo, source, base, filename, git_attr_file__parse_buffer);
if (error < 0)
return error;
@@ -313,7 +313,7 @@ static int push_one_attr(void *ref, git_buf *path)
{
int error = 0, n_src, i;
attr_walk_up_info *info = (attr_walk_up_info *)ref;
- git_attr_cache_source src[2];
+ git_attr_file_source src[2];
n_src = attr_decide_sources(
info->flags, info->workdir != NULL, info->index != NULL, src);
@@ -367,7 +367,7 @@ static int collect_attr_files(
*/
error = push_attr_file(
- repo, files, GIT_ATTR_CACHE__FROM_FILE,
+ repo, files, GIT_ATTR_FILE__FROM_FILE,
git_repository_path(repo), GIT_ATTR_FILE_INREPO);
if (error < 0)
goto cleanup;
@@ -385,7 +385,7 @@ static int collect_attr_files(
if (git_repository_attr_cache(repo)->cfg_attr_file != NULL) {
error = push_attr_file(
- repo, files, GIT_ATTR_CACHE__FROM_FILE,
+ repo, files, GIT_ATTR_FILE__FROM_FILE,
NULL, git_repository_attr_cache(repo)->cfg_attr_file);
if (error < 0)
goto cleanup;
@@ -395,7 +395,7 @@ static int collect_attr_files(
error = git_sysdir_find_system_file(&dir, GIT_ATTR_FILE_SYSTEM);
if (!error)
error = push_attr_file(
- repo, files, GIT_ATTR_CACHE__FROM_FILE, NULL, dir.ptr);
+ repo, files, GIT_ATTR_FILE__FROM_FILE, NULL, dir.ptr);
else if (error == GIT_ENOTFOUND) {
giterr_clear();
error = 0;