midx: pass down `hash_algo` to functions using global variables
The functions `get_split_midx_filename_ext()`, `get_midx_filename()` and `get_midx_filename_ext()` use `hash_to_hex()` which internally uses the `the_hash_algo` global variable. Remove this dependency on global variables by passing down the `hash_algo` through to the functions mentioned and instead calling `hash_to_hex_algop()` along with the obtained `hash_algo`. Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									d5c2ca576a
								
							
						
					
					
						commit
						f59de71cf7
					
				
							
								
								
									
										22
									
								
								midx-write.c
								
								
								
								
							
							
						
						
									
										22
									
								
								midx-write.c
								
								
								
								
							|  | @ -991,9 +991,10 @@ static int link_midx_to_chain(struct multi_pack_index *m) | ||||||
| 	for (i = 0; i < ARRAY_SIZE(midx_exts); i++) { | 	for (i = 0; i < ARRAY_SIZE(midx_exts); i++) { | ||||||
| 		const unsigned char *hash = get_midx_checksum(m); | 		const unsigned char *hash = get_midx_checksum(m); | ||||||
|  |  | ||||||
| 		get_midx_filename_ext(&from, m->object_dir, hash, | 		get_midx_filename_ext(m->repo->hash_algo, &from, m->object_dir, | ||||||
| 				      midx_exts[i].non_split); | 				      hash, midx_exts[i].non_split); | ||||||
| 		get_split_midx_filename_ext(&to, m->object_dir, hash, | 		get_split_midx_filename_ext(m->repo->hash_algo, &to, | ||||||
|  | 					    m->object_dir, hash, | ||||||
| 					    midx_exts[i].split); | 					    midx_exts[i].split); | ||||||
|  |  | ||||||
| 		if (link(from.buf, to.buf) < 0 && errno != ENOENT) { | 		if (link(from.buf, to.buf) < 0 && errno != ENOENT) { | ||||||
|  | @ -1012,9 +1013,8 @@ done: | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| static void clear_midx_files(const char *object_dir, | static void clear_midx_files(struct repository *r, const char *object_dir, | ||||||
| 			     const char **hashes, | 			     const char **hashes, uint32_t hashes_nr, | ||||||
| 			     uint32_t hashes_nr, |  | ||||||
| 			     unsigned incremental) | 			     unsigned incremental) | ||||||
| { | { | ||||||
| 	/* | 	/* | ||||||
|  | @ -1039,7 +1039,7 @@ static void clear_midx_files(const char *object_dir, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (incremental) | 	if (incremental) | ||||||
| 		get_midx_filename(&buf, object_dir); | 		get_midx_filename(r->hash_algo, &buf, object_dir); | ||||||
| 	else | 	else | ||||||
| 		get_midx_chain_filename(&buf, object_dir); | 		get_midx_chain_filename(&buf, object_dir); | ||||||
|  |  | ||||||
|  | @ -1083,7 +1083,7 @@ static int write_midx_internal(struct repository *r, const char *object_dir, | ||||||
| 			    "%s/pack/multi-pack-index.d/tmp_midx_XXXXXX", | 			    "%s/pack/multi-pack-index.d/tmp_midx_XXXXXX", | ||||||
| 			    object_dir); | 			    object_dir); | ||||||
| 	else | 	else | ||||||
| 		get_midx_filename(&midx_name, object_dir); | 		get_midx_filename(r->hash_algo, &midx_name, object_dir); | ||||||
| 	if (safe_create_leading_directories(midx_name.buf)) | 	if (safe_create_leading_directories(midx_name.buf)) | ||||||
| 		die_errno(_("unable to create leading directories of %s"), | 		die_errno(_("unable to create leading directories of %s"), | ||||||
| 			  midx_name.buf); | 			  midx_name.buf); | ||||||
|  | @ -1440,8 +1440,8 @@ static int write_midx_internal(struct repository *r, const char *object_dir, | ||||||
| 		if (link_midx_to_chain(ctx.base_midx) < 0) | 		if (link_midx_to_chain(ctx.base_midx) < 0) | ||||||
| 			return -1; | 			return -1; | ||||||
|  |  | ||||||
| 		get_split_midx_filename_ext(&final_midx_name, object_dir, | 		get_split_midx_filename_ext(r->hash_algo, &final_midx_name, | ||||||
| 					    midx_hash, MIDX_EXT_MIDX); | 					    object_dir, midx_hash, MIDX_EXT_MIDX); | ||||||
|  |  | ||||||
| 		if (rename_tempfile(&incr, final_midx_name.buf) < 0) { | 		if (rename_tempfile(&incr, final_midx_name.buf) < 0) { | ||||||
| 			error_errno(_("unable to rename new multi-pack-index layer")); | 			error_errno(_("unable to rename new multi-pack-index layer")); | ||||||
|  | @ -1474,7 +1474,7 @@ static int write_midx_internal(struct repository *r, const char *object_dir, | ||||||
| 	if (commit_lock_file(&lk) < 0) | 	if (commit_lock_file(&lk) < 0) | ||||||
| 		die_errno(_("could not write multi-pack-index")); | 		die_errno(_("could not write multi-pack-index")); | ||||||
|  |  | ||||||
| 	clear_midx_files(object_dir, keep_hashes, | 	clear_midx_files(r, object_dir, keep_hashes, | ||||||
| 			 ctx.num_multi_pack_indexes_before + 1, | 			 ctx.num_multi_pack_indexes_before + 1, | ||||||
| 			 ctx.incremental); | 			 ctx.incremental); | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										26
									
								
								midx.c
								
								
								
								
							
							
						
						
									
										26
									
								
								midx.c
								
								
								
								
							|  | @ -28,17 +28,19 @@ const unsigned char *get_midx_checksum(struct multi_pack_index *m) | ||||||
| 	return m->data + m->data_len - m->repo->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) | void get_midx_filename(const struct git_hash_algo *hash_algo, | ||||||
|  | 		       struct strbuf *out, const char *object_dir) | ||||||
| { | { | ||||||
| 	get_midx_filename_ext(out, object_dir, NULL, NULL); | 	get_midx_filename_ext(hash_algo, out, object_dir, NULL, NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
| void get_midx_filename_ext(struct strbuf *out, const char *object_dir, | void get_midx_filename_ext(const struct git_hash_algo *hash_algo, | ||||||
|  | 			   struct strbuf *out, const char *object_dir, | ||||||
| 			   const unsigned char *hash, const char *ext) | 			   const unsigned char *hash, const char *ext) | ||||||
| { | { | ||||||
| 	strbuf_addf(out, "%s/pack/multi-pack-index", object_dir); | 	strbuf_addf(out, "%s/pack/multi-pack-index", object_dir); | ||||||
| 	if (ext) | 	if (ext) | ||||||
| 		strbuf_addf(out, "-%s.%s", hash_to_hex(hash), ext); | 		strbuf_addf(out, "-%s.%s", hash_to_hex_algop(hash, hash_algo), ext); | ||||||
| } | } | ||||||
|  |  | ||||||
| static int midx_read_oid_fanout(const unsigned char *chunk_start, | static int midx_read_oid_fanout(const unsigned char *chunk_start, | ||||||
|  | @ -234,11 +236,13 @@ void get_midx_chain_filename(struct strbuf *buf, const char *object_dir) | ||||||
| 	strbuf_addstr(buf, "/multi-pack-index-chain"); | 	strbuf_addstr(buf, "/multi-pack-index-chain"); | ||||||
| } | } | ||||||
|  |  | ||||||
| void get_split_midx_filename_ext(struct strbuf *buf, const char *object_dir, | void get_split_midx_filename_ext(const struct git_hash_algo *hash_algo, | ||||||
|  | 				 struct strbuf *buf, const char *object_dir, | ||||||
| 				 const unsigned char *hash, const char *ext) | 				 const unsigned char *hash, const char *ext) | ||||||
| { | { | ||||||
| 	get_midx_chain_dirname(buf, object_dir); | 	get_midx_chain_dirname(buf, object_dir); | ||||||
| 	strbuf_addf(buf, "/multi-pack-index-%s.%s", hash_to_hex(hash), ext); | 	strbuf_addf(buf, "/multi-pack-index-%s.%s", | ||||||
|  | 		    hash_to_hex_algop(hash, hash_algo), ext); | ||||||
| } | } | ||||||
|  |  | ||||||
| static int open_multi_pack_index_chain(const struct git_hash_algo *hash_algo, | static int open_multi_pack_index_chain(const struct git_hash_algo *hash_algo, | ||||||
|  | @ -326,8 +330,8 @@ static struct multi_pack_index *load_midx_chain_fd_st(struct repository *r, | ||||||
| 		valid = 0; | 		valid = 0; | ||||||
|  |  | ||||||
| 		strbuf_reset(&buf); | 		strbuf_reset(&buf); | ||||||
| 		get_split_midx_filename_ext(&buf, object_dir, layer.hash, | 		get_split_midx_filename_ext(r->hash_algo, &buf, object_dir, | ||||||
| 					    MIDX_EXT_MIDX); | 					    layer.hash, MIDX_EXT_MIDX); | ||||||
| 		m = load_multi_pack_index_one(r, object_dir, buf.buf, local); | 		m = load_multi_pack_index_one(r, object_dir, buf.buf, local); | ||||||
|  |  | ||||||
| 		if (m) { | 		if (m) { | ||||||
|  | @ -379,7 +383,7 @@ struct multi_pack_index *load_multi_pack_index(struct repository *r, | ||||||
| 	struct strbuf midx_name = STRBUF_INIT; | 	struct strbuf midx_name = STRBUF_INIT; | ||||||
| 	struct multi_pack_index *m; | 	struct multi_pack_index *m; | ||||||
|  |  | ||||||
| 	get_midx_filename(&midx_name, object_dir); | 	get_midx_filename(r->hash_algo, &midx_name, object_dir); | ||||||
|  |  | ||||||
| 	m = load_multi_pack_index_one(r, object_dir, | 	m = load_multi_pack_index_one(r, object_dir, | ||||||
| 				      midx_name.buf, local); | 				      midx_name.buf, local); | ||||||
|  | @ -822,7 +826,7 @@ void clear_midx_file(struct repository *r) | ||||||
| { | { | ||||||
| 	struct strbuf midx = STRBUF_INIT; | 	struct strbuf midx = STRBUF_INIT; | ||||||
|  |  | ||||||
| 	get_midx_filename(&midx, r->objects->odb->path); | 	get_midx_filename(r->hash_algo, &midx, r->objects->odb->path); | ||||||
|  |  | ||||||
| 	if (r->objects && r->objects->multi_pack_index) { | 	if (r->objects && r->objects->multi_pack_index) { | ||||||
| 		close_midx(r->objects->multi_pack_index); | 		close_midx(r->objects->multi_pack_index); | ||||||
|  | @ -891,7 +895,7 @@ int verify_midx_file(struct repository *r, const char *object_dir, unsigned flag | ||||||
| 		struct stat sb; | 		struct stat sb; | ||||||
| 		struct strbuf filename = STRBUF_INIT; | 		struct strbuf filename = STRBUF_INIT; | ||||||
|  |  | ||||||
| 		get_midx_filename(&filename, object_dir); | 		get_midx_filename(r->hash_algo, &filename, object_dir); | ||||||
|  |  | ||||||
| 		if (!stat(filename.buf, &sb)) { | 		if (!stat(filename.buf, &sb)) { | ||||||
| 			error(_("multi-pack-index file exists, but failed to parse")); | 			error(_("multi-pack-index file exists, but failed to parse")); | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								midx.h
								
								
								
								
							
							
						
						
									
										10
									
								
								midx.h
								
								
								
								
							|  | @ -7,6 +7,7 @@ struct object_id; | ||||||
| struct pack_entry; | struct pack_entry; | ||||||
| struct repository; | struct repository; | ||||||
| struct bitmapped_pack; | struct bitmapped_pack; | ||||||
|  | struct git_hash_algo; | ||||||
|  |  | ||||||
| #define MIDX_SIGNATURE 0x4d494458 /* "MIDX" */ | #define MIDX_SIGNATURE 0x4d494458 /* "MIDX" */ | ||||||
| #define MIDX_VERSION 1 | #define MIDX_VERSION 1 | ||||||
|  | @ -89,12 +90,15 @@ struct multi_pack_index { | ||||||
| #define MIDX_EXT_MIDX "midx" | #define MIDX_EXT_MIDX "midx" | ||||||
|  |  | ||||||
| const unsigned char *get_midx_checksum(struct multi_pack_index *m); | const unsigned char *get_midx_checksum(struct multi_pack_index *m); | ||||||
| void get_midx_filename(struct strbuf *out, const char *object_dir); | void get_midx_filename(const struct git_hash_algo *hash_algo, | ||||||
| void get_midx_filename_ext(struct strbuf *out, const char *object_dir, | 		       struct strbuf *out, const char *object_dir); | ||||||
|  | void get_midx_filename_ext(const struct git_hash_algo *hash_algo, | ||||||
|  | 			   struct strbuf *out, const char *object_dir, | ||||||
| 			   const unsigned char *hash, const char *ext); | 			   const unsigned char *hash, const char *ext); | ||||||
| void get_midx_chain_dirname(struct strbuf *buf, const char *object_dir); | void get_midx_chain_dirname(struct strbuf *buf, const char *object_dir); | ||||||
| void get_midx_chain_filename(struct strbuf *buf, const char *object_dir); | void get_midx_chain_filename(struct strbuf *buf, const char *object_dir); | ||||||
| void get_split_midx_filename_ext(struct strbuf *buf, const char *object_dir, | void get_split_midx_filename_ext(const struct git_hash_algo *hash_algo, | ||||||
|  | 				 struct strbuf *buf, const char *object_dir, | ||||||
| 				 const unsigned char *hash, const char *ext); | 				 const unsigned char *hash, const char *ext); | ||||||
|  |  | ||||||
| struct multi_pack_index *load_multi_pack_index(struct repository *r, | struct multi_pack_index *load_multi_pack_index(struct repository *r, | ||||||
|  |  | ||||||
|  | @ -375,8 +375,8 @@ static int load_bitmap_entries_v1(struct bitmap_index *index) | ||||||
| char *midx_bitmap_filename(struct multi_pack_index *midx) | char *midx_bitmap_filename(struct multi_pack_index *midx) | ||||||
| { | { | ||||||
| 	struct strbuf buf = STRBUF_INIT; | 	struct strbuf buf = STRBUF_INIT; | ||||||
| 	get_midx_filename_ext(&buf, midx->object_dir, get_midx_checksum(midx), | 	get_midx_filename_ext(midx->repo->hash_algo, &buf, midx->object_dir, | ||||||
| 			      MIDX_EXT_BITMAP); | 			      get_midx_checksum(midx), MIDX_EXT_BITMAP); | ||||||
|  |  | ||||||
| 	return strbuf_detach(&buf, NULL); | 	return strbuf_detach(&buf, NULL); | ||||||
| } | } | ||||||
|  | @ -415,7 +415,7 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git, | ||||||
|  |  | ||||||
| 	if (bitmap_git->pack || bitmap_git->midx) { | 	if (bitmap_git->pack || bitmap_git->midx) { | ||||||
| 		struct strbuf buf = STRBUF_INIT; | 		struct strbuf buf = STRBUF_INIT; | ||||||
| 		get_midx_filename(&buf, midx->object_dir); | 		get_midx_filename(midx->repo->hash_algo, &buf, midx->object_dir); | ||||||
| 		trace2_data_string("bitmap", bitmap_repo(bitmap_git), | 		trace2_data_string("bitmap", bitmap_repo(bitmap_git), | ||||||
| 				   "ignoring extra midx bitmap file", buf.buf); | 				   "ignoring extra midx bitmap file", buf.buf); | ||||||
| 		close(fd); | 		close(fd); | ||||||
|  |  | ||||||
|  | @ -383,7 +383,7 @@ int load_midx_revindex(struct multi_pack_index *m) | ||||||
| 	trace2_data_string("load_midx_revindex", the_repository, | 	trace2_data_string("load_midx_revindex", the_repository, | ||||||
| 			   "source", "rev"); | 			   "source", "rev"); | ||||||
|  |  | ||||||
| 	get_midx_filename_ext(&revindex_name, m->object_dir, | 	get_midx_filename_ext(m->repo->hash_algo, &revindex_name, m->object_dir, | ||||||
| 			      get_midx_checksum(m), MIDX_EXT_REV); | 			      get_midx_checksum(m), MIDX_EXT_REV); | ||||||
|  |  | ||||||
| 	ret = load_revindex_from_disk(revindex_name.buf, | 	ret = load_revindex_from_disk(revindex_name.buf, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Karthik Nayak
						Karthik Nayak