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 pointer
This commit is contained in:
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);
|
||||||
|
|
||||||
|
if (get_configured_generation_version(r) >= 2) {
|
||||||
pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA,
|
pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA,
|
||||||
&graph->chunk_generation_data);
|
&graph->chunk_generation_data);
|
||||||
pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW,
|
pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW,
|
||||||
&graph->chunk_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
Block a user