]>
Commit | Line | Data |
---|---|---|
60d02ccc EW |
1 | . ./test-lib.sh |
2 | ||
16805d3e NS |
3 | remotes_git_svn=remotes/git""-svn |
4 | git_svn_id=git""-svn-id | |
5 | ||
60d02ccc | 6 | if test -n "$NO_SVN_TESTS" |
36f5b1f0 | 7 | then |
fae74a04 | 8 | say 'skipping git svn tests, NO_SVN_TESTS defined' |
60d02ccc | 9 | test_done |
36f5b1f0 | 10 | fi |
1b19ccd2 JK |
11 | if ! test_have_prereq PERL; then |
12 | say 'skipping git svn tests, perl not available' | |
13 | test_done | |
14 | fi | |
36f5b1f0 | 15 | |
b9c85187 | 16 | GIT_DIR=$PWD/.git |
6f5748e1 | 17 | GIT_SVN_DIR=$GIT_DIR/svn/refs/remotes/git-svn |
b9c85187 | 18 | SVN_TREE=$GIT_SVN_DIR/svn-tree |
a5e9c7df | 19 | PERL=${PERL:-perl} |
b9c85187 | 20 | |
36f5b1f0 | 21 | svn >/dev/null 2>&1 |
4b832e81 | 22 | if test $? -ne 1 |
36f5b1f0 | 23 | then |
fae74a04 | 24 | say 'skipping git svn tests, svn not found' |
36f5b1f0 | 25 | test_done |
36f5b1f0 EW |
26 | fi |
27 | ||
28 | svnrepo=$PWD/svnrepo | |
cdf3ec01 | 29 | export svnrepo |
da083d68 ER |
30 | svnconf=$PWD/svnconf |
31 | export svnconf | |
36f5b1f0 | 32 | |
a5e9c7df | 33 | $PERL -w -e " |
c6d499a8 EW |
34 | use SVN::Core; |
35 | use SVN::Repos; | |
36 | \$SVN::Core::VERSION gt '1.1.0' or exit(42); | |
cdf3ec01 | 37 | system(qw/svnadmin create --fs-type fsfs/, \$ENV{svnrepo}) == 0 or exit(41); |
38434f2e | 38 | " >&3 2>&4 |
c6d499a8 EW |
39 | x=$? |
40 | if test $x -ne 0 | |
dc62e25c | 41 | then |
c6d499a8 EW |
42 | if test $x -eq 42; then |
43 | err='Perl SVN libraries must be >= 1.1.0' | |
e66191f4 EW |
44 | elif test $x -eq 41; then |
45 | err='svnadmin failed to create fsfs repository' | |
c6d499a8 EW |
46 | else |
47 | err='Perl SVN libraries not found or unusable, skipping test' | |
48 | fi | |
fae74a04 | 49 | say "$err" |
c6d499a8 | 50 | test_done |
dc62e25c EW |
51 | fi |
52 | ||
2edb9c5c | 53 | rawsvnrepo="$svnrepo" |
e1516119 | 54 | svnrepo="file://$svnrepo" |
36f5b1f0 | 55 | |
7b3fab87 | 56 | poke() { |
56cf9806 | 57 | test-chmtime +1 "$1" |
7b3fab87 | 58 | } |
29633bb9 | 59 | |
da083d68 ER |
60 | # We need this, because we should pass empty configuration directory to |
61 | # the 'svn commit' to avoid automated property changes and other stuff | |
62 | # that could be set from user's configuration files in ~/.subversion. | |
63 | svn_cmd () { | |
64 | [ -d "$svnconf" ] || mkdir "$svnconf" | |
65 | orig_svncmd="$1"; shift | |
66 | if [ -z "$orig_svncmd" ]; then | |
67 | svn | |
68 | return | |
69 | fi | |
70 | svn "$orig_svncmd" --config-dir "$svnconf" "$@" | |
71 | } | |
72 | ||
3644da72 KB |
73 | for d in \ |
74 | "$SVN_HTTPD_PATH" \ | |
75 | /usr/sbin/apache2 \ | |
76 | /usr/sbin/httpd \ | |
77 | ; do | |
78 | if test -f "$d" | |
79 | then | |
80 | SVN_HTTPD_PATH="$d" | |
81 | break | |
82 | fi | |
83 | done | |
84 | for d in \ | |
85 | "$SVN_HTTPD_MODULE_PATH" \ | |
86 | /usr/lib/apache2/modules \ | |
87 | /usr/libexec/apache2 \ | |
88 | ; do | |
89 | if test -d "$d" | |
90 | then | |
91 | SVN_HTTPD_MODULE_PATH="$d" | |
92 | break | |
93 | fi | |
94 | done | |
29633bb9 EW |
95 | |
96 | start_httpd () { | |
d1a8d0ea | 97 | repo_base_path="$1" |
29633bb9 EW |
98 | if test -z "$SVN_HTTPD_PORT" |
99 | then | |
100 | echo >&2 'SVN_HTTPD_PORT is not defined!' | |
101 | return | |
102 | fi | |
d1a8d0ea EW |
103 | if test -z "$repo_base_path" |
104 | then | |
105 | repo_base_path=svn | |
106 | fi | |
29633bb9 EW |
107 | |
108 | mkdir "$GIT_DIR"/logs | |
109 | ||
110 | cat > "$GIT_DIR/httpd.conf" <<EOF | |
1364ff27 | 111 | ServerName "git svn test" |
29633bb9 EW |
112 | ServerRoot "$GIT_DIR" |
113 | DocumentRoot "$GIT_DIR" | |
114 | PidFile "$GIT_DIR/httpd.pid" | |
3644da72 | 115 | LockFile logs/accept.lock |
29633bb9 EW |
116 | Listen 127.0.0.1:$SVN_HTTPD_PORT |
117 | LoadModule dav_module $SVN_HTTPD_MODULE_PATH/mod_dav.so | |
118 | LoadModule dav_svn_module $SVN_HTTPD_MODULE_PATH/mod_dav_svn.so | |
d1a8d0ea | 119 | <Location /$repo_base_path> |
29633bb9 | 120 | DAV svn |
3901a8c8 | 121 | SVNPath "$rawsvnrepo" |
29633bb9 EW |
122 | </Location> |
123 | EOF | |
124 | "$SVN_HTTPD_PATH" -f "$GIT_DIR"/httpd.conf -k start | |
d1a8d0ea | 125 | svnrepo="http://127.0.0.1:$SVN_HTTPD_PORT/$repo_base_path" |
29633bb9 EW |
126 | } |
127 | ||
128 | stop_httpd () { | |
129 | test -z "$SVN_HTTPD_PORT" && return | |
130 | "$SVN_HTTPD_PATH" -f "$GIT_DIR"/httpd.conf -k stop | |
131 | } | |
060610c5 EW |
132 | |
133 | convert_to_rev_db () { | |
a5e9c7df | 134 | $PERL -w -- - "$@" <<\EOF |
060610c5 EW |
135 | use strict; |
136 | @ARGV == 2 or die "Usage: convert_to_rev_db <input> <output>"; | |
137 | open my $wr, '+>', $ARGV[1] or die "$!: couldn't open: $ARGV[1]"; | |
138 | open my $rd, '<', $ARGV[0] or die "$!: couldn't open: $ARGV[0]"; | |
139 | my $size = (stat($rd))[7]; | |
140 | ($size % 24) == 0 or die "Inconsistent size: $size"; | |
141 | while (sysread($rd, my $buf, 24) == 24) { | |
142 | my ($r, $c) = unpack('NH40', $buf); | |
143 | my $offset = $r * 41; | |
144 | seek $wr, 0, 2 or die $!; | |
145 | my $pos = tell $wr; | |
146 | if ($pos < $offset) { | |
147 | for (1 .. (($offset - $pos) / 41)) { | |
148 | print $wr (('0' x 40),"\n") or die $!; | |
149 | } | |
150 | } | |
151 | seek $wr, $offset, 0 or die $!; | |
152 | print $wr $c,"\n" or die $!; | |
153 | } | |
154 | close $wr or die $!; | |
155 | close $rd or die $!; | |
156 | EOF | |
157 | } | |
dd9da51f AB |
158 | |
159 | require_svnserve () { | |
160 | if test -z "$SVNSERVE_PORT" | |
161 | then | |
162 | say 'skipping svnserve test. (set $SVNSERVE_PORT to enable)' | |
163 | test_done | |
dd9da51f AB |
164 | fi |
165 | } | |
166 | ||
167 | start_svnserve () { | |
168 | svnserve --listen-port $SVNSERVE_PORT \ | |
169 | --root "$rawsvnrepo" \ | |
170 | --listen-once \ | |
171 | --listen-host 127.0.0.1 & | |
172 | } | |
173 |