diff options
author | Russell Belfer <rb@github.com> | 2014-04-17 11:53:13 -0700 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2014-04-17 15:04:41 -0700 |
commit | 823c0e9cc142529912976f2e6abff3db456cb204 (patch) | |
tree | c07051b17bfcff2ef3edc24da05a8bb5ed6616e1 /src/attr.c | |
parent | e6e8530aa6c8773dd523fd6fe07629b9481a8fee (diff) | |
download | libgit2-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.c | 24 |
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; |