t / lib-git-svn.shon commit Merge branch 'maint' (b79376c)
   1. ./test-lib.sh
   2
   3remotes_git_svn=remotes/git""-svn
   4git_svn_id=git""-svn-id
   5
   6if test -n "$NO_SVN_TESTS"
   7then
   8        say 'skipping git svn tests, NO_SVN_TESTS defined'
   9        test_done
  10fi
  11if ! test_have_prereq PERL; then
  12        say 'skipping git svn tests, perl not available'
  13        test_done
  14fi
  15
  16GIT_DIR=$PWD/.git
  17GIT_SVN_DIR=$GIT_DIR/svn/git-svn
  18SVN_TREE=$GIT_SVN_DIR/svn-tree
  19
  20svn >/dev/null 2>&1
  21if test $? -ne 1
  22then
  23    say 'skipping git svn tests, svn not found'
  24    test_done
  25fi
  26
  27svnrepo=$PWD/svnrepo
  28export svnrepo
  29
  30perl -w -e "
  31use SVN::Core;
  32use SVN::Repos;
  33\$SVN::Core::VERSION gt '1.1.0' or exit(42);
  34system(qw/svnadmin create --fs-type fsfs/, \$ENV{svnrepo}) == 0 or exit(41);
  35" >&3 2>&4
  36x=$?
  37if test $x -ne 0
  38then
  39        if test $x -eq 42; then
  40                err='Perl SVN libraries must be >= 1.1.0'
  41        elif test $x -eq 41; then
  42                err='svnadmin failed to create fsfs repository'
  43        else
  44                err='Perl SVN libraries not found or unusable, skipping test'
  45        fi
  46        say "$err"
  47        test_done
  48fi
  49
  50rawsvnrepo="$svnrepo"
  51svnrepo="file://$svnrepo"
  52
  53poke() {
  54        test-chmtime +1 "$1"
  55}
  56
  57for d in \
  58        "$SVN_HTTPD_PATH" \
  59        /usr/sbin/apache2 \
  60        /usr/sbin/httpd \
  61; do
  62        if test -f "$d"
  63        then
  64                SVN_HTTPD_PATH="$d"
  65                break
  66        fi
  67done
  68for d in \
  69        "$SVN_HTTPD_MODULE_PATH" \
  70        /usr/lib/apache2/modules \
  71        /usr/libexec/apache2 \
  72; do
  73        if test -d "$d"
  74        then
  75                SVN_HTTPD_MODULE_PATH="$d"
  76                break
  77        fi
  78done
  79
  80start_httpd () {
  81        repo_base_path="$1"
  82        if test -z "$SVN_HTTPD_PORT"
  83        then
  84                echo >&2 'SVN_HTTPD_PORT is not defined!'
  85                return
  86        fi
  87        if test -z "$repo_base_path"
  88        then
  89                repo_base_path=svn
  90        fi
  91
  92        mkdir "$GIT_DIR"/logs
  93
  94        cat > "$GIT_DIR/httpd.conf" <<EOF
  95ServerName "git svn test"
  96ServerRoot "$GIT_DIR"
  97DocumentRoot "$GIT_DIR"
  98PidFile "$GIT_DIR/httpd.pid"
  99LockFile logs/accept.lock
 100Listen 127.0.0.1:$SVN_HTTPD_PORT
 101LoadModule dav_module $SVN_HTTPD_MODULE_PATH/mod_dav.so
 102LoadModule dav_svn_module $SVN_HTTPD_MODULE_PATH/mod_dav_svn.so
 103<Location /$repo_base_path>
 104        DAV svn
 105        SVNPath "$rawsvnrepo"
 106</Location>
 107EOF
 108        "$SVN_HTTPD_PATH" -f "$GIT_DIR"/httpd.conf -k start
 109        svnrepo="http://127.0.0.1:$SVN_HTTPD_PORT/$repo_base_path"
 110}
 111
 112stop_httpd () {
 113        test -z "$SVN_HTTPD_PORT" && return
 114        "$SVN_HTTPD_PATH" -f "$GIT_DIR"/httpd.conf -k stop
 115}
 116
 117convert_to_rev_db () {
 118        perl -w -- - "$@" <<\EOF
 119use strict;
 120@ARGV == 2 or die "Usage: convert_to_rev_db <input> <output>";
 121open my $wr, '+>', $ARGV[1] or die "$!: couldn't open: $ARGV[1]";
 122open my $rd, '<', $ARGV[0] or die "$!: couldn't open: $ARGV[0]";
 123my $size = (stat($rd))[7];
 124($size % 24) == 0 or die "Inconsistent size: $size";
 125while (sysread($rd, my $buf, 24) == 24) {
 126        my ($r, $c) = unpack('NH40', $buf);
 127        my $offset = $r * 41;
 128        seek $wr, 0, 2 or die $!;
 129        my $pos = tell $wr;
 130        if ($pos < $offset) {
 131                for (1 .. (($offset - $pos) / 41)) {
 132                        print $wr (('0' x 40),"\n") or die $!;
 133                }
 134        }
 135        seek $wr, $offset, 0 or die $!;
 136        print $wr $c,"\n" or die $!;
 137}
 138close $wr or die $!;
 139close $rd or die $!;
 140EOF
 141}
 142
 143require_svnserve () {
 144    if test -z "$SVNSERVE_PORT"
 145    then
 146        say 'skipping svnserve test. (set $SVNSERVE_PORT to enable)'
 147        test_done
 148    fi
 149}
 150
 151start_svnserve () {
 152    svnserve --listen-port $SVNSERVE_PORT \
 153             --root "$rawsvnrepo" \
 154             --listen-once \
 155             --listen-host 127.0.0.1 &
 156}
 157