(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: F
                      )
                    ]
                  )
                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)})
  ]
)