(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:'unpack-trees error messages' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:19))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\techo one >one &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m First &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b branch &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\techo two >two &&\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\techo three >three &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\techo four >four &&\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\techo five >five &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\tgit add two three four five &&\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m Second &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\techo other >two &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\techo other >three &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\techo other >four &&\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\techo other >five\n' span_id:40)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:46) fd:-1 arg_word:{(expect)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:49)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:50)) (OF)}
          here_end_span_id: 60
          stdin_parts: [
            ('error: The following untracked working tree files would be overwritten by merge:\n')
            ('\tfive\n')
            ('\tfour\n')
            ('\tthree\n')
            ('\ttwo\n')
            ('Please move or remove them before you merge.\n')
            ('Aborting\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'untracked files overwritten by merge (fast and non-fast forward)'
            span_id: 65
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:69) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge branch 2>out &&\n'
            span_id: 70
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp out expect &&\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m empty &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\t(\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'\t\tGIT_MERGE_VERBOSITY=0 &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\t\texport GIT_MERGE_VERBOSITY &&\n' span_id:75) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git merge branch 2>out2\n'
            span_id: 76
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ncmp out2 expect &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD^\n' span_id:79)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:85) fd:-1 arg_word:{(expect)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:88)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:89)) (OF)}
          here_end_span_id: 101
          stdin_parts: [
            ('error: Your local changes to the following files would be overwritten by merge:\n')
            ('\tfour\n')
            ('\tthree\n')
            ('\ttwo\n')
            ('Please commit your changes or stash them before you merge.\n')
            ('error: The following untracked working tree files would be overwritten by merge:\n')
            ('\tfive\n')
            ('Please move or remove them before you merge.\n')
            ('Aborting\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'untracked files or local changes ovewritten by merge'
            span_id: 106
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:110) 
          (Token id:Id.Lit_Chars val:'\tgit add two &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\tgit add three &&\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\tgit add four &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge branch 2>out &&\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ncmp out expect\n' span_id:115)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:121)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:124)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:125)) 
              (OF)
            }
          here_end_span_id: 133
          stdin_parts: [
            ('error: Your local changes to the following files would be overwritten by checkout:\n')
            ('\trep/one\n')
            ('\trep/two\n')
            ('Please commit your changes or stash them before you switch branches.\n')
            ('Aborting\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cannot switch branches because of local changes' span_id:138))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:142) 
          (Token id:Id.Lit_Chars val:'\tgit add five &&\n' span_id:143) (Token id:Id.Lit_Chars val:'\tmkdir rep &&\n' span_id:144) 
          (Token id:Id.Lit_Chars val:'\techo one >rep/one &&\n' span_id:145) (Token id:Id.Lit_Chars val:'\techo two >rep/two &&\n' span_id:146) 
          (Token id:Id.Lit_Chars val:'\tgit add rep/one rep/two &&\n' span_id:147) (Token id:Id.Lit_Chars val:'\tgit commit -m Fourth &&\n' span_id:148) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\techo uno >rep/one &&\n' span_id:150) 
          (Token id:Id.Lit_Chars val:'\techo dos >rep/two &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout branch 2>out &&\n' span_id:152) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ncmp out expect\n' span_id:153)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:159)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:162)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:163)) 
              (OF)
            }
          here_end_span_id: 171
          stdin_parts: [
            ('error: Your local changes to the following files would be overwritten by checkout:\n')
            ('\trep/one\n')
            ('\trep/two\n')
            ('Please commit your changes or stash them before you switch branches.\n')
            ('Aborting\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'not uptodate file porcelain checkout error' span_id:176))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\tgit add rep/one rep/two &&\n' span_id:181) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout branch 2>out &&\n' span_id:182) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ncmp out expect\n' span_id:183)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:189)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:192)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:193)) 
              (OF)
            }
          here_end_span_id: 201
          stdin_parts: [
            ('error: Updating the following directories would lose untracked files in it:\n')
            ('\trep\n')
            ('\trep2\n')
            ('\n')
            ('Aborting\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'not_uptodate_dir porcelain checkout error' span_id:206))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:210) 
          (Token id:Id.Lit_Chars val:'\tgit init uptodate &&\n' span_id:211) (Token id:Id.Lit_Chars val:'\tcd uptodate &&\n' span_id:212) 
          (Token id:Id.Lit_Chars val:'\tmkdir rep &&\n' span_id:213) (Token id:Id.Lit_Chars val:'\tmkdir rep2 &&\n' span_id:214) 
          (Token id:Id.Lit_Chars val:'\ttouch rep/foo &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\ttouch rep2/foo &&\n' span_id:216) 
          (Token id:Id.Lit_Chars val:'\tgit add rep/foo rep2/foo &&\n' span_id:217) (Token id:Id.Lit_Chars val:'\tgit commit -m init &&\n' span_id:218) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b branch &&\n' span_id:219) (Token id:Id.Lit_Chars val:'\tgit rm rep -r &&\n' span_id:220) 
          (Token id:Id.Lit_Chars val:'\tgit rm rep2 -r &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\t>rep &&\n' span_id:222) 
          (Token id:Id.Lit_Chars val:'\t>rep2 &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\tgit add rep rep2&&\n' span_id:224) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "added test as a file" &&\n'
            span_id: 225
          ) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:226) 
          (Token id:Id.Lit_Chars val:'\t>rep/untracked-file &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\t>rep2/untracked-file &&\n' span_id:228) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git checkout branch 2>out &&\n'
            span_id: 229
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp out ../expect\n' span_id:230)
        )
      }
    )
    (C {(test_done)})
  ]
)