(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"git svn metadata migrations from previous versions">)}
          spids: [6]
        )
      ]
      spids: [6]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (C {(test_expect_success)} {(SQ <"setup old-looking metadata">)} 
      {
        (SQ <"\n"> <"\tcp \"$GIT_DIR\"/config \"$GIT_DIR\"/config-old-git-svn &&\n"> 
          <"\tmkdir import &&\n"> <"\t(\n"> <"\t\tcd import &&\n"> 
          <"\t\tfor i in trunk branches/a branches/b tags/0.1 tags/0.2 tags/0.3\n"> <"\t\tdo\n"> <"\t\t\tmkdir -p $i &&\n"> <"\t\t\techo hello >>$i/README ||\n"> <"\t\t\texit 1\n"> 
          <"\t\tdone &&\n"> <"\t\tsvn_cmd import -m test . \"$svnrepo\"\n"> <"\t) &&\n"> <"\tgit svn init \"$svnrepo\" &&\n"> 
          <"\tgit svn fetch &&\n"> <"\trm -rf \"$GIT_DIR\"/svn &&\n"> 
          <"\tgit update-ref refs/heads/git-svn-HEAD refs/remotes/git-svn &&\n"> <"\tgit update-ref refs/heads/svn-HEAD refs/remotes/git-svn &&\n"> 
          <"\tgit update-ref -d refs/remotes/git-svn refs/remotes/git-svn\n"> <"\t">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"git-svn-HEAD is a real HEAD">)} 
      {(SQ <"\n"> <"\tgit rev-parse --verify refs/heads/git-svn-HEAD^0\n">)}
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:svnrepo_escaped)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Pipeline
                        children: [
                          (C {(echo)} {($ VSub_Name "$svnrepo")})
                          (C {(sed)} {(SQ <"s/ /%20/">)})
                        ]
                        negated: False
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [59 71]
              )
            }
          spids: [58]
        )
      ]
      spids: [58]
    )
    (C {(test_expect_success)} {(SQ <"initialize old-style (v0) git svn layout">)} 
      {
        (SQ <"\n"> <"\tmkdir -p \"$GIT_DIR\"/git-svn/info \"$GIT_DIR\"/svn/info &&\n"> 
          <"\techo \"$svnrepo\" > \"$GIT_DIR\"/git-svn/info/url &&\n"> <"\techo \"$svnrepo\" > \"$GIT_DIR\"/svn/info/url &&\n"> <"\tgit svn migrate &&\n"> 
          <"\t! test -d \"$GIT_DIR\"/git-svn &&\n"> <"\tgit rev-parse --verify refs/remotes/git-svn^0 &&\n"> 
          <"\tgit rev-parse --verify refs/remotes/svn^0 &&\n"> <"\ttest \"$(git config --get svn-remote.svn.url)\" = \"$svnrepo_escaped\" &&\n"> 
          <"\ttest $(git config --get svn-remote.svn.fetch) = \\\n"> <"\t\t\":refs/remotes/git-svn\"\n"> <"\t">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"initialize a multi-repository repo">)} 
      {
        (SQ <"\n"> <"\tgit svn init \"$svnrepo\" -T trunk -t tags -b branches &&\n"> 
          <"\tgit config --get-all svn-remote.svn.fetch > fetch.out &&\n"> <"\tgrep \"^trunk:refs/remotes/origin/trunk$\" fetch.out &&\n"> 
          <"\ttest -n \"$(git config --get svn-remote.svn.branches \\\n"> <"\t\t    \"^branches/\\*:refs/remotes/origin/\\*$\")\" &&\n"> 
          <"\ttest -n \"$(git config --get svn-remote.svn.tags \\\n"> <"\t\t    \"^tags/\\*:refs/remotes/origin/tags/\\*$\")\" &&\n"> 
          <"\tgit config --unset svn-remote.svn.branches \\\n"> <"\t                        \"^branches/\\*:refs/remotes/origin/\\*$\" &&\n"> 
          <"\tgit config --unset svn-remote.svn.tags \\\n"> <"\t                        \"^tags/\\*:refs/remotes/origin/tags/\\*$\" &&\n"> 
          <"\tgit config --add svn-remote.svn.fetch \"branches/a:refs/remotes/origin/a\" &&\n"> <"\tgit config --add svn-remote.svn.fetch \"branches/b:refs/remotes/origin/b\" &&\n"> 
          <"\tfor i in tags/0.1 tags/0.2 tags/0.3\n"> <"\tdo\n"> <"\t\tgit config --add svn-remote.svn.fetch \\\n"> 
          <"\t\t\t$i:refs/remotes/origin/$i || return 1\n"> <"\tdone &&\n"> <"\tgit config --get-all svn-remote.svn.fetch > fetch.out &&\n"> 
          <"\tgrep \"^trunk:refs/remotes/origin/trunk$\" fetch.out &&\n"> <"\tgrep \"^branches/a:refs/remotes/origin/a$\" fetch.out &&\n"> 
          <"\tgrep \"^branches/b:refs/remotes/origin/b$\" fetch.out &&\n"> <"\tgrep \"^tags/0\\.1:refs/remotes/origin/tags/0\\.1$\" fetch.out &&\n"> 
          <"\tgrep \"^tags/0\\.2:refs/remotes/origin/tags/0\\.2$\" fetch.out &&\n"> <"\tgrep \"^tags/0\\.3:refs/remotes/origin/tags/0\\.3$\" fetch.out &&\n"> 
          <"\tgrep \"^:refs/remotes/git-svn\" fetch.out\n"> <"\t">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"multi-fetch works on partial urls + paths">)} 
      {
        (SQ <"\n"> <"\trefs=\"trunk a b tags/0.1 tags/0.2 tags/0.3\" &&\n"> 
          <"\tgit svn multi-fetch &&\n"> <"\tfor i in $refs\n"> <"\tdo\n"> 
          <"\t\tgit rev-parse --verify refs/remotes/origin/$i^0 || return 1;\n"> <"\tdone >refs.out &&\n"> <"\ttest -z \"$(sort <refs.out | uniq -d)\" &&\n"> <"\tfor i in $refs\n"> 
          <"\tdo\n"> <"\t\tfor j in $refs\n"> <"\t\tdo\n"> <"\t\t\tgit diff --exit-code refs/remotes/origin/$i \\\n"> 
          <"\t\t\t\t\t     refs/remotes/origin/$j ||\n"> <"\t\t\t\treturn 1\n"> <"\t\tdone\n"> <"\tdone\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"migrate --minimize on old inited layout">)} 
      {
        (SQ <"\n"> <"\tgit config --unset-all svn-remote.svn.fetch &&\n"> 
          <"\tgit config --unset-all svn-remote.svn.url &&\n"> <"\trm -rf \"$GIT_DIR\"/svn &&\n"> <"\tfor i in $(cat fetch.out)\n"> <"\tdo\n"> 
          <"\t\tpath=$(expr $i : \"\\([^:]*\\):.*$\")\n"> <"\t\tref=$(expr $i : \"[^:]*:\\(refs/remotes/.*\\)$\")\n"> 
          <"\t\tif test -z \"$ref\"; then continue; fi\n"> <"\t\tif test -n \"$path\"; then path=\"/$path\"; fi\n"> 
          <"\t\tmkdir -p \"$GIT_DIR\"/svn/$ref/info/ &&\n"> <"\t\techo \"$svnrepo\"$path >\"$GIT_DIR\"/svn/$ref/info/url ||\n"> <"\t\treturn 1\n"> <"\tdone &&\n"> 
          <"\tgit svn migrate --minimize &&\n"> <"\ttest -z \"$(git config -l | grep \"^svn-remote\\.git-svn\\.\")\" &&\n"> 
          <"\tgit config --get-all svn-remote.svn.fetch > fetch.out &&\n"> <"\tgrep \"^trunk:refs/remotes/origin/trunk$\" fetch.out &&\n"> 
          <"\tgrep \"^branches/a:refs/remotes/origin/a$\" fetch.out &&\n"> <"\tgrep \"^branches/b:refs/remotes/origin/b$\" fetch.out &&\n"> 
          <"\tgrep \"^tags/0\\.1:refs/remotes/origin/tags/0\\.1$\" fetch.out &&\n"> <"\tgrep \"^tags/0\\.2:refs/remotes/origin/tags/0\\.2$\" fetch.out &&\n"> 
          <"\tgrep \"^tags/0\\.3:refs/remotes/origin/tags/0\\.3$\" fetch.out &&\n"> <"\tgrep \"^:refs/remotes/git-svn\" fetch.out\n"> <"\t">
        )
      }
    )
    (C {(test_expect_success)} {(DQ (".rev_db auto-converted to .rev_map.UUID"))} 
      {
        (SQ <"\n"> <"\tgit svn fetch -i trunk &&\n"> 
          <
"\ttest -z \"$(ls \"$GIT_DIR\"/svn/refs/remotes/origin/trunk/.rev_db.* 2>/dev/null)\" &&\n"
          > <"\texpect=\"$(ls \"$GIT_DIR\"/svn/refs/remotes/origin/trunk/.rev_map.*)\" &&\n"> 
          <"\ttest -n \"$expect\" &&\n"> <"\trev_db=\"$(echo $expect | sed -e \"s,_map,_db,\")\" &&\n"> 
          <"\tconvert_to_rev_db \"$expect\" \"$rev_db\" &&\n"> <"\trm -f \"$expect\" &&\n"> <"\ttest -f \"$rev_db\" &&\n"> <"\tgit svn fetch -i trunk &&\n"> 
          <
"\ttest -z \"$(ls \"$GIT_DIR\"/svn/refs/remotes/origin/trunk/.rev_db.* 2>/dev/null)\" &&\n"
          > <"\ttest ! -e \"$GIT_DIR\"/svn/refs/remotes/origin/trunk/.rev_db &&\n"> <"\ttest -f \"$expect\"\n"> 
          <"\t">
        )
      }
    )
    (C {(test_done)})
  ]
)