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