repo-settings: create feature.manyFiles setting
The feature.manyFiles setting is suitable for repos with many files in the working directory. By setting index.version=4 and core.untrackedCache=true, commands such as 'git status' should improve. While adding this setting, modify the index version precedence tests to check how this setting overrides the default for index.version is unset. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ad0fb65999
commit
c6cc4c5afd
@ -345,6 +345,8 @@ include::config/difftool.txt[]
|
|||||||
|
|
||||||
include::config/fastimport.txt[]
|
include::config/fastimport.txt[]
|
||||||
|
|
||||||
|
include::config/feature.txt[]
|
||||||
|
|
||||||
include::config/fetch.txt[]
|
include::config/fetch.txt[]
|
||||||
|
|
||||||
include::config/format.txt[]
|
include::config/format.txt[]
|
||||||
|
@ -86,7 +86,9 @@ core.untrackedCache::
|
|||||||
it will automatically be removed, if set to `false`. Before
|
it will automatically be removed, if set to `false`. Before
|
||||||
setting it to `true`, you should check that mtime is working
|
setting it to `true`, you should check that mtime is working
|
||||||
properly on your system.
|
properly on your system.
|
||||||
See linkgit:git-update-index[1]. `keep` by default.
|
See linkgit:git-update-index[1]. `keep` by default, unless
|
||||||
|
`feature.manyFiles` is enabled which sets this setting to
|
||||||
|
`true` by default.
|
||||||
|
|
||||||
core.checkStat::
|
core.checkStat::
|
||||||
When missing or is set to `default`, many fields in the stat
|
When missing or is set to `default`, many fields in the stat
|
||||||
|
15
Documentation/config/feature.txt
Normal file
15
Documentation/config/feature.txt
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
feature.*::
|
||||||
|
The config settings that start with `feature.` modify the defaults of
|
||||||
|
a group of other config settings. These groups are created by the Git
|
||||||
|
developer community as recommended defaults and are subject to change.
|
||||||
|
In particular, new config options may be added with different defaults.
|
||||||
|
|
||||||
|
feature.manyFiles::
|
||||||
|
Enable config options that optimize for repos with many files in the
|
||||||
|
working directory. With many files, commands such as `git status` and
|
||||||
|
`git checkout` may be slow and these new defaults improve performance:
|
||||||
|
+
|
||||||
|
* `index.version=4` enables path-prefix compression in the index.
|
||||||
|
+
|
||||||
|
* `core.untrackedCache=true` enables the untracked cache. This setting assumes
|
||||||
|
that mtime is working on your machine.
|
@ -24,3 +24,4 @@ index.threads::
|
|||||||
index.version::
|
index.version::
|
||||||
Specify the version with which new index files should be
|
Specify the version with which new index files should be
|
||||||
initialized. This does not affect existing repositories.
|
initialized. This does not affect existing repositories.
|
||||||
|
If `feature.manyFiles` is enabled, then the default is 4.
|
||||||
|
@ -36,9 +36,12 @@ void prepare_repo_settings(struct repository *r)
|
|||||||
free(strval);
|
free(strval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!repo_config_get_bool(r, "pack.usesparse", &value))
|
if (!repo_config_get_bool(r, "pack.usesparse", &value))
|
||||||
r->settings.pack_use_sparse = value;
|
r->settings.pack_use_sparse = value;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/* Hack for test programs like test-dump-untracked-cache */
|
/* Hack for test programs like test-dump-untracked-cache */
|
||||||
if (ignore_untracked_cache_config)
|
if (ignore_untracked_cache_config)
|
||||||
|
@ -59,17 +59,38 @@ test_expect_success 'out of bounds index.version issues warning' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'GIT_INDEX_VERSION takes precedence over config' '
|
test_index_version () {
|
||||||
|
INDEX_VERSION_CONFIG=$1 &&
|
||||||
|
FEATURE_MANY_FILES=$2 &&
|
||||||
|
ENV_VAR_VERSION=$3
|
||||||
|
EXPECTED_OUTPUT_VERSION=$4 &&
|
||||||
(
|
(
|
||||||
rm -f .git/index &&
|
rm -f .git/index &&
|
||||||
GIT_INDEX_VERSION=4 &&
|
rm -f .git/config &&
|
||||||
export GIT_INDEX_VERSION &&
|
if test "$INDEX_VERSION_CONFIG" -ne 0
|
||||||
git config --add index.version 2 &&
|
then
|
||||||
|
git config --add index.version $INDEX_VERSION_CONFIG
|
||||||
|
fi &&
|
||||||
|
git config --add feature.manyFiles $FEATURE_MANY_FILES
|
||||||
|
if test "$ENV_VAR_VERSION" -ne 0
|
||||||
|
then
|
||||||
|
GIT_INDEX_VERSION=$ENV_VAR_VERSION &&
|
||||||
|
export GIT_INDEX_VERSION
|
||||||
|
else
|
||||||
|
unset GIT_INDEX_VERSION
|
||||||
|
fi &&
|
||||||
git add a 2>&1 &&
|
git add a 2>&1 &&
|
||||||
echo 4 >expect &&
|
echo $EXPECTED_OUTPUT_VERSION >expect &&
|
||||||
test-tool index-version <.git/index >actual &&
|
test-tool index-version <.git/index >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
test_expect_success 'index version config precedence' '
|
||||||
|
test_index_version 2 false 4 4 &&
|
||||||
|
test_index_version 2 true 0 2 &&
|
||||||
|
test_index_version 0 true 0 4 &&
|
||||||
|
test_index_version 0 true 2 2
|
||||||
'
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user