diff mbox series

[1/1] repo-settings: read an int for index.version

Message ID 095b43f606a352527c9e0551adbd8a6af2061176.1571863137.git.gitgitgadget@gmail.com (mailing list archive)
State New, archived
Headers show
Series index.version is not parsed correctly | expand

Commit Message

Elijah Newren via GitGitGadget Oct. 23, 2019, 8:38 p.m. UTC
From: Derrick Stolee <dstolee@microsoft.com>

Several config options were combined into a repo_settings struct in
ds/feature-macros, including a move of the "index.version" config
setting in 7211b9e (repo-settings: consolidate some config settings,
2019-08-13).

Unfortunately, that file looked like a lot of boilerplate and what is
clearly a factor of copy-paste overload, the config setting is parsed
with repo_config_ge_bool() instead of repo_config_get_int(). This means
that a setting "index.version=4" would not register correctly and would
revert to the default version of 3.

I caught this while incorporating v2.24.0-rc0 into the VFS for Git
codebase, where we really care that the index is in version 4.

This was not caught by the codebase because the version checks placed
in t1600-index.sh did not test the "basic" scenario enough. Here, we
modify the test to include these normal settings to not be overridden by
features.manyFiles or GIT_INDEX_VERSION. While the "default" version is
3, this is demoted to version 2 in do_write_index() when not necessary.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
---
 repo-settings.c  | 2 +-
 t/t1600-index.sh | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

Comments

Philip Oakley Oct. 24, 2019, 11:04 a.m. UTC | #1
spelling nit.

On 23/10/2019 21:38, Derrick Stolee via GitGitGadget wrote:
> From: Derrick Stolee<dstolee@microsoft.com>
>
> Several config options were combined into a repo_settings struct in
> ds/feature-macros, including a move of the "index.version" config
> setting in 7211b9e (repo-settings: consolidate some config settings,
> 2019-08-13).
>
> Unfortunately, that file looked like a lot of boilerplate and what is
> clearly a factor of copy-paste overload, the config setting is parsed
> with repo_config_ge_bool() instead of repo_config_get_int(). This means

s/_ge_bool()/_get_bool()/
> that a setting "index.version=4" would not register correctly and would
> revert to the default version of 3.
>
> I caught this while incorporating v2.24.0-rc0 into the VFS for Git
> codebase, where we really care that the index is in version 4.
>
> This was not caught by the codebase because the version checks placed
> in t1600-index.sh did not test the "basic" scenario enough. Here, we
> modify the test to include these normal settings to not be overridden by
> features.manyFiles or GIT_INDEX_VERSION. While the "default" version is
> 3, this is demoted to version 2 in do_write_index() when not necessary.
>
> Signed-off-by: Derrick Stolee<dstolee@microsoft.com>
> ---
Philip
diff mbox series

Patch

diff --git a/repo-settings.c b/repo-settings.c
index 05546db98e..a703e407a3 100644
--- a/repo-settings.c
+++ b/repo-settings.c
@@ -22,7 +22,7 @@  void prepare_repo_settings(struct repository *r)
 	UPDATE_DEFAULT_BOOL(r->settings.core_commit_graph, 1);
 	UPDATE_DEFAULT_BOOL(r->settings.gc_write_commit_graph, 1);
 
-	if (!repo_config_get_bool(r, "index.version", &value))
+	if (!repo_config_get_int(r, "index.version", &value))
 		r->settings.index_version = value;
 	if (!repo_config_get_maybe_bool(r, "core.untrackedcache", &value)) {
 		if (value == 0)
diff --git a/t/t1600-index.sh b/t/t1600-index.sh
index c77721b580..b7c31aa86a 100755
--- a/t/t1600-index.sh
+++ b/t/t1600-index.sh
@@ -87,6 +87,10 @@  test_index_version () {
 }
 
 test_expect_success 'index version config precedence' '
+	test_index_version 0 false 0 2 &&
+	test_index_version 2 false 0 2 &&
+	test_index_version 3 false 0 2 &&
+	test_index_version 4 false 0 4 &&
 	test_index_version 2 false 4 4 &&
 	test_index_version 2 true 0 2 &&
 	test_index_version 0 true 0 4 &&