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

[PATCH 3/3] read-cache: add index.version config variable

From
Thomas Gummerer <t.gummerer@gmail.com>
Date
Feb 15, 2014, 19:23 UTC
Message-ID
<1392492197-7724-4-git-send-email-t.gummerer@gmail.com>
In-Reply-To
<1392492197-7724-1-git-send-email-t.gummerer@gmail.com>

Add a config variable that allows setting the default index version when initializing a new index file. Similar to the GIT_INDEX_VERSION environment variable this only affects new index files.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
---
 Documentation/config.txt |  4 ++++
 read-cache.c             | 27 ++++++++++++++++++++++-----
 t/t1600-index.sh         | 27 +++++++++++++++++++++++++++
 3 files changed, 53 insertions(+), 5 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 1655455..033939a 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1591,6 +1591,10 @@ imap::
 	The configuration variables in the 'imap' section are described
 	in linkgit:git-imap-send[1].
 
+index.version::
+	Specify the version with which new index files should be
+	initialized.  This does not affect existing repositories.
+
 init.templatedir::
 	Specify the directory from which templates will be copied.
 	(See the "TEMPLATE DIRECTORY" section of linkgit:git-init[1].)
diff --git a/read-cache.c b/read-cache.c
index 3993e12..ca9b68c 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1223,20 +1223,37 @@ static struct cache_entry *refresh_cache_entry(struct cache_entry *ce, int reall
 
 #define INDEX_FORMAT_DEFAULT 3
 
+static int index_format_config(const char *var, const char *value, void *cb)
+{
+	unsigned int *version = cb;
+	if (!strcmp(var, "index.version")) {
+		*version = git_config_int(var, value);
+		return 0;
+	}
+	return 1;
+}
+
+
 static unsigned int get_index_format_default()
 {
 	char *envversion = getenv("GIT_INDEX_VERSION");
+	unsigned int version = INDEX_FORMAT_DEFAULT;
 	if (!envversion) {
-		return INDEX_FORMAT_DEFAULT;
-	} else {
-		unsigned int version = strtol(envversion, NULL, 10);
+		git_config(index_format_config, &version);
 		if (version < INDEX_FORMAT_LB || version > INDEX_FORMAT_UB) {
-			warning(_("GIT_INDEX_VERSION set, but the value is invalid.\n"
+			warning(_("index.version set, but the value is invalid.\n"
 				  "Using version %i"), INDEX_FORMAT_DEFAULT);
-			version = INDEX_FORMAT_DEFAULT;
+			return INDEX_FORMAT_DEFAULT;
 		}
 		return version;
 	}
+	version = strtol(envversion, NULL, 10);
+	if (version < INDEX_FORMAT_LB || version > INDEX_FORMAT_UB) {
+		warning(_("GIT_INDEX_VERSION set, but the value is invalid.\n"
+			  "Using version %i"), INDEX_FORMAT_DEFAULT);
+		version = INDEX_FORMAT_DEFAULT;
+	}
+	return version;
 }
 
 /*
diff --git a/t/t1600-index.sh b/t/t1600-index.sh
index 37fd84d..bf34985 100755
--- a/t/t1600-index.sh
+++ b/t/t1600-index.sh
@@ -21,4 +21,31 @@ test_expect_success 'out of bounds GIT_INDEX_VERSION issues warning' '
 	)
 '
 
+test_expect_success 'out of bounds index.version issuses warning' '
+	(
+		unset GIT_INDEX_VERSION &&
+		rm .git/index &&
+		git config --add index.version 1 &&
+		git add a 2>&1 | sed "s/[0-9]//" >actual.err &&
+		sed -e "s/ Z$/ /" <<-\EOF >expect.err &&
+			warning: index.version set, but the value is invalid.
+			Using version Z
+		EOF
+		test_i18ncmp expect.err actual.err
+	)
+'
+
+test_expect_success 'GIT_INDEX_VERSION takes precedence over config' '
+	(
+		rm .git/index &&
+		GIT_INDEX_VERSION=4 &&
+		export GIT_INDEX_VERSION &&
+		git config --add index.version 2 &&
+		git add a 2>&1 &&
+		echo 4 >expect &&
+		test-index-version <.git/index >actual &&
+		test_cmp expect actual
+	)
+'
+
 test_done
-- 
1.8.5.2.300.ge613be6.dirty
Previous: Junio C HamanoNext: Eric Sunshine
Message 7 of 10 in “Wider exposure for index-v4”
  1. 0/3 Wider exposure for index-v4Thomas Gummerer, Feb 15, 2014
  2. 1/3 introduce GIT_INDEX_VERSION environment variableThomas Gummerer, Feb 15, 2014
  3. Junio C HamanoFeb 19, 2014
  4. Thomas GummererFeb 21, 2014
  5. 2/3 test-lib: allow setting the index format versionThomas Gummerer, Feb 15, 2014
  6. Junio C HamanoFeb 19, 2014
  7. 3/3 read-cache: add index.version config variableThomas Gummerer, Feb 15, 2014
  8. Eric SunshineFeb 16, 2014
  9. Duy NguyenFeb 16, 2014
  10. Thomas GummererFeb 16, 2014

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.