(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 metadata migrations from previous versions'
                  span_id: 8
                )
              )
            }
          spids: [6]
        )
      ]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup old-looking metadata' span_id:19))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:23) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp "$GIT_DIR"/config "$GIT_DIR"/config-old-git-svn &&\n'
            span_id: 24
          ) (Token id:Id.Lit_Chars val:'\tmkdir import &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:26) (Token id:Id.Lit_Chars val:'\t\tcd import &&\n' span_id:27) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tfor i in trunk branches/a branches/b tags/0.1 tags/0.2 tags/0.3\n'
            span_id: 28
          ) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\t\t\tmkdir -p $i &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\t\t\techo hello >>$i/README ||\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\t\t\texit 1\n' span_id:32) (Token id:Id.Lit_Chars val:'\t\tdone &&\n' span_id:33) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd import -m test . "$svnrepo"\n'
            span_id: 34
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\tgit svn init "$svnrepo" &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\tgit svn fetch &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\trm -rf "$GIT_DIR"/svn &&\n' span_id:38) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/git-svn-HEAD refs/remotes/git-svn &&\n'
            span_id: 39
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/heads/svn-HEAD refs/remotes/git-svn &&\n'
            span_id: 40
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref -d refs/remotes/git-svn refs/remotes/git-svn\n'
            span_id: 41
          ) (Token id:Id.Lit_Chars val:'\t' span_id:42)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git-svn-HEAD is a real HEAD' span_id:49))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:53) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --verify refs/heads/git-svn-HEAD^0\n'
            span_id: 54
          )
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:svnrepo_escaped)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:59)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {(echo)} {($ Id.VSub_DollarName '$svnrepo')})
                          (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/ /%20/' span_id:69))})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [58]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'initialize old-style (v0) git svn layout' span_id:77))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:81) 
          (Token
            id: Id.Lit_Chars
            val: '\tmkdir -p "$GIT_DIR"/git-svn/info "$GIT_DIR"/svn/info &&\n'
            span_id: 82
          ) (Token id:Id.Lit_Chars val:'\techo "$svnrepo" > "$GIT_DIR"/git-svn/info/url &&\n' span_id:83) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "$svnrepo" > "$GIT_DIR"/svn/info/url &&\n'
            span_id: 84
          ) (Token id:Id.Lit_Chars val:'\tgit svn migrate &&\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\t! test -d "$GIT_DIR"/git-svn &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify refs/remotes/git-svn^0 &&\n' span_id:87) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --verify refs/remotes/svn^0 &&\n'
            span_id: 88
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git config --get svn-remote.svn.url)" = "$svnrepo_escaped" &&\n'
            span_id: 89
          ) (Token id:Id.Lit_Chars val:'\ttest $(git config --get svn-remote.svn.fetch) = \\\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\t\t":refs/remotes/git-svn"\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:'initialize a multi-repository repo' span_id:99))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:103) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit svn init "$svnrepo" -T trunk -t tags -b branches &&\n'
            span_id: 104
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --get-all svn-remote.svn.fetch > fetch.out &&\n'
            span_id: 105
          ) (Token id:Id.Lit_Chars val:'\tgrep "^trunk:refs/remotes/origin/trunk$" fetch.out &&\n' span_id:106) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -n "$(git config --get svn-remote.svn.branches \\\n'
            span_id: 107
          ) (Token id:Id.Lit_Chars val:'\t\t    "^branches/\\*:refs/remotes/origin/\\*$")" &&\n' span_id:108) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -n "$(git config --get svn-remote.svn.tags \\\n'
            span_id: 109
          ) (Token id:Id.Lit_Chars val:'\t\t    "^tags/\\*:refs/remotes/origin/tags/\\*$")" &&\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --unset svn-remote.svn.branches \\\n'
            span_id: 111
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t                        "^branches/\\*:refs/remotes/origin/\\*$" &&\n'
            span_id: 112
          ) (Token id:Id.Lit_Chars val:'\tgit config --unset svn-remote.svn.tags \\\n' span_id:113) 
          (Token
            id: Id.Lit_Chars
            val: '\t                        "^tags/\\*:refs/remotes/origin/tags/\\*$" &&\n'
            span_id: 114
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --add svn-remote.svn.fetch "branches/a:refs/remotes/origin/a" &&\n'
            span_id: 115
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --add svn-remote.svn.fetch "branches/b:refs/remotes/origin/b" &&\n'
            span_id: 116
          ) (Token id:Id.Lit_Chars val:'\tfor i in tags/0.1 tags/0.2 tags/0.3\n' span_id:117) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:118) (Token id:Id.Lit_Chars val:'\t\tgit config --add svn-remote.svn.fetch \\\n' span_id:119) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\t$i:refs/remotes/origin/$i || return 1\n'
            span_id: 120
          ) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:121) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --get-all svn-remote.svn.fetch > fetch.out &&\n'
            span_id: 122
          ) (Token id:Id.Lit_Chars val:'\tgrep "^trunk:refs/remotes/origin/trunk$" fetch.out &&\n' span_id:123) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "^branches/a:refs/remotes/origin/a$" fetch.out &&\n'
            span_id: 124
          ) (Token id:Id.Lit_Chars val:'\tgrep "^branches/b:refs/remotes/origin/b$" fetch.out &&\n' span_id:125) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "^tags/0\\.1:refs/remotes/origin/tags/0\\.1$" fetch.out &&\n'
            span_id: 126
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "^tags/0\\.2:refs/remotes/origin/tags/0\\.2$" fetch.out &&\n'
            span_id: 127
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "^tags/0\\.3:refs/remotes/origin/tags/0\\.3$" fetch.out &&\n'
            span_id: 128
          ) (Token id:Id.Lit_Chars val:'\tgrep "^:refs/remotes/git-svn" fetch.out\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\t' span_id:130)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'multi-fetch works on partial urls + paths' span_id:140))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:144) 
          (Token
            id: Id.Lit_Chars
            val: '\trefs="trunk a b tags/0.1 tags/0.2 tags/0.3" &&\n'
            span_id: 145
          ) (Token id:Id.Lit_Chars val:'\tgit svn multi-fetch &&\n' span_id:146) 
          (Token id:Id.Lit_Chars val:'\tfor i in $refs\n' span_id:147) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:148) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-parse --verify refs/remotes/origin/$i^0 || return 1;\n'
            span_id: 149
          ) (Token id:Id.Lit_Chars val:'\tdone >refs.out &&\n' span_id:150) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -z "$(sort <refs.out | uniq -d)" &&\n'
            span_id: 151
          ) (Token id:Id.Lit_Chars val:'\tfor i in $refs\n' span_id:152) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:153) (Token id:Id.Lit_Chars val:'\t\tfor j in $refs\n' span_id:154) 
          (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:155) (Token id:Id.Lit_Chars val:'\t\t\tgit diff --exit-code refs/remotes/origin/$i \\\n' span_id:156) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\t\t\t     refs/remotes/origin/$j ||\n'
            span_id: 157
          ) (Token id:Id.Lit_Chars val:'\t\t\t\treturn 1\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:159) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:160)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'migrate --minimize on old inited layout' span_id:167))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:171) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --unset-all svn-remote.svn.fetch &&\n'
            span_id: 172
          ) (Token id:Id.Lit_Chars val:'\tgit config --unset-all svn-remote.svn.url &&\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'\trm -rf "$GIT_DIR"/svn &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\tfor i in $(cat fetch.out)\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:176) (Token id:Id.Lit_Chars val:'\t\tpath=$(expr $i : "\\([^:]*\\):.*$")\n' span_id:177) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tref=$(expr $i : "[^:]*:\\(refs/remotes/.*\\)$")\n'
            span_id: 178
          ) (Token id:Id.Lit_Chars val:'\t\tif test -z "$ref"; then continue; fi\n' span_id:179) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tif test -n "$path"; then path="/$path"; fi\n'
            span_id: 180
          ) (Token id:Id.Lit_Chars val:'\t\tmkdir -p "$GIT_DIR"/svn/$ref/info/ &&\n' span_id:181) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "$svnrepo"$path >"$GIT_DIR"/svn/$ref/info/url ||\n'
            span_id: 182
          ) (Token id:Id.Lit_Chars val:'\t\treturn 1\n' span_id:183) 
          (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:184) (Token id:Id.Lit_Chars val:'\tgit svn migrate --minimize &&\n' span_id:185) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -z "$(git config -l | grep "^svn-remote\\.git-svn\\.")" &&\n'
            span_id: 186
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --get-all svn-remote.svn.fetch > fetch.out &&\n'
            span_id: 187
          ) (Token id:Id.Lit_Chars val:'\tgrep "^trunk:refs/remotes/origin/trunk$" fetch.out &&\n' span_id:188) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "^branches/a:refs/remotes/origin/a$" fetch.out &&\n'
            span_id: 189
          ) (Token id:Id.Lit_Chars val:'\tgrep "^branches/b:refs/remotes/origin/b$" fetch.out &&\n' span_id:190) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "^tags/0\\.1:refs/remotes/origin/tags/0\\.1$" fetch.out &&\n'
            span_id: 191
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "^tags/0\\.2:refs/remotes/origin/tags/0\\.2$" fetch.out &&\n'
            span_id: 192
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "^tags/0\\.3:refs/remotes/origin/tags/0\\.3$" fetch.out &&\n'
            span_id: 193
          ) (Token id:Id.Lit_Chars val:'\tgrep "^:refs/remotes/git-svn" fetch.out\n' span_id:194) 
          (Token id:Id.Lit_Chars val:'\t' span_id:195)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('.rev_db auto-converted to .rev_map.UUID'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:206) 
          (Token id:Id.Lit_Chars val:'\tgit svn fetch -i trunk &&\n' span_id:207) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest -z "$(ls "$GIT_DIR"/svn/refs/remotes/origin/trunk/.rev_db.* 2>/dev/null)" &&\n'
            span_id: 208
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\texpect="$(ls "$GIT_DIR"/svn/refs/remotes/origin/trunk/.rev_map.*)" &&\n'
            span_id: 209
          ) (Token id:Id.Lit_Chars val:'\ttest -n "$expect" &&\n' span_id:210) 
          (Token
            id: Id.Lit_Chars
            val: '\trev_db="$(echo $expect | sed -e "s,_map,_db,")" &&\n'
            span_id: 211
          ) (Token id:Id.Lit_Chars val:'\tconvert_to_rev_db "$expect" "$rev_db" &&\n' span_id:212) 
          (Token id:Id.Lit_Chars val:'\trm -f "$expect" &&\n' span_id:213) (Token id:Id.Lit_Chars val:'\ttest -f "$rev_db" &&\n' span_id:214) 
          (Token id:Id.Lit_Chars val:'\tgit svn fetch -i trunk &&\n' span_id:215) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest -z "$(ls "$GIT_DIR"/svn/refs/remotes/origin/trunk/.rev_db.* 2>/dev/null)" &&\n'
            span_id: 216
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest ! -e "$GIT_DIR"/svn/refs/remotes/origin/trunk/.rev_db &&\n'
            span_id: 217
          ) (Token id:Id.Lit_Chars val:'\ttest -f "$expect"\n' span_id:218) 
          (Token id:Id.Lit_Chars val:'\t' span_id:219)
        )
      }
    )
    (C {(test_done)})
  ]
)