The sparse connectivity algorithm saves a whole lot of time when there are UNINTERESTING trees around. --- Documentation/git-repack.txt | 4 ++++ builtin/repack.c | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/Documentation/git-repack.txt b/Documentation/git-repack.txt index aa0cc8bd44..836d81457a 100644 --- a/Documentation/git-repack.txt +++ b/Documentation/git-repack.txt @@ -165,6 +165,10 @@ depth is 4095. Pass the `--delta-islands` option to `git-pack-objects`, see linkgit:git-pack-objects[1]. +--sparse:: + Pass the `--sparse` option to `git-pack-objects`; see + linkgit:git-pack-objects[1]. + Configuration ------------- diff --git a/builtin/repack.c b/builtin/repack.c index 67f8978043..71e715b594 100644 --- a/builtin/repack.c +++ b/builtin/repack.c @@ -17,6 +17,7 @@ static int pack_kept_objects = -1; static int write_bitmaps; static int use_delta_islands; static char *packdir, *packtmp; +static int sparse; static const char *const git_repack_usage[] = { N_("git repack [<options>]"), @@ -48,6 +49,10 @@ static int repack_config(const char *var, const char *value, void *cb) use_delta_islands = git_config_bool(var, value); return 0; } + if (!strcmp(var, "pack.usesparse")) { + sparse = git_config_bool(var, value); + return 0; + } return git_default_config(var, value, cb); } @@ -326,11 +331,14 @@ int cmd_repack(int argc, const char **argv, const char *prefix) N_("maximum size of each packfile")), OPT_BOOL(0, "pack-kept-objects", &pack_kept_objects, N_("repack objects in packs marked with .keep")), + OPT_BOOL(0, "sparse", &sparse, + N_("use the sparse reachability algorithm")), OPT_STRING_LIST(0, "keep-pack", &keep_pack_list, N_("name"), N_("do not repack this pack")), OPT_END() }; + sparse = git_env_bool("GIT_TEST_PACK_SPARSE", 0); git_config(repack_config, NULL); argc = parse_options(argc, argv, prefix, builtin_repack_options, @@ -366,6 +374,8 @@ int cmd_repack(int argc, const char **argv, const char *prefix) argv_array_push(&cmd.args, "--all"); argv_array_push(&cmd.args, "--reflog"); argv_array_push(&cmd.args, "--indexed-objects"); + if (sparse) + argv_array_push(&cmd.args, "--sparse"); if (repository_format_partial_clone) argv_array_push(&cmd.args, "--exclude-promisor-objects"); if (write_bitmaps) -- 2.17.1