source ./test-lib.sh if test -n $NO_SVN_TESTS { setvar skip_all = ''skipping git svn tests, NO_SVN_TESTS defined'' test_done } if ! test_have_prereq PERL { setvar skip_all = ''skipping git svn tests, perl not available'' test_done } setvar GIT_DIR = "$PWD/.git" setvar GIT_SVN_DIR = "$GIT_DIR/svn/refs/remotes/git-svn" setvar SVN_TREE = "$GIT_SVN_DIR/svn-tree" svn >/dev/null 2>&1 if test $? -ne 1 { setvar skip_all = ''skipping git svn tests, svn not found'' test_done } setvar svnrepo = "$PWD/svnrepo" export svnrepo setvar svnconf = "$PWD/svnconf" export svnconf perl -w -e " use SVN::Core; use SVN::Repos; \$SVN::Core::VERSION gt '1.1.0' or exit(42); system(qw/svnadmin create --fs-type fsfs/, \$ENV{svnrepo}) == 0 or exit(41); " >&3 2>&4 setvar x = ""$? if test $x -ne 0 { if test $x -eq 42 { setvar skip_all = ''Perl SVN libraries must be >= 1.1.0'' } elif test $x -eq 41 { setvar skip_all = ''svnadmin failed to create fsfs repository'' } else { setvar skip_all = ''Perl SVN libraries not found or unusable'' } test_done } setvar rawsvnrepo = "$svnrepo" setvar svnrepo = ""file://$svnrepo"" proc poke { test-chmtime +1 $1 } # We need this, because we should pass empty configuration directory to # the 'svn commit' to avoid automated property changes and other stuff # that could be set from user's configuration files in ~/.subversion. proc svn_cmd { test -d $svnconf || mkdir $svnconf setvar orig_svncmd = "$1"; shift if test -z $orig_svncmd { svn return } svn $orig_svncmd --config-dir $svnconf @ARGV } proc maybe_start_httpd { setvar loc = ${1-svn} test_tristate GIT_SVN_TEST_HTTPD case (GIT_SVN_TEST_HTTPD) { true { source "$TEST_DIRECTORY"/lib-httpd.sh setvar LIB_HTTPD_SVN = "$loc" start_httpd } * { proc stop_httpd { : noop } } } } proc convert_to_rev_db { perl -w -- - @ARGV <<< ''' use strict; @ARGV == 2 or die "usage: convert_to_rev_db "; 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 $!; ''' } proc require_svnserve { if test -z $SVNSERVE_PORT { setvar skip_all = ''skipping svnserve test. (set $SVNSERVE_PORT to enable)'' test_done } } proc start_svnserve { svnserve --listen-port $SVNSERVE_PORT \ --root $rawsvnrepo \ --listen-once \ --listen-host 127.0.0.1 & } proc prepare_a_utf8_locale { setvar a_utf8_locale = $(locale -a | sed -n '/\.[uU][tT][fF]-*8$/{ p q }') if test -n $a_utf8_locale { test_set_prereq UTF8 } else { say "# UTF-8 locale not available, some tests are skipped" } }