]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'ds/default-pack-use-sparse-to-true'
authorJunio C Hamano <gitster@pobox.com>
Sun, 29 Mar 2020 16:32:51 +0000 (09:32 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 29 Mar 2020 16:32:51 +0000 (09:32 -0700)
The 'pack.useSparse' configuration variable now defaults to 'true',
enabling an optimization that has been experimental since Git 2.21.

* ds/default-pack-use-sparse-to-true:
  pack-objects: flip the use of GIT_TEST_PACK_SPARSE
  config: set pack.useSparse=true by default

Documentation/config/feature.txt
Documentation/config/pack.txt
Documentation/git-pack-objects.txt
builtin/pack-objects.c
repo-settings.c
t/README
t/t5322-pack-objects-sparse.sh

index 875f8c8a66f36464314d47decf433a82121a395b..4e3a5c0cebc90d1222de23d89db10d6eebfcc4d4 100644 (file)
@@ -12,9 +12,6 @@ feature.experimental::
        setting if you are interested in providing feedback on experimental
        features. The new default values are:
 +
-* `pack.useSparse=true` uses a new algorithm when constructing a pack-file
-which can improve `git push` performance in repos with many files.
-+
 * `fetch.negotiationAlgorithm=skipping` may improve fetch negotiation times by
 skipping more commits at a time, reducing the number of round trips.
 +
index 0dac5805816ff6e9c133097be5cd9ae14e67da41..837f1b16792fe2200afe011cc1dc0868b6590fe6 100644 (file)
@@ -119,8 +119,8 @@ pack.useSparse::
        objects. This can have significant performance benefits when
        computing a pack to send a small change. However, it is possible
        that extra objects are added to the pack-file if the included
-       commits contain certain types of direct renames. Default is `false`
-       unless `feature.experimental` is enabled.
+       commits contain certain types of direct renames. Default is
+       `true`.
 
 pack.writeBitmaps (deprecated)::
        This is a deprecated synonym for `repack.writeBitmaps`.
index fecdf2600cc9e2c5fe7535231deaab79fc0a7278..eaa2f2a4041f2eed78aea08131b1120fb195aaf7 100644 (file)
@@ -14,7 +14,7 @@ SYNOPSIS
        [--local] [--incremental] [--window=<n>] [--depth=<n>]
        [--revs [--unpacked | --all]] [--keep-pack=<pack-name>]
        [--stdout [--filter=<filter-spec>] | base-name]
-       [--shallow] [--keep-true-parents] [--sparse] < object-list
+       [--shallow] [--keep-true-parents] [--[no-]sparse] < object-list
 
 
 DESCRIPTION
@@ -196,14 +196,16 @@ depth is 4095.
        Add --no-reuse-object if you want to force a uniform compression
        level on all data no matter the source.
 
---sparse::
-       Use the "sparse" algorithm to determine which objects to include in
+--[no-]sparse::
+       Toggle the "sparse" algorithm to determine which objects to include in
        the pack, when combined with the "--revs" option. This algorithm
        only walks trees that appear in paths that introduce new objects.
        This can have significant performance benefits when computing
        a pack to send a small change. However, it is possible that extra
        objects are added to the pack-file if the included commits contain
-       certain types of direct renames.
+       certain types of direct renames. If this option is not included,
+       it defaults to the value of `pack.useSparse`, which is true unless
+       otherwise specified.
 
 --thin::
        Create a "thin" pack by omitting the common objects between a
index 4c2bb170c6748a4d96f0056ffed361fd3a5174e7..dc7c58ce3ff77b5a1b8bc3eb372340aee48d457c 100644 (file)
@@ -3469,9 +3469,9 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
 
        read_replace_refs = 0;
 
-       sparse = git_env_bool("GIT_TEST_PACK_SPARSE", 0);
+       sparse = git_env_bool("GIT_TEST_PACK_SPARSE", -1);
        prepare_repo_settings(the_repository);
-       if (!sparse && the_repository->settings.pack_use_sparse != -1)
+       if (sparse < 0)
                sparse = the_repository->settings.pack_use_sparse;
 
        reset_pack_idx_option(&pack_idx_opts);
index a703e407a3f0a9c55c9a18ad1db6bf345f1165dd..dc6817daa9537c3877dae686368ef58708ac0512 100644 (file)
@@ -45,6 +45,8 @@ void prepare_repo_settings(struct repository *r)
 
        if (!repo_config_get_bool(r, "pack.usesparse", &value))
                r->settings.pack_use_sparse = value;
+       UPDATE_DEFAULT_BOOL(r->settings.pack_use_sparse, 1);
+
        if (!repo_config_get_bool(r, "feature.manyfiles", &value) && value) {
                UPDATE_DEFAULT_BOOL(r->settings.index_version, 4);
                UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_WRITE);
@@ -52,7 +54,6 @@ void prepare_repo_settings(struct repository *r)
        if (!repo_config_get_bool(r, "fetch.writecommitgraph", &value))
                r->settings.fetch_write_commit_graph = value;
        if (!repo_config_get_bool(r, "feature.experimental", &value) && value) {
-               UPDATE_DEFAULT_BOOL(r->settings.pack_use_sparse, 1);
                UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_SKIPPING);
                UPDATE_DEFAULT_BOOL(r->settings.fetch_write_commit_graph, 1);
        }
index 369e3a9ded833f42c485c13f747a9651c491f67c..da5b24feb00374dc03fecc3a456ae54d6c6a634f 100644 (file)
--- a/t/README
+++ b/t/README
@@ -386,9 +386,9 @@ GIT_TEST_INDEX_VERSION=<n> exercises the index read/write code path
 for the index version specified.  Can be set to any valid version
 (currently 2, 3, or 4).
 
-GIT_TEST_PACK_SPARSE=<boolean> if enabled will default the pack-objects
-builtin to use the sparse object walk. This can still be overridden by
-the --no-sparse command-line argument.
+GIT_TEST_PACK_SPARSE=<boolean> if disabled will default the pack-objects
+builtin to use the non-sparse object walk. This can still be overridden by
+the --sparse command-line argument.
 
 GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
 by overriding the minimum number of cache entries required per thread.
index 7124b5581a0e3e31ae9b78b46aec9f059eeb7c1a..a581eaf52936292f28b2ff9542bccd8f2ea5152a 100755 (executable)
@@ -105,14 +105,16 @@ test_expect_success 'non-sparse pack-objects' '
        test_cmp required_objects.txt nonsparse_required_objects.txt
 '
 
+# --sparse is enabled by default by pack.useSparse
 test_expect_success 'sparse pack-objects' '
+       GIT_TEST_PACK_SPARSE=-1 &&
        git rev-parse                   \
                topic1                  \
                topic1^{tree}           \
                topic1:f3               \
                topic1:f3/f4            \
                topic1:f3/f4/data.txt | sort >expect_sparse_objects.txt &&
-       git pack-objects --stdout --revs --sparse <packinput.txt >sparse.pack &&
+       git pack-objects --stdout --revs <packinput.txt >sparse.pack &&
        git index-pack -o sparse.idx sparse.pack &&
        git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt &&
        test_cmp expect_sparse_objects.txt sparse_objects.txt