struct ref_update: move "have_old" into "flags"
Instead of having a separate have_old field, record this boolean value as a bit in the "flags" field. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
fec14ec38c
commit
8df4e51138
45
refs.c
45
refs.c
@ -41,11 +41,17 @@ static unsigned char refname_disposition[256] = {
|
||||
#define REF_DELETING 0x02
|
||||
|
||||
/*
|
||||
* Used as a flag to ref_transaction_delete when a loose ref is being
|
||||
* Used as a flag in ref_update::flags when a loose ref is being
|
||||
* pruned.
|
||||
*/
|
||||
#define REF_ISPRUNING 0x04
|
||||
|
||||
/*
|
||||
* Used as a flag in ref_update::flags when old_sha1 should be
|
||||
* checked.
|
||||
*/
|
||||
#define REF_HAVE_OLD 0x08
|
||||
|
||||
/*
|
||||
* Try to read one refname component from the front of refname.
|
||||
* Return the length of the component found, or -1 if the component is
|
||||
@ -3563,16 +3569,20 @@ int for_each_reflog(each_ref_fn fn, void *cb_data)
|
||||
}
|
||||
|
||||
/**
|
||||
* Information needed for a single ref update. Set new_sha1 to the
|
||||
* new value or to zero to delete the ref. To check the old value
|
||||
* while locking the ref, set have_old to 1 and set old_sha1 to the
|
||||
* value or to zero to ensure the ref does not exist before update.
|
||||
* Information needed for a single ref update. Set new_sha1 to the new
|
||||
* value or to null_sha1 to delete the ref. To check the old value
|
||||
* while the ref is locked, set (flags & REF_HAVE_OLD) and set
|
||||
* old_sha1 to the old value, or to null_sha1 to ensure the ref does
|
||||
* not exist before update.
|
||||
*/
|
||||
struct ref_update {
|
||||
unsigned char new_sha1[20];
|
||||
unsigned char old_sha1[20];
|
||||
unsigned int flags; /* REF_NODEREF? */
|
||||
int have_old; /* 1 if old_sha1 is valid, 0 otherwise */
|
||||
/*
|
||||
* One or more of REF_HAVE_OLD, REF_NODEREF,
|
||||
* REF_DELETING, and REF_ISPRUNING:
|
||||
*/
|
||||
unsigned int flags;
|
||||
struct ref_lock *lock;
|
||||
int type;
|
||||
char *msg;
|
||||
@ -3666,10 +3676,11 @@ int ref_transaction_update(struct ref_transaction *transaction,
|
||||
|
||||
update = add_update(transaction, refname);
|
||||
hashcpy(update->new_sha1, new_sha1);
|
||||
update->flags = flags;
|
||||
update->have_old = have_old;
|
||||
if (have_old)
|
||||
if (have_old) {
|
||||
hashcpy(update->old_sha1, old_sha1);
|
||||
flags |= REF_HAVE_OLD;
|
||||
}
|
||||
update->flags = flags;
|
||||
if (msg)
|
||||
update->msg = xstrdup(msg);
|
||||
return 0;
|
||||
@ -3785,13 +3796,13 @@ int ref_transaction_commit(struct ref_transaction *transaction,
|
||||
|
||||
if (is_null_sha1(update->new_sha1))
|
||||
flags |= REF_DELETING;
|
||||
update->lock = lock_ref_sha1_basic(update->refname,
|
||||
(update->have_old ?
|
||||
update->old_sha1 :
|
||||
NULL),
|
||||
NULL,
|
||||
flags,
|
||||
&update->type);
|
||||
update->lock = lock_ref_sha1_basic(
|
||||
update->refname,
|
||||
((update->flags & REF_HAVE_OLD) ?
|
||||
update->old_sha1 : NULL),
|
||||
NULL,
|
||||
flags,
|
||||
&update->type);
|
||||
if (!update->lock) {
|
||||
ret = (errno == ENOTDIR)
|
||||
? TRANSACTION_NAME_CONFLICT
|
||||
|
Loading…
Reference in New Issue
Block a user