Merge branch 'jk/repack-ref-racefix'
"git pack-refs" that ran in parallel to another process that created new refs had a nasty race. * jk/repack-ref-racefix: refs: do not use cached refs in repack_without_ref
This commit is contained in:
commit
229096a591
5
refs.c
5
refs.c
@ -1744,7 +1744,8 @@ static struct lock_file packlock;
|
|||||||
static int repack_without_ref(const char *refname)
|
static int repack_without_ref(const char *refname)
|
||||||
{
|
{
|
||||||
struct repack_without_ref_sb data;
|
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)
|
if (find_ref(packed, refname) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
data.refname = refname;
|
data.refname = refname;
|
||||||
@ -1753,6 +1754,8 @@ static int repack_without_ref(const char *refname)
|
|||||||
unable_to_lock_error(git_path("packed-refs"), errno);
|
unable_to_lock_error(git_path("packed-refs"), errno);
|
||||||
return error("cannot delete '%s' from packed refs", refname);
|
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);
|
do_for_each_ref_in_dir(packed, 0, "", repack_without_ref_fn, 0, 0, &data);
|
||||||
return commit_lock_file(&packlock);
|
return commit_lock_file(&packlock);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user