git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Date
Oct 23, 2019, 20:38 UTC
Message-ID
<095b43f606a352527c9e0551adbd8a6af2061176.1571863137.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.420.git.1571863137.gitgitgadget@gmail.com>
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(-)
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 &&
-- 
gitgitgadget
Previous: Derrick Stolee via GitGitGadgetNext: Philip Oakley
Message 2 of 3 in “[v2.24.0-rc0 BUG] index.version is not parsed correctly”
  1. 0/1 [v2.24.0-rc0 BUG] index.version is not parsed correctlyDerrick Stolee via GitGitGadget, Oct 23, 2019
  2. 1/1 repo-settings: read an int for index.versionDerrick Stolee via GitGitGadget, Oct 23, 2019
  3. Philip OakleyOct 24, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.