commit-graph: pass repo_settings instead of repository
The parse_commit_graph() function takes a 'struct repository *' pointer, but it only ever accesses config settings (either directly or through the .settings field of the repo struct). Move all relevant config settings into the repo_settings struct, and update parse_commit_graph() and its existing callers so that it takes 'struct repo_settings *' instead. Callers of parse_commit_graph() will now need to call prepare_repo_settings() themselves, or initialize a 'struct repo_settings' directly. Prior toab14d0676c(commit-graph: pass a 'struct repository *' in more places, 2020-09-09), parsing a commit-graph was a pure function depending only on the contents of the commit-graph itself. Commitab14d0676cintroduced a dependency on a `struct repository` pointer, and later commits such asb66d84756f(commit-graph: respect 'commitGraph.readChangedPaths', 2020-09-09) added dependencies on config settings, which were accessed through the `settings` field of the repository pointer. This field was initialized via a call to `prepare_repo_settings()`. Additionally, this fixes an issue in fuzz-commit-graph: In44c7e62(2021-12-06, repo-settings:prepare_repo_settings only in git repos), prepare_repo_settings was changed to issue a BUG() if it is called by a process whose CWD is not a Git repository. The combination of commits mentioned above broke fuzz-commit-graph, which attempts to parse arbitrary fuzzing-engine-provided bytes as a commit graph file. Prior to this change, parse_commit_graph() called prepare_repo_settings(), but since we run the fuzz tests without a valid repository, we are hitting the BUG() from44c7e62for every test case. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Josh Steadmon <steadmon@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
		
				
					committed by
					
						
						Junio C Hamano
					
				
			
			
				
	
			
			
			
						parent
						
							8168d5e9c2
						
					
				
				
					commit
					a92d8523ce
				
			@ -252,7 +252,8 @@ struct commit_graph *load_commit_graph_one_fd_st(struct repository *r,
 | 
			
		||||
	}
 | 
			
		||||
	graph_map = xmmap(NULL, graph_size, PROT_READ, MAP_PRIVATE, fd, 0);
 | 
			
		||||
	close(fd);
 | 
			
		||||
	ret = parse_commit_graph(r, graph_map, graph_size);
 | 
			
		||||
	prepare_repo_settings(r);
 | 
			
		||||
	ret = parse_commit_graph(&r->settings, graph_map, graph_size);
 | 
			
		||||
 | 
			
		||||
	if (ret)
 | 
			
		||||
		ret->odb = odb;
 | 
			
		||||
@ -321,7 +322,7 @@ static int graph_read_bloom_data(const unsigned char *chunk_start,
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct commit_graph *parse_commit_graph(struct repository *r,
 | 
			
		||||
struct commit_graph *parse_commit_graph(struct repo_settings *s,
 | 
			
		||||
					void *graph_map, size_t graph_size)
 | 
			
		||||
{
 | 
			
		||||
	const unsigned char *data;
 | 
			
		||||
@ -359,8 +360,6 @@ struct commit_graph *parse_commit_graph(struct repository *r,
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	prepare_repo_settings(r);
 | 
			
		||||
 | 
			
		||||
	graph = alloc_commit_graph();
 | 
			
		||||
 | 
			
		||||
	graph->hash_len = the_hash_algo->rawsz;
 | 
			
		||||
@ -390,7 +389,7 @@ struct commit_graph *parse_commit_graph(struct repository *r,
 | 
			
		||||
	pair_chunk(cf, GRAPH_CHUNKID_EXTRAEDGES, &graph->chunk_extra_edges);
 | 
			
		||||
	pair_chunk(cf, GRAPH_CHUNKID_BASE, &graph->chunk_base_graphs);
 | 
			
		||||
 | 
			
		||||
	if (get_configured_generation_version(r) >= 2) {
 | 
			
		||||
	if (s->commit_graph_generation_version >= 2) {
 | 
			
		||||
		pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA,
 | 
			
		||||
			&graph->chunk_generation_data);
 | 
			
		||||
		pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW,
 | 
			
		||||
@ -400,7 +399,7 @@ struct commit_graph *parse_commit_graph(struct repository *r,
 | 
			
		||||
			graph->read_generation_data = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (r->settings.commit_graph_read_changed_paths) {
 | 
			
		||||
	if (s->commit_graph_read_changed_paths) {
 | 
			
		||||
		pair_chunk(cf, GRAPH_CHUNKID_BLOOMINDEXES,
 | 
			
		||||
			   &graph->chunk_bloom_indexes);
 | 
			
		||||
		read_chunk(cf, GRAPH_CHUNKID_BLOOMDATA,
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user