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

[PATCH 14/41] submodule-config: convert structures to object_id

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Apr 23, 2018, 23:39 UTC
Message-ID
<20180423233951.276447-15-sandals@crustytoothpaste.net>
In-Reply-To
<20180423233951.276447-1-sandals@crustytoothpaste.net>

Convert struct submodule and struct parse_config_parameter to use struct object_id. Adjust the functions which take members of these structures as arguments to also use struct object_id. Include cache.h into submodule-config.h to make struct object_id visible.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 submodule-config.c | 66 +++++++++++++++++++++++-----------------------
 submodule-config.h |  7 ++---
 2 files changed, 37 insertions(+), 36 deletions(-)
diff --git a/submodule-config.c b/submodule-config.c
index 3f2075764f..5537c88727 100644
--- a/submodule-config.c
+++ b/submodule-config.c
@@ -44,7 +44,7 @@ static int config_path_cmp(const void *unused_cmp_data,
 	const struct submodule_entry *b = entry_or_key;
 
 	return strcmp(a->config->path, b->config->path) ||
-	       hashcmp(a->config->gitmodules_sha1, b->config->gitmodules_sha1);
+	       oidcmp(&a->config->gitmodules_oid, &b->config->gitmodules_oid);
 }
 
 static int config_name_cmp(const void *unused_cmp_data,
@@ -56,7 +56,7 @@ static int config_name_cmp(const void *unused_cmp_data,
 	const struct submodule_entry *b = entry_or_key;
 
 	return strcmp(a->config->name, b->config->name) ||
-	       hashcmp(a->config->gitmodules_sha1, b->config->gitmodules_sha1);
+	       oidcmp(&a->config->gitmodules_oid, &b->config->gitmodules_oid);
 }
 
 static struct submodule_cache *submodule_cache_alloc(void)
@@ -109,17 +109,17 @@ void submodule_cache_free(struct submodule_cache *cache)
 	free(cache);
 }
 
-static unsigned int hash_sha1_string(const unsigned char *sha1,
-				     const char *string)
+static unsigned int hash_oid_string(const struct object_id *oid,
+				    const char *string)
 {
-	return memhash(sha1, 20) + strhash(string);
+	return memhash(oid->hash, the_hash_algo->rawsz) + strhash(string);
 }
 
 static void cache_put_path(struct submodule_cache *cache,
 			   struct submodule *submodule)
 {
-	unsigned int hash = hash_sha1_string(submodule->gitmodules_sha1,
-					     submodule->path);
+	unsigned int hash = hash_oid_string(&submodule->gitmodules_oid,
+					    submodule->path);
 	struct submodule_entry *e = xmalloc(sizeof(*e));
 	hashmap_entry_init(e, hash);
 	e->config = submodule;
@@ -129,8 +129,8 @@ static void cache_put_path(struct submodule_cache *cache,
 static void cache_remove_path(struct submodule_cache *cache,
 			      struct submodule *submodule)
 {
-	unsigned int hash = hash_sha1_string(submodule->gitmodules_sha1,
-					     submodule->path);
+	unsigned int hash = hash_oid_string(&submodule->gitmodules_oid,
+					    submodule->path);
 	struct submodule_entry e;
 	struct submodule_entry *removed;
 	hashmap_entry_init(&e, hash);
@@ -142,8 +142,8 @@ static void cache_remove_path(struct submodule_cache *cache,
 static void cache_add(struct submodule_cache *cache,
 		      struct submodule *submodule)
 {
-	unsigned int hash = hash_sha1_string(submodule->gitmodules_sha1,
-					     submodule->name);
+	unsigned int hash = hash_oid_string(&submodule->gitmodules_oid,
+					    submodule->name);
 	struct submodule_entry *e = xmalloc(sizeof(*e));
 	hashmap_entry_init(e, hash);
 	e->config = submodule;
@@ -151,14 +151,14 @@ static void cache_add(struct submodule_cache *cache,
 }
 
 static const struct submodule *cache_lookup_path(struct submodule_cache *cache,
-		const unsigned char *gitmodules_sha1, const char *path)
+		const struct object_id *gitmodules_oid, const char *path)
 {
 	struct submodule_entry *entry;
-	unsigned int hash = hash_sha1_string(gitmodules_sha1, path);
+	unsigned int hash = hash_oid_string(gitmodules_oid, path);
 	struct submodule_entry key;
 	struct submodule key_config;
 
-	hashcpy(key_config.gitmodules_sha1, gitmodules_sha1);
+	oidcpy(&key_config.gitmodules_oid, gitmodules_oid);
 	key_config.path = path;
 
 	hashmap_entry_init(&key, hash);
@@ -171,14 +171,14 @@ static const struct submodule *cache_lookup_path(struct submodule_cache *cache,
 }
 
 static struct submodule *cache_lookup_name(struct submodule_cache *cache,
-		const unsigned char *gitmodules_sha1, const char *name)
+		const struct object_id *gitmodules_oid, const char *name)
 {
 	struct submodule_entry *entry;
-	unsigned int hash = hash_sha1_string(gitmodules_sha1, name);
+	unsigned int hash = hash_oid_string(gitmodules_oid, name);
 	struct submodule_entry key;
 	struct submodule key_config;
 
-	hashcpy(key_config.gitmodules_sha1, gitmodules_sha1);
+	oidcpy(&key_config.gitmodules_oid, gitmodules_oid);
 	key_config.name = name;
 
 	hashmap_entry_init(&key, hash);
@@ -207,12 +207,12 @@ static int name_and_item_from_var(const char *var, struct strbuf *name,
 }
 
 static struct submodule *lookup_or_create_by_name(struct submodule_cache *cache,
-		const unsigned char *gitmodules_sha1, const char *name)
+		const struct object_id *gitmodules_oid, const char *name)
 {
 	struct submodule *submodule;
 	struct strbuf name_buf = STRBUF_INIT;
 
-	submodule = cache_lookup_name(cache, gitmodules_sha1, name);
+	submodule = cache_lookup_name(cache, gitmodules_oid, name);
 	if (submodule)
 		return submodule;
 
@@ -230,7 +230,7 @@ static struct submodule *lookup_or_create_by_name(struct submodule_cache *cache,
 	submodule->branch = NULL;
 	submodule->recommend_shallow = -1;
 
-	hashcpy(submodule->gitmodules_sha1, gitmodules_sha1);
+	oidcpy(&submodule->gitmodules_oid, gitmodules_oid);
 
 	cache_add(cache, submodule);
 
@@ -341,12 +341,12 @@ int parse_push_recurse_submodules_arg(const char *opt, const char *arg)
 	return parse_push_recurse(opt, arg, 1);
 }
 
-static void warn_multiple_config(const unsigned char *treeish_name,
+static void warn_multiple_config(const struct object_id *treeish_name,
 				 const char *name, const char *option)
 {
 	const char *commit_string = "WORKTREE";
 	if (treeish_name)
-		commit_string = sha1_to_hex(treeish_name);
+		commit_string = oid_to_hex(treeish_name);
 	warning("%s:.gitmodules, multiple configurations found for "
 			"'submodule.%s.%s'. Skipping second one!",
 			commit_string, name, option);
@@ -354,8 +354,8 @@ static void warn_multiple_config(const unsigned char *treeish_name,
 
 struct parse_config_parameter {
 	struct submodule_cache *cache;
-	const unsigned char *treeish_name;
-	const unsigned char *gitmodules_sha1;
+	const struct object_id *treeish_name;
+	const struct object_id *gitmodules_oid;
 	int overwrite;
 };
 
@@ -371,7 +371,7 @@ static int parse_config(const char *var, const char *value, void *data)
 		return 0;
 
 	submodule = lookup_or_create_by_name(me->cache,
-					     me->gitmodules_sha1,
+					     me->gitmodules_oid,
 					     name.buf);
 
 	if (!strcmp(item.buf, "path")) {
@@ -389,7 +389,7 @@ static int parse_config(const char *var, const char *value, void *data)
 		}
 	} else if (!strcmp(item.buf, "fetchrecursesubmodules")) {
 		/* when parsing worktree configurations we can die early */
-		int die_on_error = is_null_sha1(me->gitmodules_sha1);
+		int die_on_error = is_null_oid(me->gitmodules_oid);
 		if (!me->overwrite &&
 		    submodule->fetch_recurse != RECURSE_SUBMODULES_NONE)
 			warn_multiple_config(me->treeish_name, submodule->name,
@@ -511,10 +511,10 @@ static const struct submodule *config_from(struct submodule_cache *cache,
 
 	switch (lookup_type) {
 	case lookup_name:
-		submodule = cache_lookup_name(cache, oid.hash, key);
+		submodule = cache_lookup_name(cache, &oid, key);
 		break;
 	case lookup_path:
-		submodule = cache_lookup_path(cache, oid.hash, key);
+		submodule = cache_lookup_path(cache, &oid, key);
 		break;
 	}
 	if (submodule)
@@ -526,8 +526,8 @@ static const struct submodule *config_from(struct submodule_cache *cache,
 
 	/* fill the submodule config into the cache */
 	parameter.cache = cache;
-	parameter.treeish_name = treeish_name->hash;
-	parameter.gitmodules_sha1 = oid.hash;
+	parameter.treeish_name = treeish_name;
+	parameter.gitmodules_oid = &oid;
 	parameter.overwrite = 0;
 	git_config_from_mem(parse_config, CONFIG_ORIGIN_SUBMODULE_BLOB, rev.buf,
 			config, config_size, &parameter);
@@ -536,9 +536,9 @@ static const struct submodule *config_from(struct submodule_cache *cache,
 
 	switch (lookup_type) {
 	case lookup_name:
-		return cache_lookup_name(cache, oid.hash, key);
+		return cache_lookup_name(cache, &oid, key);
 	case lookup_path:
-		return cache_lookup_path(cache, oid.hash, key);
+		return cache_lookup_path(cache, &oid, key);
 	default:
 		return NULL;
 	}
@@ -567,7 +567,7 @@ static int gitmodules_cb(const char *var, const char *value, void *data)
 
 	parameter.cache = repo->submodule_cache;
 	parameter.treeish_name = NULL;
-	parameter.gitmodules_sha1 = null_sha1;
+	parameter.gitmodules_oid = &null_oid;
 	parameter.overwrite = 1;
 
 	return parse_config(var, value, &parameter);
diff --git a/submodule-config.h b/submodule-config.h
index a5503a5d17..11729fbc74 100644
--- a/submodule-config.h
+++ b/submodule-config.h
@@ -1,6 +1,7 @@
 #ifndef SUBMODULE_CONFIG_CACHE_H
 #define SUBMODULE_CONFIG_CACHE_H
 
+#include "cache.h"
 #include "hashmap.h"
 #include "submodule.h"
 #include "strbuf.h"
@@ -17,13 +18,13 @@ struct submodule {
 	const char *ignore;
 	const char *branch;
 	struct submodule_update_strategy update_strategy;
-	/* the sha1 blob id of the responsible .gitmodules file */
-	unsigned char gitmodules_sha1[20];
+	/* the object id of the responsible .gitmodules file */
+	struct object_id gitmodules_oid;
 	int recommend_shallow;
 };
 
 #define SUBMODULE_INIT { NULL, NULL, NULL, RECURSE_SUBMODULES_NONE, \
-	NULL, NULL, SUBMODULE_UPDATE_STRATEGY_INIT, {0}, -1 };
+	NULL, NULL, SUBMODULE_UPDATE_STRATEGY_INIT, { { 0 } }, -1 };
 
 struct submodule_cache;
 struct repository;
Previous: brian m. carlsonNext: brian m. carlson
Message 65 of 76 in “object_id part 13”
  1. 00/41 object_id part 13brian m. carlson, Apr 23, 2018
  2. 01/41 cache: add a function to read an object ID from a bufferbrian m. carlson, Apr 23, 2018
  3. Martin ÅgrenApr 24, 2018
  4. Duy NguyenMay 1, 2018
  5. brian m. carlsonMay 1, 2018
  6. 02/41 server-info: remove unused members from struct pack_infobrian m. carlson, Apr 23, 2018
  7. Martin ÅgrenApr 24, 2018
  8. Duy NguyenMay 1, 2018
  9. 03/41 Remove unused member in struct object_contextbrian m. carlson, Apr 23, 2018
  10. Duy NguyenMay 1, 2018
  11. 04/41 packfile: remove unused member from struct pack_entrybrian m. carlson, Apr 23, 2018
  12. Duy NguyenMay 1, 2018
  13. 06/41 sha1_file: convert freshen functions to object_idbrian m. carlson, Apr 23, 2018
  14. 07/41 packfile: convert find_pack_entry to object_idbrian m. carlson, Apr 23, 2018
  15. 09/41 pack-objects: abstract away hash algorithmbrian m. carlson, Apr 23, 2018
  16. Duy NguyenMay 1, 2018
  17. 17/41 pack-redundant: convert linked lists to use struct object_idbrian m. carlson, Apr 23, 2018
  18. 16/41 Update struct index_state to use struct object_idbrian m. carlson, Apr 23, 2018
  19. 22/41 revision: replace use of hard-coded constantsbrian m. carlson, Apr 23, 2018
  20. 21/41 http: eliminate hard-coded constantsbrian m. carlson, Apr 23, 2018
  21. Martin ÅgrenApr 24, 2018
  22. Junio C HamanoApr 24, 2018
  23. brian m. carlsonApr 25, 2018
  24. 20/41 dir: convert struct untracked_cache_dir to object_idbrian m. carlson, Apr 23, 2018
  25. 25/41 builtin/receive-pack: avoid hard-coded constants for push certsbrian m. carlson, Apr 23, 2018
  26. Martin ÅgrenApr 24, 2018
  27. brian m. carlsonApr 25, 2018
  28. Martin ÅgrenApr 25, 2018
  29. 28/41 merge: convert empty tree constant to the_hash_algobrian m. carlson, Apr 23, 2018
  30. 36/41 sequencer: use the_hash_algo for empty tree object IDbrian m. carlson, Apr 23, 2018
  31. 34/41 sha1_file: convert cached object code to struct object_idbrian m. carlson, Apr 23, 2018
  32. 30/41 submodule: convert several uses of EMPTY_TREE_SHA1_HEXbrian m. carlson, Apr 23, 2018
  33. 40/41 add--interactive: compute the empty tree valuebrian m. carlson, Apr 23, 2018
  34. 39/41 Update shell scripts to compute empty tree object IDbrian m. carlson, Apr 23, 2018
  35. Duy NguyenMay 1, 2018
  36. brian m. carlsonMay 4, 2018
  37. 38/41 sha1_file: only expose empty object constants through git_hash_algobrian m. carlson, Apr 23, 2018
  38. 37/41 dir: use the_hash_algo for empty blob object IDbrian m. carlson, Apr 23, 2018
  39. 41/41 merge-one-file: compute empty blob object IDbrian m. carlson, Apr 23, 2018
  40. SZEDER GáborApr 24, 2018
  41. brian m. carlsonApr 24, 2018
  42. 35/41 cache-tree: use is_empty_tree_oidbrian m. carlson, Apr 23, 2018
  43. 33/41 builtin/reset: convert use of EMPTY_TREE_SHA1_BINbrian m. carlson, Apr 23, 2018
  44. 31/41 wt-status: convert two uses of EMPTY_TREE_SHA1_HEXbrian m. carlson, Apr 23, 2018
  45. Martin ÅgrenApr 24, 2018
  46. brian m. carlsonMay 1, 2018
  47. 32/41 builtin/receive-pack: convert one use of EMPTY_TREE_SHA1_HEXbrian m. carlson, Apr 23, 2018
  48. 29/41 sequencer: convert one use of EMPTY_TREE_SHA1_HEXbrian m. carlson, Apr 23, 2018
  49. 27/41 builtin/merge: switch tree functions to use object_idbrian m. carlson, Apr 23, 2018
  50. 23/41 upload-pack: replace use of several hard-coded constantsbrian m. carlson, Apr 23, 2018
  51. Simon RuderichApr 24, 2018
  52. 26/41 builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algobrian m. carlson, Apr 23, 2018
  53. 13/41 fsck: convert static functions to struct object_idbrian m. carlson, Apr 23, 2018
  54. 24/41 diff: specify abbreviation size in terms of the_hash_algobrian m. carlson, Apr 23, 2018
  55. 19/41 commit: convert uses of get_sha1_hex to get_oid_hexbrian m. carlson, Apr 23, 2018
  56. 05/41 packfile: convert has_sha1_pack to object_idbrian m. carlson, Apr 23, 2018
  57. 18/41 index-pack: abstract away hash function constantbrian m. carlson, Apr 23, 2018
  58. Martin ÅgrenApr 24, 2018
  59. brian m. carlsonApr 24, 2018
  60. Martin ÅgrenApr 25, 2018
  61. Duy NguyenApr 26, 2018
  62. brian m. carlsonApr 27, 2018
  63. Duy NguyenApr 28, 2018
  64. 15/41 split-index: convert struct split_index to object_idbrian m. carlson, Apr 23, 2018
  65. 14/41 submodule-config: convert structures to object_idbrian m. carlson, Apr 23, 2018
  66. 12/41 tree-walk: convert get_tree_entry_follow_symlinks to object_idbrian m. carlson, Apr 23, 2018
  67. 11/41 tree-walk: avoid hard-coded 20 constantbrian m. carlson, Apr 23, 2018
  68. 10/41 pack-redundant: abstract away hash algorithmbrian m. carlson, Apr 23, 2018
  69. 08/41 packfile: abstract away hash constant valuesbrian m. carlson, Apr 23, 2018
  70. Duy NguyenMay 1, 2018
  71. brian m. carlsonMay 2, 2018
  72. Duy NguyenMay 2, 2018
  73. brian m. carlsonMay 2, 2018
  74. Duy NguyenApr 30, 2018
  75. brian m. carlsonApr 30, 2018
  76. Duy NguyenMay 1, 2018

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.