Unlike other environment variables (e.g. GIT_WORK_TREE, GIT_NAMESPACE), it was not possible to set the GIT_INDEX_FILE environment variable using the command line. Add a new --index-file command-line option. Update the t7500-commit test to include --index-file option coverage. The tests have been adapted from the existing 'using alternate GIT_INDEX_FILE (1)' and 'using alternate GIT_INDEX_FILE (2)' tests. Signed-off-by: Manlio Perillo <manlio.perillo@xxxxxxxxx> --- Documentation/git.txt | 10 +++++++++- git.c | 17 ++++++++++++++++- t/t7500-commit.sh | 29 +++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/Documentation/git.txt b/Documentation/git.txt index e643683..5a582dd 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -12,7 +12,8 @@ SYNOPSIS 'git' [--version] [--help] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p|--paginate|--no-pager] [--no-replace-objects] [--bare] - [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] + [--git-dir=<path>] [--work-tree=<path>] [--index-file=<path>] + [--namespace=<name>] <command> [<args>] DESCRIPTION @@ -408,6 +409,12 @@ help ...`. variable (see core.worktree in linkgit:git-config[1] for a more detailed discussion). +--index-file=<path>:: + Set the path to the index file. It can be an absolute path + or a path relative to the current working directory. + This can also be controlled by setting the GIT_INDEX_FILE + environment variable. + --namespace=<path>:: Set the git namespace. See linkgit:gitnamespaces[7] for more details. Equivalent to setting the `GIT_NAMESPACE` environment @@ -632,6 +639,7 @@ git so take care if using Cogito etc. This environment allows the specification of an alternate index file. If not specified, the default of `$GIT_DIR/index` is used. + The '--index-file command-line option also sets this value. 'GIT_OBJECT_DIRECTORY':: If the object storage directory is specified via this diff --git a/git.c b/git.c index d33f9b3..b0f473d 100644 --- a/git.c +++ b/git.c @@ -8,7 +8,8 @@ const char git_usage_string[] = "git [--version] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n" " [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]\n" - " [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n" + " [--git-dir=<path>] [--work-tree=<path>] [--index-file=<path>]\n" + " [--namespace=<name>]\n" " [-c name=value] [--help]\n" " <command> [<args>]"; @@ -121,6 +122,20 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) setenv(GIT_WORK_TREE_ENVIRONMENT, cmd + 12, 1); if (envchanged) *envchanged = 1; + } else if (!strcmp(cmd, "--index-file")) { + if (*argc < 2) { + fprintf(stderr, "No path given for --index-file.\n" ); + usage(git_usage_string); + } + setenv(INDEX_ENVIRONMENT, (*argv)[1], 1); + if (envchanged) + *envchanged = 1; + (*argv)++; + (*argc)--; + } else if (!prefixcmp(cmd, "--index-file=")) { + setenv(INDEX_ENVIRONMENT, cmd + 13, 1); + if (envchanged) + *envchanged = 1; } else if (!strcmp(cmd, "--bare")) { static char git_dir[PATH_MAX+1]; is_bare_repository_cfg = 1; diff --git a/t/t7500-commit.sh b/t/t7500-commit.sh index 1c908f4..c405a78 100755 --- a/t/t7500-commit.sh +++ b/t/t7500-commit.sh @@ -168,6 +168,35 @@ test_expect_success 'using alternate GIT_INDEX_FILE (2)' ' cmp .git/index saved-index >/dev/null ' +test_expect_success 'using alternate --index-file (1)' ' + + cp .git/index saved-index && + ( + echo some new content >file && + index_file=.git/another_index && + git --index-file=$index_file add file && + git --index-file=$index_file commit -m "commit using another index" && + git --index-file=$index_file diff-index --exit-code HEAD && + git --index-file=$index_file diff-files --exit-code + ) && + cmp .git/index saved-index >/dev/null + +' + +test_expect_success 'using alternate --index-file (2)' ' + + cp .git/index saved-index && + ( + rm -f .git/no-such-index && + index_file=.git/no-such-index && + git --index-file=$index_file commit -m "commit using nonexistent index" && + test -z "$(git --index-file=$index_file ls-files)" && + test -z "$(git --index-file=$index_file ls-tree HEAD)" + + ) && + cmp .git/index saved-index >/dev/null +' + cat > expect << EOF zort -- 1.8.1.rc1.17.g75ed918.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html