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

[PATCH v2 06/10] midx: cleanup internal usage of `the_repository` and `the_hash_algo`

From
Karthik Nayak <karthik.188@gmail.com>
Date
Nov 19, 2024, 15:36 UTC
Message-ID
<20241119-374-refactor-midx-c-and-midx-write-c-to-not-depend-on-global-state-v2-6-e2f607174efc@gmail.com>
In-Reply-To
<20241119-374-refactor-midx-c-and-midx-write-c-to-not-depend-on-global-state-v2-0-e2f607174efc@gmail.com>

In the `midx.c` file, there are multiple usages of `the_repository` and `the_hash_algo` within static functions of the file. Some of the usages can be simply swapped out with the available `repository` struct. While some of them can be swapped out by passing the repository to the required functions.

This leaves out only some other usages of `the_repository` and `the_hash_algo` in the file in non-static functions, which we'll tackle in upcoming commits.

Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
---
 midx.c | 49 +++++++++++++++++++++++++++----------------------
 1 file changed, 27 insertions(+), 22 deletions(-)
diff --git a/midx.c b/midx.c
index 079c45a1aafb658a7b887ac216cc6ecf5f0fb6ff..6f0fb8285af14843da132ef1b0c3a8bdd06732c9 100644
--- a/midx.c
+++ b/midx.c
@@ -25,7 +25,7 @@ int cmp_idx_or_pack_name(const char *idx_or_pack_name,
 
 const unsigned char *get_midx_checksum(struct multi_pack_index *m)
 {
-	return m->data + m->data_len - the_hash_algo->rawsz;
+	return m->data + m->data_len - m->repo->hash_algo->rawsz;
 }
 
 void get_midx_filename(struct strbuf *out, const char *object_dir)
@@ -94,7 +94,8 @@ static int midx_read_object_offsets(const unsigned char *chunk_start,
 
 #define MIDX_MIN_SIZE (MIDX_HEADER_SIZE + the_hash_algo->rawsz)
 
-static struct multi_pack_index *load_multi_pack_index_one(const char *object_dir,
+static struct multi_pack_index *load_multi_pack_index_one(struct repository *r,
+							  const char *object_dir,
 							  const char *midx_name,
 							  int local)
 {
@@ -131,7 +132,7 @@ static struct multi_pack_index *load_multi_pack_index_one(const char *object_dir
 	m->data = midx_map;
 	m->data_len = midx_size;
 	m->local = local;
-	m->repo = the_repository;
+	m->repo = r;
 
 	m->signature = get_be32(m->data);
 	if (m->signature != MIDX_SIGNATURE)
@@ -144,12 +145,12 @@ static struct multi_pack_index *load_multi_pack_index_one(const char *object_dir
 		      m->version);
 
 	hash_version = m->data[MIDX_BYTE_HASH_VERSION];
-	if (hash_version != oid_version(the_hash_algo)) {
+	if (hash_version != oid_version(r->hash_algo)) {
 		error(_("multi-pack-index hash version %u does not match version %u"),
-		      hash_version, oid_version(the_hash_algo));
+		      hash_version, oid_version(r->hash_algo));
 		goto cleanup_fail;
 	}
-	m->hash_len = the_hash_algo->rawsz;
+	m->hash_len = r->hash_algo->rawsz;
 
 	m->num_chunks = m->data[MIDX_BYTE_NUM_CHUNKS];
 
@@ -206,8 +207,8 @@ static struct multi_pack_index *load_multi_pack_index_one(const char *object_dir
 			      m->pack_names[i]);
 	}
 
-	trace2_data_intmax("midx", the_repository, "load/num_packs", m->num_packs);
-	trace2_data_intmax("midx", the_repository, "load/num_objects", m->num_objects);
+	trace2_data_intmax("midx", r, "load/num_packs", m->num_packs);
+	trace2_data_intmax("midx", r, "load/num_objects", m->num_objects);
 
 	free_chunkfile(cf);
 	return m;
@@ -240,8 +241,9 @@ void get_split_midx_filename_ext(struct strbuf *buf, const char *object_dir,
 	strbuf_addf(buf, "/multi-pack-index-%s.%s", hash_to_hex(hash), ext);
 }
 
-static int open_multi_pack_index_chain(const char *chain_file,
-				       int *fd, struct stat *st)
+static int open_multi_pack_index_chain(const struct git_hash_algo *hash_algo,
+				       const char *chain_file, int *fd,
+				       struct stat *st)
 {
 	*fd = git_open(chain_file);
 	if (*fd < 0)
@@ -250,7 +252,7 @@ static int open_multi_pack_index_chain(const char *chain_file,
 		close(*fd);
 		return 0;
 	}
-	if (st->st_size < the_hash_algo->hexsz) {
+	if (st->st_size < hash_algo->hexsz) {
 		close(*fd);
 		if (!st->st_size) {
 			/* treat empty files the same as missing */
@@ -292,7 +294,8 @@ static int add_midx_to_chain(struct multi_pack_index *midx,
 	return 1;
 }
 
-static struct multi_pack_index *load_midx_chain_fd_st(const char *object_dir,
+static struct multi_pack_index *load_midx_chain_fd_st(struct repository *r,
+						      const char *object_dir,
 						      int local,
 						      int fd, struct stat *st,
 						      int *incomplete_chain)
@@ -303,7 +306,7 @@ static struct multi_pack_index *load_midx_chain_fd_st(const char *object_dir,
 	uint32_t i, count;
 	FILE *fp = xfdopen(fd, "r");
 
-	count = st->st_size / (the_hash_algo->hexsz + 1);
+	count = st->st_size / (r->hash_algo->hexsz + 1);
 
 	for (i = 0; i < count; i++) {
 		struct multi_pack_index *m;
@@ -312,7 +315,7 @@ static struct multi_pack_index *load_midx_chain_fd_st(const char *object_dir,
 		if (strbuf_getline_lf(&buf, fp) == EOF)
 			break;
 
-		if (get_oid_hex(buf.buf, &layer)) {
+		if (get_oid_hex_algop(buf.buf, &layer, r->hash_algo)) {
 			warning(_("invalid multi-pack-index chain: line '%s' "
 				  "not a hash"),
 				buf.buf);
@@ -325,7 +328,7 @@ static struct multi_pack_index *load_midx_chain_fd_st(const char *object_dir,
 		strbuf_reset(&buf);
 		get_split_midx_filename_ext(&buf, object_dir, layer.hash,
 					    MIDX_EXT_MIDX);
-		m = load_multi_pack_index_one(object_dir, buf.buf, local);
+		m = load_multi_pack_index_one(r, object_dir, buf.buf, local);
 
 		if (m) {
 			if (add_midx_to_chain(m, midx_chain)) {
@@ -348,7 +351,8 @@ static struct multi_pack_index *load_midx_chain_fd_st(const char *object_dir,
 	return midx_chain;
 }
 
-static struct multi_pack_index *load_multi_pack_index_chain(const char *object_dir,
+static struct multi_pack_index *load_multi_pack_index_chain(struct repository *r,
+							    const char *object_dir,
 							    int local)
 {
 	struct strbuf chain_file = STRBUF_INIT;
@@ -357,10 +361,10 @@ static struct multi_pack_index *load_multi_pack_index_chain(const char *object_d
 	struct multi_pack_index *m = NULL;
 
 	get_midx_chain_filename(&chain_file, object_dir);
-	if (open_multi_pack_index_chain(chain_file.buf, &fd, &st)) {
+	if (open_multi_pack_index_chain(r->hash_algo, chain_file.buf, &fd, &st)) {
 		int incomplete;
 		/* ownership of fd is taken over by load function */
-		m = load_midx_chain_fd_st(object_dir, local, fd, &st,
+		m = load_midx_chain_fd_st(r, object_dir, local, fd, &st,
 					  &incomplete);
 	}
 
@@ -376,9 +380,10 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir,
 
 	get_midx_filename(&midx_name, object_dir);
 
-	m = load_multi_pack_index_one(object_dir, midx_name.buf, local);
+	m = load_multi_pack_index_one(the_repository, object_dir,
+				      midx_name.buf, local);
 	if (!m)
-		m = load_multi_pack_index_chain(object_dir, local);
+		m = load_multi_pack_index_chain(the_repository, object_dir, local);
 
 	strbuf_release(&midx_name);
 
@@ -520,7 +525,7 @@ int bsearch_one_midx(const struct object_id *oid, struct multi_pack_index *m,
 		     uint32_t *result)
 {
 	int ret = bsearch_hash(oid->hash, m->chunk_oid_fanout,
-			       m->chunk_oid_lookup, the_hash_algo->rawsz,
+			       m->chunk_oid_lookup, m->repo->hash_algo->rawsz,
 			       result);
 	if (result)
 		*result += m->num_objects_in_base;
@@ -551,7 +556,7 @@ struct object_id *nth_midxed_object_oid(struct object_id *oid,
 	n = midx_for_object(&m, n);
 
 	oidread(oid, m->chunk_oid_lookup + st_mult(m->hash_len, n),
-		the_repository->hash_algo);
+		m->repo->hash_algo);
 	return oid;
 }
 
-- 
2.47.0
Previous: Taylor BlauNext: Karthik Nayak
Message 35 of 70 in “Change midx.c and midx-write.c to not use global variables”
  1. 0/8 Change midx.c and midx-write.c to not use global variablesKarthik Nayak, Nov 15, 2024
  2. 1/8 builtin: pass repository to sub commandsKarthik Nayak, Nov 15, 2024
  3. shejialuoNov 16, 2024
  4. Patrick SteinhardtNov 18, 2024
  5. karthik nayakNov 18, 2024
  6. 2/8 midx-write: add repository field to `write_midx_context`Karthik Nayak, Nov 15, 2024
  7. brian m. carlsonNov 15, 2024
  8. karthik nayakNov 18, 2024
  9. Patrick SteinhardtNov 18, 2024
  10. karthik nayakNov 18, 2024
  11. 3/8 midx-write: pass down repository to `write_midx_file[_only]`Karthik Nayak, Nov 15, 2024
  12. Patrick SteinhardtNov 18, 2024
  13. 4/8 midx: cleanup internal usage of `the_repository` and `the_hash_algo`Karthik Nayak, Nov 15, 2024
  14. Patrick SteinhardtNov 18, 2024
  15. karthik nayakNov 18, 2024
  16. 5/8 midx: pass `repository` to `load_multi_pack_index`Karthik Nayak, Nov 15, 2024
  17. 6/8 midx: pass down `hash_algo` to `get_midx_filename[_ext]`Karthik Nayak, Nov 15, 2024
  18. shejialuoNov 16, 2024
  19. karthik nayakNov 18, 2024
  20. shejialuoNov 19, 2024
  21. 7/8 midx: pass down `hash_algo` to `get_split_midx_filename_ext`Karthik Nayak, Nov 15, 2024
  22. shejialuoNov 16, 2024
  23. 8/8 midx: inline the `MIDX_MIN_SIZE` definitionKarthik Nayak, Nov 15, 2024
  24. karthik nayakNov 15, 2024
  25. 00/10 Change midx.c and midx-write.c to not use global variablesKarthik Nayak, Nov 19, 2024
  26. 01/10 builtin: pass repository to sub commandsKarthik Nayak, Nov 19, 2024
  27. 03/10 midx-write: use `revs->repo` inside `read_refs_snapshot`Karthik Nayak, Nov 19, 2024
  28. shejialuoNov 20, 2024
  29. Richard KerryNov 20, 2024
  30. Taylor BlauNov 20, 2024
  31. karthik nayakNov 21, 2024
  32. Taylor BlauNov 20, 2024
  33. 05/10 midx-write: pass down repository to `write_midx_file[_only]`Karthik Nayak, Nov 19, 2024
  34. Taylor BlauNov 20, 2024
  35. 06/10 midx: cleanup internal usage of `the_repository` and `the_hash_algo`Karthik Nayak, Nov 19, 2024
  36. 07/10 midx: pass `repository` to `load_multi_pack_index`Karthik Nayak, Nov 19, 2024
  37. 08/10 midx: pass down `hash_algo` to `get_midx_filename[_ext]`Karthik Nayak, Nov 19, 2024
  38. Christian CouderNov 20, 2024
  39. karthik nayakNov 21, 2024
  40. 10/10 midx: inline the `MIDX_MIN_SIZE` definitionKarthik Nayak, Nov 19, 2024
  41. shejialuoNov 20, 2024
  42. karthik nayakNov 21, 2024
  43. 09/10 midx: pass down `hash_algo` to `get_split_midx_filename_ext`Karthik Nayak, Nov 19, 2024
  44. Christian CouderNov 20, 2024
  45. Taylor BlauNov 20, 2024
  46. karthik nayakNov 21, 2024
  47. 02/10 midx-write: pass down repository to static functionsKarthik Nayak, Nov 19, 2024
  48. Christian CouderNov 20, 2024
  49. Taylor BlauNov 20, 2024
  50. karthik nayakNov 21, 2024
  51. Taylor BlauNov 20, 2024
  52. karthik nayakNov 21, 2024
  53. 04/10 write-midx: add repository field to `write_midx_context`Karthik Nayak, Nov 19, 2024
  54. Christian CouderNov 20, 2024
  55. Taylor BlauNov 20, 2024
  56. Junio C HamanoNov 21, 2024
  57. Junio C HamanoNov 21, 2024
  58. karthik nayakNov 22, 2024
  59. 0/8 Change midx.c and midx-write.c to not use global variablesKarthik Nayak, Nov 27, 2024
  60. 1/8 midx-write: pass down repository to static functionsKarthik Nayak, Nov 27, 2024
  61. 2/8 midx-write: use `revs->repo` inside `read_refs_snapshot`Karthik Nayak, Nov 27, 2024
  62. 3/8 write-midx: add repository field to `write_midx_context`Karthik Nayak, Nov 27, 2024
  63. 4/8 midx-write: pass down repository to `write_midx_file[_only]`Karthik Nayak, Nov 27, 2024
  64. 5/8 midx: cleanup internal usage of `the_repository` and `the_hash_algo`Karthik Nayak, Nov 27, 2024
  65. 6/8 midx: pass `repository` to `load_multi_pack_index`Karthik Nayak, Nov 27, 2024
  66. 7/8 midx: pass down `hash_algo` to functions using global variablesKarthik Nayak, Nov 27, 2024
  67. 8/8 midx: inline the `MIDX_MIN_SIZE` definitionKarthik Nayak, Nov 27, 2024
  68. Junio C HamanoNov 28, 2024
  69. Patrick SteinhardtDec 3, 2024
  70. Junio C HamanoDec 3, 2024

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.