From: Nguyen Thai Ngoc Duy Date: Thu, 28 Feb 2008 13:02:58 GMT Subject: Re: [PATCH 4/9] Make setup_work_tree() return new prefix Message-ID: In-Reply-To: On Thu, Feb 28, 2008 at 6:30 PM, Johannes Schindelin wrote: > Hi, > > > > On Wed, 27 Feb 2008, Nguyễn Thái Ngọc Duy wrote: > > > @@ -336,24 +321,21 @@ const char *setup_git_directory_gently(int *nongit_ok) > > static char buffer[1024 + 1]; > > const char *retval; > > > > + /* > > + * The old behaviour (which we retain here) is to set > > + * the work tree root to the cwd, unless overridden by > > + * the config, the command line, or GIT_WORK_TREE. > > + */ > > if (!work_tree_env) { > > - retval = set_work_tree(gitdirenv); > > - /* config may override worktree */ > > - if (check_repository_format_gently(nongit_ok)) > > - return NULL; > > - return retval; > > + char buffer[PATH_MAX + 1]; > > + > > + if (!getcwd(buffer, sizeof(buffer))) > > + die ("Could not get the current working directory"); > > + git_work_tree_cfg = xstrdup(buffer); > > + inside_work_tree = 1; > > } > > - if (check_repository_format_gently(nongit_ok)) > > - return NULL; > > - retval = get_relative_cwd(buffer, sizeof(buffer) - 1, > > - get_git_work_tree()); > > - if (!retval || !*retval) > > - return NULL; > > - set_git_dir(make_absolute_path(gitdirenv)); > > - if (chdir(work_tree_env) < 0) > > - die ("Could not chdir to %s", work_tree_env); > > - strcat(buffer, "/"); > > - return retval; > > + check_repository_format_gently(nongit_ok); > > + return NULL; > > What about the situation where you are in a subdirectory of core.worktree? > You return prefix NULL? That's wrong. This is an intermediate patch. At the end of the series, you will see that _gently() does not return prefix. I split it for easier review. > I am sorry, but with all these intrusive changes, I get a very uneasy > feeling. As uneasy as with the original series, which I tried to fix up, > not really succeeding. In constrast I feel good :) To me setup_git_directory*() at the end look really nice. No chdir() all over the place (temporary chdir() for detecting .git does not count). It also gives a chance to get rid of worktree to commands that do not care about worktree at all. > Ciao, > Dscho > -- Duy