ref_transaction_verify(): new function to check a reference's value
If NULL is passed to ref_transaction_update()'s new_sha1 parameter, then just verify old_sha1 (under lock) without trying to change the new value of the reference. Use this functionality to add a new function ref_transaction_verify(), which checks the current value of the reference under lock but doesn't change it. Use ref_transaction_verify() in the implementation of "git update-ref --stdin"'s "verify" command to avoid the awkward need to "update" the reference to its existing value. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Reviewed-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
60294596ba
commit
1618033401
34
refs.h
34
refs.h
@ -263,14 +263,19 @@ struct ref_transaction *ref_transaction_begin(struct strbuf *err);
|
||||
*/
|
||||
|
||||
/*
|
||||
* Add a reference update to transaction. new_sha1 is the value that
|
||||
* the reference should have after the update, or null_sha1 if it should
|
||||
* be deleted. If old_sha1 is non-NULL, then it is the value
|
||||
* that the reference should have had before the update, or null_sha1 if
|
||||
* it must not have existed beforehand.
|
||||
* Function returns 0 on success and non-zero on failure. A failure to update
|
||||
* means that the transaction as a whole has failed and will need to be
|
||||
* rolled back.
|
||||
* Add a reference update to transaction. new_sha1 is the value that
|
||||
* the reference should have after the update, or null_sha1 if it
|
||||
* should be deleted. If new_sha1 is NULL, then the reference is not
|
||||
* changed at all. old_sha1 is the value that the reference must have
|
||||
* before the update, or null_sha1 if it must not have existed
|
||||
* beforehand. The old value is checked after the lock is taken to
|
||||
* prevent races. If the old value doesn't agree with old_sha1, the
|
||||
* whole transaction fails. If old_sha1 is NULL, then the previous
|
||||
* value is not checked.
|
||||
*
|
||||
* Return 0 on success and non-zero on failure. Any failure in the
|
||||
* transaction means that the transaction as a whole has failed and
|
||||
* will need to be rolled back.
|
||||
*/
|
||||
int ref_transaction_update(struct ref_transaction *transaction,
|
||||
const char *refname,
|
||||
@ -308,6 +313,19 @@ int ref_transaction_delete(struct ref_transaction *transaction,
|
||||
unsigned int flags, const char *msg,
|
||||
struct strbuf *err);
|
||||
|
||||
/*
|
||||
* Verify, within a transaction, that refname has the value old_sha1,
|
||||
* or, if old_sha1 is null_sha1, then verify that the reference
|
||||
* doesn't exist. old_sha1 must be non-NULL. Function returns 0 on
|
||||
* success and non-zero on failure. A failure to verify means that the
|
||||
* transaction as a whole has failed and will need to be rolled back.
|
||||
*/
|
||||
int ref_transaction_verify(struct ref_transaction *transaction,
|
||||
const char *refname,
|
||||
const unsigned char *old_sha1,
|
||||
unsigned int flags,
|
||||
struct strbuf *err);
|
||||
|
||||
/*
|
||||
* Commit all of the changes that have been queued in transaction, as
|
||||
* atomically as possible.
|
||||
|
||||
Reference in New Issue
Block a user