(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'git svn commit-diff clobber'>)}
          spids: [9]
        )
      ]
    )
    (C {<.>} {<'./lib-git-svn.sh'>})
    (C {<test_expect_success>} {(SQ <'initialize repo'>)} 
      {
        (SQ <'\n'> <'\tmkdir import &&\n'> <'\t(\n'> <'\t\tcd import &&\n'> 
          <'\t\techo initial >file &&\n'> <'\t\tsvn_cmd import -m "initial" . "$svnrepo"\n'> <'\t) &&\n'> <'\techo initial > file &&\n'> 
          <'\tgit update-index --add file &&\n'> <'\tgit commit -a -m "initial"\n'> <'\t'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'commit change from svn side'>)} 
      {
        (SQ <'\n'> <'\tsvn_cmd co "$svnrepo" t.svn &&\n'> <'\t(\n'> <'\t\tcd t.svn &&\n'> 
          <'\t\techo second line from svn >>file &&\n'> <'\t\tpoke file &&\n'> <'\t\tsvn_cmd commit -m "second line from svn"\n'> <'\t) &&\n'> 
          <'\trm -rf t.svn\n'> <'\t'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'commit conflicting change from git'>)} 
      {
        (SQ <'\n'> <'\techo second line from git >> file &&\n'> 
          <'\tgit commit -a -m "second line from git" &&\n'> <'\ttest_must_fail git svn commit-diff -r1 HEAD~1 HEAD "$svnrepo"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'commit complementing change from git'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard HEAD~1 &&\n'> <'\techo second line from svn >> file &&\n'> 
          <'\tgit commit -a -m "second line from svn" &&\n'> <'\techo third line from git >> file &&\n'> <'\tgit commit -a -m "third line from git" &&\n'> 
          <'\tgit svn commit-diff -r2 HEAD~1 HEAD "$svnrepo"\n'> <'\t'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'dcommit fails to commit because of conflict'>)} 
      {
        (SQ <'\n'> <'\tgit svn init "$svnrepo" &&\n'> <'\tgit svn fetch &&\n'> 
          <'\tgit reset --hard refs/remotes/git-svn &&\n'> <'\tsvn_cmd co "$svnrepo" t.svn &&\n'> <'\t(\n'> <'\t\tcd t.svn &&\n'> 
          <'\t\techo fourth line from svn >>file &&\n'> <'\t\tpoke file &&\n'> <'\t\tsvn_cmd commit -m "fourth line from svn"\n'> <'\t) &&\n'> 
          <'\trm -rf t.svn &&\n'> <'\techo "fourth line from git" >> file &&\n'> <'\tgit commit -a -m "fourth line from git" &&\n'> 
          <'\ttest_must_fail git svn dcommit\n'> <'\t'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'dcommit does the svn equivalent of an index merge'>)} 
      {
        (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 <'commit another change from svn side'>)} 
      {
        (SQ <'\n'> <'\tsvn_cmd co "$svnrepo" t.svn &&\n'> <'\t(\n'> <'\t\tcd t.svn &&\n'> 
          <'\t\techo third line from svn >>file &&\n'> <'\t\tpoke file &&\n'> <'\t\tsvn_cmd commit -m "third line from svn"\n'> <'\t) &&\n'> 
          <'\trm -rf t.svn\n'> <'\t'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'multiple dcommit from git svn will not clobber svn'>)} 
      {
        (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 <'check that rebase really failed'>)} 
      {(SQ <'\n'> <'\ttest -d .git/rebase-apply\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'resolve, continue the rebase and dcommit'>)} 
      {
        (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>})
  ]
)