git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 3/5] verify_lock(): report errors via a strbuf

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
May 22, 2015, 23:34 UTC
Message-ID
<1432337697-29161-4-git-send-email-mhagger@alum.mit.edu>
In-Reply-To
<1432337697-29161-1-git-send-email-mhagger@alum.mit.edu>

Instead of writing error messages directly to stderr, write them to a "strbuf *err". In lock_ref_sha1_basic(), arrange for these errors to be returned to its caller.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
 refs.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/refs.c b/refs.c
index 100a767..625e69f 100644
--- a/refs.c
+++ b/refs.c
@@ -2198,23 +2198,28 @@ static void unlock_ref(struct ref_lock *lock)
 /*
  * 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.
+ * on success. On error, write an error message to err, set errno, and
+ * return a negative value.
  */
 static int verify_lock(struct ref_lock *lock,
-		       const unsigned char *old_sha1, int mustexist)
+		       const unsigned char *old_sha1, int mustexist,
+		       struct strbuf *err)
 {
+	assert(err);
+
 	if (read_ref_full(lock->ref_name,
 			  mustexist ? RESOLVE_REF_READING : 0,
 			  lock->old_sha1, NULL)) {
 		int save_errno = errno;
-		error("Can't verify ref %s", lock->ref_name);
+		strbuf_addf(err, "Can't verify ref %s", lock->ref_name);
 		errno = save_errno;
 		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));
+		strbuf_addf(err, "Ref %s is at %s but expected %s",
+			    lock->ref_name,
+			    sha1_to_hex(lock->old_sha1),
+			    sha1_to_hex(old_sha1));
 		errno = EBUSY;
 		return -1;
 	}
@@ -2448,7 +2453,7 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
 			goto error_return;
 		}
 	}
-	if (old_sha1 && verify_lock(lock, old_sha1, mustexist)) {
+	if (old_sha1 && verify_lock(lock, old_sha1, mustexist, err)) {
 		last_errno = errno;
 		goto error_return;
 	}
-- 
2.1.4
Previous: Michael HaggertyNext: Junio C Hamano
Message 5 of 12 in “Fix verify_lock() to report errors via strbuf”
  1. 0/5 Fix verify_lock() to report errors via strbufMichael Haggerty, May 22, 2015
  2. 1/5 verify_lock(): return 0/-1 rather than struct ref_lock *Michael Haggerty, May 22, 2015
  3. Stefan BellerMay 23, 2015
  4. 2/5 verify_lock(): on errors, let the caller unlock the lockMichael Haggerty, May 22, 2015
  5. 3/5 verify_lock(): report errors via a strbufMichael Haggerty, May 22, 2015
  6. Junio C HamanoMay 27, 2015
  7. Michael HaggertyMay 27, 2015
  8. 4/5 verify_lock(): do not capitalize error messagesMichael Haggerty, May 22, 2015
  9. 5/5 ref_transaction_commit(): do not capitalize error messagesMichael Haggerty, May 22, 2015
  10. Stefan BellerMay 23, 2015
  11. Michael HaggertyMay 27, 2015
  12. Junio C HamanoMay 27, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.