commit-graph: close_commit_graph before shallow walk
Call close_commit_graph() when about to start a rev-list walk that includes shallow commits. This is necessary in code paths that "fake" shallow commits for the sake of fetch. Specifically, test 351 in t5500-fetch-pack.sh runs git fetch --shallow-exclude one origin with a file-based transfer. When the "remote" has a commit-graph, we do not prevent the commit-graph from being loaded, but then the commits are intended to be dynamically transferred into shallow commits during get_shallow_commits_by_rev_list(). By closing the commit-graph before this call, we prevent this interaction. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									5cef295f28
								
							
						
					
					
						commit
						829a321569
					
				|  | @ -260,10 +260,10 @@ static int prepare_commit_graph(struct repository *r) | |||
| 	return !!r->objects->commit_graph; | ||||
| } | ||||
|  | ||||
| static void close_commit_graph(void) | ||||
| void close_commit_graph(struct repository *r) | ||||
| { | ||||
| 	free_commit_graph(the_repository->objects->commit_graph); | ||||
| 	the_repository->objects->commit_graph = NULL; | ||||
| 	free_commit_graph(r->objects->commit_graph); | ||||
| 	r->objects->commit_graph = NULL; | ||||
| } | ||||
|  | ||||
| static int bsearch_graph(struct commit_graph *g, struct object_id *oid, uint32_t *pos) | ||||
|  | @ -875,7 +875,7 @@ void write_commit_graph(const char *obj_dir, | |||
| 	write_graph_chunk_data(f, GRAPH_OID_LEN, commits.list, commits.nr); | ||||
| 	write_graph_chunk_large_edges(f, commits.list, commits.nr); | ||||
|  | ||||
| 	close_commit_graph(); | ||||
| 	close_commit_graph(the_repository); | ||||
| 	finalize_hashfile(f, NULL, CSUM_HASH_IN_STREAM | CSUM_FSYNC); | ||||
| 	commit_lock_file(&lk); | ||||
|  | ||||
|  |  | |||
|  | @ -59,6 +59,7 @@ void write_commit_graph(const char *obj_dir, | |||
|  | ||||
| int verify_commit_graph(struct repository *r, struct commit_graph *g); | ||||
|  | ||||
| void close_commit_graph(struct repository *); | ||||
| void free_commit_graph(struct commit_graph *); | ||||
|  | ||||
| #endif | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ | |||
| #include "quote.h" | ||||
| #include "upload-pack.h" | ||||
| #include "serve.h" | ||||
| #include "commit-graph.h" | ||||
|  | ||||
| /* Remember to update object flag allocation in object.h */ | ||||
| #define THEY_HAVE	(1u << 11) | ||||
|  | @ -740,6 +741,7 @@ static void deepen_by_rev_list(int ac, const char **av, | |||
| { | ||||
| 	struct commit_list *result; | ||||
|  | ||||
| 	close_commit_graph(the_repository); | ||||
| 	result = get_shallow_commits_by_rev_list(ac, av, SHALLOW, NOT_SHALLOW); | ||||
| 	send_shallow(result); | ||||
| 	free_commit_list(result); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Derrick Stolee
						Derrick Stolee