(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'unpack-trees error messages'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\techo one >one &&\n'> <'\tgit add one &&\n'> <'\tgit commit -a -m First &&\n'> 
          <'\n'> <'\tgit checkout -b branch &&\n'> <'\techo two >two &&\n'> <'\techo three >three &&\n'> 
          <'\techo four >four &&\n'> <'\techo five >five &&\n'> <'\tgit add two three four five &&\n'> <'\tgit commit -m Second &&\n'> <'\n'> 
          <'\tgit checkout master &&\n'> <'\techo other >two &&\n'> <'\techo other >three &&\n'> <'\techo other >four &&\n'> 
          <'\techo other >five\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <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'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} 
      {(SQ <'untracked files overwritten by merge (fast and non-fast forward)'>)} 
      {
        (SQ <'\n'> <'\ttest_must_fail git merge branch 2>out &&\n'> <'\ttest_i18ncmp out expect &&\n'> 
          <'\tgit commit --allow-empty -m empty &&\n'> <'\t(\n'> <'\t\tGIT_MERGE_VERBOSITY=0 &&\n'> <'\t\texport GIT_MERGE_VERBOSITY &&\n'> 
          <'\t\ttest_must_fail git merge branch 2>out2\n'> <'\t) &&\n'> <'\ttest_i18ncmp out2 expect &&\n'> <'\tgit reset --hard HEAD^\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <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'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'untracked files or local changes ovewritten by merge'>)} 
      {
        (SQ <'\n'> <'\tgit add two &&\n'> <'\tgit add three &&\n'> <'\tgit add four &&\n'> 
          <'\ttest_must_fail git merge branch 2>out &&\n'> <'\ttest_i18ncmp out expect\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <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'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'cannot switch branches because of local changes'>)} 
      {
        (SQ <'\n'> <'\tgit add five &&\n'> <'\tmkdir rep &&\n'> <'\techo one >rep/one &&\n'> 
          <'\techo two >rep/two &&\n'> <'\tgit add rep/one rep/two &&\n'> <'\tgit commit -m Fourth &&\n'> <'\tgit checkout master &&\n'> 
          <'\techo uno >rep/one &&\n'> <'\techo dos >rep/two &&\n'> <'\ttest_must_fail git checkout branch 2>out &&\n'> 
          <'\ttest_i18ncmp out expect\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <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'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'not uptodate file porcelain checkout error'>)} 
      {
        (SQ <'\n'> <'\tgit add rep/one rep/two &&\n'> 
          <'\ttest_must_fail git checkout branch 2>out &&\n'> <'\ttest_i18ncmp out expect\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <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'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'not_uptodate_dir porcelain checkout error'>)} 
      {
        (SQ <'\n'> <'\tgit init uptodate &&\n'> <'\tcd uptodate &&\n'> <'\tmkdir rep &&\n'> 
          <'\tmkdir rep2 &&\n'> <'\ttouch rep/foo &&\n'> <'\ttouch rep2/foo &&\n'> <'\tgit add rep/foo rep2/foo &&\n'> 
          <'\tgit commit -m init &&\n'> <'\tgit checkout -b branch &&\n'> <'\tgit rm rep -r &&\n'> <'\tgit rm rep2 -r &&\n'> <'\t>rep &&\n'> 
          <'\t>rep2 &&\n'> <'\tgit add rep rep2&&\n'> <'\tgit commit -m "added test as a file" &&\n'> 
          <'\tgit checkout master &&\n'> <'\t>rep/untracked-file &&\n'> <'\t>rep2/untracked-file &&\n'> 
          <'\ttest_must_fail git checkout branch 2>out &&\n'> <'\ttest_i18ncmp out ../expect\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)