(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-svn svn mergeinfo propagation' span_id:18))}
          spids: [16]
        )
      ]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'load svn dump' span_id:30))} 
      {
        (DQ ('\n') ("\tsvnadmin load -q '") ($ Id.VSub_DollarName '$rawsvnrepo') ("' ") ("\t  < '") 
          ($ Id.VSub_DollarName '$TEST_DIRECTORY') ("/t9161/branches.dump' &&\n") ('\tgit svn init --minimize-url -R svnmerge ') 
          ("\t  -T trunk -b branches '") ($ Id.VSub_DollarName '$svnrepo') ("' &&\n") ('\tgit svn fetch --all\n') ('\t')
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'propagate merge information' span_id:55))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\tgit config svn.pushmergeinfo yes &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\tgit checkout origin/svnb1 &&\n' span_id:61) 
          (Token id:Id.Lit_Chars val:'\tgit merge --no-ff origin/svnb2 &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\tgit svn dcommit\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\t' span_id:64)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check svn:mergeinfo' span_id:71))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:75) 
          (Token
            id: Id.Lit_Chars
            val: '\tmergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) &&\n'
            span_id: 76
          ) (Token id:Id.Lit_Chars val:'\ttest "$mergeinfo" = "/branches/svnb2:3,8"\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\t' span_id:78)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge another branch' span_id:85))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\tgit merge --no-ff origin/svnb3 &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\tgit svn dcommit\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\t' span_id:92)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check primary parent mergeinfo respected' span_id:99))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:103) 
          (Token
            id: Id.Lit_Chars
            val: '\tmergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) &&\n'
            span_id: 104
          ) (Token id:Id.Lit_Chars val:'\ttest "$mergeinfo" = "/branches/svnb2:3,8\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'/branches/svnb3:4,9"\n' span_id:106) (Token id:Id.Lit_Chars val:'\t' span_id:107)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge existing merge' span_id:114))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\tgit merge --no-ff origin/svnb4 &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\tgit svn dcommit\n' span_id:120) 
          (Token id:Id.Lit_Chars val:'\t' span_id:121)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("check both parents' mergeinfo respected"))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:132) 
          (Token
            id: Id.Lit_Chars
            val: '\tmergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) &&\n'
            span_id: 133
          ) (Token id:Id.Lit_Chars val:'\ttest "$mergeinfo" = "/branches/svnb2:3,8\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'/branches/svnb3:4,9\n' span_id:135) (Token id:Id.Lit_Chars val:'/branches/svnb4:5-6,10-12\n' span_id:136) 
          (Token id:Id.Lit_Chars val:'/branches/svnb5:6,11"\n' span_id:137) (Token id:Id.Lit_Chars val:'\t' span_id:138)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'make further commits to branch' span_id:145))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:149) 
          (Token id:Id.Lit_Chars val:'\tgit checkout origin/svnb2 &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\ttouch newb2file &&\n' span_id:151) 
          (Token id:Id.Lit_Chars val:'\tgit add newb2file &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\tgit commit -m "later b2 commit" &&\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'\ttouch newb2file-2 &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\tgit add newb2file-2 &&\n' span_id:155) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "later b2 commit 2" &&\n'
            span_id: 156
          ) (Token id:Id.Lit_Chars val:'\tgit svn dcommit\n' span_id:157) 
          (Token id:Id.Lit_Chars val:'\t' span_id:158)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'second forward merge' span_id:165))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:169) 
          (Token id:Id.Lit_Chars val:'\tgit checkout origin/svnb1 &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\tgit merge --no-ff origin/svnb2 &&\n' span_id:171) 
          (Token id:Id.Lit_Chars val:'\tgit svn dcommit\n' span_id:172) (Token id:Id.Lit_Chars val:'\t' span_id:173)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check new mergeinfo added' span_id:180))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:184) 
          (Token
            id: Id.Lit_Chars
            val: '\tmergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) &&\n'
            span_id: 185
          ) (Token id:Id.Lit_Chars val:'\ttest "$mergeinfo" = "/branches/svnb2:3,8,16-17\n' span_id:186) 
          (Token id:Id.Lit_Chars val:'/branches/svnb3:4,9\n' span_id:187) (Token id:Id.Lit_Chars val:'/branches/svnb4:5-6,10-12\n' span_id:188) 
          (Token id:Id.Lit_Chars val:'/branches/svnb5:6,11"\n' span_id:189) (Token id:Id.Lit_Chars val:'\t' span_id:190)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'reintegration merge' span_id:197))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:201) 
          (Token id:Id.Lit_Chars val:'\tgit checkout origin/svnb4 &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\tgit merge --no-ff origin/svnb1 &&\n' span_id:203) 
          (Token id:Id.Lit_Chars val:'\tgit svn dcommit\n' span_id:204) (Token id:Id.Lit_Chars val:'\t' span_id:205)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check reintegration mergeinfo' span_id:212))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:216) 
          (Token
            id: Id.Lit_Chars
            val: '\tmergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb4) &&\n'
            span_id: 217
          ) (Token id:Id.Lit_Chars val:'\ttest "$mergeinfo" = "/branches/svnb1:2-4,7-9,13-18\n' span_id:218) 
          (Token id:Id.Lit_Chars val:'/branches/svnb2:3,8,16-17\n' span_id:219) (Token id:Id.Lit_Chars val:'/branches/svnb3:4,9\n' span_id:220) 
          (Token id:Id.Lit_Chars val:'/branches/svnb5:6,11"\n' span_id:221) (Token id:Id.Lit_Chars val:'\t' span_id:222)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'dcommit a merge at the top of a stack' span_id:229))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:233) 
          (Token id:Id.Lit_Chars val:'\tgit checkout origin/svnb1 &&\n' span_id:234) (Token id:Id.Lit_Chars val:'\ttouch anotherfile &&\n' span_id:235) 
          (Token id:Id.Lit_Chars val:'\tgit add anotherfile &&\n' span_id:236) (Token id:Id.Lit_Chars val:'\tgit commit -m "a commit" &&\n' span_id:237) 
          (Token id:Id.Lit_Chars val:'\tgit merge origin/svnb4 &&\n' span_id:238) (Token id:Id.Lit_Chars val:'\tgit svn dcommit\n' span_id:239) 
          (Token id:Id.Lit_Chars val:'\t' span_id:240)
        )
      }
    )
    (C {(test_done)})
  ]
)