1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-21 20:56:09 +02:00

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>
This commit is contained in:
Michael Haggerty 2017-06-23 09:01:43 +02:00 committed by Junio C Hamano
parent c8bed835c2
commit 49aebcf432
2 changed files with 28 additions and 6 deletions

View File

@ -563,6 +563,29 @@ int packed_refs_lock(struct ref_store *ref_store, int flags, struct strbuf *err)
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
* traits will be added later. The trailing space is required.
@ -649,8 +672,7 @@ int commit_packed_refs(struct ref_store *ref_store, struct strbuf *err)
delete_tempfile(&refs->tempfile);
out:
rollback_lock_file(&refs->lock);
release_packed_ref_cache(packed_ref_cache);
packed_refs_unlock(ref_store);
return ret;
}
@ -661,14 +683,11 @@ int commit_packed_refs(struct ref_store *ref_store, struct strbuf *err)
*/
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");
if (!is_lock_file_locked(&refs->lock))
die("BUG: packed-refs not locked");
rollback_lock_file(&refs->lock);
release_packed_ref_cache(packed_ref_cache);
packed_refs_unlock(&refs->base);
clear_packed_ref_cache(refs);
}

View File

@ -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);
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,
const char *refname, const struct object_id *oid);