source ./test-lib.sh if test -n $NO_SVN_TESTS { setglobal skip_all = ''skipping git svn tests, NO_SVN_TESTS defined'' test_done } if ! test_have_prereq PERL { setglobal skip_all = ''skipping git svn tests, perl not available'' test_done } setglobal GIT_DIR = "$PWD/.git" setglobal GIT_SVN_DIR = "$GIT_DIR/svn/refs/remotes/git-svn" setglobal SVN_TREE = "$GIT_SVN_DIR/svn-tree" svn >/dev/null !2 > !1 if test $Status -ne 1 { setglobal skip_all = ''skipping git svn tests, svn not found'' test_done } setglobal svnrepo = "$PWD/svnrepo" export svnrepo setglobal 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 setglobal x = $Status if test $x -ne 0 { if test $x -eq 42 { setglobal skip_all = ''Perl SVN libraries must be >= 1.1.0'' } elif test $x -eq 41 { setglobal skip_all = ''svnadmin failed to create fsfs repository'' } else { setglobal skip_all = ''Perl SVN libraries not found or unusable'' } test_done } setglobal rawsvnrepo = $svnrepo setglobal 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 setglobal orig_svncmd = $1; shift if test -z $orig_svncmd { svn return } svn $orig_svncmd --config-dir $svnconf @Argv } proc maybe_start_httpd { setglobal loc = $(1-svn) test_tristate GIT_SVN_TEST_HTTPD match $GIT_SVN_TEST_HTTPD { with true source "$TEST_DIRECTORY"/lib-httpd.sh setglobal LIB_HTTPD_SVN = $loc start_httpd with * 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 { setglobal 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 { setglobal 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" } }