(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:'Testing octopus merge with more than 25 refs.' 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:'\techo c0 > c0.c &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\tgit add c0.c &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m c0 &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\tgit tag c0 &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\ti=1 &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\twhile test $i -le 30\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:31) (Token id:Id.Lit_Chars val:'\t\tgit reset --hard c0 &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\t\techo c$i > c$i.c &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\t\tgit add c$i.c &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m c$i &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\t\tgit tag c$i &&\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\t\ti=$(expr $i + 1) || return 1\n' span_id:37) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:38)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2, c3, c4, ... c29' 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:'\ti=2 &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\trefs="" &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\twhile test $i -le 30\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:54) (Token id:Id.Lit_Chars val:'\t\trefs="$refs c$i"\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\t\ti=$(expr $i + 1)\n' span_id:56) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'\tgit merge $refs &&\n' span_id:58) (Token id:Id.Lit_Chars val:'\ttest "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\ti=1 &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\twhile test $i -le 30\n' span_id:61) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:62) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest "$(git rev-parse c$i)" = "$(git rev-parse HEAD^$i)" &&\n'
            span_id: 63
          ) (Token id:Id.Lit_Chars val:'\t\ti=$(expr $i + 1) || return 1\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code &&\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\ti=1 &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\twhile test $i -le 30\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:69) (Token id:Id.Lit_Chars val:'\t\ttest -f c$i.c &&\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\t\ti=$(expr $i + 1) || return 1\n' span_id:71) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:72)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:78)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:81)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:82)) (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 (Token id:Id.Lit_Chars val:'merge output uses pretty names' span_id:101))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\tgit merge c2 c3 c4 >actual &&\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual\n' span_id:108)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:114)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:117)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:118)) 
              (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 (Token id:Id.Lit_Chars val:'merge reduces irrelevant remote heads' span_id:130))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:134) 
          (Token
            id: Id.Lit_Chars
            val: '\tGIT_MERGE_VERBOSITY=0 git merge c4 c5 >actual &&\n'
            span_id: 135
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual\n' span_id:136)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:142)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:145)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:146)) 
              (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 (Token id:Id.Lit_Chars val:'merge fast-forward output uses pretty names' span_id:162))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:166) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\tgit merge c1 c2 >actual &&\n' span_id:168) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual\n' span_id:169)
        )
      }
    )
    (C {(test_done)})
  ]
)