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

[PATCH v2 11/21] sha1_name: convert struct disambiguate_state to object_id

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Mar 26, 2017, 16:01 UTC
Message-ID
<20170326160143.769630-12-sandals@crustytoothpaste.net>
In-Reply-To
<20170326160143.769630-1-sandals@crustytoothpaste.net>

Convert struct disambiguate_state to use struct object_id by changing the structure definition and applying the following semantic patch:

@@
struct disambiguate_state E1;
@@
- E1.bin_pfx
+ E1.bin_pfx.hash
@@
struct disambiguate_state *E1;
@@
- E1->bin_pfx
+ E1->bin_pfx.hash
@@
struct disambiguate_state E1;
@@
- E1.candidate
+ E1.candidate.hash
@@
struct disambiguate_state *E1;
@@
- E1->candidate
+ E1->candidate.hash
This conversion is needed so we can convert disambiguate_hint_fn later.
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 sha1_name.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/sha1_name.c b/sha1_name.c
index 3db166b40b..cf6f4be0c6 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -16,11 +16,11 @@ typedef int (*disambiguate_hint_fn)(const unsigned char *, void *);
 struct disambiguate_state {
 	int len; /* length of prefix in hex chars */
 	char hex_pfx[GIT_MAX_HEXSZ + 1];
-	unsigned char bin_pfx[GIT_MAX_RAWSZ];
+	struct object_id bin_pfx;
 
 	disambiguate_hint_fn fn;
 	void *cb_data;
-	unsigned char candidate[GIT_MAX_RAWSZ];
+	struct object_id candidate;
 	unsigned candidate_exists:1;
 	unsigned candidate_checked:1;
 	unsigned candidate_ok:1;
@@ -37,10 +37,10 @@ static void update_candidates(struct disambiguate_state *ds, const unsigned char
 	}
 	if (!ds->candidate_exists) {
 		/* this is the first candidate */
-		hashcpy(ds->candidate, current);
+		hashcpy(ds->candidate.hash, current);
 		ds->candidate_exists = 1;
 		return;
-	} else if (!hashcmp(ds->candidate, current)) {
+	} else if (!hashcmp(ds->candidate.hash, current)) {
 		/* the same as what we already have seen */
 		return;
 	}
@@ -52,14 +52,14 @@ static void update_candidates(struct disambiguate_state *ds, const unsigned char
 	}
 
 	if (!ds->candidate_checked) {
-		ds->candidate_ok = ds->fn(ds->candidate, ds->cb_data);
+		ds->candidate_ok = ds->fn(ds->candidate.hash, ds->cb_data);
 		ds->disambiguate_fn_used = 1;
 		ds->candidate_checked = 1;
 	}
 
 	if (!ds->candidate_ok) {
 		/* discard the candidate; we know it does not satisfy fn */
-		hashcpy(ds->candidate, current);
+		hashcpy(ds->candidate.hash, current);
 		ds->candidate_checked = 0;
 		return;
 	}
@@ -151,7 +151,7 @@ static void unique_in_pack(struct packed_git *p,
 		int cmp;
 
 		current = nth_packed_object_sha1(p, mid);
-		cmp = hashcmp(ds->bin_pfx, current);
+		cmp = hashcmp(ds->bin_pfx.hash, current);
 		if (!cmp) {
 			first = mid;
 			break;
@@ -170,7 +170,7 @@ static void unique_in_pack(struct packed_git *p,
 	 */
 	for (i = first; i < num && !ds->ambiguous; i++) {
 		current = nth_packed_object_sha1(p, i);
-		if (!match_sha(ds->len, ds->bin_pfx, current))
+		if (!match_sha(ds->len, ds->bin_pfx.hash, current))
 			break;
 		update_candidates(ds, current);
 	}
@@ -213,12 +213,12 @@ static int finish_object_disambiguation(struct disambiguate_state *ds,
 		 * same repository!
 		 */
 		ds->candidate_ok = (!ds->disambiguate_fn_used ||
-				    ds->fn(ds->candidate, ds->cb_data));
+				    ds->fn(ds->candidate.hash, ds->cb_data));
 
 	if (!ds->candidate_ok)
 		return SHORT_NAME_AMBIGUOUS;
 
-	hashcpy(sha1, ds->candidate);
+	hashcpy(sha1, ds->candidate.hash);
 	return 0;
 }
 
@@ -332,7 +332,7 @@ static int init_object_disambiguation(const char *name, int len,
 		ds->hex_pfx[i] = c;
 		if (!(i & 1))
 			val <<= 4;
-		ds->bin_pfx[i >> 1] |= val;
+		ds->bin_pfx.hash[i >> 1] |= val;
 	}
 
 	ds->len = len;
Previous: brian m. carlsonNext: brian m. carlson
Message 28 of 40 in “object_id part 7”
  1. 00/21 object_id part 7brian m. carlson, Mar 26, 2017
  2. 08/21 fsck: convert init_skiplist to struct object_idbrian m. carlson, Mar 26, 2017
  3. 12/21 sha1_name: convert disambiguate_hint_fn to take object_idbrian m. carlson, Mar 26, 2017
  4. 16/21 Make sha1_array_append take a struct object_id *brian m. carlson, Mar 26, 2017
  5. Jeff KingMar 28, 2017
  6. Junio C HamanoMar 28, 2017
  7. brian m. carlsonMar 29, 2017
  8. Junio C HamanoMar 29, 2017
  9. brian m. carlsonMar 29, 2017
  10. 09/21 parse-options-cb: convert sha1_array_append caller to struct object_idbrian m. carlson, Mar 26, 2017
  11. 18/21 Convert sha1_array_lookup to take struct object_idbrian m. carlson, Mar 26, 2017
  12. 17/21 Convert remaining callers of sha1_array_lookup to object_idbrian m. carlson, Mar 26, 2017
  13. 10/21 test-sha1-array: convert most code to struct object_idbrian m. carlson, Mar 26, 2017
  14. 21/21 Documentation: update and rename api-sha1-array.txtbrian m. carlson, Mar 26, 2017
  15. 07/21 builtin/receive-pack: convert portions to struct object_idbrian m. carlson, Mar 26, 2017
  16. Jeff KingMar 28, 2017
  17. brian m. carlsonMar 29, 2017
  18. Jeff KingMar 30, 2017
  19. 20/21 Rename sha1_array to oid_arraybrian m. carlson, Mar 26, 2017
  20. 05/21 builtin/pull: convert portions to struct object_idbrian m. carlson, Mar 26, 2017
  21. 19/21 Convert sha1_array_for_each_unique and for_each_abbrev to object_idbrian m. carlson, Mar 26, 2017
  22. 06/21 builtin/receive-pack: fix incorrect pointer arithmeticbrian m. carlson, Mar 26, 2017
  23. Jeff KingMar 28, 2017
  24. Junio C HamanoMar 28, 2017
  25. 14/21 builtin/pull: convert to struct object_idbrian m. carlson, Mar 26, 2017
  26. 01/21 Define new hash-size constants for allocating memorybrian m. carlson, Mar 26, 2017
  27. 03/21 Convert GIT_SHA1_RAWSZ used for allocation to GIT_MAX_RAWSZbrian m. carlson, Mar 26, 2017
  28. 11/21 sha1_name: convert struct disambiguate_state to object_idbrian m. carlson, Mar 26, 2017
  29. 15/21 sha1-array: convert internal storage for struct sha1_array to object_idbrian m. carlson, Mar 26, 2017
  30. Jeff KingMar 28, 2017
  31. 13/21 submodule: convert check_for_new_submodule_commits to object_idbrian m. carlson, Mar 26, 2017
  32. 02/21 Convert GIT_SHA1_HEXSZ used for allocation to GIT_MAX_HEXSZbrian m. carlson, Mar 26, 2017
  33. 04/21 builtin/diff: convert to struct object_idbrian m. carlson, Mar 26, 2017
  34. Jeff KingMar 28, 2017
  35. brian m. carlsonMar 28, 2017
  36. Jeff KingMar 28, 2017
  37. Jeff KingMar 28, 2017
  38. Junio C HamanoMar 28, 2017
  39. Jeff KingMar 28, 2017
  40. Junio C HamanoMar 28, 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.