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:
		| @ -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 | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Junio C Hamano
					Junio C Hamano