packed_refs_unlock(), packed_refs_is_locked(): new functions
Add two new public functions, `packed_refs_unlock()` and `packed_refs_is_locked()`, with which callers can manage and query the `packed-refs` lock externally. Call `packed_refs_unlock()` from `commit_packed_refs()` and `rollback_packed_refs()`. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
c8bed835c2
commit
49aebcf432
|
@ -563,6 +563,29 @@ int packed_refs_lock(struct ref_store *ref_store, int flags, struct strbuf *err)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void packed_refs_unlock(struct ref_store *ref_store)
|
||||||
|
{
|
||||||
|
struct packed_ref_store *refs = packed_downcast(
|
||||||
|
ref_store,
|
||||||
|
REF_STORE_READ | REF_STORE_WRITE,
|
||||||
|
"packed_refs_unlock");
|
||||||
|
|
||||||
|
if (!is_lock_file_locked(&refs->lock))
|
||||||
|
die("BUG: packed_refs_unlock() called when not locked");
|
||||||
|
rollback_lock_file(&refs->lock);
|
||||||
|
release_packed_ref_cache(refs->cache);
|
||||||
|
}
|
||||||
|
|
||||||
|
int packed_refs_is_locked(struct ref_store *ref_store)
|
||||||
|
{
|
||||||
|
struct packed_ref_store *refs = packed_downcast(
|
||||||
|
ref_store,
|
||||||
|
REF_STORE_READ | REF_STORE_WRITE,
|
||||||
|
"packed_refs_is_locked");
|
||||||
|
|
||||||
|
return is_lock_file_locked(&refs->lock);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The packed-refs header line that we write out. Perhaps other
|
* The packed-refs header line that we write out. Perhaps other
|
||||||
* traits will be added later. The trailing space is required.
|
* traits will be added later. The trailing space is required.
|
||||||
|
@ -649,8 +672,7 @@ error:
|
||||||
delete_tempfile(&refs->tempfile);
|
delete_tempfile(&refs->tempfile);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
rollback_lock_file(&refs->lock);
|
packed_refs_unlock(ref_store);
|
||||||
release_packed_ref_cache(packed_ref_cache);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -661,14 +683,11 @@ out:
|
||||||
*/
|
*/
|
||||||
static void rollback_packed_refs(struct packed_ref_store *refs)
|
static void rollback_packed_refs(struct packed_ref_store *refs)
|
||||||
{
|
{
|
||||||
struct packed_ref_cache *packed_ref_cache = get_packed_ref_cache(refs);
|
|
||||||
|
|
||||||
packed_assert_main_repository(refs, "rollback_packed_refs");
|
packed_assert_main_repository(refs, "rollback_packed_refs");
|
||||||
|
|
||||||
if (!is_lock_file_locked(&refs->lock))
|
if (!is_lock_file_locked(&refs->lock))
|
||||||
die("BUG: packed-refs not locked");
|
die("BUG: packed-refs not locked");
|
||||||
rollback_lock_file(&refs->lock);
|
packed_refs_unlock(&refs->base);
|
||||||
release_packed_ref_cache(packed_ref_cache);
|
|
||||||
clear_packed_ref_cache(refs);
|
clear_packed_ref_cache(refs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,9 @@ struct ref_store *packed_ref_store_create(const char *path,
|
||||||
*/
|
*/
|
||||||
int packed_refs_lock(struct ref_store *ref_store, int flags, struct strbuf *err);
|
int packed_refs_lock(struct ref_store *ref_store, int flags, struct strbuf *err);
|
||||||
|
|
||||||
|
void packed_refs_unlock(struct ref_store *ref_store);
|
||||||
|
int packed_refs_is_locked(struct ref_store *ref_store);
|
||||||
|
|
||||||
void add_packed_ref(struct ref_store *ref_store,
|
void add_packed_ref(struct ref_store *ref_store,
|
||||||
const char *refname, const struct object_id *oid);
|
const char *refname, const struct object_id *oid);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue