(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 mergeinfo propagation' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'initialize source svn repo' span_id:27))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:31) 
          (Token
            id: Id.Lit_Chars
            val: '\tsvn_cmd mkdir -m x "$svnrepo"/trunk &&\n'
            span_id: 32
          ) (Token id:Id.Lit_Chars val:'\tsvn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:34) (Token id:Id.Lit_Chars val:'\t\tcd "$SVN_TREE" &&\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\t\ttouch foo &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd add foo &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\t\tsvn_cmd commit -m "initial commit"\n' span_id:38) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\trm -rf "$SVN_TREE"\n' span_id:40)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'clone svn repo' span_id:47))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\tgit svn init "$svnrepo"/trunk &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\tgit svn fetch\n' span_id:53)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'change svn:mergeinfo' span_id:60))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\ttouch bar &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\tgit add bar &&\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "bar" &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\tgit svn dcommit --mergeinfo="/branches/foo:1-10"\n' span_id:68)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify svn:mergeinfo' span_id:75))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:79) 
          (Token
            id: Id.Lit_Chars
            val: '\tmergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/trunk) &&\n'
            span_id: 80
          ) (Token id:Id.Lit_Chars val:'\ttest "$mergeinfo" = "/branches/foo:1-10"\n' span_id:81)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'change svn:mergeinfo multiline' span_id:88))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\ttouch baz &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\tgit add baz &&\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "baz" &&\n' span_id:95) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit svn dcommit --mergeinfo="/branches/bar:1-10 /branches/other:3-5,8,10-11"\n'
            span_id: 96
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'verify svn:mergeinfo multiline' span_id:103))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:107) 
          (Token
            id: Id.Lit_Chars
            val: '\tmergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/trunk) &&\n'
            span_id: 108
          ) (Token id:Id.Lit_Chars val:'\ttest "$mergeinfo" = "/branches/bar:1-10\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'/branches/other:3-5,8,10-11"\n' span_id:110)
        )
      }
    )
    (C {(test_done)})
  ]
)