Teach get_index_format_default() to support running the test suite with specific index versions. In particular, this enables the test suite to be run using index version 4 which is not the default so gets less testing. Signed-off-by: Ben Peart <Ben.Peart@xxxxxxxxxxxxx> --- Notes: Base Ref: v2.19.0 Web-Diff: https://github.com/benpeart/git/commit/52e733e2ce Checkout: git fetch https://github.com/benpeart/git git-test-index-version-v1 && git checkout 52e733e2ce read-cache.c | 47 +++++++++++++++++++++++++++++++++-------------- t/README | 6 +++++- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/read-cache.c b/read-cache.c index 7b1354d759..d140ce9989 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1570,26 +1570,45 @@ static unsigned int get_index_format_default(void) char *envversion = getenv("GIT_INDEX_VERSION"); char *endp; int value; - unsigned int version = INDEX_FORMAT_DEFAULT; + unsigned int version = -1; + + if (envversion) { + 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; + } + } - if (!envversion) { - if (!git_config_get_int("index.version", &value)) + if (version == -1) { + if (!git_config_get_int("index.version", &value)) { version = value; - 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); - return INDEX_FORMAT_DEFAULT; + 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 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; + if (version == -1) { + envversion = getenv("GIT_TEST_INDEX_VERSION"); + if (envversion) { + version = strtoul(envversion, &endp, 10); + if (*endp || + version < INDEX_FORMAT_LB || INDEX_FORMAT_UB < version) { + warning(_("GIT_TEST_INDEX_VERSION set, but the value is invalid.\n" + "Using version %i"), INDEX_FORMAT_DEFAULT); + version = INDEX_FORMAT_DEFAULT; + } + } } + + if (version == -1) + version = INDEX_FORMAT_DEFAULT; + return version; } diff --git a/t/README b/t/README index 9028b47d92..f872638a78 100644 --- a/t/README +++ b/t/README @@ -315,10 +315,14 @@ packs on demand. This normally only happens when the object size is over 2GB. This variable forces the code path on any object larger than <n> bytes. -GIT_TEST_OE_DELTA_SIZE=<n> exercises the uncomon pack-objects code +GIT_TEST_OE_DELTA_SIZE=<n> exercises the uncommon pack-objects code path where deltas larger than this limit require extra memory allocation for bookkeeping. +GIT_TEST_INDEX_VERSION=<n> exercises the index read/write code path +for the index version specified. Can be set to any valid version +but the non-default version 4 is probably the most beneficial. + Naming Tests ------------ base-commit: 1d4361b0f344188ab5eec6dcea01f61a3a3a1670 -- 2.18.0.windows.1