diff options
author | David Turner <dturner@twopensource.com> | 2016-09-04 18:08:43 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-09-09 15:28:14 -0700 |
commit | 7d618264394a17e6ecd83d9412ac9ddb4609a2e5 (patch) | |
tree | fc3fa086a1598c9d2525ee4d4b26011cdceb8cd5 /refs | |
parent | refs: add method to rename refs (diff) | |
download | tgif-7d618264394a17e6ecd83d9412ac9ddb4609a2e5.tar.xz |
refs: make lock generic
Instead of including a files-backend-specific struct ref_lock, change
the generic ref_update struct to include a void pointer that backends
can use for their own arbitrary data.
Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs')
-rw-r--r-- | refs/files-backend.c | 25 | ||||
-rw-r--r-- | refs/refs-internal.h | 2 |
2 files changed, 14 insertions, 13 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c index f61101a799..82b3ac0dbc 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -3520,9 +3520,8 @@ static int lock_ref_for_update(struct files_ref_store *refs, ret = lock_raw_ref(refs, update->refname, mustexist, affected_refnames, NULL, - &update->lock, &referent, + &lock, &referent, &update->type, err); - if (ret) { char *reason; @@ -3533,7 +3532,7 @@ static int lock_ref_for_update(struct files_ref_store *refs, return ret; } - lock = update->lock; + update->backend_data = lock; if (update->type & REF_ISSYMREF) { if (update->flags & REF_NODEREF) { @@ -3589,7 +3588,8 @@ static int lock_ref_for_update(struct files_ref_store *refs, for (parent_update = update->parent_update; parent_update; parent_update = parent_update->parent_update) { - oidcpy(&parent_update->lock->old_oid, &lock->old_oid); + struct ref_lock *parent_lock = parent_update->backend_data; + oidcpy(&parent_lock->old_oid, &lock->old_oid); } if ((update->flags & REF_HAVE_OLD) && @@ -3624,7 +3624,7 @@ static int lock_ref_for_update(struct files_ref_store *refs, * The lock was freed upon failure of * write_ref_to_lockfile(): */ - update->lock = NULL; + update->backend_data = NULL; strbuf_addf(err, "cannot update the ref '%s': %s", update->refname, write_err); @@ -3742,7 +3742,7 @@ static int files_transaction_commit(struct ref_store *ref_store, /* Perform updates first so live commits remain referenced */ for (i = 0; i < transaction->nr; i++) { struct ref_update *update = transaction->updates[i]; - struct ref_lock *lock = update->lock; + struct ref_lock *lock = update->backend_data; if (update->flags & REF_NEEDS_COMMIT || update->flags & REF_LOG_ONLY) { @@ -3755,7 +3755,7 @@ static int files_transaction_commit(struct ref_store *ref_store, lock->ref_name, old_msg); free(old_msg); unlock_ref(lock); - update->lock = NULL; + update->backend_data = NULL; ret = TRANSACTION_GENERIC_ERROR; goto cleanup; } @@ -3765,7 +3765,7 @@ static int files_transaction_commit(struct ref_store *ref_store, if (commit_ref(lock)) { strbuf_addf(err, "couldn't set '%s'", lock->ref_name); unlock_ref(lock); - update->lock = NULL; + update->backend_data = NULL; ret = TRANSACTION_GENERIC_ERROR; goto cleanup; } @@ -3774,17 +3774,18 @@ static int files_transaction_commit(struct ref_store *ref_store, /* Perform deletes now that updates are safely completed */ for (i = 0; i < transaction->nr; i++) { struct ref_update *update = transaction->updates[i]; + struct ref_lock *lock = update->backend_data; if (update->flags & REF_DELETING && !(update->flags & REF_LOG_ONLY)) { - if (delete_ref_loose(update->lock, update->type, err)) { + if (delete_ref_loose(lock, update->type, err)) { ret = TRANSACTION_GENERIC_ERROR; goto cleanup; } if (!(update->flags & REF_ISPRUNING)) string_list_append(&refs_to_delete, - update->lock->ref_name); + lock->ref_name); } } @@ -3800,8 +3801,8 @@ cleanup: transaction->state = REF_TRANSACTION_CLOSED; for (i = 0; i < transaction->nr; i++) - if (transaction->updates[i]->lock) - unlock_ref(transaction->updates[i]->lock); + if (transaction->updates[i]->backend_data) + unlock_ref(transaction->updates[i]->backend_data); string_list_clear(&refs_to_delete, 0); free(head_ref); string_list_clear(&affected_refnames, 0); diff --git a/refs/refs-internal.h b/refs/refs-internal.h index c598cb19ab..681982becd 100644 --- a/refs/refs-internal.h +++ b/refs/refs-internal.h @@ -162,7 +162,7 @@ struct ref_update { */ unsigned int flags; - struct ref_lock *lock; + void *backend_data; unsigned int type; char *msg; |