Re: [PATCH] Commands requiring a work tree must not run in GIT_DIR
- From
Junio C Hamano <junkio@cox.net>
- Date
- Jan 24, 2007, 11:44 UTC
- Message-ID
- <7vodoohcol.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <Pine.LNX.4.63.0701231312170.22628@wbgn013.biozentrum.uni-wuerzburg.de>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> This patch helps when you accidentally run something like git-clean > in the git directory instead of the work tree.
I think "require_work_tree" reflects what we are trying to do much better than NOT_BARE. So maybe we should rename NOT_BARE to REQUIRE_WORK_TREE.
Existing check function is_bare_repository() is sometimes used to see if it is a bare repository regardless of where you are (e.g. refs.c::log_ref_write()), so that function can stay as is, but the combined check below (you seem to have a few instances in your patch) can be made into a function require_work_tree().
Show 16 quoted lines
> diff --git a/git.c b/git.c
> index 5133a07..2027d1c 100644
> --- a/git.c
> +++ b/git.c
> @@ -302,8 +302,9 @@ static void handle_internal_command(int argc, const char **argv, char **envp)
> prefix = setup_git_directory();
> if (p->option & USE_PAGER)
> setup_pager();
> - if ((p->option & NOT_BARE) && is_bare_repository())
> - die("%s cannot be used in a bare git directory", cmd);
> + if ((p->option & NOT_BARE) &&
> + (is_bare_repository() || is_inside_git_dir()))
> + die("%s must be run in a work tree", cmd);
> trace_argv_printf(argv, argc, "trace: built-in: git");
>
> exit(p->fn(argc, argv, prefix));Similar to the "conditionally require working tree" you did to ls-files, "apply --index" and perhaps "apply --cached" (but this is "perhaps" --- you _could_ have an index in a bare repository, although it is debatable if there is a valid use case for it), grep (grep_cache() but perhaps !cached for the same reason), "read-tree -u", "rerere", "update-index" (except --index-info and friends that feed object names directly without using working tree), should require working tree.
On the script front, bisect should require working tree, but I do not think anybody is stupid enough to start bisecting in a bare repository ;-)