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

[PATCH v2 15/19] refs: simplify parsing of reflog entries

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Feb 14, 2017, 02:31 UTC
Message-ID
<20170214023141.842922-16-sandals@crustytoothpaste.net>
In-Reply-To
<20170214023141.842922-1-sandals@crustytoothpaste.net>

The current code for reflog entries uses a lot of hard-coded constants, making it hard to read and modify. Use parse_oid_hex and two temporary variables to simplify the code and reduce the use of magic constants.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 refs/files-backend.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/refs/files-backend.c b/refs/files-backend.c
index d7a5fd2a7c..09227a3f63 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -3117,12 +3117,14 @@ static int show_one_reflog_ent(struct strbuf *sb, each_reflog_ent_fn fn, void *c
 	char *email_end, *message;
 	unsigned long timestamp;
 	int tz;
+	const char *p = sb->buf;
+	const int minlen = 2 * GIT_SHA1_HEXSZ + 3;
 
 	/* old SP new SP name <email> SP time TAB msg LF */
-	if (sb->len < 83 || sb->buf[sb->len - 1] != '\n' ||
-	    get_oid_hex(sb->buf, &ooid) || sb->buf[40] != ' ' ||
-	    get_oid_hex(sb->buf + 41, &noid) || sb->buf[81] != ' ' ||
-	    !(email_end = strchr(sb->buf + 82, '>')) ||
+	if (sb->len < minlen || sb->buf[sb->len - 1] != '\n' ||
+	    parse_oid_hex(p, &ooid, &p) || *p++ != ' ' ||
+	    parse_oid_hex(p, &noid, &p) || *p++ != ' ' ||
+	    !(email_end = strchr(p, '>')) ||
 	    email_end[1] != ' ' ||
 	    !(timestamp = strtoul(email_end + 2, &message, 10)) ||
 	    !message || message[0] != ' ' ||
@@ -3136,7 +3138,7 @@ static int show_one_reflog_ent(struct strbuf *sb, each_reflog_ent_fn fn, void *c
 		message += 6;
 	else
 		message += 7;
-	return fn(&ooid, &noid, sb->buf + 82, timestamp, tz, message, cb_data);
+	return fn(&ooid, &noid, sb->buf + minlen - 1, timestamp, tz, message, cb_data);
 }
 
 static char *find_beginning_of_line(char *bob, char *scan)
-- 
2.11.0
Previous: brian m. carlsonNext: Michael Haggerty
Message 11 of 26 in “object_id part 6”
  1. 00/19 object_id part 6brian m. carlson, Feb 14, 2017
  2. 03/19 builtin/describe: convert to struct object_idbrian m. carlson, Feb 14, 2017
  3. 16/19 sha1_file: introduce an nth_packed_object_oid functionbrian m. carlson, Feb 14, 2017
  4. 11/19 builtin/replace: convert to struct object_idbrian m. carlson, Feb 14, 2017
  5. Michael HaggertyFeb 17, 2017
  6. 10/19 Convert remaining callers of resolve_refdup to object_idbrian m. carlson, Feb 14, 2017
  7. 09/19 builtin/merge: convert to struct object_idbrian m. carlson, Feb 14, 2017
  8. 08/19 builtin/clone: convert to struct object_idbrian m. carlson, Feb 14, 2017
  9. 13/19 refs: convert each_reflog_ent_fn to struct object_idbrian m. carlson, Feb 14, 2017
  10. 06/19 builtin/grep: convert to struct object_idbrian m. carlson, Feb 14, 2017
  11. 15/19 refs: simplify parsing of reflog entriesbrian m. carlson, Feb 14, 2017
  12. Michael HaggertyFeb 17, 2017
  13. 12/19 reflog-walk: convert struct reflog_info to struct object_idbrian m. carlson, Feb 14, 2017
  14. 14/19 hex: introduce parse_oid_hexbrian m. carlson, Feb 14, 2017
  15. Michael HaggertyFeb 17, 2017
  16. 17/19 Convert object iteration callbacks to struct object_idbrian m. carlson, Feb 14, 2017
  17. 19/19 wt-status: convert to struct object_idbrian m. carlson, Feb 14, 2017
  18. 18/19 builtin/merge-base: convert to struct object_idbrian m. carlson, Feb 14, 2017
  19. 07/19 builtin/branch: convert to struct object_idbrian m. carlson, Feb 14, 2017
  20. 05/19 builtin/fmt-merge-message: convert to struct object_idbrian m. carlson, Feb 14, 2017
  21. 01/19 builtin/commit: convert to struct object_idbrian m. carlson, Feb 14, 2017
  22. 04/19 builtin/fast-export: convert to struct object_idbrian m. carlson, Feb 14, 2017
  23. 02/19 builtin/diff-tree: convert to struct object_idbrian m. carlson, Feb 14, 2017
  24. Junio C HamanoFeb 14, 2017
  25. Michael HaggertyFeb 17, 2017
  26. brian m. carlsonFeb 17, 2017

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.