(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-merge\n' span_id:6) 
                (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id:Id.Lit_Chars val:'Do not overwrite changes.' span_id:8)
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:20))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\ttest_commit c0 c0.c &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\ttest_commit c1 c1.c &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\ttest_commit c1a c1.c "c1 a" &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\ttest_commit c2 c2.c &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\techo "sub/f" > sub/f &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\tmkdir sub2 &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\techo "sub2/f" > sub2/f &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\tgit add sub/f sub2/f &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\tgit commit -m sub &&\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\tgit tag sub &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\techo "VERY IMPORTANT CHANGES" > important\n' span_id:38)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'will not overwrite untracked file' span_id:45))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\tcp important c2.c &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c2 &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp important c2.c\n' span_id:54)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'will overwrite tracked file' span_id:61))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\tcp important c2.c &&\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\tgit add c2.c &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit commit -m important &&\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\tgit checkout c2\n' span_id:70)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'will not overwrite new file' span_id:77))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\tcp important c2.c &&\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\tgit add c2.c &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c2 &&\n' span_id:85) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_missing .git/MERGE_HEAD &&\n'
            span_id: 86
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp important c2.c\n' span_id:87)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'will not overwrite staged changes' span_id:94))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\tcp important c2.c &&\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\tgit add c2.c &&\n' span_id:101) (Token id:Id.Lit_Chars val:'\trm c2.c &&\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c2 &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\tgit checkout c2.c &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\ttest_cmp important c2.c\n' span_id:106)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'will not overwrite removed file' span_id:113))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:117) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:118) (Token id:Id.Lit_Chars val:'\tgit rm c1.c &&\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "rm c1.c" &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\tcp important c1.c &&\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c1a &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\ttest_cmp important c1.c\n' span_id:123)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'will not overwrite re-added file' span_id:130))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\tgit rm c1.c &&\n' span_id:136) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "rm c1.c" &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\tcp important c1.c &&\n' span_id:138) 
          (Token id:Id.Lit_Chars val:'\tgit add c1.c &&\n' span_id:139) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c1a &&\n' span_id:140) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_missing .git/MERGE_HEAD &&\n'
            span_id: 141
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp important c1.c\n' span_id:142)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'will not overwrite removed file with staged changes'
            span_id: 149
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\tgit rm c1.c &&\n' span_id:155) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "rm c1.c" &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\tcp important c1.c &&\n' span_id:157) 
          (Token id:Id.Lit_Chars val:'\tgit add c1.c &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\trm c1.c &&\n' span_id:159) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c1a &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id:161) 
          (Token id:Id.Lit_Chars val:'\tgit checkout c1.c &&\n' span_id:162) (Token id:Id.Lit_Chars val:'\ttest_cmp important c1.c\n' span_id:163)
        )
      }
    )
    (C {(test_expect_failure)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'will not overwrite unstaged changes in renamed file'
            span_id: 170
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:174) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:175) (Token id:Id.Lit_Chars val:'\tgit mv c1.c other.c &&\n' span_id:176) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m rename &&\n' span_id:177) (Token id:Id.Lit_Chars val:'\tcp important other.c &&\n' span_id:178) 
          (Token id:Id.Lit_Chars val:'\tgit merge c1a &&\n' span_id:179) (Token id:Id.Lit_Chars val:'\ttest_cmp important other.c\n' span_id:180)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'will not overwrite untracked subtree' span_id:187))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:191) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\trm -rf sub &&\n' span_id:193) 
          (Token id:Id.Lit_Chars val:'\tmkdir -p sub/f &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\tcp important sub/f/important &&\n' span_id:195) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge sub &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id:197) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp important sub/f/important\n' span_id:198)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:204)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:207)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:208)) 
              (OF)
            }
          here_end_span_id: 216
          stdin_parts: [
            ('error: The following untracked working tree files would be overwritten by merge:\n')
            ('\tsub\n')
            ('\tsub2\n')
            ('Please move or remove them before you merge.\n')
            ('Aborting\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'will not overwrite untracked file in leading path'
            span_id: 221
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:225) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:226) (Token id:Id.Lit_Chars val:'\trm -rf sub &&\n' span_id:227) 
          (Token id:Id.Lit_Chars val:'\tcp important sub &&\n' span_id:228) (Token id:Id.Lit_Chars val:'\tcp important sub2 &&\n' span_id:229) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge sub 2>out &&\n'
            span_id: 230
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp out expect &&\n' span_id:231) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_missing .git/MERGE_HEAD &&\n'
            span_id: 232
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp important sub &&\n' span_id:233) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp important sub2 &&\n' span_id:234) (Token id:Id.Lit_Chars val:'\trm -f sub sub2\n' span_id:235)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'will not overwrite untracked symlink in leading path'
            span_id: 244
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\trm -rf sub &&\n' span_id:250) 
          (Token id:Id.Lit_Chars val:'\tmkdir sub2 &&\n' span_id:251) (Token id:Id.Lit_Chars val:'\tln -s sub2 sub &&\n' span_id:252) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge sub &&\n' span_id:253) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD\n' span_id:254)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'will not be confused by symlink in leading path' span_id:261))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:265) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\trm -rf sub &&\n' span_id:267) 
          (Token id:Id.Lit_Chars val:'\ttest_ln_s_add sub2 sub &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\tgit commit -m ln &&\n' span_id:269) 
          (Token id:Id.Lit_Chars val:'\tgit checkout sub\n' span_id:270)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:276)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:279)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:280)) 
              (OF)
            }
          here_end_span_id: 285
          stdin_parts: [
            ("error: Untracked working tree file 'c0.c' would be overwritten by merge.\n")
            ('fatal: read-tree failed\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'will not overwrite untracked file on unborn branch'
            span_id: 290
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:294) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:296) 
          (Token id:Id.Lit_Chars val:'\tgit checkout --orphan new &&\n' span_id:297) (Token id:Id.Lit_Chars val:'\tcp important c0.c &&\n' span_id:298) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge c0 2>out &&\n'
            span_id: 299
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp out expect\n' span_id:300)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'will not overwrite untracked file on unborn branch .git/MERGE_HEAD sanity etc.'
            span_id: 307
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:311) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm c0.c" &&\n' span_id:312) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/MERGE_HEAD &&\n' span_id:313) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp important c0.c\n' span_id:314)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'failed merge leaves unborn branch in the womb' span_id:321))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:325) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify HEAD\n'
            span_id: 326
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'set up unborn branch and content' span_id:333))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:337) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit symbolic-ref HEAD refs/heads/unborn &&\n'
            span_id: 338
          ) (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:339) 
          (Token id:Id.Lit_Chars val:'\techo foo > tracked-file &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\tgit add tracked-file &&\n' span_id:341) 
          (Token id:Id.Lit_Chars val:'\techo bar > untracked-file\n' span_id:342)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'will not clobber WT/index when merging into unborn'
            span_id: 349
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:353) 
          (Token id:Id.Lit_Chars val:'\tgit merge master &&\n' span_id:354) (Token id:Id.Lit_Chars val:'\tgrep foo tracked-file &&\n' span_id:355) 
          (Token id:Id.Lit_Chars val:'\tgit show :tracked-file >expect &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\tgrep foo expect &&\n' span_id:357) 
          (Token id:Id.Lit_Chars val:'\tgrep bar untracked-file\n' span_id:358)
        )
      }
    )
    (C {(test_done)})
  ]
)