1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-23 14:56:12 +02:00

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:
Junio C Hamano 2019-10-18 11:40:49 +09:00
commit bb52def6da
3 changed files with 43 additions and 3 deletions

View File

@ -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;
cp.git_cmd = 1;
argv_array_pushl(&cp.args, "reset", "--hard", "-q",
NULL);
"--no-recurse-submodules", NULL);
if (run_command(&cp)) {
ret = -1;
goto done;

View File

@ -370,7 +370,7 @@ push_stash () {
git diff-index -p --cached --binary HEAD -- "$@" |
git apply --index -R
else
git reset --hard -q
git reset --hard -q --no-recurse-submodules
fi
if test "$keep_index" = "t" && test -n "$i_tree"

View File

@ -1,6 +1,6 @@
#!/bin/sh
test_description='stash apply can handle submodules'
test_description='stash can handle submodules'
. ./test-lib.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
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