Merge branch 'jj/stash-reset-only-toplevel'
"git stash save" lost local changes to submodules, which has been corrected. * jj/stash-reset-only-toplevel: stash: avoid recursive hard reset on submodules
This commit is contained in:
commit
bb52def6da
@ -1392,7 +1392,7 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q
|
|||||||
struct child_process cp = CHILD_PROCESS_INIT;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
argv_array_pushl(&cp.args, "reset", "--hard", "-q",
|
argv_array_pushl(&cp.args, "reset", "--hard", "-q",
|
||||||
NULL);
|
"--no-recurse-submodules", NULL);
|
||||||
if (run_command(&cp)) {
|
if (run_command(&cp)) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -370,7 +370,7 @@ push_stash () {
|
|||||||
git diff-index -p --cached --binary HEAD -- "$@" |
|
git diff-index -p --cached --binary HEAD -- "$@" |
|
||||||
git apply --index -R
|
git apply --index -R
|
||||||
else
|
else
|
||||||
git reset --hard -q
|
git reset --hard -q --no-recurse-submodules
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$keep_index" = "t" && test -n "$i_tree"
|
if test "$keep_index" = "t" && test -n "$i_tree"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
test_description='stash apply can handle submodules'
|
test_description='stash can handle submodules'
|
||||||
|
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
. "$TEST_DIRECTORY"/lib-submodule-update.sh
|
. "$TEST_DIRECTORY"/lib-submodule-update.sh
|
||||||
@ -21,4 +21,44 @@ KNOWN_FAILURE_CHERRY_PICK_SEES_EMPTY_COMMIT=1
|
|||||||
KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
|
KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
|
||||||
test_submodule_switch "git_stash"
|
test_submodule_switch "git_stash"
|
||||||
|
|
||||||
|
setup_basic () {
|
||||||
|
test_when_finished "rm -rf main sub" &&
|
||||||
|
git init sub &&
|
||||||
|
(
|
||||||
|
cd sub &&
|
||||||
|
test_commit sub_file
|
||||||
|
) &&
|
||||||
|
git init main &&
|
||||||
|
(
|
||||||
|
cd main &&
|
||||||
|
git submodule add ../sub &&
|
||||||
|
test_commit main_file
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
test_expect_success 'stash push with submodule.recurse=true preserves dirty submodule worktree' '
|
||||||
|
setup_basic &&
|
||||||
|
(
|
||||||
|
cd main &&
|
||||||
|
git config submodule.recurse true &&
|
||||||
|
echo "x" >main_file.t &&
|
||||||
|
echo "y" >sub/sub_file.t &&
|
||||||
|
git stash push &&
|
||||||
|
test_must_fail git -C sub diff --quiet
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'stash push and pop with submodule.recurse=true preserves dirty submodule worktree' '
|
||||||
|
setup_basic &&
|
||||||
|
(
|
||||||
|
cd main &&
|
||||||
|
git config submodule.recurse true &&
|
||||||
|
echo "x" >main_file.t &&
|
||||||
|
echo "y" >sub/sub_file.t &&
|
||||||
|
git stash push &&
|
||||||
|
git stash pop &&
|
||||||
|
test_must_fail git -C sub diff --quiet
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user