Ignore dirty submodule states during stash
cover Ignore dirty submodule states during stash
Impoved description + added test
git-stash.sh | 2 +- t/t3903-stash.sh | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-)
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.
--- git-stash.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
git-stash.sh +1 -1
@@ -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"
Signature · 1 line
2.1.4
It checks if 'stash pop' does not trigger merge conflics in submodules.
--- t/t3903-stash.sh | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+)
t/t3903-stash.sh +35 -0
@@ -731,4 +731,39 @@ test_expect_success 'stash list --cc shows combined diff' ' test_cmp expect actual ' +test_expect_success 'stash ignores changes in submodules' ' + git submodule init && + 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
Signature · 1 line
2.1.4
Quoted 2 lines · Vasily Titskiy
It checks if 'stash pop' does not trigger merge conflics in submodules.
Missing sign-off.
Also, it would be best to combine these two patches so that the fix and patch reside in a single patch.
More below...
t/t3903-stash.sh test_expect_success 'stash list --cc shows combined diff' ' · line 736
Quoted 9 lines
---
t/t3903-stash.sh +6
-0@@ -731,4 +731,39 @@ test_expect_success 'stash list --cc shows combined diff' ' +test_expect_success 'stash ignores changes in submodules' ' + git submodule init && + git init sub1 && + ( + cd sub1 && + echo "x" > file1 &&
Style: Drop space after redirection operator: >file1
Ditto below for both '>' and '>>'.
Quoted 19 lines
t/t3903-stash.sh +19
-0+ 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"
t/t3903-stash.sh test_expect_success 'stash list --cc shows combined diff' ' · line 768
Quoted 10 lines
t/t3903-stash.sh +10
-0+ ) && + # 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 +' + +
Style: drop extra blank line
Quoted 3 lines
t/t3903-stash.sh +0
-1test_done --2.1.4