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:
		
				
					committed by
					
						
						Junio C Hamano
					
				
			
			
				
	
			
			
			
						parent
						
							ad0fb65999
						
					
				
				
					commit
					c6cc4c5afd
				
			@ -345,6 +345,8 @@ include::config/difftool.txt[]
 | 
			
		||||
 | 
			
		||||
include::config/fastimport.txt[]
 | 
			
		||||
 | 
			
		||||
include::config/feature.txt[]
 | 
			
		||||
 | 
			
		||||
include::config/fetch.txt[]
 | 
			
		||||
 | 
			
		||||
include::config/format.txt[]
 | 
			
		||||
 | 
			
		||||
@ -86,7 +86,9 @@ core.untrackedCache::
 | 
			
		||||
	it will automatically be removed, if set to `false`. Before
 | 
			
		||||
	setting it to `true`, you should check that mtime is working
 | 
			
		||||
	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::
 | 
			
		||||
	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::
 | 
			
		||||
	Specify the version with which new index files should be
 | 
			
		||||
	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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (!repo_config_get_bool(r, "pack.usesparse", &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 */
 | 
			
		||||
	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 &&
 | 
			
		||||
		GIT_INDEX_VERSION=4 &&
 | 
			
		||||
		export GIT_INDEX_VERSION &&
 | 
			
		||||
		git config --add index.version 2 &&
 | 
			
		||||
		rm -f .git/config &&
 | 
			
		||||
		if test "$INDEX_VERSION_CONFIG" -ne 0
 | 
			
		||||
		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 &&
 | 
			
		||||
		echo 4 >expect &&
 | 
			
		||||
		echo $EXPECTED_OUTPUT_VERSION >expect &&
 | 
			
		||||
		test-tool index-version <.git/index >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
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user