reset: optionally setup worktree and refresh index on --mixed
Refreshing index requires work tree. So we have two options: always set up work tree (and refuse to reset if failing to do so), or make refreshing index optional. As refreshing index is not the main task, it makes more sense to make it optional. This allows us to still work in a bare repository to update what is in the index. Reported-by: Patrick Palka <patrick@parcs.ath.cx> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
7bbc4e8fdb
commit
b7756d41dc
@ -320,7 +320,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||||||
if (reset_type == NONE)
|
if (reset_type == NONE)
|
||||||
reset_type = MIXED; /* by default */
|
reset_type = MIXED; /* by default */
|
||||||
|
|
||||||
if (reset_type != SOFT && reset_type != MIXED)
|
if (reset_type != SOFT && (reset_type != MIXED || get_git_work_tree()))
|
||||||
setup_work_tree();
|
setup_work_tree();
|
||||||
|
|
||||||
if (reset_type == MIXED && is_bare_repository())
|
if (reset_type == MIXED && is_bare_repository())
|
||||||
@ -340,8 +340,9 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||||||
int flags = quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN;
|
int flags = quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN;
|
||||||
if (read_from_tree(&pathspec, sha1))
|
if (read_from_tree(&pathspec, sha1))
|
||||||
return 1;
|
return 1;
|
||||||
refresh_index(&the_index, flags, NULL, NULL,
|
if (get_git_work_tree())
|
||||||
_("Unstaged changes after reset:"));
|
refresh_index(&the_index, flags, NULL, NULL,
|
||||||
|
_("Unstaged changes after reset:"));
|
||||||
} else {
|
} else {
|
||||||
int err = reset_index(sha1, reset_type, quiet);
|
int err = reset_index(sha1, reset_type, quiet);
|
||||||
if (reset_type == KEEP && !err)
|
if (reset_type == KEEP && !err)
|
||||||
|
@ -535,4 +535,15 @@ test_expect_success 'reset with paths accepts tree' '
|
|||||||
git diff HEAD --exit-code
|
git diff HEAD --exit-code
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'reset --mixed sets up work tree' '
|
||||||
|
git init mixed_worktree &&
|
||||||
|
(
|
||||||
|
cd mixed_worktree &&
|
||||||
|
test_commit dummy
|
||||||
|
) &&
|
||||||
|
: >expect &&
|
||||||
|
git --git-dir=mixed_worktree/.git --work-tree=mixed_worktree reset >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user