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

[PATCH v3 38/53] refs: convert struct ref_update to use struct object_id

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
May 6, 2017, 22:10 UTC
Message-ID
<20170506221038.296722-39-sandals@crustytoothpaste.net>
In-Reply-To
<20170506221038.296722-1-sandals@crustytoothpaste.net>

Convert struct ref_array_item to use struct object_id by changing the definition and applying the following semantic patch, plus the standard object_id transforms:

@@
struct ref_update E1;
@@
- E1.new_sha1
+ E1.new_oid.hash
@@
struct ref_update *E1;
@@
- E1->new_sha1
+ E1->new_oid.hash
@@
struct ref_update E1;
@@
- E1.old_sha1
+ E1.old_oid.hash
@@
struct ref_update *E1;
@@
- E1->old_sha1
+ E1->old_oid.hash

This transformation allows us to convert write_ref_to_lockfile, which is required to convert parse_object.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 refs.c               |  4 ++--
 refs/files-backend.c | 29 +++++++++++++++--------------
 refs/refs-internal.h |  4 ++--
 3 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/refs.c b/refs.c
index df75f8e0d..c738f5911 100644
--- a/refs.c
+++ b/refs.c
@@ -882,9 +882,9 @@ struct ref_update *ref_transaction_add_update(
 	update->flags = flags;
 
 	if (flags & REF_HAVE_NEW)
-		hashcpy(update->new_sha1, new_sha1);
+		hashcpy(update->new_oid.hash, new_sha1);
 	if (flags & REF_HAVE_OLD)
-		hashcpy(update->old_sha1, old_sha1);
+		hashcpy(update->old_oid.hash, old_sha1);
 	update->msg = xstrdup_or_null(msg);
 	return update;
 }
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 298a838c5..413505ff0 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -2633,7 +2633,7 @@ static int split_head_update(struct ref_update *update,
 	new_update = ref_transaction_add_update(
 			transaction, "HEAD",
 			update->flags | REF_LOG_ONLY | REF_NODEREF,
-			update->new_sha1, update->old_sha1,
+			update->new_oid.hash, update->old_oid.hash,
 			update->msg);
 
 	item->util = new_update;
@@ -2690,7 +2690,7 @@ static int split_symref_update(struct files_ref_store *refs,
 
 	new_update = ref_transaction_add_update(
 			transaction, referent, new_flags,
-			update->new_sha1, update->old_sha1,
+			update->new_oid.hash, update->old_oid.hash,
 			update->msg);
 
 	new_update->parent_update = update;
@@ -2729,10 +2729,10 @@ static int check_old_oid(struct ref_update *update, struct object_id *oid,
 			 struct strbuf *err)
 {
 	if (!(update->flags & REF_HAVE_OLD) ||
-		   !hashcmp(oid->hash, update->old_sha1))
+		   !oidcmp(oid, &update->old_oid))
 		return 0;
 
-	if (is_null_sha1(update->old_sha1))
+	if (is_null_oid(&update->old_oid))
 		strbuf_addf(err, "cannot lock ref '%s': "
 			    "reference already exists",
 			    original_update_refname(update));
@@ -2740,13 +2740,13 @@ static int check_old_oid(struct ref_update *update, struct object_id *oid,
 		strbuf_addf(err, "cannot lock ref '%s': "
 			    "reference is missing but expected %s",
 			    original_update_refname(update),
-			    sha1_to_hex(update->old_sha1));
+			    oid_to_hex(&update->old_oid));
 	else
 		strbuf_addf(err, "cannot lock ref '%s': "
 			    "is at %s but expected %s",
 			    original_update_refname(update),
 			    oid_to_hex(oid),
-			    sha1_to_hex(update->old_sha1));
+			    oid_to_hex(&update->old_oid));
 
 	return -1;
 }
@@ -2773,13 +2773,13 @@ static int lock_ref_for_update(struct files_ref_store *refs,
 {
 	struct strbuf referent = STRBUF_INIT;
 	int mustexist = (update->flags & REF_HAVE_OLD) &&
-		!is_null_sha1(update->old_sha1);
+		!is_null_oid(&update->old_oid);
 	int ret;
 	struct ref_lock *lock;
 
 	files_assert_main_repository(refs, "lock_ref_for_update");
 
-	if ((update->flags & REF_HAVE_NEW) && is_null_sha1(update->new_sha1))
+	if ((update->flags & REF_HAVE_NEW) && is_null_oid(&update->new_oid))
 		update->flags |= REF_DELETING;
 
 	if (head_ref) {
@@ -2861,12 +2861,12 @@ static int lock_ref_for_update(struct files_ref_store *refs,
 	    !(update->flags & REF_DELETING) &&
 	    !(update->flags & REF_LOG_ONLY)) {
 		if (!(update->type & REF_ISSYMREF) &&
-		    !hashcmp(lock->old_oid.hash, update->new_sha1)) {
+		    !oidcmp(&lock->old_oid, &update->new_oid)) {
 			/*
 			 * The reference already has the desired
 			 * value, so we don't need to write it.
 			 */
-		} else if (write_ref_to_lockfile(lock, update->new_sha1,
+		} else if (write_ref_to_lockfile(lock, update->new_oid.hash,
 						 err)) {
 			char *write_err = strbuf_detach(err, NULL);
 
@@ -3002,7 +3002,7 @@ static int files_transaction_commit(struct ref_store *ref_store,
 			if (files_log_ref_write(refs,
 						lock->ref_name,
 						lock->old_oid.hash,
-						update->new_sha1,
+						update->new_oid.hash,
 						update->msg, update->flags,
 						err)) {
 				char *old_msg = strbuf_detach(err, NULL);
@@ -3151,7 +3151,7 @@ static int files_initial_transaction_commit(struct ref_store *ref_store,
 		struct ref_update *update = transaction->updates[i];
 
 		if ((update->flags & REF_HAVE_OLD) &&
-		    !is_null_sha1(update->old_sha1))
+		    !is_null_oid(&update->old_oid))
 			die("BUG: initial ref transaction with old_sha1 set");
 		if (refs_verify_refname_available(&refs->base, update->refname,
 						  &affected_refnames, NULL,
@@ -3172,8 +3172,9 @@ static int files_initial_transaction_commit(struct ref_store *ref_store,
 		struct ref_update *update = transaction->updates[i];
 
 		if ((update->flags & REF_HAVE_NEW) &&
-		    !is_null_sha1(update->new_sha1))
-			add_packed_ref(refs, update->refname, update->new_sha1);
+		    !is_null_oid(&update->new_oid))
+			add_packed_ref(refs, update->refname,
+				       update->new_oid.hash);
 	}
 
 	if (commit_packed_refs(refs)) {
diff --git a/refs/refs-internal.h b/refs/refs-internal.h
index 3d46131ef..b267d5ca9 100644
--- a/refs/refs-internal.h
+++ b/refs/refs-internal.h
@@ -130,13 +130,13 @@ struct ref_update {
 	/*
 	 * If (flags & REF_HAVE_NEW), set the reference to this value:
 	 */
-	unsigned char new_sha1[20];
+	struct object_id new_oid;
 
 	/*
 	 * If (flags & REF_HAVE_OLD), check that the reference
 	 * previously had this value:
 	 */
-	unsigned char old_sha1[20];
+	struct object_id old_oid;
 
 	/*
 	 * One or more of REF_HAVE_NEW, REF_HAVE_OLD, REF_NODEREF,
Previous: brian m. carlsonNext: brian m. carlson
Message 39 of 56 in “object_id part 8”
  1. 00/53 object_id part 8brian m. carlson, May 6, 2017
  2. 02/53 Clean up outstanding object_id transforms.brian m. carlson, May 6, 2017
  3. 01/53 fetch-pack: convert to struct object_idbrian m. carlson, May 6, 2017
  4. 03/53 Convert struct cache_tree to use struct object_idbrian m. carlson, May 6, 2017
  5. 04/53 builtin/name-rev: convert to struct object_idbrian m. carlson, May 6, 2017
  6. 05/53 builtin/prune: convert to struct object_idbrian m. carlson, May 6, 2017
  7. 07/53 branch: convert to struct object_idbrian m. carlson, May 6, 2017
  8. 06/53 bundle: convert to struct object_idbrian m. carlson, May 6, 2017
  9. 08/53 builtin/blame: convert static function to struct object_idbrian m. carlson, May 6, 2017
  10. 09/53 builtin/rev-parse: convert to struct object_idbrian m. carlson, May 6, 2017
  11. 10/53 fast-import: convert internal structs to struct object_idbrian m. carlson, May 6, 2017
  12. 12/53 submodule: convert merge_submodule to use struct object_idbrian m. carlson, May 6, 2017
  13. 11/53 fast-import: convert to struct object_idbrian m. carlson, May 6, 2017
  14. 13/53 notes-cache: convert to struct object_idbrian m. carlson, May 6, 2017
  15. 14/53 parse-options-cb: convert to struct object_idbrian m. carlson, May 6, 2017
  16. 15/53 reflog_expire: convert to struct object_idbrian m. carlson, May 6, 2017
  17. 16/53 builtin/verify-commit: convert to struct object_idbrian m. carlson, May 6, 2017
  18. 17/53 tag: convert parse_tag_buffer to struct object_idbrian m. carlson, May 6, 2017
  19. 18/53 http-push: convert some static functions to struct object_idbrian m. carlson, May 6, 2017
  20. 19/53 notes-utils: convert internals to struct object_idbrian m. carlson, May 6, 2017
  21. 22/53 sequencer: convert some functions to struct object_idbrian m. carlson, May 6, 2017
  22. 20/53 revision: convert prepare_show_merge to struct object_idbrian m. carlson, May 6, 2017
  23. 23/53 builtin/tag: convert to struct object_idbrian m. carlson, May 6, 2017
  24. 24/53 Convert remaining callers of lookup_commit_reference* to object_idbrian m. carlson, May 6, 2017
  25. 26/53 pack: convert struct pack_idx_entry to struct object_idbrian m. carlson, May 6, 2017
  26. 25/53 Convert lookup_commit* to struct object_idbrian m. carlson, May 6, 2017
  27. 27/53 builtin/unpack-objects: convert to struct object_idbrian m. carlson, May 6, 2017
  28. 28/53 Convert remaining callers of lookup_blob to object_idbrian m. carlson, May 6, 2017
  29. 21/53 shallow: convert shallow registration functions to object_idbrian m. carlson, May 6, 2017
  30. 31/53 builtin/reflog: convert tree_is_complete to take struct object_idbrian m. carlson, May 6, 2017
  31. 30/53 tree: convert read_tree_1 to use struct object_id internallybrian m. carlson, May 6, 2017
  32. 29/53 Convert lookup_blob to struct object_idbrian m. carlson, May 6, 2017
  33. 33/53 log-tree: convert to struct object_idbrian m. carlson, May 6, 2017
  34. 32/53 Convert lookup_tree to struct object_idbrian m. carlson, May 6, 2017
  35. 34/53 Convert lookup_tag to struct object_idbrian m. carlson, May 6, 2017
  36. 36/53 Convert struct ref_array_item to struct object_idbrian m. carlson, May 6, 2017
  37. 35/53 Convert the verify_pack callback to struct object_idbrian m. carlson, May 6, 2017
  38. 37/53 ref-filter: convert some static functions to struct object_idbrian m. carlson, May 6, 2017
  39. 38/53 refs: convert struct ref_update to use struct object_idbrian m. carlson, May 6, 2017
  40. 39/53 refs/files-backend: convert many internals to struct object_idbrian m. carlson, May 6, 2017
  41. 41/53 revision: rename add_pending_sha1 to add_pending_oidbrian m. carlson, May 6, 2017
  42. 42/53 revision: convert remaining parse_object callers to object_idbrian m. carlson, May 6, 2017
  43. 40/53 http-push: convert process_ls_object and descendants to object_idbrian m. carlson, May 6, 2017
  44. 43/53 upload-pack: convert remaining parse_object callers to object_idbrian m. carlson, May 6, 2017
  45. 44/53 sha1_name: convert internals of peel_onion to object_idbrian m. carlson, May 6, 2017
  46. 45/53 builtin/read-tree: convert to struct object_idbrian m. carlson, May 6, 2017
  47. 47/53 sequencer: convert fast_forward_to to struct object_idbrian m. carlson, May 6, 2017
  48. 48/53 merge: convert checkout_fast_forward to struct object_idbrian m. carlson, May 6, 2017
  49. 49/53 builtin/ls-tree: convert to struct object_idbrian m. carlson, May 6, 2017
  50. 51/53 sequencer: convert do_recursive_merge to struct object_idbrian m. carlson, May 6, 2017
  51. 52/53 tree: convert parse_tree_indirect to struct object_idbrian m. carlson, May 6, 2017
  52. 46/53 builtin/ls-files: convert overlay_tree_on_cache to object_idbrian m. carlson, May 6, 2017
  53. 50/53 diff-lib: convert do_diff_cache to struct object_idbrian m. carlson, May 6, 2017
  54. 53/53 object: convert parse_object* to take struct object_idbrian m. carlson, May 6, 2017
  55. Jonathan TanMay 8, 2017
  56. Brandon WilliamsMay 9, 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.