summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Haggerty <mhagger@alum.mit.edu>2015-05-23 01:34:53 +0200
committerJunio C Hamano <gitster@pobox.com>2015-05-27 12:39:41 -0700
commita5e2499e5421c88ec2403087597613d60b8f3077 (patch)
tree03065e5466e0d5c4141fcf88f97c41e3496b7a9a
parentfae46aa0ae5318bbb20f0ef871721bf49e292cea (diff)
downloadgit-a5e2499e5421c88ec2403087597613d60b8f3077.tar.gz
verify_lock(): return 0/-1 rather than struct ref_lock *
Its return value wasn't conveying any extra information, but it made the reader wonder whether the ref_lock that it returned might be different than the one that was passed to it. So change the function to the traditional "return 0 on success or a negative value on error". Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--refs.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/refs.c b/refs.c
index 8480d8dbf5..27b769afdd 100644
--- a/refs.c
+++ b/refs.c
@@ -2218,9 +2218,14 @@ static void unlock_ref(struct ref_lock *lock)
free(lock);
}
-/* This function should make sure errno is meaningful on error */
-static struct ref_lock *verify_lock(struct ref_lock *lock,
- const unsigned char *old_sha1, int mustexist)
+/*
+ * Verify that the reference locked by lock has the value old_sha1.
+ * Fail if the reference doesn't exist and mustexist is set. Return 0
+ * on success or a negative value on error. This function should make
+ * sure errno is meaningful on error.
+ */
+static int verify_lock(struct ref_lock *lock,
+ const unsigned char *old_sha1, int mustexist)
{
if (read_ref_full(lock->ref_name,
mustexist ? RESOLVE_REF_READING : 0,
@@ -2229,16 +2234,16 @@ static struct ref_lock *verify_lock(struct ref_lock *lock,
error("Can't verify ref %s", lock->ref_name);
unlock_ref(lock);
errno = save_errno;
- return NULL;
+ return -1;
}
if (hashcmp(lock->old_sha1, old_sha1)) {
error("Ref %s is at %s but expected %s", lock->ref_name,
sha1_to_hex(lock->old_sha1), sha1_to_hex(old_sha1));
unlock_ref(lock);
errno = EBUSY;
- return NULL;
+ return -1;
}
- return lock;
+ return 0;
}
static int remove_empty_directories(const char *file)
@@ -2466,7 +2471,9 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
goto error_return;
}
}
- return old_sha1 ? verify_lock(lock, old_sha1, mustexist) : lock;
+ if (old_sha1 && verify_lock(lock, old_sha1, mustexist))
+ return NULL;
+ return lock;
error_return:
unlock_ref(lock);