(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 commit-diff clobber' span_id:11))}
          spids: [9]
        )
      ]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'initialize repo' span_id:22))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\tmkdir import &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\t(\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\t\tcd import &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\t\techo initial >file &&\n' span_id:30) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd import -m "initial" . "$svnrepo"\n'
            span_id: 31
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\techo initial > file &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\tgit update-index --add file &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m "initial"\n' span_id:35) (Token id:Id.Lit_Chars val:'\t' span_id:36)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit change from svn side' span_id:42))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\tsvn_cmd co "$svnrepo" t.svn &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\t(\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\t\tcd t.svn &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\t\techo second line from svn >>file &&\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\t\tpoke file &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd commit -m "second line from svn"\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\trm -rf t.svn\n' span_id:54) (Token id:Id.Lit_Chars val:'\t' span_id:55)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit conflicting change from git' span_id:62))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\techo second line from git >> file &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\tgit commit -a -m "second line from git" &&\n' span_id:68) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git svn commit-diff -r1 HEAD~1 HEAD "$svnrepo"\n'
            span_id: 69
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit complementing change from git' span_id:76))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:80) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD~1 &&\n' span_id:81) (Token id:Id.Lit_Chars val:'\techo second line from svn >> file &&\n' span_id:82) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -a -m "second line from svn" &&\n'
            span_id: 83
          ) (Token id:Id.Lit_Chars val:'\techo third line from git >> file &&\n' span_id:84) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -a -m "third line from git" &&\n'
            span_id: 85
          ) (Token id:Id.Lit_Chars val:'\tgit svn commit-diff -r2 HEAD~1 HEAD "$svnrepo"\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\t' span_id:87)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'dcommit fails to commit because of conflict' span_id:94))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\tgit svn init "$svnrepo" &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\tgit svn fetch &&\n' span_id:100) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard refs/remotes/git-svn &&\n'
            span_id: 101
          ) (Token id:Id.Lit_Chars val:'\tsvn_cmd co "$svnrepo" t.svn &&\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:103) (Token id:Id.Lit_Chars val:'\t\tcd t.svn &&\n' span_id:104) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo fourth line from svn >>file &&\n'
            span_id: 105
          ) (Token id:Id.Lit_Chars val:'\t\tpoke file &&\n' span_id:106) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd commit -m "fourth line from svn"\n'
            span_id: 107
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:108) 
          (Token id:Id.Lit_Chars val:'\trm -rf t.svn &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\techo "fourth line from git" >> file &&\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -a -m "fourth line from git" &&\n'
            span_id: 111
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git svn dcommit\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\t' span_id:113)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'dcommit does the svn equivalent of an index merge'
            span_id: 120
          )
        )
      } 
      {
        (DQ ('\n') ('\tgit reset --hard refs/remotes/git-svn &&\n') 
          ("\techo 'index merge' > file2 &&\n") ('\tgit update-index --add file2 &&\n') ("\tgit commit -a -m 'index merge' &&\n") 
          ("\techo 'more changes' >> file2 &&\n") ('\tgit update-index file2 &&\n') ("\tgit commit -a -m 'more changes' &&\n") ('\tgit svn dcommit\n') 
          ('\t')
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit another change from svn side' span_id:140))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:144) 
          (Token id:Id.Lit_Chars val:'\tsvn_cmd co "$svnrepo" t.svn &&\n' span_id:145) (Token id:Id.Lit_Chars val:'\t(\n' span_id:146) 
          (Token id:Id.Lit_Chars val:'\t\tcd t.svn &&\n' span_id:147) (Token id:Id.Lit_Chars val:'\t\techo third line from svn >>file &&\n' span_id:148) 
          (Token id:Id.Lit_Chars val:'\t\tpoke file &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd commit -m "third line from svn"\n' span_id:150) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\trm -rf t.svn\n' span_id:152) 
          (Token id:Id.Lit_Chars val:'\t' span_id:153)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'multiple dcommit from git svn will not clobber svn'
            span_id: 160
          )
        )
      } 
      {
        (DQ ('\n') ('\tgit reset --hard refs/remotes/git-svn &&\n') 
          ('\techo new file >> new-file &&\n') ('\tgit update-index --add new-file &&\n') ("\tgit commit -a -m 'new file' &&\n") 
          ('\techo clobber > file &&\n') ("\tgit commit -a -m 'clobber' &&\n") ('\ttest_must_fail git svn dcommit\n') ('\t')
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check that rebase really failed' span_id:180))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:184) 
          (Token id:Id.Lit_Chars val:'\ttest -d .git/rebase-apply\n' span_id:185)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'resolve, continue the rebase and dcommit' span_id:192))} 
      {
        (DQ ('\n') ('\techo clobber and I really mean it > file &&\n') ('\tgit update-index file &&\n') 
          ('\tgit rebase --continue &&\n') ('\tgit svn dcommit\n') ('\t')
        )
      }
    )
    (C {(test_done)})
  ]
)