From 3c09d6845d253f9d8a75f3a36278c69e01b073e9 Mon Sep 17 00:00:00 2001 From: Thomas Gummerer Date: Sun, 23 Feb 2014 21:49:59 +0100 Subject: [PATCH] read-cache: add index.version config variable 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 Signed-off-by: Junio C Hamano --- Documentation/config.txt | 4 ++++ read-cache.c | 35 ++++++++++++++++++++++++++--------- t/t1600-index.sh | 27 +++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index 5f4d7939ed..98200aaba2 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -1601,6 +1601,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 efc4aaed98..6bc9724793 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1219,23 +1219,40 @@ 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(void) { char *envversion = getenv("GIT_INDEX_VERSION"); - if (!envversion) { - return INDEX_FORMAT_DEFAULT; - } else { - char *endp; - unsigned int version = strtoul(envversion, &endp, 10); + char *endp; + unsigned int version = INDEX_FORMAT_DEFAULT; - if (*endp || - version < INDEX_FORMAT_LB || INDEX_FORMAT_UB < version) { - warning(_("GIT_INDEX_VERSION set, but the value is invalid.\n" + if (!envversion) { + git_config(index_format_config, &version); + if (version < INDEX_FORMAT_LB || INDEX_FORMAT_UB < version) { + 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 = strtoul(envversion, &endp, 10); + if (*endp || + version < INDEX_FORMAT_LB || INDEX_FORMAT_UB < version) { + 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 6195c55702..079d241145 100755 --- a/t/t1600-index.sh +++ b/t/t1600-index.sh @@ -46,4 +46,31 @@ test_expect_success 'no warning with bogus GIT_INDEX_VERSION and existing index' ) ' +test_expect_success 'out of bounds index.version issues warning' ' + ( + sane_unset GIT_INDEX_VERSION && + rm -f .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 -f .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 -- 2.11.4.GIT