(List
  (Com {[LIT_CHARS .]} {[LIT_CHARS ./test-lib.sh]}  )
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('remotes_git_svn', {[LIT_CHARS remotes/git] [DQ ] [LIT_CHARS -svn]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('git_svn_id', {[LIT_CHARS git] [DQ ] [LIT_CHARS -svn-id]})])
  (If
    (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub NO_SVN_TESTS]]}    )
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('skip_all', {[SQ <LIT_CHARS "skipping git svn tests, NO_SVN_TESTS defined">]})])
      (Com {[LIT_CHARS test_done]}      )
    )
  )
  (If
    (Pipeline!
      (Com {[LIT_CHARS test_have_prereq]} {[LIT_CHARS PERL]}      )
    )
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('skip_all', {[SQ <LIT_CHARS "skipping git svn tests, perl not available">]})])
      (Com {[LIT_CHARS test_done]}      )
    )
  )
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('GIT_DIR', {[VarSub PWD] [LIT_CHARS /.git]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('GIT_SVN_DIR', {[VarSub GIT_DIR] [LIT_CHARS /svn/refs/remotes/git-svn]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('SVN_TREE', {[VarSub GIT_SVN_DIR] [LIT_CHARS /svn-tree]})])
  (Com {[LIT_CHARS svn]}
    <
    (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} <REDIR_GREAT ">"> 1),
    (DescriptorRedirectNode target={[LIT_CHARS 1]} <REDIR_GREATAND "2>&"> 2),
    >
  )
  (If
    (Com {[LIT_CHARS test]} {[VarSub ?]} {[LIT_CHARS -ne]} {[LIT_CHARS 1]}    )
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('skip_all', {[SQ <LIT_CHARS "skipping git svn tests, svn not found">]})])
      (Com {[LIT_CHARS test_done]}      )
    )
  )
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('svnrepo', {[VarSub PWD] [LIT_CHARS /svnrepo]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[{[LIT_CHARS svnrepo]}] bindings=[])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('svnconf', {[VarSub PWD] [LIT_CHARS /svnconf]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[{[LIT_CHARS svnconf]}] bindings=[])
  (Com {[DQ [VarSub PERL_PATH]]} {[LIT_CHARS -w]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "use SVN::Core;\n"][LIT_CHARS "use SVN::Repos;\n"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "SVN::Core::VERSION gt '1.1.0' or exit(42);\n"][LIT_CHARS "system(qw/svnadmin create --fs-type fsfs/, "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "ENV{svnrepo}) == 0 or exit(41);\n"]]}
    <
    (DescriptorRedirectNode target={[LIT_CHARS 3]} <REDIR_GREATAND ">&"> 1),
    (DescriptorRedirectNode target={[LIT_CHARS 4]} <REDIR_GREATAND "2>&"> 2),
    >
  )
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('x', {[VarSub ?]})])
  (If
    (Com {[LIT_CHARS test]} {[VarSub x]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]}    )
    (List
      (If
        (Com {[LIT_CHARS test]} {[VarSub x]} {[LIT_CHARS -eq]} {[LIT_CHARS 42]}        )
        (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('skip_all', {[SQ <LIT_CHARS "Perl SVN libraries must be >= 1.1.0">]})])
        (Com {[LIT_CHARS test]} {[VarSub x]} {[LIT_CHARS -eq]} {[LIT_CHARS 41]}        )
        (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('skip_all', {[SQ <LIT_CHARS "svnadmin failed to create fsfs repository">]})])
        (ElseTrue)
        (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('skip_all', {[SQ <LIT_CHARS "Perl SVN libraries not found or unusable">]})])
      )
      (Com {[LIT_CHARS test_done]}      )
    )
  )
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('rawsvnrepo', {[DQ [VarSub svnrepo]]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('svnrepo', {[DQ [LIT_CHARS "file://"][VarSub svnrepo]]})])
  (FunctionDef poke []
    (Com {[LIT_CHARS test-chmtime]} {[LIT_OTHER "+"] [LIT_CHARS 1]} {[DQ [VarSub 1]]}    )
  )
  (FunctionDef svn_cmd []
    (List
      (AndOr OP_OR_IF
        (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -d]} {[DQ [VarSub svnconf]]} {[LIT_DBRACKET_LIKE "]"]}        )
        (Com {[LIT_CHARS mkdir]} {[DQ [VarSub svnconf]]}        )
      )
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('orig_svncmd', {[DQ [VarSub 1]]})])
      (Com {[LIT_CHARS shift]}      )
      (If
        (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -z]} {[DQ [VarSub orig_svncmd]]} {[LIT_DBRACKET_LIKE "]"]}        )
        (List
          (Com {[LIT_CHARS svn]}          )
          (Com {[LIT_CHARS return]}          )
        )
      )
      (Com {[LIT_CHARS svn]} {[DQ [VarSub orig_svncmd]]} {[LIT_CHARS --config-dir]} {[DQ [VarSub svnconf]]} {[DQ [VarSub @]]}      )
    )
  )
  (FunctionDef prepare_httpd []
    (List
      (For d [{[DQ [VarSub SVN_HTTPD_PATH]]}, {[LIT_CHARS /usr/sbin/apache2]}, {[LIT_CHARS /usr/sbin/httpd]}])
        (If
          (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub d]]}          )
          (List
            (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('SVN_HTTPD_PATH', {[DQ [VarSub d]]})])
            (Com {[LIT_CHARS break]}            )
          )
        )
      )
      (If
        (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub SVN_HTTPD_PATH]]}        )
        (List
          (Com {[LIT_CHARS echo]} {[SQ <LIT_CHARS "*** error: Apache not found">]}
            <
            (DescriptorRedirectNode target={[LIT_CHARS 2]} <REDIR_GREATAND ">&"> 1),
            >
          )
          (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}          )
        )
      )
      (For d [{[DQ [VarSub SVN_HTTPD_MODULE_PATH]]}, {[LIT_CHARS /usr/lib/apache2/modules]}, {[LIT_CHARS /usr/libexec/apache2]}])
        (If
          (Com {[LIT_CHARS test]} {[LIT_CHARS -d]} {[DQ [VarSub d]]}          )
          (List
            (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('SVN_HTTPD_MODULE_PATH', {[DQ [VarSub d]]})])
            (Com {[LIT_CHARS break]}            )
          )
        )
      )
      (If
        (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub SVN_HTTPD_MODULE_PATH]]}        )
        (List
          (Com {[LIT_CHARS echo]} {[SQ <LIT_CHARS "*** error: Apache module dir not found">]}
            <
            (DescriptorRedirectNode target={[LIT_CHARS 2]} <REDIR_GREATAND ">&"> 1),
            >
          )
          (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}          )
        )
      )
      (If
        (Com {[LIT_CHARS test]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub SVN_HTTPD_MODULE_PATH][LIT_CHARS /mod_dav_svn.so]]}        )
        (List
          (Com {[LIT_CHARS echo]} {[SQ <LIT_CHARS "*** error: Apache module \"mod_dav_svn\" not found">]}
            <
            (DescriptorRedirectNode target={[LIT_CHARS 2]} <REDIR_GREATAND ">&"> 1),
            >
          )
          (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}          )
        )
      )
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('repo_base_path', {[DQ [VarSub 1 test_op=VS_TEST_HYPHEN {[LIT_CHARS svn]}]]})])
      (Com {[LIT_CHARS mkdir]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /logs]}      )
      (Com {[LIT_CHARS cat]}
        <
        (FilenameRedirectNode filename={[DQ [VarSub GIT_DIR][LIT_CHARS /httpd.conf]]} <REDIR_GREAT ">"> 1),
        (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "ServerName "][RIGHT_D_QUOTE "\""][LIT_CHARS "git svn test"][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "ServerRoot "][RIGHT_D_QUOTE "\""][VarSub GIT_DIR][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "DocumentRoot "][RIGHT_D_QUOTE "\""][VarSub GIT_DIR][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "PidFile "][RIGHT_D_QUOTE "\""][VarSub GIT_DIR][LIT_CHARS /httpd.pid][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "LockFile logs/accept.lock\n"][LIT_CHARS "Listen 127.0.0.1:"][VarSub SVN_HTTPD_PORT][LIT_CHARS "\n"][LIT_CHARS "LoadModule dav_module "][VarSub SVN_HTTPD_MODULE_PATH][LIT_CHARS "/mod_dav.so\n"][LIT_CHARS "LoadModule dav_svn_module "][VarSub SVN_HTTPD_MODULE_PATH][LIT_CHARS "/mod_dav_svn.so\n"][LIT_CHARS "<Location /"][VarSub repo_base_path][LIT_CHARS ">\n"][LIT_CHARS "\tDAV svn\n"][LIT_CHARS "\tSVNPath "][RIGHT_D_QUOTE "\""][VarSub rawsvnrepo][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "</Location>\n"]]} <REDIR_DLESS "<<"> 0),
        >
      )
    )
  )
  (FunctionDef start_httpd []
    (List
      (If
        (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub SVN_HTTPD_PORT]]}        )
        (List
          (Com {[LIT_CHARS echo]} {[SQ <LIT_CHARS "SVN_HTTPD_PORT is not defined!">]}
            <
            (DescriptorRedirectNode target={[LIT_CHARS 2]} <REDIR_GREATAND ">&"> 1),
            >
          )
          (Com {[LIT_CHARS return]}          )
        )
      )
      (AndOr OP_OR_IF
        (Com {[LIT_CHARS prepare_httpd]} {[DQ [VarSub 1]]}        )
        (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}        )
      )
      (Com {[DQ [VarSub SVN_HTTPD_PATH]]} {[LIT_CHARS -f]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /httpd.conf]} {[LIT_CHARS -k]} {[LIT_CHARS start]}      )
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('svnrepo', {[DQ [LIT_CHARS "http://127.0.0.1:"][VarSub SVN_HTTPD_PORT][LIT_CHARS /][VarSub repo_base_path]]})])
    )
  )
  (FunctionDef stop_httpd []
    (List
      (AndOr OP_AND_IF
        (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub SVN_HTTPD_PORT]]}        )
        (Com {[LIT_CHARS return]}        )
      )
      (AndOr OP_AND_IF
        (Com {[LIT_CHARS test]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub GIT_DIR][LIT_CHARS /httpd.conf]]}        )
        (Com {[LIT_CHARS return]}        )
      )
      (Com {[DQ [VarSub SVN_HTTPD_PATH]]} {[LIT_CHARS -f]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /httpd.conf]} {[LIT_CHARS -k]} {[LIT_CHARS stop]}      )
    )
  )
  (FunctionDef convert_to_rev_db []
    (Com {[DQ [VarSub PERL_PATH]]} {[LIT_CHARS -w]} {[LIT_CHARS --]} {[LIT_CHARS -]} {[DQ [VarSub @]]}
      <
      (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "use strict;\n"] [LIT_CHARS "@ARGV == 2 or die \"Usage: convert_to_rev_db <input> <output>\";\n"] [LIT_CHARS "open my $wr, '+>', $ARGV[1] or die \"$!: couldn't open: $ARGV[1]\";\n"] [LIT_CHARS "open my $rd, '<', $ARGV[0] or die \"$!: couldn't open: $ARGV[0]\";\n"] [LIT_CHARS "my $size = (stat($rd))[7];\n"] [LIT_CHARS "($size % 24) == 0 or die \"Inconsistent size: $size\";\n"] [LIT_CHARS "while (sysread($rd, my $buf, 24) == 24) {\n"] [LIT_CHARS "\tmy ($r, $c) = unpack('NH40', $buf);\n"] [LIT_CHARS "\tmy $offset = $r * 41;\n"] [LIT_CHARS "\tseek $wr, 0, 2 or die $!;\n"] [LIT_CHARS "\tmy $pos = tell $wr;\n"] [LIT_CHARS "\tif ($pos < $offset) {\n"] [LIT_CHARS "\t\tfor (1 .. (($offset - $pos) / 41)) {\n"] [LIT_CHARS "\t\t\tprint $wr (('0' x 40),\"\\n\") or die $!;\n"] [LIT_CHARS "\t\t}\n"] [LIT_CHARS "\t}\n"] [LIT_CHARS "\tseek $wr, $offset, 0 or die $!;\n"] [LIT_CHARS "\tprint $wr $c,\"\\n\" or die $!;\n"] [LIT_CHARS "}\n"] [LIT_CHARS "close $wr or die $!;\n"] [LIT_CHARS "close $rd or die $!;\n"]} <REDIR_DLESS "<<"> 0),
      >
    )
  )
  (FunctionDef require_svnserve []
    (If
      (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub SVNSERVE_PORT]]}      )
      (List
        (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('skip_all', {[SQ <LIT_CHARS "skipping svnserve test. (set $SVNSERVE_PORT to enable)">]})])
        (Com {[LIT_CHARS test_done]}        )
      )
    )
  )
  (FunctionDef start_svnserve []
    (Fork
      (Com {[LIT_CHARS svnserve]} {[LIT_CHARS --listen-port]} {[VarSub SVNSERVE_PORT]} {[LIT_CHARS --root]} {[DQ [VarSub rawsvnrepo]]} {[LIT_CHARS --listen-once]} {[LIT_CHARS --listen-host]} {[LIT_CHARS 127.0.0.1]}      )
    )
  )
)