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

[PATCH 02/17] builtin/diff-tree: convert to struct object_id

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Jan 1, 2017, 19:18 UTC
Message-ID
<20170101191847.564741-3-sandals@crustytoothpaste.net>
In-Reply-To
<20170101191847.564741-1-sandals@crustytoothpaste.net>

Convert most leaf functions to struct object_id. Rewrite several hardcoded numbers in terms of GIT_SHA1_HEXSZ, using an intermediate variable where that makes sense.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 builtin/diff-tree.c | 38 ++++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 18 deletions(-)
diff --git a/builtin/diff-tree.c b/builtin/diff-tree.c
index 806dd7a88..516860e4f 100644
--- a/builtin/diff-tree.c
+++ b/builtin/diff-tree.c
@@ -7,9 +7,9 @@
 
 static struct rev_info log_tree_opt;
 
-static int diff_tree_commit_sha1(const unsigned char *sha1)
+static int diff_tree_commit_sha1(const struct object_id *oid)
 {
-	struct commit *commit = lookup_commit_reference(sha1);
+	struct commit *commit = lookup_commit_reference(oid->hash);
 	if (!commit)
 		return -1;
 	return log_tree_commit(&log_tree_opt, commit);
@@ -18,22 +18,22 @@ static int diff_tree_commit_sha1(const unsigned char *sha1)
 /* Diff one or more commits. */
 static int stdin_diff_commit(struct commit *commit, char *line, int len)
 {
-	unsigned char sha1[20];
-	if (isspace(line[40]) && !get_sha1_hex(line+41, sha1)) {
+	struct object_id oid;
+	if (isspace(line[GIT_SHA1_HEXSZ]) && !get_oid_hex(line+GIT_SHA1_HEXSZ+1, &oid)) {
 		/* Graft the fake parents locally to the commit */
-		int pos = 41;
+		int pos = GIT_SHA1_HEXSZ + 1;
 		struct commit_list **pptr;
 
 		/* Free the real parent list */
 		free_commit_list(commit->parents);
 		commit->parents = NULL;
 		pptr = &(commit->parents);
-		while (line[pos] && !get_sha1_hex(line + pos, sha1)) {
-			struct commit *parent = lookup_commit(sha1);
+		while (line[pos] && !get_oid_hex(line + pos, &oid)) {
+			struct commit *parent = lookup_commit(oid.hash);
 			if (parent) {
 				pptr = &commit_list_insert(parent, pptr)->next;
 			}
-			pos += 41;
+			pos += GIT_SHA1_HEXSZ + 1;
 		}
 	}
 	return log_tree_commit(&log_tree_opt, commit);
@@ -42,11 +42,13 @@ static int stdin_diff_commit(struct commit *commit, char *line, int len)
 /* Diff two trees. */
 static int stdin_diff_trees(struct tree *tree1, char *line, int len)
 {
-	unsigned char sha1[20];
+	struct object_id oid;
 	struct tree *tree2;
-	if (len != 82 || !isspace(line[40]) || get_sha1_hex(line + 41, sha1))
+	const int chunksz = GIT_SHA1_HEXSZ + 1;
+	if (len != 2 * chunksz || !isspace(line[chunksz-1]) ||
+		get_sha1_hex(line + chunksz, oid.hash))
 		return error("Need exactly two trees, separated by a space");
-	tree2 = lookup_tree(sha1);
+	tree2 = lookup_tree(oid.hash);
 	if (!tree2 || parse_tree(tree2))
 		return -1;
 	printf("%s %s\n", oid_to_hex(&tree1->object.oid),
@@ -60,15 +62,15 @@ static int stdin_diff_trees(struct tree *tree1, char *line, int len)
 static int diff_tree_stdin(char *line)
 {
 	int len = strlen(line);
-	unsigned char sha1[20];
+	struct object_id oid;
 	struct object *obj;
 
 	if (!len || line[len-1] != '\n')
 		return -1;
 	line[len-1] = 0;
-	if (get_sha1_hex(line, sha1))
+	if (get_oid_hex(line, &oid))
 		return -1;
-	obj = parse_object(sha1);
+	obj = parse_object(oid.hash);
 	if (!obj)
 		return -1;
 	if (obj->type == OBJ_COMMIT)
@@ -76,7 +78,7 @@ static int diff_tree_stdin(char *line)
 	if (obj->type == OBJ_TREE)
 		return stdin_diff_trees((struct tree *)obj, line, len);
 	error("Object %s is a %s, not a commit or tree",
-	      sha1_to_hex(sha1), typename(obj->type));
+	      oid_to_hex(&oid), typename(obj->type));
 	return -1;
 }
 
@@ -141,7 +143,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
 		break;
 	case 1:
 		tree1 = opt->pending.objects[0].item;
-		diff_tree_commit_sha1(tree1->oid.hash);
+		diff_tree_commit_sha1(&tree1->oid);
 		break;
 	case 2:
 		tree1 = opt->pending.objects[0].item;
@@ -166,9 +168,9 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
 			opt->diffopt.setup |= (DIFF_SETUP_USE_SIZE_CACHE |
 					       DIFF_SETUP_USE_CACHE);
 		while (fgets(line, sizeof(line), stdin)) {
-			unsigned char sha1[20];
+			struct object_id oid;
 
-			if (get_sha1_hex(line, sha1)) {
+			if (get_oid_hex(line, &oid)) {
 				fputs(line, stdout);
 				fflush(stdout);
 			}
-- 
2.11.0
Previous: brian m. carlsonNext: brian m. carlson
Message 21 of 27 in “object_id part 6”
  1. 00/17 object_id part 6brian m. carlson, Jan 1, 2017
  2. 03/17 builtin/describe: convert to struct object_idbrian m. carlson, Jan 1, 2017
  3. 07/17 builtin/branch: convert to struct object_idbrian m. carlson, Jan 1, 2017
  4. 09/17 builtin/merge: convert to struct object_idbrian m. carlson, Jan 1, 2017
  5. Michael HaggertyJan 2, 2017
  6. 11/17 builtin/replace: convert to struct object_idbrian m. carlson, Jan 1, 2017
  7. 16/17 builtin/merge-base: convert to struct object_idbrian m. carlson, Jan 1, 2017
  8. 15/17 Convert object iteration callbacks to struct object_idbrian m. carlson, Jan 1, 2017
  9. 08/17 builtin/clone: convert to struct object_idbrian m. carlson, Jan 1, 2017
  10. 14/17 sha1_file: introduce an nth_packed_object_oid functionbrian m. carlson, Jan 1, 2017
  11. Michael HaggertyJan 2, 2017
  12. Jeff KingJan 2, 2017
  13. Michael HaggertyJan 2, 2017
  14. Jeff KingJan 2, 2017
  15. 13/17 refs: convert each_reflog_ent_fn to struct object_idbrian m. carlson, Jan 1, 2017
  16. Michael HaggertyJan 2, 2017
  17. 10/17 Convert remaining callers of resolve_refdup to object_idbrian m. carlson, Jan 1, 2017
  18. 12/17 reflog-walk: convert struct reflog_info to struct object_idbrian m. carlson, Jan 1, 2017
  19. 17/17 wt-status: convert to struct object_idbrian m. carlson, Jan 1, 2017
  20. 06/17 builtin/grep: convert to struct object_idbrian m. carlson, Jan 1, 2017
  21. 02/17 builtin/diff-tree: convert to struct object_idbrian m. carlson, Jan 1, 2017
  22. 05/17 builtin/fmt-merge-message: convert to struct object_idbrian m. carlson, Jan 1, 2017
  23. 04/17 builtin/fast-export: convert to struct object_idbrian m. carlson, Jan 1, 2017
  24. 01/17 builtin/commit: convert to struct object_idbrian m. carlson, Jan 1, 2017
  25. Michael HaggertyJan 2, 2017
  26. Michael HaggertyJan 2, 2017
  27. Jeff KingJan 3, 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.