(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 when reducing parents to independent branches.'
                  span_id: 8
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:39))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\techo c0 > c0.c &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\tgit add c0.c &&\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m c0 &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\tgit tag c0 &&\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\techo c1 > c1.c &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\tgit add c1.c &&\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m c1 &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\tgit tag c1 &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\techo c2 > c2.c &&\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\tgit add c2.c &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\tgit commit -m c2 &&\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\tgit tag c2 &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'\techo c3 > c3.c &&\n' span_id:58) (Token id:Id.Lit_Chars val:'\tgit add c3.c &&\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m c3 &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\tgit tag c3 &&\n' span_id:61) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\techo c4 > c4.c &&\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\tgit add c4.c &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\tgit commit -m c4 &&\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\tgit tag c4 &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\techo c5 > c5.c &&\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\tgit add c5.c &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit commit -m c5 &&\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\tgit tag c5\n' span_id:70)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2, c3, c4, c5' 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:'\tgit merge c2 c3 c4 c5 &&\n' span_id:83) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&\n'
            span_id: 84
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&\n'
            span_id: 85
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&\n'
            span_id: 86
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&\n'
            span_id: 87
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" &&\n'
            span_id: 88
          ) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code &&\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\ttest -f c0.c &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\ttest -f c1.c &&\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\ttest -f c2.c &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\ttest -f c3.c &&\n' span_id:93) 
          (Token id:Id.Lit_Chars val:'\ttest -f c4.c &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\ttest -f c5.c &&\n' span_id:95) 
          (Token id:Id.Lit_Chars val:'\tgit show --format=%s -s >actual &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\t! grep c1 actual &&\n' span_id:97) 
          (Token id:Id.Lit_Chars val:'\tgrep c2 actual &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\tgrep c3 actual &&\n' span_id:99) 
          (Token id:Id.Lit_Chars val:'\t! grep c4 actual &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\tgrep c5 actual\n' span_id:101)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pull c2, c3, c4, c5 into c1' span_id:108))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\tgit pull . c2 c3 c4 c5 &&\n' span_id:114) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&\n'
            span_id: 115
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&\n'
            span_id: 116
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&\n'
            span_id: 117
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&\n'
            span_id: 118
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" &&\n'
            span_id: 119
          ) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code &&\n' span_id:120) 
          (Token id:Id.Lit_Chars val:'\ttest -f c0.c &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\ttest -f c1.c &&\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\ttest -f c2.c &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\ttest -f c3.c &&\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\ttest -f c4.c &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\ttest -f c5.c &&\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\tgit show --format=%s -s >actual &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\t! grep c1 actual &&\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\tgrep c2 actual &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\tgrep c3 actual &&\n' span_id:130) 
          (Token id:Id.Lit_Chars val:'\t! grep c4 actual &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\tgrep c5 actual\n' span_id:132)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:139))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:143) 
          (Token id:Id.Lit_Chars val:'\tfor i in A B C D E\n' span_id:144) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:145) 
          (Token id:Id.Lit_Chars val:'\t\techo $i > $i.c &&\n' span_id:146) (Token id:Id.Lit_Chars val:'\t\tgit add $i.c &&\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m $i &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\t\tgit tag $i\n' span_id:149) 
          (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\tgit reset --hard A &&\n' span_id:151) 
          (Token id:Id.Lit_Chars val:'\tfor i in F G H I\n' span_id:152) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'\t\techo $i > $i.c &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\t\tgit add $i.c &&\n' span_id:155) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m $i &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\t\tgit tag $i\n' span_id:157) 
          (Token id:Id.Lit_Chars val:'\tdone\n' span_id:158)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge E and I' span_id:165))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:169) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard A &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\tgit merge E I\n' span_id:171)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify merge result' span_id:178))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:182) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse HEAD^1) = $(git rev-parse E) &&\n'
            span_id: 183
          ) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse HEAD^2) = $(git rev-parse I)\n' span_id:184)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add conflicts' span_id:191))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:195) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard E &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\techo foo > file.c &&\n' span_id:197) 
          (Token id:Id.Lit_Chars val:'\tgit add file.c &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\tgit commit -m E2 &&\n' span_id:199) 
          (Token id:Id.Lit_Chars val:'\tgit tag E2 &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\tgit reset --hard I &&\n' span_id:201) 
          (Token id:Id.Lit_Chars val:'\techo bar >file.c &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\tgit add file.c &&\n' span_id:203) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m I2 &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\tgit tag I2\n' span_id:205)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'merge E2 and I2, causing a conflict and resolve it'
            span_id: 212
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:216) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard A &&\n' span_id:217) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge E2 I2 &&\n' span_id:218) 
          (Token id:Id.Lit_Chars val:'\techo baz > file.c &&\n' span_id:219) (Token id:Id.Lit_Chars val:'\tgit add file.c &&\n' span_id:220) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "resolve conflict"\n' span_id:221)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify merge result' span_id:228))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:232) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse HEAD^1) = $(git rev-parse E2) &&\n'
            span_id: 233
          ) (Token id:Id.Lit_Chars val:'\ttest $(git rev-parse HEAD^2) = $(git rev-parse I2)\n' span_id:234)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fast-forward to redundant refs' span_id:241))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\tgit merge c4 c5\n' span_id:247)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify merge result' span_id:254))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:258) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse HEAD) = $(git rev-parse c5)\n'
            span_id: 259
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge up-to-date redundant refs' span_id:266))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:270) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c5 &&\n' span_id:271) (Token id:Id.Lit_Chars val:'\tgit merge c0 c4\n' span_id:272)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify merge result' span_id:279))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:283) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse HEAD) = $(git rev-parse c5)\n'
            span_id: 284
          )
        )
      }
    )
    (C {(test_done)})
  ]
)