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

[PATCH 1/5] refs.c: allow passing raw git_committer_info as email to _update_reflog

From
Ronnie Sahlberg <sahlberg@google.com>
Date
Jul 25, 2014, 16:58 UTC
Message-ID
<1406307521-10339-2-git-send-email-sahlberg@google.com>
In-Reply-To
<1406307521-10339-1-git-send-email-sahlberg@google.com>

In many places in the code we do not have access to the individual fields in the committer data. Instead we might only have access to prebaked data such as what is returned by git_committer_info() containing a string that consists of email, timestamp, zone etc.

This makes it inconvenient to use transaction_update_reflog since it means you would have to first parse git_committer_info before you can call update_reflog.

Add a new flag REFLOG_EMAIL_IS_COMMITTER to _update_reflog to tell it that what we pass in as email is already the fully baked committer string we can use as-is.

Signed-off-by: Ronnie Sahlberg <sahlberg@google.com>
---
 refs.c | 20 ++++++++++++--------
 refs.h |  1 +
 2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/refs.c b/refs.c
index 2662ef6..6c55032 100644
--- a/refs.c
+++ b/refs.c
@@ -3522,14 +3522,18 @@ int transaction_update_reflog(struct ref_transaction *transaction,
 	hashcpy(update->old_sha1, old_sha1);
 	update->reflog_fd = -1;
 	if (email) {
-		struct strbuf buf = STRBUF_INIT;
-		char sign = (tz < 0) ? '-' : '+';
-		int zone = (tz < 0) ? (-tz) : tz;
-
-		strbuf_addf(&buf, "%s %lu %c%04d", email, timestamp, sign,
-			    zone);
-		update->committer = xstrdup(buf.buf);
-		strbuf_release(&buf);
+		if (flags & REFLOG_EMAIL_IS_COMMITTER)
+			update->committer = xstrdup(email);
+		else {
+			struct strbuf buf = STRBUF_INIT;
+			char sign = (tz < 0) ? '-' : '+';
+			int zone = (tz < 0) ? (-tz) : tz;
+
+			strbuf_addf(&buf, "%s %lu %c%04d", email, timestamp,
+				    sign, zone);
+			update->committer = xstrdup(buf.buf);
+			strbuf_release(&buf);
+		}
 	}
 	if (msg)
 		update->msg = xstrdup(msg);
diff --git a/refs.h b/refs.h
index 0172f48..eb918a0 100644
--- a/refs.h
+++ b/refs.h
@@ -309,6 +309,7 @@ int transaction_delete_sha1(struct ref_transaction *transaction,
  * Flags >= 0x100 are reserved for internal use.
  */
 #define REFLOG_TRUNCATE 0x01
+#define REFLOG_EMAIL_IS_COMMITTER 0x02
 /*
  * Append a reflog entry for refname. If the REFLOG_TRUNCATE flag is set
  * this update will first truncate the reflog before writing the entry.
-- 
2.0.1.508.g763ab16
Previous: Ronnie SahlbergNext: Jonathan Nieder
Message 2 of 13 in “ref-transactions-rename”
  1. 0/5 ref-transactions-renameRonnie Sahlberg, Jul 25, 2014
  2. 1/5 refs.c: allow passing raw git_committer_info as email to _update_reflogRonnie Sahlberg, Jul 25, 2014
  3. Jonathan NiederJul 25, 2014
  4. Ronnie SahlbergJul 28, 2014
  5. Eric SunshineJul 28, 2014
  6. 2/5 refs.c: return error instead of dying when locking fails during transactionRonnie Sahlberg, Jul 25, 2014
  7. Jonathan NiederJul 25, 2014
  8. Ronnie SahlbergJul 28, 2014
  9. 3/5 refs.c: use packed refs when deleting refs during a transactionRonnie Sahlberg, Jul 25, 2014
  10. Jonathan NiederJul 25, 2014
  11. 4/5 refs.c: update rename_ref to use a transactionRonnie Sahlberg, Jul 25, 2014
  12. Jonathan NiederJul 25, 2014
  13. 5/5 refs.c: rollback the lockfile before we die() in repack_without_refsRonnie Sahlberg, Jul 25, 2014

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.