From: Junio C Hamano Date: Fri, 6 Feb 2009 02:05:43 +0000 (-0800) Subject: Merge branch 'sg/maint-gitdir-in-subdir' into maint X-Git-Tag: v1.6.1.3~4 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/f20408dadb75914460b9251b56fe4bffb5f44f48?ds=inline;hp=-c Merge branch 'sg/maint-gitdir-in-subdir' into maint * sg/maint-gitdir-in-subdir: Fix gitdir detection when in subdir of gitdir --- f20408dadb75914460b9251b56fe4bffb5f44f48 diff --combined setup.c index 6b277b6a11,dd7c039f0d..dfda532adc --- a/setup.c +++ b/setup.c @@@ -456,7 -456,11 +456,11 @@@ const char *setup_git_directory_gently( inside_git_dir = 1; if (!work_tree_env) inside_work_tree = 0; - setenv(GIT_DIR_ENVIRONMENT, ".", 1); + if (offset != len) { + cwd[offset] = '\0'; + setenv(GIT_DIR_ENVIRONMENT, cwd, 1); + } else + setenv(GIT_DIR_ENVIRONMENT, ".", 1); check_repository_format_gently(nongit_ok); return NULL; } @@@ -468,10 -472,9 +472,10 @@@ *nongit_ok = 1; return NULL; } - die("Not a git repository"); + die("Not a git repository (or any of the parent directories): %s", DEFAULT_GIT_DIR_ENVIRONMENT); } - chdir(".."); + if (chdir("..")) + die("Cannot change to %s/..: %s", cwd, strerror(errno)); } inside_git_dir = 0; diff --combined t/t1501-worktree.sh index f6a6f839a1,1bcadf3eb6..27dc6c55d5 --- a/t/t1501-worktree.sh +++ b/t/t1501-worktree.sh @@@ -92,6 -92,13 +92,13 @@@ cd sub/dir || exit test_rev_parse 'in repo.git/sub/dir' false true true sub/dir/ cd ../../../.. || exit 1 + test_expect_success 'detecting gitdir when cwd is in a subdir of gitdir' ' + (expected=$(pwd)/repo.git && + cd repo.git/refs && + unset GIT_DIR && + test "$expected" = "$(git rev-parse --git-dir)") + ' + test_expect_success 'repo finds its work tree' ' (cd repo.git && : > work/sub/dir/untracked && @@@ -171,7 -178,7 +178,7 @@@ test_expect_success 'git diff' test_expect_success 'git grep' ' (cd repo.git/work/sub && - GIT_DIR=../.. GIT_WORK_TREE=.. git grep -l changed | grep -q dir/tracked) + GIT_DIR=../.. GIT_WORK_TREE=.. git grep -l changed | grep dir/tracked) ' test_done