The sparse connectivity algorithm saves a whole lot of time when there are UNINTERESTING trees around. --- Documentation/git-repack.txt | 4 ++++ builtin/repack.c | 5 +++++ t/t5322-pack-objects-sparse.sh | 6 ++++++ 3 files changed, 15 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..8e7641482b 100644 --- a/builtin/repack.c +++ b/builtin/repack.c @@ -288,6 +288,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix) int no_update_server_info = 0; int midx_cleared = 0; struct pack_objects_args po_args = {NULL}; + int sparse = 0; struct option builtin_repack_options[] = { OPT_BIT('a', NULL, &pack_everything, @@ -326,6 +327,8 @@ 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() @@ -366,6 +369,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) diff --git a/t/t5322-pack-objects-sparse.sh b/t/t5322-pack-objects-sparse.sh index 7124b5581a..66e133dcfe 100755 --- a/t/t5322-pack-objects-sparse.sh +++ b/t/t5322-pack-objects-sparse.sh @@ -133,4 +133,10 @@ test_expect_success 'pack.useSparse overridden' ' test_cmp required_objects.txt sparse_objects.txt ' +# repack --sparse invokes pack-objects --sparse +test_expect_success 'repack --sparse and fsck' ' + git repack -a --sparse && + git fsck +' + test_done -- 2.17.1