]> asedeno.scripts.mit.edu Git - git.git/blobdiff - t/lib-git-svn.sh
git-svn: fix cloning of HTTP URLs with '+' in their path
[git.git] / t / lib-git-svn.sh
index 8d4a44721380213369668ea74dc4dbe3cf360485..d8f33557911389ab0e179b70e27d85264ef5ca0a 100644 (file)
@@ -49,15 +49,40 @@ poke() {
        test-chmtime +1 "$1"
 }
 
-SVN_HTTPD_MODULE_PATH=${SVN_HTTPD_MODULE_PATH-'/usr/lib/apache2/modules'}
-SVN_HTTPD_PATH=${SVN_HTTPD_PATH-'/usr/sbin/apache2'}
+for d in \
+       "$SVN_HTTPD_PATH" \
+       /usr/sbin/apache2 \
+       /usr/sbin/httpd \
+; do
+       if test -f "$d"
+       then
+               SVN_HTTPD_PATH="$d"
+               break
+       fi
+done
+for d in \
+       "$SVN_HTTPD_MODULE_PATH" \
+       /usr/lib/apache2/modules \
+       /usr/libexec/apache2 \
+; do
+       if test -d "$d"
+       then
+               SVN_HTTPD_MODULE_PATH="$d"
+               break
+       fi
+done
 
 start_httpd () {
+       repo_base_path="$1"
        if test -z "$SVN_HTTPD_PORT"
        then
                echo >&2 'SVN_HTTPD_PORT is not defined!'
                return
        fi
+       if test -z "$repo_base_path"
+       then
+               repo_base_path=svn
+       fi
 
        mkdir "$GIT_DIR"/logs
 
@@ -66,19 +91,46 @@ ServerName "git-svn test"
 ServerRoot "$GIT_DIR"
 DocumentRoot "$GIT_DIR"
 PidFile "$GIT_DIR/httpd.pid"
+LockFile logs/accept.lock
 Listen 127.0.0.1:$SVN_HTTPD_PORT
 LoadModule dav_module $SVN_HTTPD_MODULE_PATH/mod_dav.so
 LoadModule dav_svn_module $SVN_HTTPD_MODULE_PATH/mod_dav_svn.so
-<Location /svn>
+<Location /$repo_base_path>
        DAV svn
        SVNPath $rawsvnrepo
 </Location>
 EOF
        "$SVN_HTTPD_PATH" -f "$GIT_DIR"/httpd.conf -k start
-       svnrepo=http://127.0.0.1:$SVN_HTTPD_PORT/svn
+       svnrepo="http://127.0.0.1:$SVN_HTTPD_PORT/$repo_base_path"
 }
 
 stop_httpd () {
        test -z "$SVN_HTTPD_PORT" && return
        "$SVN_HTTPD_PATH" -f "$GIT_DIR"/httpd.conf -k stop
 }
+
+convert_to_rev_db () {
+       perl -w -- - "$@" <<\EOF
+use strict;
+@ARGV == 2 or die "Usage: convert_to_rev_db <input> <output>";
+open my $wr, '+>', $ARGV[1] or die "$!: couldn't open: $ARGV[1]";
+open my $rd, '<', $ARGV[0] or die "$!: couldn't open: $ARGV[0]";
+my $size = (stat($rd))[7];
+($size % 24) == 0 or die "Inconsistent size: $size";
+while (sysread($rd, my $buf, 24) == 24) {
+       my ($r, $c) = unpack('NH40', $buf);
+       my $offset = $r * 41;
+       seek $wr, 0, 2 or die $!;
+       my $pos = tell $wr;
+       if ($pos < $offset) {
+               for (1 .. (($offset - $pos) / 41)) {
+                       print $wr (('0' x 40),"\n") or die $!;
+               }
+       }
+       seek $wr, $offset, 0 or die $!;
+       print $wr $c,"\n" or die $!;
+}
+close $wr or die $!;
+close $rd or die $!;
+EOF
+}