Hi, On Sun, 5 Aug 2007, Junio C Hamano wrote: > If you say: > > git --work-tree=. foo > > without saying anything about GIT_DIR, shouldn't we run the > usual .git/ discovery, going up the directories? Well, it seems natural. The problem is that if you are in a bare repository, after setup_git_directory_gently() you will no longer be able to tell where you started from, but you are in the same directory that HEAD was found. I had the following patch, but it breaks all kinds of tests :-( Will keep you posted, Dscho -- snipsnap -- setup.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/setup.c b/setup.c index d87e4e1..c627623 100644 --- a/setup.c +++ b/setup.c @@ -291,7 +291,7 @@ const char *setup_git_directory_gently(int *nongit_ok) if (!work_tree_env) inside_work_tree = 0; setenv(GIT_DIR_ENVIRONMENT, ".", 1); - return NULL; + goto ret; } chdir(".."); do { @@ -311,6 +311,7 @@ const char *setup_git_directory_gently(int *nongit_ok) if (!work_tree_env) inside_work_tree = 1; git_work_tree_cfg = xstrndup(cwd, offset); +ret: if (offset == len) return NULL; @@ -376,14 +377,15 @@ const char *setup_git_directory(void) /* If the work tree is not the default one, recompute prefix */ if (inside_work_tree < 0) { static char buffer[PATH_MAX + 1]; + const char *git_dir = get_git_dir(); char *rel; /* * When the git dir was determined automatically, it is * a relative path. */ - if (!getenv(GIT_DIR_ENVIRONMENT)) - set_git_dir(make_absolute_path(get_git_dir())); + if (!is_absolute_path(git_dir)) + set_git_dir(make_absolute_path(git_dir)); if (retval && chdir(retval)) die ("Could not jump back into original cwd"); - 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