(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git merge\n'> <'\n'> <'Testing octopus merge with more than 25 refs.'>)}
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\techo c0 > c0.c &&\n'> <'\tgit add c0.c &&\n'> <'\tgit commit -m c0 &&\n'> 
          <'\tgit tag c0 &&\n'> <'\ti=1 &&\n'> <'\twhile test $i -le 30\n'> <'\tdo\n'> <'\t\tgit reset --hard c0 &&\n'> 
          <'\t\techo c$i > c$i.c &&\n'> <'\t\tgit add c$i.c &&\n'> <'\t\tgit commit -m c$i &&\n'> <'\t\tgit tag c$i &&\n'> 
          <'\t\ti=$(expr $i + 1) || return 1\n'> <'\tdone\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merge c1 with c2, c3, c4, ... c29'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\ti=2 &&\n'> <'\trefs="" &&\n'> 
          <'\twhile test $i -le 30\n'> <'\tdo\n'> <'\t\trefs="$refs c$i"\n'> <'\t\ti=$(expr $i + 1)\n'> <'\tdone &&\n'> 
          <'\tgit merge $refs &&\n'> <'\ttest "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&\n'> <'\ti=1 &&\n'> 
          <'\twhile test $i -le 30\n'> <'\tdo\n'> <'\t\ttest "$(git rev-parse c$i)" = "$(git rev-parse HEAD^$i)" &&\n'> 
          <'\t\ti=$(expr $i + 1) || return 1\n'> <'\tdone &&\n'> <'\tgit diff --exit-code &&\n'> <'\ti=1 &&\n'> <'\twhile test $i -le 30\n'> <'\tdo\n'> 
          <'\t\ttest -f c$i.c &&\n'> <'\t\ti=$(expr $i + 1) || return 1\n'> <'\tdone\n'>
        )
      }
    )
    (command.SimpleCommand
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(expected)})
        (redir.HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          here_begin: {(word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
          here_end_span_id: 96
          stdin_parts: [
            ('Trying simple merge with c2\n')
            ('Trying simple merge with c3\n')
            ('Trying simple merge with c4\n')
            ("Merge made by the 'octopus' strategy.\n")
            (' c2.c | 1 +\n')
            (' c3.c | 1 +\n')
            (' c4.c | 1 +\n')
            (' 3 files changed, 3 insertions(+)\n')
            (' create mode 100644 c2.c\n')
            (' create mode 100644 c3.c\n')
            (' create mode 100644 c4.c\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'merge output uses pretty names'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\tgit merge c2 c3 c4 >actual &&\n'> 
          <'\ttest_i18ncmp expected actual\n'>
        )
      }
    )
    (command.SimpleCommand
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(expected)})
        (redir.HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          here_begin: {(word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
          here_end_span_id: 125
          stdin_parts: [
            ("Merge made by the 'recursive' strategy.\n")
            (' c5.c | 1 +\n')
            (' 1 file changed, 1 insertion(+)\n')
            (' create mode 100644 c5.c\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'merge reduces irrelevant remote heads'>)} 
      {
        (SQ <'\n'> <'\tGIT_MERGE_VERBOSITY=0 git merge c4 c5 >actual &&\n'> 
          <'\ttest_i18ncmp expected actual\n'>
        )
      }
    )
    (command.SimpleCommand
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(expected)})
        (redir.HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          here_begin: {(word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
          here_end_span_id: 157
          stdin_parts: [
            ('Fast-forwarding to: c1\n')
            ('Trying simple merge with c2\n')
            ("Merge made by the 'octopus' strategy.\n")
            (' c1.c | 1 +\n')
            (' c2.c | 1 +\n')
            (' 2 files changed, 2 insertions(+)\n')
            (' create mode 100644 c1.c\n')
            (' create mode 100644 c2.c\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'merge fast-forward output uses pretty names'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\tgit merge c1 c2 >actual &&\n'> 
          <'\ttest_i18ncmp expected actual\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)