Merge branch 'ds/commit-graph-generation-config'
A new configuration variable has been introduced to allow choosing which version of the generation number gets used in the commit-graph file. * ds/commit-graph-generation-config: commit-graph: use config to specify generation type commit-graph: create local repository pointermaint
						commit
						d20fa3cf9d
					
				|  | @ -1,3 +1,9 @@ | ||||||
|  | commitGraph.generationVersion:: | ||||||
|  | 	Specifies the type of generation number version to use when writing | ||||||
|  | 	or reading the commit-graph file. If version 1 is specified, then | ||||||
|  | 	the corrected commit dates will not be written or read. Defaults to | ||||||
|  | 	2. | ||||||
|  |  | ||||||
| commitGraph.maxNewFilters:: | commitGraph.maxNewFilters:: | ||||||
| 	Specifies the default value for the `--max-new-filters` option of `git | 	Specifies the default value for the `--max-new-filters` option of `git | ||||||
| 	commit-graph write` (c.f., linkgit:git-commit-graph[1]). | 	commit-graph write` (c.f., linkgit:git-commit-graph[1]). | ||||||
|  |  | ||||||
|  | @ -96,6 +96,13 @@ define_commit_slab(commit_graph_data_slab, struct commit_graph_data); | ||||||
| static struct commit_graph_data_slab commit_graph_data_slab = | static struct commit_graph_data_slab commit_graph_data_slab = | ||||||
| 	COMMIT_SLAB_INIT(1, commit_graph_data_slab); | 	COMMIT_SLAB_INIT(1, commit_graph_data_slab); | ||||||
|  |  | ||||||
|  | static int get_configured_generation_version(struct repository *r) | ||||||
|  | { | ||||||
|  | 	int version = 2; | ||||||
|  | 	repo_config_get_int(r, "commitgraph.generationversion", &version); | ||||||
|  | 	return version; | ||||||
|  | } | ||||||
|  |  | ||||||
| uint32_t commit_graph_position(const struct commit *c) | uint32_t commit_graph_position(const struct commit *c) | ||||||
| { | { | ||||||
| 	struct commit_graph_data *data = | 	struct commit_graph_data *data = | ||||||
|  | @ -394,10 +401,13 @@ struct commit_graph *parse_commit_graph(struct repository *r, | ||||||
| 	pair_chunk(cf, GRAPH_CHUNKID_DATA, &graph->chunk_commit_data); | 	pair_chunk(cf, GRAPH_CHUNKID_DATA, &graph->chunk_commit_data); | ||||||
| 	pair_chunk(cf, GRAPH_CHUNKID_EXTRAEDGES, &graph->chunk_extra_edges); | 	pair_chunk(cf, GRAPH_CHUNKID_EXTRAEDGES, &graph->chunk_extra_edges); | ||||||
| 	pair_chunk(cf, GRAPH_CHUNKID_BASE, &graph->chunk_base_graphs); | 	pair_chunk(cf, GRAPH_CHUNKID_BASE, &graph->chunk_base_graphs); | ||||||
| 	pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA, |  | ||||||
| 		   &graph->chunk_generation_data); | 	if (get_configured_generation_version(r) >= 2) { | ||||||
| 	pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW, | 		pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA, | ||||||
| 		   &graph->chunk_generation_data_overflow); | 			&graph->chunk_generation_data); | ||||||
|  | 		pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW, | ||||||
|  | 			&graph->chunk_generation_data_overflow); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (r->settings.commit_graph_read_changed_paths) { | 	if (r->settings.commit_graph_read_changed_paths) { | ||||||
| 		pair_chunk(cf, GRAPH_CHUNKID_BLOOMINDEXES, | 		pair_chunk(cf, GRAPH_CHUNKID_BLOOMINDEXES, | ||||||
|  | @ -1839,8 +1849,6 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx) | ||||||
| 	add_chunk(cf, GRAPH_CHUNKID_DATA, (hashsz + 16) * ctx->commits.nr, | 	add_chunk(cf, GRAPH_CHUNKID_DATA, (hashsz + 16) * ctx->commits.nr, | ||||||
| 		  write_graph_chunk_data); | 		  write_graph_chunk_data); | ||||||
|  |  | ||||||
| 	if (git_env_bool(GIT_TEST_COMMIT_GRAPH_NO_GDAT, 0)) |  | ||||||
| 		ctx->write_generation_data = 0; |  | ||||||
| 	if (ctx->write_generation_data) | 	if (ctx->write_generation_data) | ||||||
| 		add_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA, | 		add_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA, | ||||||
| 			  sizeof(uint32_t) * ctx->commits.nr, | 			  sizeof(uint32_t) * ctx->commits.nr, | ||||||
|  | @ -2223,6 +2231,7 @@ int write_commit_graph(struct object_directory *odb, | ||||||
| 		       enum commit_graph_write_flags flags, | 		       enum commit_graph_write_flags flags, | ||||||
| 		       const struct commit_graph_opts *opts) | 		       const struct commit_graph_opts *opts) | ||||||
| { | { | ||||||
|  | 	struct repository *r = the_repository; | ||||||
| 	struct write_commit_graph_context *ctx; | 	struct write_commit_graph_context *ctx; | ||||||
| 	uint32_t i; | 	uint32_t i; | ||||||
| 	int res = 0; | 	int res = 0; | ||||||
|  | @ -2230,23 +2239,23 @@ int write_commit_graph(struct object_directory *odb, | ||||||
| 	struct bloom_filter_settings bloom_settings = DEFAULT_BLOOM_FILTER_SETTINGS; | 	struct bloom_filter_settings bloom_settings = DEFAULT_BLOOM_FILTER_SETTINGS; | ||||||
| 	struct topo_level_slab topo_levels; | 	struct topo_level_slab topo_levels; | ||||||
|  |  | ||||||
| 	prepare_repo_settings(the_repository); | 	prepare_repo_settings(r); | ||||||
| 	if (!the_repository->settings.core_commit_graph) { | 	if (!r->settings.core_commit_graph) { | ||||||
| 		warning(_("attempting to write a commit-graph, but 'core.commitGraph' is disabled")); | 		warning(_("attempting to write a commit-graph, but 'core.commitGraph' is disabled")); | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
| 	if (!commit_graph_compatible(the_repository)) | 	if (!commit_graph_compatible(r)) | ||||||
| 		return 0; | 		return 0; | ||||||
|  |  | ||||||
| 	CALLOC_ARRAY(ctx, 1); | 	CALLOC_ARRAY(ctx, 1); | ||||||
| 	ctx->r = the_repository; | 	ctx->r = r; | ||||||
| 	ctx->odb = odb; | 	ctx->odb = odb; | ||||||
| 	ctx->append = flags & COMMIT_GRAPH_WRITE_APPEND ? 1 : 0; | 	ctx->append = flags & COMMIT_GRAPH_WRITE_APPEND ? 1 : 0; | ||||||
| 	ctx->report_progress = flags & COMMIT_GRAPH_WRITE_PROGRESS ? 1 : 0; | 	ctx->report_progress = flags & COMMIT_GRAPH_WRITE_PROGRESS ? 1 : 0; | ||||||
| 	ctx->split = flags & COMMIT_GRAPH_WRITE_SPLIT ? 1 : 0; | 	ctx->split = flags & COMMIT_GRAPH_WRITE_SPLIT ? 1 : 0; | ||||||
| 	ctx->opts = opts; | 	ctx->opts = opts; | ||||||
| 	ctx->total_bloom_filter_data_size = 0; | 	ctx->total_bloom_filter_data_size = 0; | ||||||
| 	ctx->write_generation_data = 1; | 	ctx->write_generation_data = (get_configured_generation_version(r) == 2); | ||||||
| 	ctx->num_generation_data_overflows = 0; | 	ctx->num_generation_data_overflows = 0; | ||||||
|  |  | ||||||
| 	bloom_settings.bits_per_entry = git_env_ulong("GIT_TEST_BLOOM_SETTINGS_BITS_PER_ENTRY", | 	bloom_settings.bits_per_entry = git_env_ulong("GIT_TEST_BLOOM_SETTINGS_BITS_PER_ENTRY", | ||||||
|  |  | ||||||
|  | @ -6,7 +6,6 @@ | ||||||
| #include "oidset.h" | #include "oidset.h" | ||||||
|  |  | ||||||
| #define GIT_TEST_COMMIT_GRAPH "GIT_TEST_COMMIT_GRAPH" | #define GIT_TEST_COMMIT_GRAPH "GIT_TEST_COMMIT_GRAPH" | ||||||
| #define GIT_TEST_COMMIT_GRAPH_NO_GDAT "GIT_TEST_COMMIT_GRAPH_NO_GDAT" |  | ||||||
| #define GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE "GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE" | #define GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE "GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE" | ||||||
| #define GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS "GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS" | #define GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS "GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS" | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								t/README
								
								
								
								
							
							
						
						
									
										3
									
								
								t/README
								
								
								
								
							|  | @ -387,9 +387,6 @@ GIT_TEST_COMMIT_GRAPH=<boolean>, when true, forces the commit-graph to | ||||||
| be written after every 'git commit' command, and overrides the | be written after every 'git commit' command, and overrides the | ||||||
| 'core.commitGraph' setting to true. | 'core.commitGraph' setting to true. | ||||||
|  |  | ||||||
| GIT_TEST_COMMIT_GRAPH_NO_GDAT=<boolean>, when true, forces the |  | ||||||
| commit-graph to be written without generation data chunk. |  | ||||||
|  |  | ||||||
| GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=<boolean>, when true, forces | GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=<boolean>, when true, forces | ||||||
| commit-graph write to compute and write changed path Bloom filters for | commit-graph write to compute and write changed path Bloom filters for | ||||||
| every 'git commit-graph write', as if the `--changed-paths` option was | every 'git commit-graph write', as if the `--changed-paths` option was | ||||||
|  |  | ||||||
|  | @ -475,7 +475,7 @@ test_expect_success 'lower layers have overflow chunk' ' | ||||||
|  |  | ||||||
| test_expect_success 'git commit-graph verify' ' | test_expect_success 'git commit-graph verify' ' | ||||||
| 	cd "$TRASH_DIRECTORY/full" && | 	cd "$TRASH_DIRECTORY/full" && | ||||||
| 	git rev-parse commits/8 | GIT_TEST_COMMIT_GRAPH_NO_GDAT=1 git commit-graph write --stdin-commits && | 	git rev-parse commits/8 | git -c commitGraph.generationVersion=1 commit-graph write --stdin-commits && | ||||||
| 	git commit-graph verify >output && | 	git commit-graph verify >output && | ||||||
| 	graph_read_expect 9 extra_edges | 	graph_read_expect 9 extra_edges | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | @ -489,7 +489,7 @@ test_expect_success 'setup repo for mixed generation commit-graph-chain' ' | ||||||
| 			test_commit $i && | 			test_commit $i && | ||||||
| 			git branch commits/$i || return 1 | 			git branch commits/$i || return 1 | ||||||
| 		done && | 		done && | ||||||
| 		git commit-graph write --reachable --split && | 		git -c commitGraph.generationVersion=2 commit-graph write --reachable --split && | ||||||
| 		graph_read_expect $NUM_FIRST_LAYER_COMMITS && | 		graph_read_expect $NUM_FIRST_LAYER_COMMITS && | ||||||
| 		test_line_count = 1 $graphdir/commit-graph-chain && | 		test_line_count = 1 $graphdir/commit-graph-chain && | ||||||
| 		for i in $(test_seq $SECOND_LAYER_SEQUENCE_START $SECOND_LAYER_SEQUENCE_END) | 		for i in $(test_seq $SECOND_LAYER_SEQUENCE_START $SECOND_LAYER_SEQUENCE_END) | ||||||
|  | @ -497,7 +497,7 @@ test_expect_success 'setup repo for mixed generation commit-graph-chain' ' | ||||||
| 			test_commit $i && | 			test_commit $i && | ||||||
| 			git branch commits/$i || return 1 | 			git branch commits/$i || return 1 | ||||||
| 		done && | 		done && | ||||||
| 		GIT_TEST_COMMIT_GRAPH_NO_GDAT=1 git commit-graph write --reachable --split=no-merge && | 		git -c commitGraph.generationVersion=1 commit-graph write --reachable --split=no-merge && | ||||||
| 		test_line_count = 2 $graphdir/commit-graph-chain && | 		test_line_count = 2 $graphdir/commit-graph-chain && | ||||||
| 		test-tool read-graph >output && | 		test-tool read-graph >output && | ||||||
| 		cat >expect <<-EOF && | 		cat >expect <<-EOF && | ||||||
|  |  | ||||||
|  | @ -55,7 +55,7 @@ test_expect_success 'setup' ' | ||||||
| 	git show-ref -s commit-5-5 | git commit-graph write --stdin-commits && | 	git show-ref -s commit-5-5 | git commit-graph write --stdin-commits && | ||||||
| 	mv .git/objects/info/commit-graph commit-graph-half && | 	mv .git/objects/info/commit-graph commit-graph-half && | ||||||
| 	chmod u+w commit-graph-half && | 	chmod u+w commit-graph-half && | ||||||
| 	GIT_TEST_COMMIT_GRAPH_NO_GDAT=1 git commit-graph write --reachable && | 	git -c commitGraph.generationVersion=1 commit-graph write --reachable && | ||||||
| 	mv .git/objects/info/commit-graph commit-graph-no-gdat && | 	mv .git/objects/info/commit-graph commit-graph-no-gdat && | ||||||
| 	chmod u+w commit-graph-no-gdat && | 	chmod u+w commit-graph-no-gdat && | ||||||
| 	git config core.commitGraph true | 	git config core.commitGraph true | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano