Subject: Re: [PATCH 4/8] Add a function to set a non-default work tree

From: Junio C Hamano <[email-masked]>
Date: Sat, 19 Apr 2008 22:07:08 -0700

Daniel Barkalow <[email-masked]> writes:

> Signed-off-by: Daniel Barkalow <[email-masked]>
> ---
>  cache.h       |    1 +
>  environment.c |    6 ++++++
>  2 files changed, 7 insertions(+), 0 deletions(-)
>
> diff --git a/cache.h b/cache.h
> index 96dcb49..d88a4e2 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -311,6 +311,7 @@ extern char *get_index_file(void);
>  extern char *get_graft_file(void);
>  extern int set_git_dir(const char *path);
>  extern const char *get_git_work_tree(void);
> +extern void set_git_work_tree(const char *tree);
>  
>  #define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
>  
> diff --git a/environment.c b/environment.c
> index 6739a3f..d6c6a6b 100644
> --- a/environment.c
> +++ b/environment.c
> @@ -81,6 +81,12 @@ const char *get_git_dir(void)
>  	return git_dir;
>  }
>  
> +void set_git_work_tree(const char *new_work_tree)
> +{
> +	get_git_work_tree(); /* make sure it's initialized */
> +	work_tree = xstrdup(make_absolute_path(new_work_tree));
> +}
> +

Somehow this feels wrong.  Maybe you would need to move that "static int"
variable inside get_git_work_tree() outside so that you can reset from
this new function at will?

How should the setting of new work tree from sideways using this interface
interact with bareness of the repository?

Should it reset is_bare_repository_cfg to zero?  Should it refuse to set a
work tree if is_bare_repository_cfg is true already?