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

[PATCH v2 01/53] fetch-pack: convert to struct object_id

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
May 1, 2017, 02:28 UTC
Message-ID
<20170501022946.258735-2-sandals@crustytoothpaste.net>
In-Reply-To
<20170501022946.258735-1-sandals@crustytoothpaste.net>

Convert all uses of unsigned char [20] to struct object_id. Switch one use of get_sha1_hex to parse_oid_hex to avoid the need for a constant. This change is necessary in order to convert parse_object.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 fetch-pack.c | 89 ++++++++++++++++++++++++++++++------------------------------
 1 file changed, 45 insertions(+), 44 deletions(-)
diff --git a/fetch-pack.c b/fetch-pack.c
index afb8b0502..b42d01f42 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -118,9 +118,9 @@ static void rev_list_push(struct commit *commit, int mark)
 	}
 }
 
-static int rev_list_insert_ref(const char *refname, const unsigned char *sha1)
+static int rev_list_insert_ref(const char *refname, const struct object_id *oid)
 {
-	struct object *o = deref_tag(parse_object(sha1), refname, 0);
+	struct object *o = deref_tag(parse_object(oid->hash), refname, 0);
 
 	if (o && o->type == OBJ_COMMIT)
 		rev_list_push((struct commit *)o, SEEN);
@@ -131,7 +131,7 @@ static int rev_list_insert_ref(const char *refname, const unsigned char *sha1)
 static int rev_list_insert_ref_oid(const char *refname, const struct object_id *oid,
 				   int flag, void *cb_data)
 {
-	return rev_list_insert_ref(refname, oid->hash);
+	return rev_list_insert_ref(refname, oid);
 }
 
 static int clear_marks(const char *refname, const struct object_id *oid,
@@ -183,7 +183,7 @@ static void mark_common(struct commit *commit,
   Get the next rev to send, ignoring the common.
 */
 
-static const unsigned char *get_rev(void)
+static const struct object_id *get_rev(void)
 {
 	struct commit *commit = NULL;
 
@@ -222,7 +222,7 @@ static const unsigned char *get_rev(void)
 		}
 	}
 
-	return commit->object.oid.hash;
+	return &commit->object.oid;
 }
 
 enum ack_type {
@@ -251,7 +251,7 @@ static void consume_shallow_list(struct fetch_pack_args *args, int fd)
 	}
 }
 
-static enum ack_type get_ack(int fd, unsigned char *result_sha1)
+static enum ack_type get_ack(int fd, struct object_id *result_oid)
 {
 	int len;
 	char *line = packet_read_line(fd, &len);
@@ -262,7 +262,7 @@ static enum ack_type get_ack(int fd, unsigned char *result_sha1)
 	if (!strcmp(line, "NAK"))
 		return NAK;
 	if (skip_prefix(line, "ACK ", &arg)) {
-		if (!get_sha1_hex(arg, result_sha1)) {
+		if (!get_oid_hex(arg, result_oid)) {
 			arg += 40;
 			len -= arg - line;
 			if (len < 1)
@@ -293,7 +293,7 @@ static void send_request(struct fetch_pack_args *args,
 
 static void insert_one_alternate_object(struct object *obj)
 {
-	rev_list_insert_ref(NULL, obj->oid.hash);
+	rev_list_insert_ref(NULL, &obj->oid);
 }
 
 #define INITIAL_FLUSH 16
@@ -317,12 +317,12 @@ static int next_flush(struct fetch_pack_args *args, int count)
 }
 
 static int find_common(struct fetch_pack_args *args,
-		       int fd[2], unsigned char *result_sha1,
+		       int fd[2], struct object_id *result_oid,
 		       struct ref *refs)
 {
 	int fetching;
 	int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
-	const unsigned char *sha1;
+	const struct object_id *oid;
 	unsigned in_vain = 0;
 	int got_continue = 0;
 	int got_ready = 0;
@@ -340,7 +340,7 @@ static int find_common(struct fetch_pack_args *args,
 
 	fetching = 0;
 	for ( ; refs ; refs = refs->next) {
-		unsigned char *remote = refs->old_oid.hash;
+		struct object_id *remote = &refs->old_oid;
 		const char *remote_hex;
 		struct object *o;
 
@@ -354,12 +354,12 @@ static int find_common(struct fetch_pack_args *args,
 		 * interested in the case we *know* the object is
 		 * reachable and we have already scanned it.
 		 */
-		if (((o = lookup_object(remote)) != NULL) &&
+		if (((o = lookup_object(remote->hash)) != NULL) &&
 				(o->flags & COMPLETE)) {
 			continue;
 		}
 
-		remote_hex = sha1_to_hex(remote);
+		remote_hex = oid_to_hex(remote);
 		if (!fetching) {
 			struct strbuf c = STRBUF_INIT;
 			if (multi_ack == 2)     strbuf_addstr(&c, " multi_ack_detailed");
@@ -410,25 +410,25 @@ static int find_common(struct fetch_pack_args *args,
 	if (args->deepen) {
 		char *line;
 		const char *arg;
-		unsigned char sha1[20];
+		struct object_id oid;
 
 		send_request(args, fd[1], &req_buf);
 		while ((line = packet_read_line(fd[0], NULL))) {
 			if (skip_prefix(line, "shallow ", &arg)) {
-				if (get_sha1_hex(arg, sha1))
+				if (get_oid_hex(arg, &oid))
 					die(_("invalid shallow line: %s"), line);
-				register_shallow(sha1);
+				register_shallow(oid.hash);
 				continue;
 			}
 			if (skip_prefix(line, "unshallow ", &arg)) {
-				if (get_sha1_hex(arg, sha1))
+				if (get_oid_hex(arg, &oid))
 					die(_("invalid unshallow line: %s"), line);
-				if (!lookup_object(sha1))
+				if (!lookup_object(oid.hash))
 					die(_("object not found: %s"), line);
 				/* make sure that it is parsed as shallow */
-				if (!parse_object(sha1))
+				if (!parse_object(oid.hash))
 					die(_("error in object: %s"), line);
-				if (unregister_shallow(sha1))
+				if (unregister_shallow(oid.hash))
 					die(_("no shallow found: %s"), line);
 				continue;
 			}
@@ -447,9 +447,9 @@ static int find_common(struct fetch_pack_args *args,
 
 	flushes = 0;
 	retval = -1;
-	while ((sha1 = get_rev())) {
-		packet_buf_write(&req_buf, "have %s\n", sha1_to_hex(sha1));
-		print_verbose(args, "have %s", sha1_to_hex(sha1));
+	while ((oid = get_rev())) {
+		packet_buf_write(&req_buf, "have %s\n", oid_to_hex(oid));
+		print_verbose(args, "have %s", oid_to_hex(oid));
 		in_vain++;
 		if (flush_at <= ++count) {
 			int ack;
@@ -469,10 +469,10 @@ static int find_common(struct fetch_pack_args *args,
 
 			consume_shallow_list(args, fd[0]);
 			do {
-				ack = get_ack(fd[0], result_sha1);
+				ack = get_ack(fd[0], result_oid);
 				if (ack)
 					print_verbose(args, _("got %s %d %s"), "ack",
-						      ack, sha1_to_hex(result_sha1));
+						      ack, oid_to_hex(result_oid));
 				switch (ack) {
 				case ACK:
 					flushes = 0;
@@ -483,9 +483,9 @@ static int find_common(struct fetch_pack_args *args,
 				case ACK_ready:
 				case ACK_continue: {
 					struct commit *commit =
-						lookup_commit(result_sha1);
+						lookup_commit(result_oid->hash);
 					if (!commit)
-						die(_("invalid commit %s"), sha1_to_hex(result_sha1));
+						die(_("invalid commit %s"), oid_to_hex(result_oid));
 					if (args->stateless_rpc
 					 && ack == ACK_common
 					 && !(commit->object.flags & COMMON)) {
@@ -493,7 +493,7 @@ static int find_common(struct fetch_pack_args *args,
 						 * on the next RPC request so the peer knows
 						 * it is in common with us.
 						 */
-						const char *hex = sha1_to_hex(result_sha1);
+						const char *hex = oid_to_hex(result_oid);
 						packet_buf_write(&req_buf, "have %s\n", hex);
 						state_len = req_buf.len;
 						/*
@@ -538,10 +538,10 @@ static int find_common(struct fetch_pack_args *args,
 	if (!got_ready || !no_done)
 		consume_shallow_list(args, fd[0]);
 	while (flushes || multi_ack) {
-		int ack = get_ack(fd[0], result_sha1);
+		int ack = get_ack(fd[0], result_oid);
 		if (ack) {
 			print_verbose(args, _("got %s (%d) %s"), "ack",
-				      ack, sha1_to_hex(result_sha1));
+				      ack, oid_to_hex(result_oid));
 			if (ack == ACK)
 				return 0;
 			multi_ack = 1;
@@ -555,9 +555,9 @@ static int find_common(struct fetch_pack_args *args,
 
 static struct commit_list *complete;
 
-static int mark_complete(const unsigned char *sha1)
+static int mark_complete(const struct object_id *oid)
 {
-	struct object *o = parse_object(sha1);
+	struct object *o = parse_object(oid->hash);
 
 	while (o && o->type == OBJ_TAG) {
 		struct tag *t = (struct tag *) o;
@@ -579,7 +579,7 @@ static int mark_complete(const unsigned char *sha1)
 static int mark_complete_oid(const char *refname, const struct object_id *oid,
 			     int flag, void *cb_data)
 {
-	return mark_complete(oid->hash);
+	return mark_complete(oid);
 }
 
 static void mark_recent_complete_commits(struct fetch_pack_args *args,
@@ -637,14 +637,15 @@ static void filter_refs(struct fetch_pack_args *args,
 
 	/* Append unmatched requests to the list */
 	for (i = 0; i < nr_sought; i++) {
-		unsigned char sha1[20];
+		struct object_id oid;
+		const char *p;
 
 		ref = sought[i];
 		if (ref->match_status != REF_NOT_MATCHED)
 			continue;
-		if (get_sha1_hex(ref->name, sha1) ||
-		    ref->name[40] != '\0' ||
-		    hashcmp(sha1, ref->old_oid.hash))
+		if (parse_oid_hex(ref->name, &oid, &p) ||
+		    *p != '\0' ||
+		    oidcmp(&oid, &ref->old_oid))
 			continue;
 
 		if ((allow_unadvertised_object_request &
@@ -661,7 +662,7 @@ static void filter_refs(struct fetch_pack_args *args,
 
 static void mark_alternate_complete(struct object *obj)
 {
-	mark_complete(obj->oid.hash);
+	mark_complete(&obj->oid);
 }
 
 static int everything_local(struct fetch_pack_args *args,
@@ -724,17 +725,17 @@ static int everything_local(struct fetch_pack_args *args,
 	filter_refs(args, refs, sought, nr_sought);
 
 	for (retval = 1, ref = *refs; ref ; ref = ref->next) {
-		const unsigned char *remote = ref->old_oid.hash;
+		const struct object_id *remote = &ref->old_oid;
 		struct object *o;
 
-		o = lookup_object(remote);
+		o = lookup_object(remote->hash);
 		if (!o || !(o->flags & COMPLETE)) {
 			retval = 0;
-			print_verbose(args, "want %s (%s)", sha1_to_hex(remote),
+			print_verbose(args, "want %s (%s)", oid_to_hex(remote),
 				      ref->name);
 			continue;
 		}
-		print_verbose(args, _("already have %s (%s)"), sha1_to_hex(remote),
+		print_verbose(args, _("already have %s (%s)"), oid_to_hex(remote),
 			      ref->name);
 	}
 	return retval;
@@ -873,7 +874,7 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,
 				 char **pack_lockfile)
 {
 	struct ref *ref = copy_ref_list(orig_ref);
-	unsigned char sha1[20];
+	struct object_id oid;
 	const char *agent_feature;
 	int agent_len;
 
@@ -945,7 +946,7 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,
 		packet_flush(fd[1]);
 		goto all_done;
 	}
-	if (find_common(args, fd, sha1, ref) < 0)
+	if (find_common(args, fd, &oid, ref) < 0)
 		if (!args->keep_pack)
 			/* When cloning, it is not unusual to have
 			 * no common commit.
Previous: brian m. carlsonNext: brian m. carlson
Message 2 of 69 in “object_id part 8”
  1. 00/53 object_id part 8brian m. carlson, May 1, 2017
  2. 01/53 fetch-pack: convert to struct object_idbrian m. carlson, May 1, 2017
  3. 02/53 Clean up outstanding object_id transforms.brian m. carlson, May 1, 2017
  4. Brandon WilliamsMay 2, 2017
  5. brian m. carlsonMay 3, 2017
  6. 03/53 Convert struct cache_tree to use struct object_idbrian m. carlson, May 1, 2017
  7. Brandon WilliamsMay 2, 2017
  8. brian m. carlsonMay 3, 2017
  9. 05/53 builtin/prune: convert to struct object_idbrian m. carlson, May 1, 2017
  10. 04/53 builtin/name-rev: convert to struct object_idbrian m. carlson, May 1, 2017
  11. 06/53 bundle: convert to struct object_idbrian m. carlson, May 1, 2017
  12. 10/53 fast-import: convert internal structs to struct object_idbrian m. carlson, May 1, 2017
  13. 08/53 builtin/blame: convert static function to struct object_idbrian m. carlson, May 1, 2017
  14. 07/53 branch: convert to struct object_idbrian m. carlson, May 1, 2017
  15. 12/53 submodule: convert merge_submodule to use struct object_idbrian m. carlson, May 1, 2017
  16. 11/53 fast-import: convert to struct object_idbrian m. carlson, May 1, 2017
  17. Jonathan TanMay 1, 2017
  18. Jeff KingMay 1, 2017
  19. Jonathan TanMay 1, 2017
  20. brian m. carlsonMay 3, 2017
  21. 14/53 parse-options-cb: convert to struct object_idbrian m. carlson, May 1, 2017
  22. 13/53 notes-cache: convert to struct object_idbrian m. carlson, May 1, 2017
  23. 16/53 builtin/verify-commit: convert to struct object_idbrian m. carlson, May 1, 2017
  24. 09/53 builtin/rev-parse: convert to struct object_idbrian m. carlson, May 1, 2017
  25. Jonathan TanMay 1, 2017
  26. 15/53 reflog_expire: convert to struct object_idbrian m. carlson, May 1, 2017
  27. 19/53 notes-utils: convert internals to struct object_idbrian m. carlson, May 1, 2017
  28. 21/53 shallow: convert shallow registration functions to object_idbrian m. carlson, May 1, 2017
  29. 24/53 Convert remaining callers of lookup_commit_reference* to object_idbrian m. carlson, May 1, 2017
  30. 22/53 sequencer: convert some functions to struct object_idbrian m. carlson, May 1, 2017
  31. 18/53 http-push: convert some static functions to struct object_idbrian m. carlson, May 1, 2017
  32. 23/53 builtin/tag: convert to struct object_idbrian m. carlson, May 1, 2017
  33. 25/53 Convert lookup_commit* to struct object_idbrian m. carlson, May 1, 2017
  34. 26/53 pack: convert struct pack_idx_entry to struct object_idbrian m. carlson, May 1, 2017
  35. 17/53 tag: convert parse_tag_buffer to struct object_idbrian m. carlson, May 1, 2017
  36. 20/53 revision: convert prepare_show_merge to struct object_idbrian m. carlson, May 1, 2017
  37. 28/53 Convert remaining callers of lookup_blob to object_idbrian m. carlson, May 1, 2017
  38. 30/53 tree: convert read_tree_1 to use struct object_id internallybrian m. carlson, May 1, 2017
  39. 27/53 builtin/unpack-objects: convert to struct object_idbrian m. carlson, May 1, 2017
  40. 29/53 Convert lookup_blob to struct object_idbrian m. carlson, May 1, 2017
  41. 37/53 ref-filter: convert some static functions to struct object_idbrian m. carlson, May 1, 2017
  42. 35/53 Convert the verify_pack callback to struct object_idbrian m. carlson, May 1, 2017
  43. 38/53 refs: convert struct ref_update to use struct object_idbrian m. carlson, May 1, 2017
  44. 36/53 Convert struct ref_array_item to struct object_idbrian m. carlson, May 1, 2017
  45. 40/53 http-push: convert process_ls_object and descendants to object_idbrian m. carlson, May 1, 2017
  46. 39/53 refs/files-backend: convert many internals to struct object_idbrian m. carlson, May 1, 2017
  47. Jonathan TanMay 1, 2017
  48. brian m. carlsonMay 3, 2017
  49. 33/53 log-tree: convert to struct object_idbrian m. carlson, May 1, 2017
  50. 34/53 Convert lookup_tag to struct object_idbrian m. carlson, May 1, 2017
  51. 31/53 builtin/reflog: convert tree_is_complete to take struct object_idbrian m. carlson, May 1, 2017
  52. 41/53 revision: rename add_pending_sha1 to add_pending_oidbrian m. carlson, May 1, 2017
  53. 32/53 Convert lookup_tree to struct object_idbrian m. carlson, May 1, 2017
  54. 42/53 revision: convert remaining parse_object callers to object_idbrian m. carlson, May 1, 2017
  55. 43/53 upload-pack: convert remaining parse_object callers to object_idbrian m. carlson, May 1, 2017
  56. 47/53 sequencer: convert fast_forward_to to struct object_idbrian m. carlson, May 1, 2017
  57. 49/53 builtin/ls-tree: convert to struct object_idbrian m. carlson, May 1, 2017
  58. 51/53 sequencer: convert do_recursive_merge to struct object_idbrian m. carlson, May 1, 2017
  59. 45/53 builtin/read-tree: convert to struct object_idbrian m. carlson, May 1, 2017
  60. 44/53 sha1_name: convert internals of peel_onion to object_idbrian m. carlson, May 1, 2017
  61. 46/53 builtin/ls-files: convert overlay_tree_on_cache to object_idbrian m. carlson, May 1, 2017
  62. 52/53 tree: convert parse_tree_indirect to struct object_idbrian m. carlson, May 1, 2017
  63. 50/53 diff-lib: convert do_diff_cache to struct object_idbrian m. carlson, May 1, 2017
  64. 53/53 object: convert parse_object* to take struct object_idbrian m. carlson, May 1, 2017
  65. Jonathan TanMay 1, 2017
  66. 48/53 merge: convert checkout_fast_forward to struct object_idbrian m. carlson, May 1, 2017
  67. Stefan BellerMay 1, 2017
  68. Brandon WilliamsMay 2, 2017
  69. brian m. carlsonMay 4, 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.