As stash does not know how to deal with submodules,
it should not try to save/restore their states
as it leads to redundant merge conflicts.

Added test checks if 'stash pop' does not trigger merge conflicts
in submodules.

Signed-off-by: Vasily Titskiy <qeh...@gmail.com>
---
 git-stash.sh     |  2 +-
 t/t3903-stash.sh | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/git-stash.sh b/git-stash.sh
index c7c65e2..b500c44 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -116,7 +116,7 @@ create_stash () {
                        git read-tree --index-output="$TMPindex" -m $i_tree &&
                        GIT_INDEX_FILE="$TMPindex" &&
                        export GIT_INDEX_FILE &&
-                       git diff --name-only -z HEAD -- >"$TMP-stagenames" &&
+                       git diff --name-only --ignore-submodules -z HEAD -- 
>"$TMP-stagenames" &&
                        git update-index -z --add --remove --stdin 
<"$TMP-stagenames" &&
                        git write-tree &&
                        rm -f "$TMPindex"
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index 2142c1f..dfe39a4 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -731,4 +731,37 @@ test_expect_success 'stash list --cc shows combined diff' '
        test_cmp expect actual
 '
 
+test_expect_success 'stash ignores changes in submodules' '
+       git init sub1 &&
+       (
+               cd sub1 &&
+               echo "x" >file1 &&
+               git add file1 &&
+               git commit -a -m "initial sub1"
+       ) &&
+       git submodule add ./. sub1 &&
+       echo "main" >file1 &&
+       git add file1 &&
+       git commit -a -m "initial main" &&
+       # make changes in submodule
+       (
+               cd sub1 &&
+               echo "y" >>file1 &&
+               git commit -a -m "change y"
+       ) &&
+       git commit sub1 -m "update reference" &&
+       # switch submodule to another revision
+       (
+               cd sub1 &&
+               echo "z" >>file1 &&
+               git commit -a -m "change z"
+       ) &&
+       # everything is prepared, check if changes in submodules are ignored
+       echo "local change" >>file1 &&
+       git stash save &&
+       git checkout HEAD~1 &&
+       git submodule update &&
+       git stash pop
+'
+
 test_done
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to