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;
|
||||
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;
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user