(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id:Id.Lit_Chars val:'git mergetool\n' span_id:15) (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id:Id.Lit_Chars val:'Testing basic merge tool invocation' span_id:17) ) } spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:39))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:43) (Token id:Id.Lit_Chars val:'\ttest_config rerere.enabled true &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\techo master >file1 &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\techo master spaced >"spaced name" &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\techo master file11 >file11 &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\techo master file12 >file12 &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\techo master file13 >file13 &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\techo master file14 >file14 &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\tmkdir subdir &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\techo master sub >subdir/file3 &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\ttest_create_repo submod &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\t(\n' span_id:54) (Token id:Id.Lit_Chars val:'\t\tcd submod &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\t\t: >foo &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\t\tgit add foo &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "Add foo"\n' span_id:58) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:59) (Token id: Id.Lit_Chars val: '\tgit submodule add git://example.com/submod submod &&\n' span_id: 60 ) (Token id: Id.Lit_Chars val: '\tgit add file1 "spaced name" file1[1-4] subdir/file3 .gitmodules submod &&\n' span_id: 61 ) (Token id:Id.Lit_Chars val:'\tgit commit -m "add initial versions" &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\n' span_id:63) (Token id:Id.Lit_Chars val:'\tgit checkout -b branch1 master &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\techo branch1 change >file1 &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\techo branch1 newfile >file2 &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\techo branch1 spaced >"spaced name" &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\techo branch1 both added >both &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\techo branch1 change file11 >file11 &&\n' span_id:70) (Token id: Id.Lit_Chars val: '\techo branch1 change file13 >file13 &&\n' span_id: 71 ) (Token id:Id.Lit_Chars val:'\techo branch1 sub >subdir/file3 &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\t(\n' span_id:73) (Token id:Id.Lit_Chars val:'\t\tcd submod &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\t\techo branch1 submodule >bar &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\t\tgit add bar &&\n' span_id:76) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "Add bar on branch1" &&\n' span_id: 77 ) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b submod-branch1\n' span_id:78) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:79) (Token id: Id.Lit_Chars val: '\tgit add file1 "spaced name" file11 file13 file2 subdir/file3 submod &&\n' span_id: 80 ) (Token id:Id.Lit_Chars val:'\tgit add both &&\n' span_id:81) (Token id:Id.Lit_Chars val:'\tgit rm file12 &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\tgit commit -m "branch1 changes" &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\n' span_id:84) (Token id:Id.Lit_Chars val:'\tgit checkout -b stash1 master &&\n' span_id:85) (Token id:Id.Lit_Chars val:'\techo stash1 change file11 >file11 &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\tgit add file11 &&\n' span_id:87) (Token id:Id.Lit_Chars val:'\tgit commit -m "stash1 changes" &&\n' span_id:88) (Token id:Id.Lit_Chars val:'\n' span_id:89) (Token id:Id.Lit_Chars val:'\tgit checkout -b stash2 master &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\techo stash2 change file11 >file11 &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgit add file11 &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\tgit commit -m "stash2 changes" &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\n' span_id:94) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\techo master updated >file1 &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\techo master new >file2 &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\techo master updated spaced >"spaced name" &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\techo master both added >both &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\techo master updated file12 >file12 &&\n' span_id:101) (Token id: Id.Lit_Chars val: '\techo master updated file14 >file14 &&\n' span_id: 102 ) (Token id:Id.Lit_Chars val:'\techo master new sub >subdir/file3 &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\t(\n' span_id:104) (Token id:Id.Lit_Chars val:'\t\tcd submod &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\t\techo master submodule >bar &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\t\tgit add bar &&\n' span_id:107) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "Add bar on master" &&\n' span_id: 108 ) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b submod-master\n' span_id:109) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:110) (Token id: Id.Lit_Chars val: '\tgit add file1 "spaced name" file12 file14 file2 subdir/file3 submod &&\n' span_id: 111 ) (Token id:Id.Lit_Chars val:'\tgit add both &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\tgit rm file11 &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\tgit commit -m "master updates" &&\n' span_id:114) (Token id:Id.Lit_Chars val:'\n' span_id:115) (Token id:Id.Lit_Chars val:'\tgit config merge.tool mytool &&\n' span_id:116) (Token id: Id.Lit_Chars val: '\tgit config mergetool.mytool.cmd "cat \\"\\$REMOTE\\" >\\"\\$MERGED\\"" &&\n' span_id: 117 ) (Token id:Id.Lit_Chars val:'\tgit config mergetool.mytool.trustExitCode true &&\n' span_id:118) (Token id: Id.Lit_Chars val: '\tgit config mergetool.mybase.cmd "cat \\"\\$BASE\\" >\\"\\$MERGED\\"" &&\n' span_id: 119 ) (Token id:Id.Lit_Chars val:'\tgit config mergetool.mybase.trustExitCode true\n' span_id:120) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'custom mergetool' span_id:127))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:131) (Token id:Id.Lit_Chars val:'\tgit checkout -b test1 branch1 &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:133) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge master >/dev/null 2>&1 &&\n' span_id: 134 ) (Token id:Id.Lit_Chars val:'\t( yes "" | git mergetool both >/dev/null 2>&1 ) &&\n' span_id:135) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool file1 file1 ) &&\n' span_id: 136 ) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool file2 "spaced name" >/dev/null 2>&1 ) &&\n' span_id: 137 ) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) &&\n' span_id: 138 ) (Token id:Id.Lit_Chars val:'\t( yes "d" | git mergetool file11 >/dev/null 2>&1 ) &&\n' span_id:139) (Token id: Id.Lit_Chars val: '\t( yes "d" | git mergetool file12 >/dev/null 2>&1 ) &&\n' span_id: 140 ) (Token id:Id.Lit_Chars val:'\t( yes "l" | git mergetool submod >/dev/null 2>&1 ) &&\n' span_id:141) (Token id: Id.Lit_Chars val: '\ttest "$(cat file1)" = "master updated" &&\n' span_id: 142 ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file2)" = "master new" &&\n' span_id:143) (Token id: Id.Lit_Chars val: '\ttest "$(cat subdir/file3)" = "master new sub" &&\n' span_id: 144 ) (Token id:Id.Lit_Chars val:'\ttest "$(cat submod/bar)" = "branch1 submodule" &&\n' span_id:145) (Token id: Id.Lit_Chars val: '\tgit commit -m "branch1 resolved with mergetool"\n' span_id: 146 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mergetool crlf' span_id:153))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:157) (Token id:Id.Lit_Chars val:'\ttest_config core.autocrlf true &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\tgit checkout -b test2 branch1 &&\n' span_id:159) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge master >/dev/null 2>&1 &&\n' span_id: 160 ) (Token id:Id.Lit_Chars val:'\t( yes "" | git mergetool file1 >/dev/null 2>&1 ) &&\n' span_id:161) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool file2 >/dev/null 2>&1 ) &&\n' span_id: 162 ) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool "spaced name" >/dev/null 2>&1 ) &&\n' span_id: 163 ) (Token id:Id.Lit_Chars val:'\t( yes "" | git mergetool both >/dev/null 2>&1 ) &&\n' span_id:164) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool subdir/file3 >/dev/null 2>&1 ) &&\n' span_id: 165 ) (Token id:Id.Lit_Chars val:'\t( yes "d" | git mergetool file11 >/dev/null 2>&1 ) &&\n' span_id:166) (Token id: Id.Lit_Chars val: '\t( yes "d" | git mergetool file12 >/dev/null 2>&1 ) &&\n' span_id: 167 ) (Token id:Id.Lit_Chars val:'\t( yes "r" | git mergetool submod >/dev/null 2>&1 ) &&\n' span_id:168) (Token id: Id.Lit_Chars val: '\ttest "$(printf x | cat file1 -)" = "$(printf "master updated\\r\\nx")" &&\n' span_id: 169 ) (Token id: Id.Lit_Chars val: '\ttest "$(printf x | cat file2 -)" = "$(printf "master new\\r\\nx")" &&\n' span_id: 170 ) (Token id: Id.Lit_Chars val: '\ttest "$(printf x | cat subdir/file3 -)" = "$(printf "master new sub\\r\\nx")" &&\n' span_id: 171 ) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:172) (Token id: Id.Lit_Chars val: '\ttest "$(cat submod/bar)" = "master submodule" &&\n' span_id: 173 ) (Token id: Id.Lit_Chars val: '\tgit commit -m "branch1 resolved with mergetool - autocrlf" &&\n' span_id: 174 ) (Token id:Id.Lit_Chars val:'\ttest_config core.autocrlf false &&\n' span_id:175) (Token id:Id.Lit_Chars val:'\tgit reset --hard\n' span_id:176) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mergetool in subdir' span_id:183))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:187) (Token id:Id.Lit_Chars val:'\tgit checkout -b test3 branch1 &&\n' span_id:188) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\t(\n' span_id:190) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:191) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git merge master >/dev/null 2>&1 &&\n' span_id: 192 ) (Token id:Id.Lit_Chars val:'\t\t( yes "" | git mergetool file3 >/dev/null 2>&1 ) &&\n' span_id:193) (Token id: Id.Lit_Chars val: '\t\ttest "$(cat file3)" = "master new sub"\n' span_id: 194 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:195) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mergetool on file in parent dir' span_id:202))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:206) (Token id:Id.Lit_Chars val:'\t(\n' span_id:207) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:208) (Token id: Id.Lit_Chars val: '\t\t( yes "" | git mergetool ../file1 >/dev/null 2>&1 ) &&\n' span_id: 209 ) (Token id: Id.Lit_Chars val: '\t\t( yes "" | git mergetool ../file2 ../spaced\\ name >/dev/null 2>&1 ) &&\n' span_id: 210 ) (Token id:Id.Lit_Chars val:'\t\t( yes "" | git mergetool ../both >/dev/null 2>&1 ) &&\n' span_id:211) (Token id: Id.Lit_Chars val: '\t\t( yes "d" | git mergetool ../file11 >/dev/null 2>&1 ) &&\n' span_id: 212 ) (Token id: Id.Lit_Chars val: '\t\t( yes "d" | git mergetool ../file12 >/dev/null 2>&1 ) &&\n' span_id: 213 ) (Token id: Id.Lit_Chars val: '\t\t( yes "l" | git mergetool ../submod >/dev/null 2>&1 ) &&\n' span_id: 214 ) (Token id:Id.Lit_Chars val:'\t\ttest "$(cat ../file1)" = "master updated" &&\n' span_id:215) (Token id: Id.Lit_Chars val: '\t\ttest "$(cat ../file2)" = "master new" &&\n' span_id: 216 ) (Token id:Id.Lit_Chars val:'\t\ttest "$(cat ../submod/bar)" = "branch1 submodule" &&\n' span_id:217) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "branch1 resolved with mergetool - subdir"\n' span_id: 218 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:219) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mergetool skips autoresolved' span_id:226))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:230) (Token id:Id.Lit_Chars val:'\tgit checkout -b test4 branch1 &&\n' span_id:231) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:232) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:233) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:234) (Token id: Id.Lit_Chars val: '\t( yes "d" | git mergetool file11 >/dev/null 2>&1 ) &&\n' span_id: 235 ) (Token id:Id.Lit_Chars val:'\t( yes "d" | git mergetool file12 >/dev/null 2>&1 ) &&\n' span_id:236) (Token id: Id.Lit_Chars val: '\t( yes "l" | git mergetool submod >/dev/null 2>&1 ) &&\n' span_id: 237 ) (Token id:Id.Lit_Chars val:'\toutput="$(git mergetool --no-prompt)" &&\n' span_id:238) (Token id: Id.Lit_Chars val: '\ttest "$output" = "No files need merging" &&\n' span_id: 239 ) (Token id:Id.Lit_Chars val:'\tgit reset --hard\n' span_id:240) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mergetool merges all from subdir' span_id:247))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:251) (Token id:Id.Lit_Chars val:'\ttest_config rerere.enabled false &&\n' span_id:252) (Token id:Id.Lit_Chars val:'\t(\n' span_id:253) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git merge master &&\n' span_id:255) (Token id: Id.Lit_Chars val: '\t\t( yes "r" | git mergetool ../submod ) &&\n' span_id: 256 ) (Token id:Id.Lit_Chars val:'\t\t( yes "d" "d" | git mergetool --no-prompt ) &&\n' span_id:257) (Token id: Id.Lit_Chars val: '\t\ttest "$(cat ../file1)" = "master updated" &&\n' span_id: 258 ) (Token id:Id.Lit_Chars val:'\t\ttest "$(cat ../file2)" = "master new" &&\n' span_id:259) (Token id: Id.Lit_Chars val: '\t\ttest "$(cat file3)" = "master new sub" &&\n' span_id: 260 ) (Token id:Id.Lit_Chars val:'\t\t( cd .. && git submodule update -N ) &&\n' span_id:261) (Token id: Id.Lit_Chars val: '\t\ttest "$(cat ../submod/bar)" = "master submodule" &&\n' span_id: 262 ) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "branch2 resolved by mergetool from subdir"\n' span_id: 263 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:264) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'mergetool skips resolved paths when rerere is active' span_id: 271 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:275) (Token id:Id.Lit_Chars val:'\ttest_config rerere.enabled true &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\trm -rf .git/rr-cache &&\n' span_id:277) (Token id:Id.Lit_Chars val:'\tgit checkout -b test5 branch1 &&\n' span_id:278) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:279) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge master >/dev/null 2>&1 &&\n' span_id: 280 ) (Token id: Id.Lit_Chars val: '\t( yes "l" | git mergetool --no-prompt submod >/dev/null 2>&1 ) &&\n' span_id: 281 ) (Token id: Id.Lit_Chars val: '\t( yes "d" "d" | git mergetool --no-prompt >/dev/null 2>&1 ) &&\n' span_id: 282 ) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:283) (Token id: Id.Lit_Chars val: '\toutput="$(yes "n" | git mergetool --no-prompt)" &&\n' span_id: 284 ) (Token id:Id.Lit_Chars val:'\ttest "$output" = "No files need merging" &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\tgit reset --hard\n' span_id:286) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'conflicted stash sets up rerere' span_id:293))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:297) (Token id:Id.Lit_Chars val:'\ttest_config rerere.enabled true &&\n' span_id:298) (Token id:Id.Lit_Chars val:'\tgit checkout stash1 &&\n' span_id:299) (Token id: Id.Lit_Chars val: '\techo "Conflicting stash content" >file11 &&\n' span_id: 300 ) (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\n' span_id:302) (Token id:Id.Lit_Chars val:'\tgit checkout --detach stash2 &&\n' span_id:303) (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash apply &&\n' span_id:304) (Token id:Id.Lit_Chars val:'\n' span_id:305) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:306) (Token id:Id.Lit_Chars val:'\tconflicts="$(git rerere remaining)" &&\n' span_id:307) (Token id:Id.Lit_Chars val:'\ttest "$conflicts" = "file11" &&\n' span_id:308) (Token id:Id.Lit_Chars val:'\toutput="$(git mergetool --no-prompt)" &&\n' span_id:309) (Token id: Id.Lit_Chars val: '\ttest "$output" != "No files need merging" &&\n' span_id: 310 ) (Token id:Id.Lit_Chars val:'\n' span_id:311) (Token id: Id.Lit_Chars val: '\tgit commit -am "save the stash resolution" &&\n' span_id: 312 ) (Token id:Id.Lit_Chars val:'\n' span_id:313) (Token id:Id.Lit_Chars val:'\tgit reset --hard stash2 &&\n' span_id:314) (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash apply &&\n' span_id:315) (Token id:Id.Lit_Chars val:'\n' span_id:316) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:317) (Token id: Id.Lit_Chars val: '\tconflicts="$(git rerere remaining)" &&\n' span_id: 318 ) (Token id:Id.Lit_Chars val:'\ttest -z "$conflicts" &&\n' span_id:319) (Token id: Id.Lit_Chars val: '\toutput="$(git mergetool --no-prompt)" &&\n' span_id: 320 ) (Token id:Id.Lit_Chars val:'\ttest "$output" = "No files need merging"\n' span_id:321) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mergetool takes partial path' span_id:328))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:332) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:333) (Token id:Id.Lit_Chars val:'\ttest_config rerere.enabled false &&\n' span_id:334) (Token id:Id.Lit_Chars val:'\tgit checkout -b test12 branch1 &&\n' span_id:335) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:336) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:337) (Token id:Id.Lit_Chars val:'\n' span_id:338) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool subdir ) &&\n' span_id: 339 ) (Token id:Id.Lit_Chars val:'\n' span_id:340) (Token id: Id.Lit_Chars val: '\ttest "$(cat subdir/file3)" = "master new sub" &&\n' span_id: 341 ) (Token id:Id.Lit_Chars val:'\tgit reset --hard\n' span_id:342) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mergetool delete/delete conflict' span_id:349))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:353) (Token id: Id.Lit_Chars val: '\tgit checkout -b delete-base branch1 &&\n' span_id: 354 ) (Token id:Id.Lit_Chars val:'\tmkdir -p a/a &&\n' span_id:355) (Token id: Id.Lit_Chars val: '\t(echo one; echo two; echo 3; echo 4) >a/a/file.txt &&\n' span_id: 356 ) (Token id:Id.Lit_Chars val:'\tgit add a/a/file.txt &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\tgit commit -m"base file" &&\n' span_id:358) (Token id:Id.Lit_Chars val:'\tgit checkout -b move-to-b delete-base &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\tmkdir -p b/b &&\n' span_id:360) (Token id:Id.Lit_Chars val:'\tgit mv a/a/file.txt b/b/file.txt &&\n' span_id:361) (Token id: Id.Lit_Chars val: '\t(echo one; echo two; echo 4) >b/b/file.txt &&\n' span_id: 362 ) (Token id:Id.Lit_Chars val:'\tgit commit -a -m"move to b" &&\n' span_id:363) (Token id: Id.Lit_Chars val: '\tgit checkout -b move-to-c delete-base &&\n' span_id: 364 ) (Token id:Id.Lit_Chars val:'\tmkdir -p c/c &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\tgit mv a/a/file.txt c/c/file.txt &&\n' span_id:366) (Token id:Id.Lit_Chars val:'\t(echo one; echo two; echo 3) >c/c/file.txt &&\n' span_id:367) (Token id:Id.Lit_Chars val:'\tgit commit -a -m"move to c" &&\n' span_id:368) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge move-to-b &&\n' span_id:369) (Token id: Id.Lit_Chars val: '\techo d | git mergetool a/a/file.txt &&\n' span_id: 370 ) (Token id:Id.Lit_Chars val:'\t! test -f a/a/file.txt &&\n' span_id:371) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD &&\n' span_id:372) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge move-to-b &&\n' span_id:373) (Token id: Id.Lit_Chars val: '\techo m | git mergetool a/a/file.txt &&\n' span_id: 374 ) (Token id:Id.Lit_Chars val:'\ttest -f b/b/file.txt &&\n' span_id:375) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD &&\n' span_id:376) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge move-to-b &&\n' span_id:377) (Token id: Id.Lit_Chars val: '\t! echo a | git mergetool a/a/file.txt &&\n' span_id: 378 ) (Token id:Id.Lit_Chars val:'\t! test -f a/a/file.txt &&\n' span_id:379) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD\n' span_id:380) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'mergetool produces no errors when keepBackup is used' span_id: 387 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:391) (Token id: Id.Lit_Chars val: '\ttest_config mergetool.keepBackup true &&\n' span_id: 392 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge move-to-b &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\t: >expect &&\n' span_id:394) (Token id:Id.Lit_Chars val:'\techo d | git mergetool a/a/file.txt 2>actual &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:396) (Token id:Id.Lit_Chars val:'\t! test -d a &&\n' span_id:397) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD\n' span_id:398) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'mergetool honors tempfile config for deleted files' span_id: 405 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:409) (Token id: Id.Lit_Chars val: '\ttest_config mergetool.keepTemporaries false &&\n' span_id: 410 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge move-to-b &&\n' span_id:411) (Token id: Id.Lit_Chars val: '\techo d | git mergetool a/a/file.txt &&\n' span_id: 412 ) (Token id:Id.Lit_Chars val:'\t! test -d a &&\n' span_id:413) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD\n' span_id:414) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'mergetool keeps tempfiles when aborting delete/delete' span_id: 421 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:425) (Token id: Id.Lit_Chars val: '\ttest_config mergetool.keepTemporaries true &&\n' span_id: 426 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge move-to-b &&\n' span_id:427) (Token id: Id.Lit_Chars val: '\t! (echo a; echo n) | git mergetool a/a/file.txt &&\n' span_id: 428 ) (Token id:Id.Lit_Chars val:'\ttest -d a/a &&\n' span_id:429) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:430) (Token id:Id.Lit_Chars val:'\tfile_BASE_.txt\n' span_id:431) (Token id:Id.Lit_Chars val:'\tfile_LOCAL_.txt\n' span_id:432) (Token id:Id.Lit_Chars val:'\tfile_REMOTE_.txt\n' span_id:433) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:434) (Token id:Id.Lit_Chars val:'\tls -1 a/a | sed -e "s/[0-9]*//g" >actual &&\n' span_id:435) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:436) (Token id:Id.Lit_Chars val:'\tgit clean -fdx &&\n' span_id:437) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD\n' span_id:438) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'deleted vs modified submodule' span_id:445))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:449) (Token id:Id.Lit_Chars val:'\tgit checkout -b test6 branch1 &&\n' span_id:450) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:451) (Token id:Id.Lit_Chars val:'\tmv submod submod-movedaside &&\n' span_id:452) (Token id:Id.Lit_Chars val:'\tgit rm --cached submod &&\n' span_id:453) (Token id: Id.Lit_Chars val: '\tgit commit -m "Submodule deleted from branch" &&\n' span_id: 454 ) (Token id:Id.Lit_Chars val:'\tgit checkout -b test6.a test6 &&\n' span_id:455) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:456) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:457) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool file1 file2 spaced\\ name subdir/file3 >/dev/null 2>&1 ) &&\n' span_id: 458 ) (Token id:Id.Lit_Chars val:'\t( yes "" | git mergetool both >/dev/null 2>&1 ) &&\n' span_id:459) (Token id: Id.Lit_Chars val: '\t( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&\n' span_id: 460 ) (Token id:Id.Lit_Chars val:'\t( yes "r" | git mergetool submod ) &&\n' span_id:461) (Token id: Id.Lit_Chars val: '\trmdir submod && mv submod-movedaside submod &&\n' span_id: 462 ) (Token id:Id.Lit_Chars val:'\ttest "$(cat submod/bar)" = "branch1 submodule" &&\n' span_id:463) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:464) (Token id:Id.Lit_Chars val:'\ttest "$(cat submod/bar)" = "master submodule" &&\n' span_id:465) (Token id: Id.Lit_Chars val: '\toutput="$(git mergetool --no-prompt)" &&\n' span_id: 466 ) (Token id:Id.Lit_Chars val:'\ttest "$output" = "No files need merging" &&\n' span_id:467) (Token id: Id.Lit_Chars val: '\tgit commit -m "Merge resolved by keeping module" &&\n' span_id: 468 ) (Token id:Id.Lit_Chars val:'\n' span_id:469) (Token id:Id.Lit_Chars val:'\tmv submod submod-movedaside &&\n' span_id:470) (Token id:Id.Lit_Chars val:'\tgit checkout -b test6.b test6 &&\n' span_id:471) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:472) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:473) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:474) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool file1 file2 spaced\\ name subdir/file3 >/dev/null 2>&1 ) &&\n' span_id: 475 ) (Token id:Id.Lit_Chars val:'\t( yes "" | git mergetool both >/dev/null 2>&1 ) &&\n' span_id:476) (Token id: Id.Lit_Chars val: '\t( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&\n' span_id: 477 ) (Token id:Id.Lit_Chars val:'\t( yes "l" | git mergetool submod ) &&\n' span_id:478) (Token id:Id.Lit_Chars val:'\ttest ! -e submod &&\n' span_id:479) (Token id:Id.Lit_Chars val:'\toutput="$(git mergetool --no-prompt)" &&\n' span_id:480) (Token id: Id.Lit_Chars val: '\ttest "$output" = "No files need merging" &&\n' span_id: 481 ) (Token id:Id.Lit_Chars val:'\tgit commit -m "Merge resolved by deleting module" &&\n' span_id:482) (Token id:Id.Lit_Chars val:'\n' span_id:483) (Token id:Id.Lit_Chars val:'\tmv submod-movedaside submod &&\n' span_id:484) (Token id:Id.Lit_Chars val:'\tgit checkout -b test6.c master &&\n' span_id:485) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:486) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge test6 &&\n' span_id:487) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:488) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool file1 file2 spaced\\ name subdir/file3 >/dev/null 2>&1 ) &&\n' span_id: 489 ) (Token id:Id.Lit_Chars val:'\t( yes "" | git mergetool both >/dev/null 2>&1 ) &&\n' span_id:490) (Token id: Id.Lit_Chars val: '\t( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&\n' span_id: 491 ) (Token id:Id.Lit_Chars val:'\t( yes "r" | git mergetool submod ) &&\n' span_id:492) (Token id:Id.Lit_Chars val:'\ttest ! -e submod &&\n' span_id:493) (Token id:Id.Lit_Chars val:'\ttest -d submod.orig &&\n' span_id:494) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:495) (Token id:Id.Lit_Chars val:'\toutput="$(git mergetool --no-prompt)" &&\n' span_id:496) (Token id: Id.Lit_Chars val: '\ttest "$output" = "No files need merging" &&\n' span_id: 497 ) (Token id:Id.Lit_Chars val:'\tgit commit -m "Merge resolved by deleting module" &&\n' span_id:498) (Token id:Id.Lit_Chars val:'\tmv submod.orig submod &&\n' span_id:499) (Token id:Id.Lit_Chars val:'\n' span_id:500) (Token id:Id.Lit_Chars val:'\tgit checkout -b test6.d master &&\n' span_id:501) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:502) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge test6 &&\n' span_id:503) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:504) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool file1 file2 spaced\\ name subdir/file3 >/dev/null 2>&1 ) &&\n' span_id: 505 ) (Token id:Id.Lit_Chars val:'\t( yes "" | git mergetool both >/dev/null 2>&1 ) &&\n' span_id:506) (Token id: Id.Lit_Chars val: '\t( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&\n' span_id: 507 ) (Token id:Id.Lit_Chars val:'\t( yes "l" | git mergetool submod ) &&\n' span_id:508) (Token id: Id.Lit_Chars val: '\ttest "$(cat submod/bar)" = "master submodule" &&\n' span_id: 509 ) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:510) (Token id: Id.Lit_Chars val: '\ttest "$(cat submod/bar)" = "master submodule" &&\n' span_id: 511 ) (Token id:Id.Lit_Chars val:'\toutput="$(git mergetool --no-prompt)" &&\n' span_id:512) (Token id: Id.Lit_Chars val: '\ttest "$output" = "No files need merging" &&\n' span_id: 513 ) (Token id:Id.Lit_Chars val:'\tgit commit -m "Merge resolved by keeping module" &&\n' span_id:514) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD\n' span_id:515) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'file vs modified submodule' span_id:522))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:526) (Token id:Id.Lit_Chars val:'\tgit checkout -b test7 branch1 &&\n' span_id:527) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:528) (Token id:Id.Lit_Chars val:'\tmv submod submod-movedaside &&\n' span_id:529) (Token id:Id.Lit_Chars val:'\tgit rm --cached submod &&\n' span_id:530) (Token id:Id.Lit_Chars val:'\techo not a submodule >submod &&\n' span_id:531) (Token id:Id.Lit_Chars val:'\tgit add submod &&\n' span_id:532) (Token id: Id.Lit_Chars val: '\tgit commit -m "Submodule path becomes file" &&\n' span_id: 533 ) (Token id:Id.Lit_Chars val:'\tgit checkout -b test7.a branch1 &&\n' span_id:534) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:535) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:536) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool file1 file2 spaced\\ name subdir/file3 >/dev/null 2>&1 ) &&\n' span_id: 537 ) (Token id:Id.Lit_Chars val:'\t( yes "" | git mergetool both >/dev/null 2>&1 ) &&\n' span_id:538) (Token id: Id.Lit_Chars val: '\t( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&\n' span_id: 539 ) (Token id:Id.Lit_Chars val:'\t( yes "r" | git mergetool submod ) &&\n' span_id:540) (Token id: Id.Lit_Chars val: '\trmdir submod && mv submod-movedaside submod &&\n' span_id: 541 ) (Token id:Id.Lit_Chars val:'\ttest "$(cat submod/bar)" = "branch1 submodule" &&\n' span_id:542) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:543) (Token id:Id.Lit_Chars val:'\ttest "$(cat submod/bar)" = "master submodule" &&\n' span_id:544) (Token id: Id.Lit_Chars val: '\toutput="$(git mergetool --no-prompt)" &&\n' span_id: 545 ) (Token id:Id.Lit_Chars val:'\ttest "$output" = "No files need merging" &&\n' span_id:546) (Token id: Id.Lit_Chars val: '\tgit commit -m "Merge resolved by keeping module" &&\n' span_id: 547 ) (Token id:Id.Lit_Chars val:'\n' span_id:548) (Token id:Id.Lit_Chars val:'\tmv submod submod-movedaside &&\n' span_id:549) (Token id:Id.Lit_Chars val:'\tgit checkout -b test7.b test7 &&\n' span_id:550) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:551) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:552) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool file1 file2 spaced\\ name subdir/file3 >/dev/null 2>&1 ) &&\n' span_id: 553 ) (Token id:Id.Lit_Chars val:'\t( yes "" | git mergetool both >/dev/null 2>&1 ) &&\n' span_id:554) (Token id: Id.Lit_Chars val: '\t( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&\n' span_id: 555 ) (Token id:Id.Lit_Chars val:'\t( yes "l" | git mergetool submod ) &&\n' span_id:556) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:557) (Token id:Id.Lit_Chars val:'\ttest "$(cat submod)" = "not a submodule" &&\n' span_id:558) (Token id: Id.Lit_Chars val: '\toutput="$(git mergetool --no-prompt)" &&\n' span_id: 559 ) (Token id:Id.Lit_Chars val:'\ttest "$output" = "No files need merging" &&\n' span_id:560) (Token id: Id.Lit_Chars val: '\tgit commit -m "Merge resolved by keeping file" &&\n' span_id: 561 ) (Token id:Id.Lit_Chars val:'\n' span_id:562) (Token id:Id.Lit_Chars val:'\tgit checkout -b test7.c master &&\n' span_id:563) (Token id:Id.Lit_Chars val:'\trmdir submod && mv submod-movedaside submod &&\n' span_id:564) (Token id:Id.Lit_Chars val:'\ttest ! -e submod.orig &&\n' span_id:565) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:566) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge test7 &&\n' span_id:567) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:568) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool file1 file2 spaced\\ name subdir/file3 >/dev/null 2>&1 ) &&\n' span_id: 569 ) (Token id:Id.Lit_Chars val:'\t( yes "" | git mergetool both >/dev/null 2>&1 ) &&\n' span_id:570) (Token id: Id.Lit_Chars val: '\t( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&\n' span_id: 571 ) (Token id:Id.Lit_Chars val:'\t( yes "r" | git mergetool submod ) &&\n' span_id:572) (Token id:Id.Lit_Chars val:'\ttest -d submod.orig &&\n' span_id:573) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:574) (Token id: Id.Lit_Chars val: '\ttest "$(cat submod)" = "not a submodule" &&\n' span_id: 575 ) (Token id:Id.Lit_Chars val:'\toutput="$(git mergetool --no-prompt)" &&\n' span_id:576) (Token id: Id.Lit_Chars val: '\ttest "$output" = "No files need merging" &&\n' span_id: 577 ) (Token id:Id.Lit_Chars val:'\tgit commit -m "Merge resolved by keeping file" &&\n' span_id:578) (Token id:Id.Lit_Chars val:'\n' span_id:579) (Token id:Id.Lit_Chars val:'\tgit checkout -b test7.d master &&\n' span_id:580) (Token id: Id.Lit_Chars val: '\trmdir submod && mv submod.orig submod &&\n' span_id: 581 ) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:582) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge test7 &&\n' span_id:583) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:584) (Token id: Id.Lit_Chars val: '\t( yes "" | git mergetool file1 file2 spaced\\ name subdir/file3 >/dev/null 2>&1 ) &&\n' span_id: 585 ) (Token id:Id.Lit_Chars val:'\t( yes "" | git mergetool both>/dev/null 2>&1 ) &&\n' span_id:586) (Token id: Id.Lit_Chars val: '\t( yes "d" | git mergetool file11 file12 >/dev/null 2>&1 ) &&\n' span_id: 587 ) (Token id:Id.Lit_Chars val:'\t( yes "l" | git mergetool submod ) &&\n' span_id:588) (Token id: Id.Lit_Chars val: '\ttest "$(cat submod/bar)" = "master submodule" &&\n' span_id: 589 ) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:590) (Token id: Id.Lit_Chars val: '\ttest "$(cat submod/bar)" = "master submodule" &&\n' span_id: 591 ) (Token id:Id.Lit_Chars val:'\toutput="$(git mergetool --no-prompt)" &&\n' span_id:592) (Token id: Id.Lit_Chars val: '\ttest "$output" = "No files need merging" &&\n' span_id: 593 ) (Token id:Id.Lit_Chars val:'\tgit commit -m "Merge resolved by keeping module"\n' span_id:594) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule in subdirectory' span_id:601))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:605) (Token id:Id.Lit_Chars val:'\tgit checkout -b test10 branch1 &&\n' span_id:606) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:607) (Token id:Id.Lit_Chars val:'\t(\n' span_id:608) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:609) (Token id:Id.Lit_Chars val:'\t\ttest_create_repo subdir_module &&\n' span_id:610) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:611) (Token id:Id.Lit_Chars val:'\t\tcd subdir_module &&\n' span_id:612) (Token id:Id.Lit_Chars val:'\t\t: >file15 &&\n' span_id:613) (Token id:Id.Lit_Chars val:'\t\tgit add file15 &&\n' span_id:614) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "add initial versions"\n' span_id:615) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:616) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:617) (Token id: Id.Lit_Chars val: '\tgit submodule add git://example.com/subsubmodule subdir/subdir_module &&\n' span_id: 618 ) (Token id:Id.Lit_Chars val:'\tgit add subdir/subdir_module &&\n' span_id:619) (Token id: Id.Lit_Chars val: '\tgit commit -m "add submodule in subdirectory" &&\n' span_id: 620 ) (Token id:Id.Lit_Chars val:'\n' span_id:621) (Token id:Id.Lit_Chars val:'\tgit checkout -b test10.a test10 &&\n' span_id:622) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:623) (Token id:Id.Lit_Chars val:'\t(\n' span_id:624) (Token id:Id.Lit_Chars val:'\tcd subdir/subdir_module &&\n' span_id:625) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b super10.a &&\n' span_id:626) (Token id:Id.Lit_Chars val:'\t\techo test10.a >file15 &&\n' span_id:627) (Token id:Id.Lit_Chars val:'\t\tgit add file15 &&\n' span_id:628) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "on branch 10.a"\n' span_id:629) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:630) (Token id:Id.Lit_Chars val:'\tgit add subdir/subdir_module &&\n' span_id:631) (Token id: Id.Lit_Chars val: '\tgit commit -m "change submodule in subdirectory on test10.a" &&\n' span_id: 632 ) (Token id:Id.Lit_Chars val:'\n' span_id:633) (Token id:Id.Lit_Chars val:'\tgit checkout -b test10.b test10 &&\n' span_id:634) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:635) (Token id:Id.Lit_Chars val:'\t(\n' span_id:636) (Token id:Id.Lit_Chars val:'\t\tcd subdir/subdir_module &&\n' span_id:637) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b super10.b &&\n' span_id:638) (Token id:Id.Lit_Chars val:'\t\techo test10.b >file15 &&\n' span_id:639) (Token id:Id.Lit_Chars val:'\t\tgit add file15 &&\n' span_id:640) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "on branch 10.b"\n' span_id:641) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:642) (Token id:Id.Lit_Chars val:'\tgit add subdir/subdir_module &&\n' span_id:643) (Token id: Id.Lit_Chars val: '\tgit commit -m "change submodule in subdirectory on test10.b" &&\n' span_id: 644 ) (Token id:Id.Lit_Chars val:'\n' span_id:645) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge test10.a >/dev/null 2>&1 &&\n' span_id: 646 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:647) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:648) (Token id:Id.Lit_Chars val:'\t\t( yes "l" | git mergetool subdir_module )\n' span_id:649) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:650) (Token id: Id.Lit_Chars val: '\ttest "$(cat subdir/subdir_module/file15)" = "test10.b" &&\n' span_id: 651 ) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:652) (Token id: Id.Lit_Chars val: '\ttest "$(cat subdir/subdir_module/file15)" = "test10.b" &&\n' span_id: 653 ) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:654) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:655) (Token id:Id.Lit_Chars val:'\n' span_id:656) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge test10.a >/dev/null 2>&1 &&\n' span_id: 657 ) (Token id:Id.Lit_Chars val:'\t( yes "r" | git mergetool subdir/subdir_module ) &&\n' span_id:658) (Token id: Id.Lit_Chars val: '\ttest "$(cat subdir/subdir_module/file15)" = "test10.b" &&\n' span_id: 659 ) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:660) (Token id: Id.Lit_Chars val: '\ttest "$(cat subdir/subdir_module/file15)" = "test10.a" &&\n' span_id: 661 ) (Token id:Id.Lit_Chars val:'\tgit commit -m "branch1 resolved with mergetool" &&\n' span_id:662) (Token id:Id.Lit_Chars val:'\trm -rf subdir/subdir_module\n' span_id:663) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'directory vs modified submodule' span_id:670))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:674) (Token id:Id.Lit_Chars val:'\tgit checkout -b test11 branch1 &&\n' span_id:675) (Token id:Id.Lit_Chars val:'\tmv submod submod-movedaside &&\n' span_id:676) (Token id:Id.Lit_Chars val:'\tgit rm --cached submod &&\n' span_id:677) (Token id:Id.Lit_Chars val:'\tmkdir submod &&\n' span_id:678) (Token id: Id.Lit_Chars val: '\techo not a submodule >submod/file16 &&\n' span_id: 679 ) (Token id:Id.Lit_Chars val:'\tgit add submod/file16 &&\n' span_id:680) (Token id: Id.Lit_Chars val: '\tgit commit -m "Submodule path becomes directory" &&\n' span_id: 681 ) (Token id:Id.Lit_Chars val:'\n' span_id:682) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:683) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:684) (Token id: Id.Lit_Chars val: '\t( yes "l" | git mergetool submod ) &&\n' span_id: 685 ) (Token id:Id.Lit_Chars val:'\ttest "$(cat submod/file16)" = "not a submodule" &&\n' span_id:686) (Token id:Id.Lit_Chars val:'\trm -rf submod.orig &&\n' span_id:687) (Token id:Id.Lit_Chars val:'\n' span_id:688) (Token id:Id.Lit_Chars val:'\tgit reset --hard >/dev/null 2>&1 &&\n' span_id:689) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:690) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:691) (Token id:Id.Lit_Chars val:'\ttest ! -e submod.orig &&\n' span_id:692) (Token id: Id.Lit_Chars val: '\t( yes "r" | git mergetool submod ) &&\n' span_id: 693 ) (Token id:Id.Lit_Chars val:'\ttest -d submod.orig &&\n' span_id:694) (Token id: Id.Lit_Chars val: '\ttest "$(cat submod.orig/file16)" = "not a submodule" &&\n' span_id: 695 ) (Token id:Id.Lit_Chars val:'\trm -r submod.orig &&\n' span_id:696) (Token id:Id.Lit_Chars val:'\tmv submod-movedaside/.git submod &&\n' span_id:697) (Token id:Id.Lit_Chars val:'\t( cd submod && git clean -f && git reset --hard ) &&\n' span_id:698) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:699) (Token id:Id.Lit_Chars val:'\ttest "$(cat submod/bar)" = "master submodule" &&\n' span_id:700) (Token id: Id.Lit_Chars val: '\tgit reset --hard >/dev/null 2>&1 && rm -rf submod-movedaside &&\n' span_id: 701 ) (Token id:Id.Lit_Chars val:'\n' span_id:702) (Token id:Id.Lit_Chars val:'\tgit checkout -b test11.c master &&\n' span_id:703) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:704) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge test11 &&\n' span_id:705) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:706) (Token id: Id.Lit_Chars val: '\t( yes "l" | git mergetool submod ) &&\n' span_id: 707 ) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:708) (Token id: Id.Lit_Chars val: '\ttest "$(cat submod/bar)" = "master submodule" &&\n' span_id: 709 ) (Token id:Id.Lit_Chars val:'\n' span_id:710) (Token id:Id.Lit_Chars val:'\tgit reset --hard >/dev/null 2>&1 &&\n' span_id:711) (Token id:Id.Lit_Chars val:'\tgit submodule update -N &&\n' span_id:712) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge test11 &&\n' span_id:713) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:714) (Token id:Id.Lit_Chars val:'\ttest ! -e submod.orig &&\n' span_id:715) (Token id:Id.Lit_Chars val:'\t( yes "r" | git mergetool submod ) &&\n' span_id:716) (Token id: Id.Lit_Chars val: '\ttest "$(cat submod/file16)" = "not a submodule" &&\n' span_id: 717 ) (Token id:Id.Lit_Chars val:'\n' span_id:718) (Token id: Id.Lit_Chars val: '\tgit reset --hard master >/dev/null 2>&1 &&\n' span_id: 719 ) (Token id:Id.Lit_Chars val:'\t( cd submod && git clean -f && git reset --hard ) &&\n' span_id:720) (Token id:Id.Lit_Chars val:'\tgit submodule update -N\n' span_id:721) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'file with no base' span_id:728))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:732) (Token id:Id.Lit_Chars val:'\tgit checkout -b test13 branch1 &&\n' span_id:733) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:734) (Token id: Id.Lit_Chars val: '\tgit mergetool --no-prompt --tool mybase -- both &&\n' span_id: 735 ) (Token id:Id.Lit_Chars val:'\t>expected &&\n' span_id:736) (Token id:Id.Lit_Chars val:'\ttest_cmp both expected &&\n' span_id:737) (Token id:Id.Lit_Chars val:'\tgit reset --hard master >/dev/null 2>&1\n' span_id:738) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'custom commands override built-ins' span_id:745))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:749) (Token id:Id.Lit_Chars val:'\tgit checkout -b test14 branch1 &&\n' span_id:750) (Token id: Id.Lit_Chars val: '\ttest_config mergetool.defaults.cmd "cat \\"\\$REMOTE\\" >\\"\\$MERGED\\"" &&\n' span_id: 751 ) (Token id:Id.Lit_Chars val:'\ttest_config mergetool.defaults.trustExitCode true &&\n' span_id:752) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:753) (Token id:Id.Lit_Chars val:'\tgit mergetool --no-prompt --tool defaults -- both &&\n' span_id:754) (Token id:Id.Lit_Chars val:'\techo master both added >expected &&\n' span_id:755) (Token id:Id.Lit_Chars val:'\ttest_cmp both expected &&\n' span_id:756) (Token id: Id.Lit_Chars val: '\tgit reset --hard master >/dev/null 2>&1\n' span_id: 757 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'filenames seen by tools start with ./' span_id:764))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:768) (Token id:Id.Lit_Chars val:'\tgit checkout -b test15 branch1 &&\n' span_id:769) (Token id:Id.Lit_Chars val:'\ttest_config mergetool.writeToTemp false &&\n' span_id:770) (Token id: Id.Lit_Chars val: '\ttest_config mergetool.myecho.cmd "echo \\"\\$LOCAL\\"" &&\n' span_id: 771 ) (Token id:Id.Lit_Chars val:'\ttest_config mergetool.myecho.trustExitCode true &&\n' span_id:772) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:773) (Token id: Id.Lit_Chars val: '\tgit mergetool --no-prompt --tool myecho -- both >actual &&\n' span_id: 774 ) (Token id:Id.Lit_Chars val:'\tgrep ^\\./both_LOCAL_ actual >/dev/null &&\n' span_id:775) (Token id: Id.Lit_Chars val: '\tgit reset --hard master >/dev/null 2>&1\n' span_id: 776 ) ) } ) (C {(test_lazy_prereq)} {(MKTEMP)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:785) (Token id: Id.Lit_Chars val: '\ttempdir=$(mktemp -d -t foo.XXXXXX) &&\n' span_id: 786 ) (Token id:Id.Lit_Chars val:'\ttest -d "$tempdir"\n' span_id:787) ) } ) (C {(test_expect_success)} {(MKTEMP)} { (SQ (Token id: Id.Lit_Chars val: 'temporary filenames are used with mergetool.writeToTemp' span_id: 796 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:800) (Token id:Id.Lit_Chars val:'\tgit checkout -b test16 branch1 &&\n' span_id:801) (Token id:Id.Lit_Chars val:'\ttest_config mergetool.writeToTemp true &&\n' span_id:802) (Token id: Id.Lit_Chars val: '\ttest_config mergetool.myecho.cmd "echo \\"\\$LOCAL\\"" &&\n' span_id: 803 ) (Token id:Id.Lit_Chars val:'\ttest_config mergetool.myecho.trustExitCode true &&\n' span_id:804) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge master &&\n' span_id:805) (Token id: Id.Lit_Chars val: '\tgit mergetool --no-prompt --tool myecho -- both >actual &&\n' span_id: 806 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail grep ^\\./both_LOCAL_ actual >/dev/null &&\n' span_id: 807 ) (Token id:Id.Lit_Chars val:'\tgrep /both_LOCAL_ actual >/dev/null &&\n' span_id:808) (Token id: Id.Lit_Chars val: '\tgit reset --hard master >/dev/null 2>&1\n' span_id: 809 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff.orderFile configuration is honored' span_id:816))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:820) (Token id: Id.Lit_Chars val: '\ttest_config diff.orderFile order-file &&\n' span_id: 821 ) (Token id: Id.Lit_Chars val: '\ttest_config mergetool.myecho.cmd "echo \\"\\$LOCAL\\"" &&\n' span_id: 822 ) (Token id:Id.Lit_Chars val:'\ttest_config mergetool.myecho.trustExitCode true &&\n' span_id:823) (Token id:Id.Lit_Chars val:'\techo b >order-file &&\n' span_id:824) (Token id:Id.Lit_Chars val:'\techo a >>order-file &&\n' span_id:825) (Token id: Id.Lit_Chars val: '\tgit checkout -b order-file-start master &&\n' span_id: 826 ) (Token id:Id.Lit_Chars val:'\techo start >a &&\n' span_id:827) (Token id:Id.Lit_Chars val:'\techo start >b &&\n' span_id:828) (Token id:Id.Lit_Chars val:'\tgit add a b &&\n' span_id:829) (Token id:Id.Lit_Chars val:'\tgit commit -m start &&\n' span_id:830) (Token id:Id.Lit_Chars val:'\tgit checkout -b order-file-side1 order-file-start &&\n' span_id:831) (Token id:Id.Lit_Chars val:'\techo side1 >a &&\n' span_id:832) (Token id:Id.Lit_Chars val:'\techo side1 >b &&\n' span_id:833) (Token id:Id.Lit_Chars val:'\tgit add a b &&\n' span_id:834) (Token id:Id.Lit_Chars val:'\tgit commit -m side1 &&\n' span_id:835) (Token id: Id.Lit_Chars val: '\tgit checkout -b order-file-side2 order-file-start &&\n' span_id: 836 ) (Token id:Id.Lit_Chars val:'\techo side2 >a &&\n' span_id:837) (Token id:Id.Lit_Chars val:'\techo side2 >b &&\n' span_id:838) (Token id:Id.Lit_Chars val:'\tgit add a b &&\n' span_id:839) (Token id:Id.Lit_Chars val:'\tgit commit -m side2 &&\n' span_id:840) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge order-file-side1 &&\n' span_id:841) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:842) (Token id:Id.Lit_Chars val:'\t\tMerging:\n' span_id:843) (Token id:Id.Lit_Chars val:'\t\tb\n' span_id:844) (Token id:Id.Lit_Chars val:'\t\ta\n' span_id:845) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:846) (Token id: Id.Lit_Chars val: '\tgit mergetool --no-prompt --tool myecho >output &&\n' span_id: 847 ) (Token id:Id.Lit_Chars val:'\tgit grep --no-index -h -A2 Merging: output >actual &&\n' span_id:848) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:849) (Token id:Id.Lit_Chars val:'\tgit reset --hard >/dev/null\n' span_id:850) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mergetool -Oorder-file is honored' span_id:856))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:860) (Token id: Id.Lit_Chars val: '\ttest_config diff.orderFile order-file &&\n' span_id: 861 ) (Token id: Id.Lit_Chars val: '\ttest_config mergetool.myecho.cmd "echo \\"\\$LOCAL\\"" &&\n' span_id: 862 ) (Token id:Id.Lit_Chars val:'\ttest_config mergetool.myecho.trustExitCode true &&\n' span_id:863) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge order-file-side1 &&\n' span_id: 864 ) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:865) (Token id:Id.Lit_Chars val:'\t\tMerging:\n' span_id:866) (Token id:Id.Lit_Chars val:'\t\ta\n' span_id:867) (Token id:Id.Lit_Chars val:'\t\tb\n' span_id:868) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:869) (Token id: Id.Lit_Chars val: '\tgit mergetool -O/dev/null --no-prompt --tool myecho >output &&\n' span_id: 870 ) (Token id:Id.Lit_Chars val:'\tgit grep --no-index -h -A2 Merging: output >actual &&\n' span_id:871) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:872) (Token id:Id.Lit_Chars val:'\tgit reset --hard >/dev/null 2>&1 &&\n' span_id:873) (Token id:Id.Lit_Chars val:'\n' span_id:874) (Token id:Id.Lit_Chars val:'\tgit config --unset diff.orderFile &&\n' span_id:875) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge order-file-side1 &&\n' span_id: 876 ) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:877) (Token id:Id.Lit_Chars val:'\t\tMerging:\n' span_id:878) (Token id:Id.Lit_Chars val:'\t\tb\n' span_id:879) (Token id:Id.Lit_Chars val:'\t\ta\n' span_id:880) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:881) (Token id: Id.Lit_Chars val: '\tgit mergetool -Oorder-file --no-prompt --tool myecho >output &&\n' span_id: 882 ) (Token id:Id.Lit_Chars val:'\tgit grep --no-index -h -A2 Merging: output >actual &&\n' span_id:883) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:884) (Token id:Id.Lit_Chars val:'\tgit reset --hard >/dev/null 2>&1\n' span_id:885) ) } ) (C {(test_done)}) ] )