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>

Michael Haggerty committed Mar 2, 2015 at 10:29 UTC 074336e5ed4ff10577f22c6812e092e3f6607405
1 file changed +6 -9
refs.c
+6 -9
@@ -2259,7 +2259,6 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
2259 int type, lflags;
2260 int mustexist = (old_sha1 && !is_null_sha1(old_sha1));
2261 int resolve_flags = 0;
2262 - int missing = 0;
2262 int attempts_remaining = 3;
2263
2264 lock = xcalloc(1, sizeof(struct ref_lock));
@@ -2298,13 +2297,13 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
2297 orig_refname, strerror(errno));
2298 goto error_return;
2299 }
2301 - missing = is_null_sha1(lock->old_sha1);
2302 - /* When the ref did not exist and we are creating it,
2303 - * make sure there is no existing ref that is packed
2304 - * whose name begins with our refname, nor a ref whose
2305 - * name is a proper prefix of our refname.
2300 + /*
2301 + * If the ref did not exist and we are creating it, make sure
2302 + * there is no existing packed ref whose name begins with our
2303 + * refname, nor a packed ref whose name is a proper prefix of
2304 + * our refname.
2305 */
2307 - if (missing &&
2306 + if (is_null_sha1(lock->old_sha1) &&
2307 !is_refname_available(refname, skip, get_packed_refs(&ref_cache))) {
2308 last_errno = ENOTDIR;
2309 goto error_return;
@@ -2320,8 +2319,6 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
2319 lock->ref_name = xstrdup(refname);
2320 lock->orig_ref_name = xstrdup(orig_refname);
2321 ref_file = git_path("%s", refname);
2323 - if (missing)
2324 - lock->force_write = 1;
2322 if ((flags & REF_NODEREF) && (type & REF_ISSYMREF))
2323 lock->force_write = 1;
2324