Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
git/t/lib-git-svn.sh
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
188 lines (168 sloc)
3.98 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
. ./test-lib.sh | |
remotes_git_svn=remotes/git""-svn | |
git_svn_id=git""-svn-id | |
if test -n "$NO_SVN_TESTS" | |
then | |
skip_all='skipping git svn tests, NO_SVN_TESTS defined' | |
test_done | |
fi | |
if ! test_have_prereq PERL; then | |
skip_all='skipping git svn tests, perl not available' | |
test_done | |
fi | |
GIT_DIR=$PWD/.git | |
GIT_SVN_DIR=$GIT_DIR/svn/refs/remotes/git-svn | |
SVN_TREE=$GIT_SVN_DIR/svn-tree | |
svn >/dev/null 2>&1 | |
if test $? -ne 1 | |
then | |
skip_all='skipping git svn tests, svn not found' | |
test_done | |
fi | |
svnrepo=$PWD/svnrepo | |
export svnrepo | |
svnconf=$PWD/svnconf | |
export svnconf | |
"$PERL_PATH" -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 | |
x=$? | |
if test $x -ne 0 | |
then | |
if test $x -eq 42; then | |
skip_all='Perl SVN libraries must be >= 1.1.0' | |
elif test $x -eq 41; then | |
skip_all='svnadmin failed to create fsfs repository' | |
else | |
skip_all='Perl SVN libraries not found or unusable' | |
fi | |
test_done | |
fi | |
rawsvnrepo="$svnrepo" | |
svnrepo="file://$svnrepo" | |
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. | |
svn_cmd () { | |
[ -d "$svnconf" ] || mkdir "$svnconf" | |
orig_svncmd="$1"; shift | |
if [ -z "$orig_svncmd" ]; then | |
svn | |
return | |
fi | |
svn "$orig_svncmd" --config-dir "$svnconf" "$@" | |
} | |
prepare_httpd () { | |
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 | |
if test -z "$SVN_HTTPD_PATH" | |
then | |
echo >&2 '*** error: Apache not found' | |
return 1 | |
fi | |
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 | |
if test -z "$SVN_HTTPD_MODULE_PATH" | |
then | |
echo >&2 '*** error: Apache module dir not found' | |
return 1 | |
fi | |
if test ! -f "$SVN_HTTPD_MODULE_PATH/mod_dav_svn.so" | |
then | |
echo >&2 '*** error: Apache module "mod_dav_svn" not found' | |
return 1 | |
fi | |
repo_base_path="${1-svn}" | |
mkdir "$GIT_DIR"/logs | |
cat > "$GIT_DIR/httpd.conf" <<EOF | |
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 /$repo_base_path> | |
DAV svn | |
SVNPath "$rawsvnrepo" | |
</Location> | |
EOF | |
} | |
start_httpd () { | |
if test -z "$SVN_HTTPD_PORT" | |
then | |
echo >&2 'SVN_HTTPD_PORT is not defined!' | |
return | |
fi | |
prepare_httpd "$1" || return 1 | |
"$SVN_HTTPD_PATH" -f "$GIT_DIR"/httpd.conf -k start | |
svnrepo="http://127.0.0.1:$SVN_HTTPD_PORT/$repo_base_path" | |
} | |
stop_httpd () { | |
test -z "$SVN_HTTPD_PORT" && return | |
test ! -f "$GIT_DIR/httpd.conf" && return | |
"$SVN_HTTPD_PATH" -f "$GIT_DIR"/httpd.conf -k stop | |
} | |
convert_to_rev_db () { | |
"$PERL_PATH" -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 | |
} | |
require_svnserve () { | |
if test -z "$SVNSERVE_PORT" | |
then | |
skip_all='skipping svnserve test. (set $SVNSERVE_PORT to enable)' | |
test_done | |
fi | |
} | |
start_svnserve () { | |
svnserve --listen-port $SVNSERVE_PORT \ | |
--root "$rawsvnrepo" \ | |
--listen-once \ | |
--listen-host 127.0.0.1 & | |
} | |