Skip to content

Commit de3a864

Browse files
derrickstoleegitster
authored andcommitted
config: set pack.useSparse=true by default
The pack.useSparse config option was introduced by 3d036eb (pack-objects: create pack.useSparse setting, 2019-01-19) and was first available in v2.21.0. When enabled, the pack-objects process during 'git push' will use a sparse tree walk when deciding which trees and blobs to send to the remote. The algorithm was introduced by d5d2e93 (revision: implement sparse algorithm, 2019-01-16) and has been in production use by VFS for Git since around that time. The features.experimental config option also enabled pack.useSparse, so hopefully that has also increased exposure. It is worth noting that pack.useSparse has a possibility of sending more objects across a push, but requires a special arrangement of exact _copies_ across directories. There is a test in t5322-pack-objects-sparse.sh that demonstrates this possibility. This test uses the --sparse option to "git pack-objects" but we can make it implied by the config value to demonstrate that the default value has changed. While updating that test, I noticed that the documentation did not include an option for --no-sparse, which is now more important than it was before. Since the downside is unlikely but the upside is significant, set the default value of pack.useSparse to true. Remove it from the set of options implied by features.experimental. Signed-off-by: Derrick Stolee <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 98cedd0 commit de3a864

File tree

5 files changed

+12
-11
lines changed

5 files changed

+12
-11
lines changed

Documentation/config/feature.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ feature.experimental::
1212
setting if you are interested in providing feedback on experimental
1313
features. The new default values are:
1414
+
15-
* `pack.useSparse=true` uses a new algorithm when constructing a pack-file
16-
which can improve `git push` performance in repos with many files.
17-
+
1815
* `fetch.negotiationAlgorithm=skipping` may improve fetch negotiation times by
1916
skipping more commits at a time, reducing the number of round trips.
2017
+

Documentation/config/pack.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ pack.useSparse::
119119
objects. This can have significant performance benefits when
120120
computing a pack to send a small change. However, it is possible
121121
that extra objects are added to the pack-file if the included
122-
commits contain certain types of direct renames. Default is `false`
123-
unless `feature.experimental` is enabled.
122+
commits contain certain types of direct renames. Default is
123+
`true`.
124124

125125
pack.writeBitmaps (deprecated)::
126126
This is a deprecated synonym for `repack.writeBitmaps`.

Documentation/git-pack-objects.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ SYNOPSIS
1414
[--local] [--incremental] [--window=<n>] [--depth=<n>]
1515
[--revs [--unpacked | --all]] [--keep-pack=<pack-name>]
1616
[--stdout [--filter=<filter-spec>] | base-name]
17-
[--shallow] [--keep-true-parents] [--sparse] < object-list
17+
[--shallow] [--keep-true-parents] [--[no-]sparse] < object-list
1818

1919

2020
DESCRIPTION
@@ -196,14 +196,16 @@ depth is 4095.
196196
Add --no-reuse-object if you want to force a uniform compression
197197
level on all data no matter the source.
198198

199-
--sparse::
200-
Use the "sparse" algorithm to determine which objects to include in
199+
--[no-]sparse::
200+
Toggle the "sparse" algorithm to determine which objects to include in
201201
the pack, when combined with the "--revs" option. This algorithm
202202
only walks trees that appear in paths that introduce new objects.
203203
This can have significant performance benefits when computing
204204
a pack to send a small change. However, it is possible that extra
205205
objects are added to the pack-file if the included commits contain
206-
certain types of direct renames.
206+
certain types of direct renames. If this option is not included,
207+
it defaults to the value of `pack.useSparse`, which is true unless
208+
otherwise specified.
207209

208210
--thin::
209211
Create a "thin" pack by omitting the common objects between a

repo-settings.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,15 @@ void prepare_repo_settings(struct repository *r)
4545

4646
if (!repo_config_get_bool(r, "pack.usesparse", &value))
4747
r->settings.pack_use_sparse = value;
48+
UPDATE_DEFAULT_BOOL(r->settings.pack_use_sparse, 1);
49+
4850
if (!repo_config_get_bool(r, "feature.manyfiles", &value) && value) {
4951
UPDATE_DEFAULT_BOOL(r->settings.index_version, 4);
5052
UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_WRITE);
5153
}
5254
if (!repo_config_get_bool(r, "fetch.writecommitgraph", &value))
5355
r->settings.fetch_write_commit_graph = value;
5456
if (!repo_config_get_bool(r, "feature.experimental", &value) && value) {
55-
UPDATE_DEFAULT_BOOL(r->settings.pack_use_sparse, 1);
5657
UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_SKIPPING);
5758
UPDATE_DEFAULT_BOOL(r->settings.fetch_write_commit_graph, 1);
5859
}

t/t5322-pack-objects-sparse.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,15 @@ test_expect_success 'non-sparse pack-objects' '
105105
test_cmp required_objects.txt nonsparse_required_objects.txt
106106
'
107107

108+
# --sparse is enabled by default by pack.useSparse
108109
test_expect_success 'sparse pack-objects' '
109110
git rev-parse \
110111
topic1 \
111112
topic1^{tree} \
112113
topic1:f3 \
113114
topic1:f3/f4 \
114115
topic1:f3/f4/data.txt | sort >expect_sparse_objects.txt &&
115-
git pack-objects --stdout --revs --sparse <packinput.txt >sparse.pack &&
116+
git pack-objects --stdout --revs <packinput.txt >sparse.pack &&
116117
git index-pack -o sparse.idx sparse.pack &&
117118
git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt &&
118119
test_cmp expect_sparse_objects.txt sparse_objects.txt

0 commit comments

Comments
 (0)