reset: unbreak hard resets with GIT_WORK_TREE
Commit952dfc6tried to tighten the safety valves for doing a "reset --hard" in a bare repository or outside the work tree, but accidentally broke the case for GIT_WORK_TREE. This patch unbreaks it. Most git commands which need a work tree simply use NEED_WORK_TREE in git.c to die before they get to their cmd_* function. Reset, however, only needs a work tree in some cases, and so must handle the work tree itself. The error that952dfc6made was to simply forbid certain operations if the work tree was not set up; instead, we need to do the same thing that NEED_WORK_TREE does, which is to call setup_work_tree(). We no longer have to worry about dying in the non-worktree case, as setup_work_tree handles that for us. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
952dfc6944
commit
cd0f0f68e1
@ -286,10 +286,8 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
||||
if (reset_type == NONE)
|
||||
reset_type = MIXED; /* by default */
|
||||
|
||||
if ((reset_type == HARD || reset_type == MERGE)
|
||||
&& !is_inside_work_tree())
|
||||
die("%s reset requires a work tree",
|
||||
reset_type_names[reset_type]);
|
||||
if (reset_type == HARD || reset_type == MERGE)
|
||||
setup_work_tree();
|
||||
|
||||
/* Soft reset does not touch the index file nor the working tree
|
||||
* at all, but requires them in a good order. Other resets reset
|
||||
|
||||
@ -29,6 +29,12 @@ test_expect_success 'soft reset is ok' '
|
||||
(cd .git && git reset --soft)
|
||||
'
|
||||
|
||||
test_expect_success 'hard reset works with GIT_WORK_TREE' '
|
||||
mkdir worktree &&
|
||||
GIT_WORK_TREE=$PWD/worktree GIT_DIR=$PWD/.git git reset --hard &&
|
||||
test_cmp file worktree/file
|
||||
'
|
||||
|
||||
test_expect_success 'setup bare' '
|
||||
git clone --bare . bare.git &&
|
||||
cd bare.git
|
||||
|
||||
Reference in New Issue
Block a user