Skip to content

Commit

Permalink
Merge branch 'jn/setup-fixes'
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
gitster committed Jan 24, 2011
2 parents 8c0db6f + 6abbee8 commit 0efbb7d
Show file tree
Hide file tree
Showing 6 changed files with 749 additions and 4,476 deletions.
25 changes: 17 additions & 8 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 4 additions & 9 deletions Documentation/git.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 19 additions & 0 deletions setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down Expand Up @@ -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) {
Expand Down
6 changes: 6 additions & 0 deletions t/README
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion t/t1501-worktree.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
'

Expand Down
Loading

0 comments on commit 0efbb7d

Please sign in to comment.