aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2013-01-10 14:04:17 -0800
committerJunio C Hamano <gitster@pobox.com>2013-01-10 14:04:17 -0800
commitf70eec840065ca598272979960073b1b50b5ad03 (patch)
tree6e1983b05510a9a54cd3838cc64f5636f80b32e4
parent8bc714b4088d162ac4a7327d672139a0c2907917 (diff)
parentb3f1280ec740d8012d18e870a50a5ff76c4e3c42 (diff)
downloadgit-f70eec840065ca598272979960073b1b50b5ad03.tar.gz
git-f70eec840065ca598272979960073b1b50b5ad03.tar.xz
Merge branch 'jk/repack-ref-racefix' into maint
* jk/repack-ref-racefix: refs: do not use cached refs in repack_without_ref
-rw-r--r--refs.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/refs.c b/refs.c
index 6cec1c8bd..541fec206 100644
--- a/refs.c
+++ b/refs.c
@@ -1744,7 +1744,8 @@ static struct lock_file packlock;
static int repack_without_ref(const char *refname)
{
struct repack_without_ref_sb data;
- struct ref_dir *packed = get_packed_refs(get_ref_cache(NULL));
+ struct ref_cache *refs = get_ref_cache(NULL);
+ struct ref_dir *packed = get_packed_refs(refs);
if (find_ref(packed, refname) == NULL)
return 0;
data.refname = refname;
@@ -1753,6 +1754,8 @@ static int repack_without_ref(const char *refname)
unable_to_lock_error(git_path("packed-refs"), errno);
return error("cannot delete '%s' from packed refs", refname);
}
+ clear_packed_ref_cache(refs);
+ packed = get_packed_refs(refs);
do_for_each_ref_in_dir(packed, 0, "", repack_without_ref_fn, 0, 0, &data);
return commit_lock_file(&packlock);
}