Merge branch 'jn/setup-fixes'
* jn/setup-fixes: t1510: fix typo in the comment of a test Documentation updates for 'GIT_WORK_TREE without GIT_DIR' historical usecase Subject: setup: officially support --work-tree without --git-dir tests: compress the setup tests tests: cosmetic improvements to the repo-setup test t/README: hint about using $(pwd) rather than $PWD in tests Fix expected values of setup tests on Windows
This commit is contained in:
commit
0efbb7d9f4
@ -317,17 +317,26 @@ false), while all other repositories are assumed to be bare (bare
|
||||
= true).
|
||||
|
||||
core.worktree::
|
||||
Set the path to the working tree. The value will not be
|
||||
used in combination with repositories found automatically in
|
||||
a .git directory (i.e. $GIT_DIR is not set).
|
||||
Set the path to the root of the working tree.
|
||||
This can be overridden by the GIT_WORK_TREE environment
|
||||
variable and the '--work-tree' command line option. It can be
|
||||
an absolute path or relative path to the directory specified by
|
||||
--git-dir or GIT_DIR.
|
||||
Note: If --git-dir or GIT_DIR are specified but none of
|
||||
variable and the '--work-tree' command line option.
|
||||
The value can an absolute path or relative to the path to
|
||||
the .git directory, which is either specified by --git-dir
|
||||
or GIT_DIR, or automatically discovered.
|
||||
If --git-dir or GIT_DIR is specified but none of
|
||||
--work-tree, GIT_WORK_TREE and core.worktree is specified,
|
||||
the current working directory is regarded as the top directory
|
||||
the current working directory is regarded as the top level
|
||||
of your working tree.
|
||||
+
|
||||
Note that this variable is honored even when set in a configuration
|
||||
file in a ".git" subdirectory of a directory and its value differs
|
||||
from the latter directory (e.g. "/path/to/.git/config" has
|
||||
core.worktree set to "/different/path"), which is most likely a
|
||||
misconfiguration. Running git commands in the "/path/to" directory will
|
||||
still use "/different/path" as the root of the work tree and can cause
|
||||
confusion unless you know what you are doing (e.g. you are creating a
|
||||
read-only snapshot of the same index to a location different from the
|
||||
repository's usual working tree).
|
||||
|
||||
core.logAllRefUpdates::
|
||||
Enable the reflog. Updates to a ref <ref> is logged to the file
|
||||
|
@ -291,17 +291,12 @@ help ...`.
|
||||
path or relative path to current working directory.
|
||||
|
||||
--work-tree=<path>::
|
||||
Set the path to the working tree. The value will not be
|
||||
used in combination with repositories found automatically in
|
||||
a .git directory (i.e. $GIT_DIR is not set).
|
||||
Set the path to the working tree. It can be an absolute path
|
||||
or a path relative to the current working directory.
|
||||
This can also be controlled by setting the GIT_WORK_TREE
|
||||
environment variable and the core.worktree configuration
|
||||
variable. It can be an absolute path or relative path to
|
||||
current working directory.
|
||||
Note: If --git-dir or GIT_DIR are specified but none of
|
||||
--work-tree, GIT_WORK_TREE and core.worktree is specified,
|
||||
the current working directory is regarded as the top directory
|
||||
of your working tree.
|
||||
variable (see core.worktree in linkgit:git-config[1] for a
|
||||
more detailed discussion).
|
||||
|
||||
--bare::
|
||||
Treat the repository as a bare repository. If GIT_DIR
|
||||
|
19
setup.c
19
setup.c
@ -411,6 +411,15 @@ static const char *setup_discovered_git_dir(const char *gitdir,
|
||||
if (check_repository_format_gently(gitdir, nongit_ok))
|
||||
return NULL;
|
||||
|
||||
/* --work-tree is set without --git-dir; use discovered one */
|
||||
if (getenv(GIT_WORK_TREE_ENVIRONMENT) || git_work_tree_cfg) {
|
||||
if (offset != len && !is_absolute_path(gitdir))
|
||||
gitdir = xstrdup(make_absolute_path(gitdir));
|
||||
if (chdir(cwd))
|
||||
die_errno("Could not come back to cwd");
|
||||
return setup_explicit_git_dir(gitdir, cwd, len, nongit_ok);
|
||||
}
|
||||
|
||||
/* #16.2, #17.2, #20.2, #21.2, #24, #25, #28, #29 (see t1510) */
|
||||
if (is_bare_repository_cfg > 0) {
|
||||
set_git_dir(offset == len ? gitdir : make_absolute_path(gitdir));
|
||||
@ -443,6 +452,16 @@ static const char *setup_bare_git_dir(char *cwd, int offset, int len, int *nongi
|
||||
if (check_repository_format_gently(".", nongit_ok))
|
||||
return NULL;
|
||||
|
||||
/* --work-tree is set without --git-dir; use discovered one */
|
||||
if (getenv(GIT_WORK_TREE_ENVIRONMENT) || git_work_tree_cfg) {
|
||||
const char *gitdir;
|
||||
|
||||
gitdir = offset == len ? "." : xmemdupz(cwd, offset);
|
||||
if (chdir(cwd))
|
||||
die_errno("Could not come back to cwd");
|
||||
return setup_explicit_git_dir(gitdir, cwd, len, nongit_ok);
|
||||
}
|
||||
|
||||
inside_git_dir = 1;
|
||||
inside_work_tree = 0;
|
||||
if (offset != len) {
|
||||
|
6
t/README
6
t/README
@ -283,6 +283,12 @@ Do:
|
||||
Tests that are likely to smoke out future regressions are better
|
||||
than tests that just inflate the coverage metrics.
|
||||
|
||||
- When a test checks for an absolute path that a git command generated,
|
||||
construct the expected value using $(pwd) rather than $PWD,
|
||||
$TEST_DIRECTORY, or $TRASH_DIRECTORY. It makes a difference on
|
||||
Windows, where the shell (MSYS bash) mangles absolute path names.
|
||||
For details, see the commit message of 4114156ae9.
|
||||
|
||||
Don't:
|
||||
|
||||
- exit() within a <script> part.
|
||||
|
@ -343,7 +343,7 @@ test_expect_success 'make_relative_path handles double slashes in GIT_DIR' '
|
||||
test_expect_success 'relative $GIT_WORK_TREE and git subprocesses' '
|
||||
GIT_DIR=repo.git GIT_WORK_TREE=repo.git/work \
|
||||
test-subprocess --setup-work-tree rev-parse --show-toplevel >actual &&
|
||||
echo "$TRASH_DIRECTORY/repo.git/work" >expected &&
|
||||
echo "$(pwd)/repo.git/work" >expected &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user