lock_ref_sha1_basic(): do not set force_write for missing references
If a reference is missing, its SHA-1 will be null_sha1, which can't possibly match a new value that ref_transaction_commit() is trying to update it to. So there is no need to set force_write in this scenario. 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:
parent
706d5f816f
commit
074336e5ed
15
refs.c
15
refs.c
@ -2259,7 +2259,6 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
|
|||||||
int type, lflags;
|
int type, lflags;
|
||||||
int mustexist = (old_sha1 && !is_null_sha1(old_sha1));
|
int mustexist = (old_sha1 && !is_null_sha1(old_sha1));
|
||||||
int resolve_flags = 0;
|
int resolve_flags = 0;
|
||||||
int missing = 0;
|
|
||||||
int attempts_remaining = 3;
|
int attempts_remaining = 3;
|
||||||
|
|
||||||
lock = xcalloc(1, sizeof(struct ref_lock));
|
lock = xcalloc(1, sizeof(struct ref_lock));
|
||||||
@ -2298,13 +2297,13 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
|
|||||||
orig_refname, strerror(errno));
|
orig_refname, strerror(errno));
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
missing = is_null_sha1(lock->old_sha1);
|
/*
|
||||||
/* When the ref did not exist and we are creating it,
|
* If the ref did not exist and we are creating it, make sure
|
||||||
* make sure there is no existing ref that is packed
|
* there is no existing packed ref whose name begins with our
|
||||||
* whose name begins with our refname, nor a ref whose
|
* refname, nor a packed ref whose name is a proper prefix of
|
||||||
* name is a proper prefix of our refname.
|
* our refname.
|
||||||
*/
|
*/
|
||||||
if (missing &&
|
if (is_null_sha1(lock->old_sha1) &&
|
||||||
!is_refname_available(refname, skip, get_packed_refs(&ref_cache))) {
|
!is_refname_available(refname, skip, get_packed_refs(&ref_cache))) {
|
||||||
last_errno = ENOTDIR;
|
last_errno = ENOTDIR;
|
||||||
goto error_return;
|
goto error_return;
|
||||||
@ -2320,8 +2319,6 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
|
|||||||
lock->ref_name = xstrdup(refname);
|
lock->ref_name = xstrdup(refname);
|
||||||
lock->orig_ref_name = xstrdup(orig_refname);
|
lock->orig_ref_name = xstrdup(orig_refname);
|
||||||
ref_file = git_path("%s", refname);
|
ref_file = git_path("%s", refname);
|
||||||
if (missing)
|
|
||||||
lock->force_write = 1;
|
|
||||||
if ((flags & REF_NODEREF) && (type & REF_ISSYMREF))
|
if ((flags & REF_NODEREF) && (type & REF_ISSYMREF))
|
||||||
lock->force_write = 1;
|
lock->force_write = 1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user