(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 properties' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'load svn dump' span_id:27))} 
      {
        (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 (Token id:Id.Lit_Chars val:'all svn merges became git merge commits' span_id:54))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:58) 
          (Token
            id: Id.Lit_Chars
            val: '\tunmarked=$(git rev-list --parents --all --grep=Merge |\n'
            span_id: 59
          ) (Token id:Id.Lit_Chars val:'\t\tgrep -v " .* " | cut -f1 -d" ") &&\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\t[ -z "$unmarked" ]\n' span_id:61) (Token id:Id.Lit_Chars val:'\t' span_id:62)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cherry picks did not become git merge commits' span_id:69))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:73) 
          (Token
            id: Id.Lit_Chars
            val: '\tbad_cherries=$(git rev-list --parents --all --grep=Cherry |\n'
            span_id: 74
          ) (Token id:Id.Lit_Chars val:'\t\tgrep " .* " | cut -f1 -d" ") &&\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\t[ -z "$bad_cherries" ]\n' span_id:76) (Token id:Id.Lit_Chars val:'\t' span_id:77)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'svn non-merge merge commits did not become git merge commits'
            span_id: 84
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:88) 
          (Token
            id: Id.Lit_Chars
            val: '\tbad_non_merges=$(git rev-list --parents --all --grep=non-merge |\n'
            span_id: 89
          ) (Token id:Id.Lit_Chars val:'\t\tgrep " .* " | cut -f1 -d" ") &&\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\t[ -z "$bad_non_merges" ]\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: 'commit made to merged branch is reachable from the merge'
            span_id: 99
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:103) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tbefore_commit=$(git rev-list --all --grep="trunk commit before merging trunk to b2") &&\n'
            span_id: 104
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tmerge_commit=$(git rev-list --all --grep="Merge trunk to b2") &&\n'
            span_id: 105
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tnot_reachable=$(git rev-list -1 $before_commit --not $merge_commit) &&\n'
            span_id: 106
          ) (Token id:Id.Lit_Chars val:'\t[ -z "$not_reachable" ]\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\t' span_id:108)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'merging two branches in one commit is detected correctly'
            span_id: 115
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:119) 
          (Token
            id: Id.Lit_Chars
            val: '\tf1_commit=$(git rev-list --all --grep="make f1 branch from trunk") &&\n'
            span_id: 120
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tf2_commit=$(git rev-list --all --grep="make f2 branch from trunk") &&\n'
            span_id: 121
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tmerge_commit=$(git rev-list --all --grep="Merge f1 and f2 to trunk") &&\n'
            span_id: 122
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tnot_reachable=$(git rev-list -1 $f1_commit $f2_commit --not $merge_commit) &&\n'
            span_id: 123
          ) (Token id:Id.Lit_Chars val:'\t[ -z "$not_reachable" ]\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\t' span_id:125)
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'everything got merged in the end' span_id:132))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:136) 
          (Token
            id: Id.Lit_Chars
            val: '\tunmerged=$(git rev-list --all --not master) &&\n'
            span_id: 137
          ) (Token id:Id.Lit_Chars val:'\t[ -z "$unmerged" ]\n' span_id:138) 
          (Token id:Id.Lit_Chars val:'\t' span_id:139)
        )
      }
    )
    (C {(test_done)})
  ]
)