(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'git-svn svn mergeinfo properties'>)}
          spids: [13]
        )
      ]
    )
    (C {<.>} {<'./lib-git-svn.sh'>})
    (C {<test_expect_success>} {(SQ <'load svn dump'>)} 
      {
        (DQ <'\n'> <'\tsvnadmin load -q \''> ($ Id.VSub_DollarName '$rawsvnrepo') <'\' '> <'\t  < \''> 
          ($ Id.VSub_DollarName '$TEST_DIRECTORY') <'/t9151/svn-mergeinfo.dump\' &&\n'> <'\tgit svn init --minimize-url -R svnmerge '> 
          <'\t  --rewrite-root=http://svn.example.org '> <'\t  -T trunk -b branches \''> ($ Id.VSub_DollarName '$svnrepo') <'\' &&\n'> 
          <'\tgit svn fetch --all\n'> <'\t'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'all svn merges became git merge commits'>)} 
      {
        (SQ <'\n'> <'\tunmarked=$(git rev-list --parents --all --grep=Merge |\n'> 
          <'\t\tgrep -v " .* " | cut -f1 -d" ") &&\n'> <'\t[ -z "$unmarked" ]\n'> <'\t'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'cherry picks did not become git merge commits'>)} 
      {
        (SQ <'\n'> <'\tbad_cherries=$(git rev-list --parents --all --grep=Cherry |\n'> 
          <'\t\tgrep " .* " | cut -f1 -d" ") &&\n'> <'\t[ -z "$bad_cherries" ]\n'> <'\t'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'svn non-merge merge commits did not become git merge commits'>)} 
      {
        (SQ <'\n'> <'\tbad_non_merges=$(git rev-list --parents --all --grep=non-merge |\n'> 
          <'\t\tgrep " .* " | cut -f1 -d" ") &&\n'> <'\t[ -z "$bad_non_merges" ]\n'> <'\t'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'commit made to merged branch is reachable from the merge'>)} 
      {
        (SQ <'\n'> 
          <
'\tbefore_commit=$(git rev-list --all --grep="trunk commit before merging trunk to b2") &&\n'
          > <'\tmerge_commit=$(git rev-list --all --grep="Merge trunk to b2") &&\n'> 
          <'\tnot_reachable=$(git rev-list -1 $before_commit --not $merge_commit) &&\n'> <'\t[ -z "$not_reachable" ]\n'> <'\t'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'merging two branches in one commit is detected correctly'>)} 
      {
        (SQ <'\n'> <'\tf1_commit=$(git rev-list --all --grep="make f1 branch from trunk") &&\n'> 
          <'\tf2_commit=$(git rev-list --all --grep="make f2 branch from trunk") &&\n'> <'\tmerge_commit=$(git rev-list --all --grep="Merge f1 and f2 to trunk") &&\n'> 
          <'\tnot_reachable=$(git rev-list -1 $f1_commit $f2_commit --not $merge_commit) &&\n'> <'\t[ -z "$not_reachable" ]\n'> <'\t'>
        )
      }
    )
    (C {<test_expect_failure>} {(SQ <'everything got merged in the end'>)} 
      {
        (SQ <'\n'> <'\tunmerged=$(git rev-list --all --not master) &&\n'> <'\t[ -z "$unmerged" ]\n'> 
          <'\t'>
        )
      }
    )
    (C {<test_done>})
  ]
)