(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)})
  ]
)