Merge lp:~allison/ubuntu/raring/libsvn-web-perl/fix-for-1106378 into lp:ubuntu/raring/libsvn-web-perl
- Raring (13.04)
- fix-for-1106378
- Merge into raring
Proposed by
Allison Randal
Status: | Merged |
---|---|
Merged at revision: | 8 |
Proposed branch: | lp:~allison/ubuntu/raring/libsvn-web-perl/fix-for-1106378 |
Merge into: | lp:ubuntu/raring/libsvn-web-perl |
Diff against target: |
12337 lines (+5192/-4860) 143 files modified
Build.PL (+0/-420) CHANGES.pod (+95/-13) LICENSE (+379/-0) MANIFEST (+93/-56) MANIFEST.SKIP (+1/-0) META.json (+79/-0) META.yml (+43/-72) Makefile.PL (+84/-31) README (+6/-6) SIGNATURE (+0/-102) SVN-Web.psgi (+22/-0) UPDATING.pod (+4/-0) bin/svnweb-install (+8/-46) bin/svnweb-server (+0/-142) conf/apache1.tt (+0/-82) conf/apache2.tt (+0/-69) cpanfile (+49/-0) css/common.css (+84/-0) css/styles-hlb.css (+241/-0) css/trac/browser.css (+89/-0) css/trac/changeset.css (+20/-0) css/trac/code.css (+108/-0) css/trac/diff.css (+153/-0) css/trac/svnweb.css (+24/-0) css/trac/text-diff-html.css (+32/-0) css/trac/trac.css (+360/-0) debian/changelog (+15/-0) debian/compat (+1/-1) debian/control (+6/-2) debian/docs (+2/-0) debian/rules (+6/-78) dist.ini (+77/-0) lib/SVN/Web.pm (+316/-647) lib/SVN/Web/Blame.pm (+29/-24) lib/SVN/Web/Browse.pm (+55/-60) lib/SVN/Web/Checkout.pm (+20/-20) lib/SVN/Web/Diff.pm (+79/-99) lib/SVN/Web/DiffParser.pm (+232/-224) lib/SVN/Web/I18N.pm (+11/-9) lib/SVN/Web/List.pm (+57/-15) lib/SVN/Web/Log.pm (+61/-74) lib/SVN/Web/RSS.pm (+11/-10) lib/SVN/Web/Revision.pm (+43/-62) lib/SVN/Web/Style/common.css (+0/-84) lib/SVN/Web/Style/styles-hlb.css (+0/-241) lib/SVN/Web/Style/trac/browser.css (+0/-89) lib/SVN/Web/Style/trac/changeset.css (+0/-20) lib/SVN/Web/Style/trac/code.css (+0/-108) lib/SVN/Web/Style/trac/diff.css (+0/-153) lib/SVN/Web/Style/trac/svnweb.css (+0/-24) lib/SVN/Web/Style/trac/text-diff-html.css (+0/-32) lib/SVN/Web/Style/trac/trac.css (+0/-360) lib/SVN/Web/Template/plain/browse (+0/-31) lib/SVN/Web/Template/plain/diff (+0/-1) lib/SVN/Web/Template/plain/footer (+0/-3) lib/SVN/Web/Template/plain/header (+0/-31) lib/SVN/Web/Template/plain/list (+0/-15) lib/SVN/Web/Template/plain/log (+0/-52) lib/SVN/Web/Template/plain/revision (+0/-54) lib/SVN/Web/Template/plain/view (+0/-38) lib/SVN/Web/Template/plain/x (+0/-3) lib/SVN/Web/Template/trac/_action_menu (+0/-20) lib/SVN/Web/Template/trac/_diff (+0/-122) lib/SVN/Web/Template/trac/_log_msg (+0/-78) lib/SVN/Web/Template/trac/blame (+0/-58) lib/SVN/Web/Template/trac/browse (+0/-88) lib/SVN/Web/Template/trac/diff (+0/-7) lib/SVN/Web/Template/trac/footer (+0/-7) lib/SVN/Web/Template/trac/header (+0/-63) lib/SVN/Web/Template/trac/list (+0/-18) lib/SVN/Web/Template/trac/log (+0/-78) lib/SVN/Web/Template/trac/revision (+0/-98) lib/SVN/Web/Template/trac/rss (+0/-43) lib/SVN/Web/Template/trac/view (+0/-23) lib/SVN/Web/Template/trac/x (+0/-6) lib/SVN/Web/Test.pm (+109/-200) lib/SVN/Web/View.pm (+23/-23) lib/SVN/Web/X.pm (+9/-3) lib/SVN/Web/action.pm (+128/-45) t/2basic.t (+54/-25) t/3svnweb-install.t (+5/-7) t/author-critic.t (+20/-0) t/cache.t (+9/-1) t/cgi.t (+0/-47) t/mod_perl.t (+0/-48) t/perlcriticrc (+1/-0) t/release-distmeta.t (+15/-0) t/release-pod-coverage.t (+21/-0) t/release-pod-syntax.t (+15/-0) t/repos/README.txt (+5/-0) t/repos/conf/authz (+32/-0) t/repos/conf/passwd (+8/-0) t/repos/conf/svnserve.conf (+47/-0) t/repos/db/current (+1/-0) t/repos/db/format (+2/-0) t/repos/db/fs-type (+1/-0) t/repos/db/fsfs.conf (+37/-0) t/repos/db/min-unpacked-rev (+1/-0) t/repos/db/revprops/0/0 (+5/-0) t/repos/db/revprops/0/1 (+13/-0) t/repos/db/revprops/0/2 (+13/-0) t/repos/db/revprops/0/3 (+15/-0) t/repos/db/revs/0/0 (+11/-0) t/repos/db/txn-current (+1/-0) t/repos/db/uuid (+1/-0) t/repos/format (+1/-0) t/repos/hooks/post-commit.tmpl (+50/-0) t/repos/hooks/post-lock.tmpl (+45/-0) t/repos/hooks/post-revprop-change.tmpl (+57/-0) t/repos/hooks/post-unlock.tmpl (+43/-0) t/repos/hooks/pre-commit.tmpl (+85/-0) t/repos/hooks/pre-lock.tmpl (+71/-0) t/repos/hooks/pre-revprop-change.tmpl (+66/-0) t/repos/hooks/pre-unlock.tmpl (+63/-0) t/repos/hooks/start-commit.tmpl (+68/-0) t/repos/locks/db-logs.lock (+3/-0) t/repos/locks/db.lock (+3/-0) t/svn-uris.t (+33/-0) t/svnweb-server.t (+0/-33) t/test_repo.dump (+70/-16) template/plain/browse (+31/-0) template/plain/diff (+1/-0) template/plain/footer (+3/-0) template/plain/header (+31/-0) template/plain/list (+15/-0) template/plain/log (+52/-0) template/plain/revision (+54/-0) template/plain/view (+38/-0) template/plain/x (+3/-0) template/trac/_action_menu (+20/-0) template/trac/_diff (+122/-0) template/trac/_log_msg (+78/-0) template/trac/blame (+58/-0) template/trac/browse (+88/-0) template/trac/diff (+7/-0) template/trac/footer (+7/-0) template/trac/header (+63/-0) template/trac/list (+18/-0) template/trac/log (+78/-0) template/trac/revision (+98/-0) template/trac/rss (+43/-0) template/trac/view (+23/-0) template/trac/x (+6/-0) |
To merge this branch: | bzr merge lp:~allison/ubuntu/raring/libsvn-web-perl/fix-for-1106378 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Luke Yelavich (community) | Approve | ||
Ubuntu branches | Pending | ||
Review via email: mp+145072@code.launchpad.net |
Commit message
Description of the change
See LP #1106378.
To post a comment you must log in.
Revision history for this message
Stefano Rivera (stefanor) wrote : | # |
This didn't actually close the bug
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === removed file 'Build.PL' |
2 | --- Build.PL 2007-11-30 14:01:12 +0000 |
3 | +++ Build.PL 1970-01-01 00:00:00 +0000 |
4 | @@ -1,420 +0,0 @@ |
5 | -#!/usr/bin/perl |
6 | - |
7 | -use strict; |
8 | -use warnings; |
9 | - |
10 | -use File::Basename; |
11 | -use Getopt::Long; |
12 | - |
13 | -use Module::Build; |
14 | -use File::Basename; |
15 | -use Getopt::Long; |
16 | - |
17 | -use Module::Build; |
18 | - |
19 | -# $SVN::Core::VERSION is set in a manner that confuses Module::Build, so |
20 | -# do an explicit version check here. |
21 | -my $svn_maj = 1; |
22 | -my $svn_min = 4; # Need Subversion 1.4.x or above |
23 | - |
24 | -die << "." unless eval { no warnings 'once'; require SVN::Core; $SVN::Core::VER_MAJOR > $svn_maj or ($SVN::Core::VER_MAJOR == $svn_maj and $SVN::Core::VER_MINOR >= $svn_min); }; |
25 | -===> Warning: SVN::Core is missing or outdated. |
26 | - |
27 | -Please manually install SVN::Core by compiling Subversion |
28 | -(version $svn_maj.$svn_min.0 or above) with SWIG/Perl bindings, |
29 | -and try this installation process again. |
30 | -. |
31 | - |
32 | -my $class = Module::Build->subclass(code => <<'EOCODE'); |
33 | - sub ACTION_code { |
34 | - my $self = shift; |
35 | - my $rc = $self->SUPER::ACTION_code(@_); |
36 | - |
37 | - warn "Copying additional files\n"; |
38 | - |
39 | - open(MAN, 'MANIFEST') or die 'Could not open MANIFEST'; |
40 | - my @files = map { chomp; $_ } |
41 | - grep { $_ =~ m{^lib/SVN/Web/(Style|Template|I18N)} } <MAN>; |
42 | - close(MAN); |
43 | - |
44 | - $self->copy_if_modified(from => $_, |
45 | - to => File::Spec->catfile($self->blib(), $_)) |
46 | - for map { $self->localize_file_path($_) } @files; |
47 | - |
48 | - return $rc; |
49 | - } |
50 | -EOCODE |
51 | - |
52 | -my %feature = (); |
53 | -my %config_data = (); |
54 | -my %requires = ('Template' => 0, |
55 | - 'YAML' => 0, |
56 | - 'Number::Format' => 0, |
57 | - 'Template::Plugin::Number::Format' => 0, |
58 | - 'Locale::Maketext' => 0, |
59 | - 'Locale::Maketext::Lexicon' => 0, |
60 | - 'Exception::Class' => 1.22, |
61 | - 'List::Util' => 0, |
62 | - 'URI' => 0, |
63 | - 'Time::Zone' => 0, |
64 | - 'Test::WWW::Mechanize' => 0, |
65 | - ); |
66 | - |
67 | -=head1 NAME |
68 | - |
69 | -Build.PL |
70 | - |
71 | -=head1 SYNOPSIS |
72 | - |
73 | - perl Build.PL [--run_apache_tests] |
74 | - [--apache_path PATH] |
75 | - [--apxs_path PATH] |
76 | - [--run_apache_cgi_tests] |
77 | - [--with_mod_perl] |
78 | - [--run_mod_perl_tests] |
79 | - [--mod_perl_path PATH] |
80 | - [--run_svnweb-server_tests] |
81 | - [--httpd_port PORT] |
82 | - [--skip_questions] |
83 | - [-- --Module::Build options] |
84 | - |
85 | -=head1 DESCRIPTION |
86 | - |
87 | -This is the build script for SVN::Web. Since some of SVN::Web's |
88 | -functionality is optional, and/or doesn't need to be tested at install |
89 | -time, it determines the correct set of pre-requisite modules prior to |
90 | -install, and obtains some information from the user that is needed by the |
91 | -automated tests. |
92 | - |
93 | -The options are: |
94 | - |
95 | -=over |
96 | - |
97 | -=item --run_apache_tests |
98 | - |
99 | -Whether to run post-build tests that require Apache. Use |
100 | -C<--norun_apache_tests> to disable. |
101 | - |
102 | -=item --apache_path PATH |
103 | - |
104 | -The full path to the Apache httpd binary. |
105 | - |
106 | -=item --apxs_path PATH |
107 | - |
108 | -The full path to the Apache apxs binary. |
109 | - |
110 | -=item --run_apache_cgi_tests |
111 | - |
112 | -Whether to run post-build tests that SVN::Web as a CGI script with Apache. |
113 | -Use C<--norun_apache_cgi_tests> to disable. |
114 | - |
115 | -=item --with_mod_perl |
116 | - |
117 | -Whether SVN::Web will be used under mod_perl. Use C<--nowith_mod_perl> to |
118 | -disable. |
119 | - |
120 | -=item --run_mod_perl_tests |
121 | - |
122 | -Whether to run post-build tests that use SVN::Web as a mod_perl handler. |
123 | -Use C<--norun_mod_perl_tests> to disable. |
124 | - |
125 | -=item --mod_perl_path PATH |
126 | - |
127 | -The full path to the mod_perl shared object file (typically called |
128 | -F<mod_perl.so> or F<libperl.so>. |
129 | - |
130 | -=item --run_svnweb-server_tests |
131 | - |
132 | -Whether to run post-build tests for SVN::Web's simple web server. Use |
133 | -C<--norun_svnweb-server_tests> to disable. |
134 | - |
135 | -=item --httpd_port PORT |
136 | - |
137 | -Specify the PORT that the Apache and svnweb-server tests should use. |
138 | - |
139 | -=item --skip_questions |
140 | - |
141 | -Take the command line options as read, and don't ask the user any questions |
142 | -before creating the build script. |
143 | - |
144 | -=back |
145 | - |
146 | -You may also provide all the usual options that L<Module::Build> supports. |
147 | -However, these options should appear after the options described |
148 | -previously, and should be preceeded by C<-->. |
149 | - |
150 | -=cut |
151 | - |
152 | -my $skip_questions = 0; |
153 | - |
154 | -GetOptions('with_mod_perl' => sub { $requires{'Apache::Request'} = 0; }, |
155 | - 'run_apache_tests' => \$feature{run_apache_tests}, |
156 | - 'apache_path=s' => \$config_data{apache_path}, |
157 | - 'apxs_path=s' => \$config_data{apxs_path}, |
158 | - 'run_apache_cgi_tests' => \$feature{run_apache_cgi_tests}, |
159 | - 'run_mod_perl_tests' => \$feature{run_mod_perl_tests}, |
160 | - 'mod_perl_path=s' => \$config_data{mod_perl_path}, |
161 | - 'run_svnweb-server_tests' => \$feature{'run_svnweb-server_tests'}, |
162 | - 'httpd_port=i' => \$config_data{httpd_port}, |
163 | - 'skip_questions' => \$skip_questions, |
164 | - ); |
165 | - |
166 | - |
167 | -goto build if $skip_questions; |
168 | - |
169 | -# ------------------------------------------------------------------------ |
170 | - |
171 | -print <<EOM; |
172 | - |
173 | -Welcome to SVN::Web. The installer will now ask you a few questions to |
174 | -make sure that the list of modules that SVN::Web requires is correct. |
175 | - |
176 | -Each question has a command line option associated with it, and there is |
177 | -also a command line option to skip all the questions. |
178 | - |
179 | -To do this, press Ctrl-C now and re-run 'perl Build.PL' with the |
180 | -appropriate options. To see the documentation for the options run: |
181 | - |
182 | - perldoc Build.PL |
183 | - |
184 | -Press RETURN to continue. |
185 | - |
186 | -EOM |
187 | - |
188 | -<STDIN>; |
189 | - |
190 | -# ------------------------------------------------------------------------ |
191 | - |
192 | -print <<EOM; |
193 | - |
194 | -The test suite includes tests to check that SVN::Web works correctly |
195 | -when installed under Apache. You do not have to run these tests, but |
196 | -if you intend to use SVN::Web with Apache then they may highlight |
197 | -issues that were not encountered in the author's development |
198 | -environment. |
199 | - |
200 | -EOM |
201 | - |
202 | -$feature{run_apache_tests} = |
203 | - Module::Build->y_n(q{==> Do you want to run the Apache tests?}, 'n'); |
204 | - |
205 | -while($feature{run_apache_tests}) { |
206 | - $config_data{apache_path} = |
207 | - Module::Build->prompt('==> Please enter the full path to your Apache httpd binary', '/usr/local/sbin/httpd'); |
208 | - |
209 | - if(! -x $config_data{apache_path}) { |
210 | - print "The path\n\n"; |
211 | - print " '", $config_data{apache_path}, "'\n\n"; |
212 | - print "is not executable.\n\n"; |
213 | - next; |
214 | - } |
215 | - |
216 | - $config_data{apxs_path} = |
217 | - Module::Build->prompt('==> Please enter the full path to your apxs binary', dirname($config_data{apache_path}) . '/apxs'); |
218 | - |
219 | - if(! -x $config_data{apxs_path}) { |
220 | - print "The path\n\n"; |
221 | - print " '", $config_data{apxs_path}, "'\n\n"; |
222 | - print "is not executable.\n\n"; |
223 | - next; |
224 | - } |
225 | - |
226 | - last; |
227 | -} continue { |
228 | - $feature{run_apache_tests} = |
229 | - Module::Build->y_n('==> Do you still want to run the Apache tests?', 'n'); |
230 | -} |
231 | - |
232 | -# ------------------------------------------------------------------------ |
233 | - |
234 | -# Work out which version of Apache we're using |
235 | -if($feature{run_apache_tests}) { |
236 | - my $httpd_v = `$config_data{apache_path} -v`; |
237 | - my($httpd_version) = $httpd_v =~ m{^Server version: Apache/(\d)\.}; |
238 | - $config_data{httpd_version} = $httpd_version; |
239 | - |
240 | - if($httpd_version == 1) { |
241 | - print "Apache 1.x detected\n"; |
242 | - $requires{'Apache::Request'} = 0; |
243 | - } |
244 | - |
245 | - if($httpd_version == 2) { |
246 | - print "Apache 2.x detected\n"; |
247 | - $requires{'Apache2::Request'} = 0; |
248 | - } |
249 | - |
250 | - if($httpd_version < 1 or $httpd_version > 2) { |
251 | - print <<"EOM"; |
252 | -The output from running |
253 | - |
254 | - $config_data{apache_path} -v |
255 | - |
256 | -did not produce something this program could parse to determine your |
257 | -Apache version number. The output was: |
258 | - |
259 | -$httpd_v |
260 | - |
261 | -Please report this as a bug. In the meantime, the Apache tests have |
262 | -been disabled. |
263 | -EOM |
264 | - |
265 | - $feature{run_apache_tests} = 0; |
266 | - } |
267 | -} |
268 | - |
269 | -# ------------------------------------------------------------------------ |
270 | - |
271 | -if($feature{run_apache_tests}) { |
272 | - print <<EOM; |
273 | - |
274 | -SVN::Web can be run under Apache as a CGI script. |
275 | - |
276 | -EOM |
277 | - |
278 | - $feature{run_apache_cgi_tests} = |
279 | - Module::Build->y_n('==> Do you want to test that SVN::Web works with Apache as a CGI script', 'y'); |
280 | -} |
281 | - |
282 | -# ------------------------------------------------------------------------ |
283 | - |
284 | -if($feature{run_apache_tests}) { |
285 | - $feature{run_mod_perl_tests} = |
286 | - Module::Build->y_n(q{==> Do you want to test mod_perl support?}, 'y'); |
287 | -} else { |
288 | - $feature{run_mod_perl_tests} = 0; |
289 | -} |
290 | - |
291 | -# Find the mod_perl .so |
292 | -if(exists $config_data{apxs_path} and defined $config_data{apxs_path}) { |
293 | - my $libexec_dir; |
294 | - chomp($libexec_dir = `$config_data{apxs_path} -q LIBEXECDIR`); |
295 | - $config_data{libexec_dir} = $libexec_dir; |
296 | - |
297 | - foreach my $file (qw(mod_perl.so libperl.so)) { |
298 | - if(-f "$libexec_dir/$file") { |
299 | - $config_data{mod_perl_path} = "$libexec_dir/$file"; |
300 | - last; |
301 | - } |
302 | - } |
303 | -} |
304 | - |
305 | -while($feature{run_mod_perl_tests}) { |
306 | - $config_data{mod_perl_path} = |
307 | - Module::Build->prompt('==> Please enter the full path to your mod_perl library:', $config_data{mod_perl_path}); |
308 | - |
309 | - if(! -e $config_data{mod_perl_path}) { |
310 | - print "The path\n\n"; |
311 | - print " '", $config_data{mod_perl_path}, "'\n\n"; |
312 | - print "does not exist.\n\n"; |
313 | - next; |
314 | - } |
315 | - |
316 | - last; |
317 | -} continue { |
318 | - $feature{run_mod_perl_tests} = |
319 | - Module::Build->y_n('==> Do you still want to run the mod_perl tests?', 'n'); |
320 | -} |
321 | - |
322 | -# ------------------------------------------------------------------------ |
323 | - |
324 | -print <<EOM; |
325 | - |
326 | -SVN::Web includes a simple web server (called "svnweb-server") that |
327 | -uses the HTTP::Server::Simple module. |
328 | - |
329 | -Would you like to use this server? If so, HTTP::Server::Simple will |
330 | -be added to the list of modules that SVN::Web requires and tests will |
331 | -be run before installation to make sure that it is working correctly. |
332 | - |
333 | -EOM |
334 | - |
335 | -$feature{'run_svnweb-server_tests'} = |
336 | - Module::Build->y_n(q{==> Do you want to test svnweb-server?}, 'y'); |
337 | - |
338 | -$requires{'HTTP::Server::Simple'} = 0 if $feature{'run_svnweb-server_tests'}; |
339 | - |
340 | -if($feature{run_apache_tests} or $feature{'run_svnweb-server_tests'}) { |
341 | - print <<EOM; |
342 | - |
343 | -The httpd server will be started listening on the loopback address |
344 | -(127.0.0.1). However, it must be bound to a network port that is not |
345 | -currently being used by another service. |
346 | - |
347 | -EOM |
348 | - |
349 | - until(defined $config_data{httpd_port}) { |
350 | - $config_data{httpd_port} = |
351 | - Module::Build->prompt('==> Please enter a spare port', 8080); |
352 | - |
353 | - if($config_data{httpd_port} !~ /^\d+$/) { |
354 | - print "The port must contain only digits.\n\n"; |
355 | - next; |
356 | - } |
357 | - |
358 | - if($config_data{httpd_port} < 1024 and $> != 0) { |
359 | - print <<EOM; |
360 | - |
361 | -You have entered a port number that is less than a 1024, and you are |
362 | -not the root user. Please enter a different port number. |
363 | - |
364 | -EOM |
365 | - |
366 | - next; |
367 | - } |
368 | - |
369 | - if($config_data{httpd_port} < 1) { |
370 | - print "Ports less than 1 are not allowed\n\n"; |
371 | - next; |
372 | - } |
373 | - |
374 | - if($config_data{httpd_port} > 65535) { |
375 | - print "Ports greater than 65535 are not allowed\n\n"; |
376 | - next; |
377 | - } |
378 | - |
379 | - last; |
380 | - } continue { |
381 | - $config_data{httpd_port} = undef; |
382 | - } |
383 | -} |
384 | - |
385 | -# ------------------------------------------------------------------------ |
386 | - |
387 | -print <<EOM; |
388 | - |
389 | -SVN::Web can use plugins to turn e-mail addresses and URLs in |
390 | -Subversion commit messages in to clickable hyperlinks. |
391 | - |
392 | -EOM |
393 | - |
394 | -if(Module::Build->y_n('==> Do you want to install these plugins?', 'y')) { |
395 | - $requires{'Template::Plugin::Clickable'} = 0; |
396 | - $requires{'Template::Plugin::Clickable::Email'} = 0; |
397 | -} |
398 | - |
399 | -# ------------------------------------------------------------------------ |
400 | - |
401 | -build: |
402 | - |
403 | -$b = $class->new( |
404 | - dist_name => 'SVN-Web', |
405 | - dist_author => 'Nik Clayton <nik@FreeBSD.org>', |
406 | - license => 'perl', |
407 | - module_name => 'SVN::Web', |
408 | - create_makefile_pl => 'passthrough', |
409 | - create_readme => 0, |
410 | - sign => 1, |
411 | - script_files => [ 'bin/svnweb-install', 'bin/svnweb-server' ], |
412 | - requires => \%requires, |
413 | - recommends => { 'Cache::Cache', => 0, |
414 | - 'Template::Plugin::Subst' => 0, |
415 | - 'Test::Benchmark' => 0, |
416 | - 'Test::HTML::Tidy' => 0, |
417 | - 'XML::RSS::Parser' => 0, }, |
418 | - add_to_cleanup => [ qw't/repos*' ], |
419 | -); |
420 | - |
421 | -$b->config_data($_ => $config_data{$_}) foreach keys %config_data; |
422 | -$b->feature($_ => $feature{$_}) foreach keys %feature; |
423 | - |
424 | -$b->create_build_script(); |
425 | |
426 | === modified file 'CHANGES.pod' |
427 | --- CHANGES.pod 2007-11-30 14:01:12 +0000 |
428 | +++ CHANGES.pod 2013-01-26 22:10:25 +0000 |
429 | @@ -12,6 +12,88 @@ |
430 | SVN::Web. Please see L<UPDATING.pod> for details about any changes |
431 | you may need to make when updating an SVN::Web installation. |
432 | |
433 | +=head2 0.63, released Oct 17, 2012 |
434 | + |
435 | +=over |
436 | + |
437 | +=item |
438 | + |
439 | +More improvements to UTF8 handling graciously contributed by Vladimir Timofeev |
440 | + |
441 | +=back |
442 | + |
443 | +=head2 0.62, released Oct 10, 2012 |
444 | + |
445 | +=over |
446 | + |
447 | +=item |
448 | + |
449 | +Updated psgi file, for some reason I regressed it. |
450 | + |
451 | +=item |
452 | + |
453 | +A variety of fixes, notably huge improvements to UTF8 handling graciously contributed by Vladimir Timofeev and diff output fixes |
454 | + |
455 | +=back |
456 | + |
457 | +=head2 0.61, released Jun 11, 2012 |
458 | + |
459 | +=over |
460 | + |
461 | +=item |
462 | + |
463 | +Template fixes for RT48416 |
464 | + |
465 | +=item |
466 | + |
467 | +RT24507 closed as the stand alone server was removed in favor of Plack. |
468 | + |
469 | +=item |
470 | + |
471 | +RT39707 closed as many perl SVN related issues were resolved elsewhere |
472 | + |
473 | +=item |
474 | + |
475 | +Included patch from RT32041 to authenticate to https |
476 | + |
477 | +=back |
478 | + |
479 | +=head2 0.60, released Jun 7, 2012 |
480 | + |
481 | +=over |
482 | + |
483 | +=item |
484 | + |
485 | +Pulled out mod_perl1/2 and cgi, replaced with Plack. This probably broke lots of things. |
486 | + |
487 | +=item |
488 | + |
489 | +Changed to using Dist::Zilla with MakeMaker (due to .po issues with Module::Build) |
490 | + |
491 | +=item |
492 | + |
493 | +DAGOLDEN recommends using Alien::SVN as dependency, rather than SVN::Core, SVN::Client and SVN::Ra. This is because the SVN perl modules are not published to CPAN. |
494 | + |
495 | +=item |
496 | + |
497 | +Merged patch from rt26159 |
498 | + |
499 | +=back |
500 | + |
501 | +=head2 0.54, never released |
502 | + |
503 | +=over |
504 | + |
505 | +=item |
506 | + |
507 | +Fix for RT35186, to make 'selected' compliant with XHTML |
508 | + |
509 | +=item |
510 | + |
511 | +Fix for RT37388, by Vladimir Timofeev |
512 | + |
513 | +=back |
514 | + |
515 | =head2 0.53, released Apr 29, 2007 |
516 | |
517 | =over |
518 | @@ -47,7 +129,7 @@ |
519 | =item |
520 | |
521 | C<reposparent> functionality was inadvertently broken in 0.50. This |
522 | -release fixes that. This was rt#24377 reported by Christoph Buescher |
523 | +release fixes that. This was rt#24377 reported by Christoph Buescher |
524 | <Christoph.Buescher@fiducia.de>. |
525 | |
526 | =back |
527 | @@ -138,7 +220,7 @@ |
528 | <sterling@hanenkamp.com>, has been fixed. |
529 | |
530 | =back |
531 | - |
532 | + |
533 | =head2 0.49, released Aug 23, 2006 |
534 | |
535 | =over |
536 | @@ -349,8 +431,8 @@ |
537 | |
538 | =item |
539 | |
540 | -The C<revision>, C<log>, C<view>, and C<rss> actions are much more |
541 | -conservative with memory when processing commits that changed a large |
542 | +The C<revision>, C<log>, C<view>, and C<rss> actions are much more |
543 | +conservative with memory when processing commits that changed a large |
544 | number of files. Fixes rt#17359, reported by Dietrich Streifert |
545 | <dietrich.streifert@visionet.de>. |
546 | |
547 | @@ -369,7 +451,7 @@ |
548 | =item |
549 | |
550 | Entering a revision number that does not exist will now generate a |
551 | -localised error message. Fixes rt#17822, reported by |
552 | +localised error message. Fixes rt#17822, reported by |
553 | <gk5885@kickstyle.net> |
554 | |
555 | =item |
556 | @@ -511,13 +593,13 @@ |
557 | |
558 | =item |
559 | |
560 | -More customisation options, making it easier to add or remove actions |
561 | +More customisation options, making it easier to add or remove actions |
562 | from the list of things that SVN::Web is allowed to do. |
563 | |
564 | =item |
565 | |
566 | -Added huge swathes of information to the documentation. It should now |
567 | -be much easier for anyone else to contribute code and/or templates to |
568 | +Added huge swathes of information to the documentation. It should now |
569 | +be much easier for anyone else to contribute code and/or templates to |
570 | SVN::Web. |
571 | |
572 | =item |
573 | @@ -526,18 +608,18 @@ |
574 | |
575 | =item |
576 | |
577 | -A mechanism to 'stack' Template Toolkit filters. You can easily run |
578 | -log messages through an arbitrary number of filters, without causing |
579 | +A mechanism to 'stack' Template Toolkit filters. You can easily run |
580 | +log messages through an arbitrary number of filters, without causing |
581 | problems if one or more of the filters is not installed. |
582 | |
583 | =item |
584 | |
585 | -Inline display of some content from the repository where appropriate |
586 | +Inline display of some content from the repository where appropriate |
587 | (e.g., viewing an image works properly). |
588 | |
589 | =item |
590 | |
591 | -Fixed a bug that meant the results from the automated tests weren't |
592 | +Fixed a bug that meant the results from the automated tests weren't |
593 | valid. Fixed the bugs that this uncovered. |
594 | |
595 | =item |
596 | @@ -634,7 +716,7 @@ |
597 | |
598 | Adjust pool usage for opened repos so it's easier for modperl to work |
599 | |
600 | -=item |
601 | +=item |
602 | |
603 | Add mod_perl support. |
604 | |
605 | |
606 | === added file 'LICENSE' |
607 | --- LICENSE 1970-01-01 00:00:00 +0000 |
608 | +++ LICENSE 2013-01-26 22:10:25 +0000 |
609 | @@ -0,0 +1,379 @@ |
610 | +This software is copyright (c) 2012 by Dean Hamstad. |
611 | + |
612 | +This is free software; you can redistribute it and/or modify it under |
613 | +the same terms as the Perl 5 programming language system itself. |
614 | + |
615 | +Terms of the Perl programming language system itself |
616 | + |
617 | +a) the GNU General Public License as published by the Free |
618 | + Software Foundation; either version 1, or (at your option) any |
619 | + later version, or |
620 | +b) the "Artistic License" |
621 | + |
622 | +--- The GNU General Public License, Version 1, February 1989 --- |
623 | + |
624 | +This software is Copyright (c) 2012 by Dean Hamstad. |
625 | + |
626 | +This is free software, licensed under: |
627 | + |
628 | + The GNU General Public License, Version 1, February 1989 |
629 | + |
630 | + GNU GENERAL PUBLIC LICENSE |
631 | + Version 1, February 1989 |
632 | + |
633 | + Copyright (C) 1989 Free Software Foundation, Inc. |
634 | + 51 Franklin St, Suite 500, Boston, MA 02110-1335 USA |
635 | + |
636 | + Everyone is permitted to copy and distribute verbatim copies |
637 | + of this license document, but changing it is not allowed. |
638 | + |
639 | + Preamble |
640 | + |
641 | + The license agreements of most software companies try to keep users |
642 | +at the mercy of those companies. By contrast, our General Public |
643 | +License is intended to guarantee your freedom to share and change free |
644 | +software--to make sure the software is free for all its users. The |
645 | +General Public License applies to the Free Software Foundation's |
646 | +software and to any other program whose authors commit to using it. |
647 | +You can use it for your programs, too. |
648 | + |
649 | + When we speak of free software, we are referring to freedom, not |
650 | +price. Specifically, the General Public License is designed to make |
651 | +sure that you have the freedom to give away or sell copies of free |
652 | +software, that you receive source code or can get it if you want it, |
653 | +that you can change the software or use pieces of it in new free |
654 | +programs; and that you know you can do these things. |
655 | + |
656 | + To protect your rights, we need to make restrictions that forbid |
657 | +anyone to deny you these rights or to ask you to surrender the rights. |
658 | +These restrictions translate to certain responsibilities for you if you |
659 | +distribute copies of the software, or if you modify it. |
660 | + |
661 | + For example, if you distribute copies of a such a program, whether |
662 | +gratis or for a fee, you must give the recipients all the rights that |
663 | +you have. You must make sure that they, too, receive or can get the |
664 | +source code. And you must tell them their rights. |
665 | + |
666 | + We protect your rights with two steps: (1) copyright the software, and |
667 | +(2) offer you this license which gives you legal permission to copy, |
668 | +distribute and/or modify the software. |
669 | + |
670 | + Also, for each author's protection and ours, we want to make certain |
671 | +that everyone understands that there is no warranty for this free |
672 | +software. If the software is modified by someone else and passed on, we |
673 | +want its recipients to know that what they have is not the original, so |
674 | +that any problems introduced by others will not reflect on the original |
675 | +authors' reputations. |
676 | + |
677 | + The precise terms and conditions for copying, distribution and |
678 | +modification follow. |
679 | + |
680 | + GNU GENERAL PUBLIC LICENSE |
681 | + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
682 | + |
683 | + 0. This License Agreement applies to any program or other work which |
684 | +contains a notice placed by the copyright holder saying it may be |
685 | +distributed under the terms of this General Public License. The |
686 | +"Program", below, refers to any such program or work, and a "work based |
687 | +on the Program" means either the Program or any work containing the |
688 | +Program or a portion of it, either verbatim or with modifications. Each |
689 | +licensee is addressed as "you". |
690 | + |
691 | + 1. You may copy and distribute verbatim copies of the Program's source |
692 | +code as you receive it, in any medium, provided that you conspicuously and |
693 | +appropriately publish on each copy an appropriate copyright notice and |
694 | +disclaimer of warranty; keep intact all the notices that refer to this |
695 | +General Public License and to the absence of any warranty; and give any |
696 | +other recipients of the Program a copy of this General Public License |
697 | +along with the Program. You may charge a fee for the physical act of |
698 | +transferring a copy. |
699 | + |
700 | + 2. You may modify your copy or copies of the Program or any portion of |
701 | +it, and copy and distribute such modifications under the terms of Paragraph |
702 | +1 above, provided that you also do the following: |
703 | + |
704 | + a) cause the modified files to carry prominent notices stating that |
705 | + you changed the files and the date of any change; and |
706 | + |
707 | + b) cause the whole of any work that you distribute or publish, that |
708 | + in whole or in part contains the Program or any part thereof, either |
709 | + with or without modifications, to be licensed at no charge to all |
710 | + third parties under the terms of this General Public License (except |
711 | + that you may choose to grant warranty protection to some or all |
712 | + third parties, at your option). |
713 | + |
714 | + c) If the modified program normally reads commands interactively when |
715 | + run, you must cause it, when started running for such interactive use |
716 | + in the simplest and most usual way, to print or display an |
717 | + announcement including an appropriate copyright notice and a notice |
718 | + that there is no warranty (or else, saying that you provide a |
719 | + warranty) and that users may redistribute the program under these |
720 | + conditions, and telling the user how to view a copy of this General |
721 | + Public License. |
722 | + |
723 | + d) You may charge a fee for the physical act of transferring a |
724 | + copy, and you may at your option offer warranty protection in |
725 | + exchange for a fee. |
726 | + |
727 | +Mere aggregation of another independent work with the Program (or its |
728 | +derivative) on a volume of a storage or distribution medium does not bring |
729 | +the other work under the scope of these terms. |
730 | + |
731 | + 3. You may copy and distribute the Program (or a portion or derivative of |
732 | +it, under Paragraph 2) in object code or executable form under the terms of |
733 | +Paragraphs 1 and 2 above provided that you also do one of the following: |
734 | + |
735 | + a) accompany it with the complete corresponding machine-readable |
736 | + source code, which must be distributed under the terms of |
737 | + Paragraphs 1 and 2 above; or, |
738 | + |
739 | + b) accompany it with a written offer, valid for at least three |
740 | + years, to give any third party free (except for a nominal charge |
741 | + for the cost of distribution) a complete machine-readable copy of the |
742 | + corresponding source code, to be distributed under the terms of |
743 | + Paragraphs 1 and 2 above; or, |
744 | + |
745 | + c) accompany it with the information you received as to where the |
746 | + corresponding source code may be obtained. (This alternative is |
747 | + allowed only for noncommercial distribution and only if you |
748 | + received the program in object code or executable form alone.) |
749 | + |
750 | +Source code for a work means the preferred form of the work for making |
751 | +modifications to it. For an executable file, complete source code means |
752 | +all the source code for all modules it contains; but, as a special |
753 | +exception, it need not include source code for modules which are standard |
754 | +libraries that accompany the operating system on which the executable |
755 | +file runs, or for standard header files or definitions files that |
756 | +accompany that operating system. |
757 | + |
758 | + 4. You may not copy, modify, sublicense, distribute or transfer the |
759 | +Program except as expressly provided under this General Public License. |
760 | +Any attempt otherwise to copy, modify, sublicense, distribute or transfer |
761 | +the Program is void, and will automatically terminate your rights to use |
762 | +the Program under this License. However, parties who have received |
763 | +copies, or rights to use copies, from you under this General Public |
764 | +License will not have their licenses terminated so long as such parties |
765 | +remain in full compliance. |
766 | + |
767 | + 5. By copying, distributing or modifying the Program (or any work based |
768 | +on the Program) you indicate your acceptance of this license to do so, |
769 | +and all its terms and conditions. |
770 | + |
771 | + 6. Each time you redistribute the Program (or any work based on the |
772 | +Program), the recipient automatically receives a license from the original |
773 | +licensor to copy, distribute or modify the Program subject to these |
774 | +terms and conditions. You may not impose any further restrictions on the |
775 | +recipients' exercise of the rights granted herein. |
776 | + |
777 | + 7. The Free Software Foundation may publish revised and/or new versions |
778 | +of the General Public License from time to time. Such new versions will |
779 | +be similar in spirit to the present version, but may differ in detail to |
780 | +address new problems or concerns. |
781 | + |
782 | +Each version is given a distinguishing version number. If the Program |
783 | +specifies a version number of the license which applies to it and "any |
784 | +later version", you have the option of following the terms and conditions |
785 | +either of that version or of any later version published by the Free |
786 | +Software Foundation. If the Program does not specify a version number of |
787 | +the license, you may choose any version ever published by the Free Software |
788 | +Foundation. |
789 | + |
790 | + 8. If you wish to incorporate parts of the Program into other free |
791 | +programs whose distribution conditions are different, write to the author |
792 | +to ask for permission. For software which is copyrighted by the Free |
793 | +Software Foundation, write to the Free Software Foundation; we sometimes |
794 | +make exceptions for this. Our decision will be guided by the two goals |
795 | +of preserving the free status of all derivatives of our free software and |
796 | +of promoting the sharing and reuse of software generally. |
797 | + |
798 | + NO WARRANTY |
799 | + |
800 | + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
801 | +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
802 | +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
803 | +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
804 | +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
805 | +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
806 | +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
807 | +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
808 | +REPAIR OR CORRECTION. |
809 | + |
810 | + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
811 | +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
812 | +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
813 | +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
814 | +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
815 | +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
816 | +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
817 | +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
818 | +POSSIBILITY OF SUCH DAMAGES. |
819 | + |
820 | + END OF TERMS AND CONDITIONS |
821 | + |
822 | + Appendix: How to Apply These Terms to Your New Programs |
823 | + |
824 | + If you develop a new program, and you want it to be of the greatest |
825 | +possible use to humanity, the best way to achieve this is to make it |
826 | +free software which everyone can redistribute and change under these |
827 | +terms. |
828 | + |
829 | + To do so, attach the following notices to the program. It is safest to |
830 | +attach them to the start of each source file to most effectively convey |
831 | +the exclusion of warranty; and each file should have at least the |
832 | +"copyright" line and a pointer to where the full notice is found. |
833 | + |
834 | + <one line to give the program's name and a brief idea of what it does.> |
835 | + Copyright (C) 19yy <name of author> |
836 | + |
837 | + This program is free software; you can redistribute it and/or modify |
838 | + it under the terms of the GNU General Public License as published by |
839 | + the Free Software Foundation; either version 1, or (at your option) |
840 | + any later version. |
841 | + |
842 | + This program is distributed in the hope that it will be useful, |
843 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
844 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
845 | + GNU General Public License for more details. |
846 | + |
847 | + You should have received a copy of the GNU General Public License |
848 | + along with this program; if not, write to the Free Software |
849 | + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA |
850 | + |
851 | + |
852 | +Also add information on how to contact you by electronic and paper mail. |
853 | + |
854 | +If the program is interactive, make it output a short notice like this |
855 | +when it starts in an interactive mode: |
856 | + |
857 | + Gnomovision version 69, Copyright (C) 19xx name of author |
858 | + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
859 | + This is free software, and you are welcome to redistribute it |
860 | + under certain conditions; type `show c' for details. |
861 | + |
862 | +The hypothetical commands `show w' and `show c' should show the |
863 | +appropriate parts of the General Public License. Of course, the |
864 | +commands you use may be called something other than `show w' and `show |
865 | +c'; they could even be mouse-clicks or menu items--whatever suits your |
866 | +program. |
867 | + |
868 | +You should also get your employer (if you work as a programmer) or your |
869 | +school, if any, to sign a "copyright disclaimer" for the program, if |
870 | +necessary. Here a sample; alter the names: |
871 | + |
872 | + Yoyodyne, Inc., hereby disclaims all copyright interest in the |
873 | + program `Gnomovision' (a program to direct compilers to make passes |
874 | + at assemblers) written by James Hacker. |
875 | + |
876 | + <signature of Ty Coon>, 1 April 1989 |
877 | + Ty Coon, President of Vice |
878 | + |
879 | +That's all there is to it! |
880 | + |
881 | + |
882 | +--- The Artistic License 1.0 --- |
883 | + |
884 | +This software is Copyright (c) 2012 by Dean Hamstad. |
885 | + |
886 | +This is free software, licensed under: |
887 | + |
888 | + The Artistic License 1.0 |
889 | + |
890 | +The Artistic License |
891 | + |
892 | +Preamble |
893 | + |
894 | +The intent of this document is to state the conditions under which a Package |
895 | +may be copied, such that the Copyright Holder maintains some semblance of |
896 | +artistic control over the development of the package, while giving the users of |
897 | +the package the right to use and distribute the Package in a more-or-less |
898 | +customary fashion, plus the right to make reasonable modifications. |
899 | + |
900 | +Definitions: |
901 | + |
902 | + - "Package" refers to the collection of files distributed by the Copyright |
903 | + Holder, and derivatives of that collection of files created through |
904 | + textual modification. |
905 | + - "Standard Version" refers to such a Package if it has not been modified, |
906 | + or has been modified in accordance with the wishes of the Copyright |
907 | + Holder. |
908 | + - "Copyright Holder" is whoever is named in the copyright or copyrights for |
909 | + the package. |
910 | + - "You" is you, if you're thinking about copying or distributing this Package. |
911 | + - "Reasonable copying fee" is whatever you can justify on the basis of media |
912 | + cost, duplication charges, time of people involved, and so on. (You will |
913 | + not be required to justify it to the Copyright Holder, but only to the |
914 | + computing community at large as a market that must bear the fee.) |
915 | + - "Freely Available" means that no fee is charged for the item itself, though |
916 | + there may be fees involved in handling the item. It also means that |
917 | + recipients of the item may redistribute it under the same conditions they |
918 | + received it. |
919 | + |
920 | +1. You may make and give away verbatim copies of the source form of the |
921 | +Standard Version of this Package without restriction, provided that you |
922 | +duplicate all of the original copyright notices and associated disclaimers. |
923 | + |
924 | +2. You may apply bug fixes, portability fixes and other modifications derived |
925 | +from the Public Domain or from the Copyright Holder. A Package modified in such |
926 | +a way shall still be considered the Standard Version. |
927 | + |
928 | +3. You may otherwise modify your copy of this Package in any way, provided that |
929 | +you insert a prominent notice in each changed file stating how and when you |
930 | +changed that file, and provided that you do at least ONE of the following: |
931 | + |
932 | + a) place your modifications in the Public Domain or otherwise make them |
933 | + Freely Available, such as by posting said modifications to Usenet or an |
934 | + equivalent medium, or placing the modifications on a major archive site |
935 | + such as ftp.uu.net, or by allowing the Copyright Holder to include your |
936 | + modifications in the Standard Version of the Package. |
937 | + |
938 | + b) use the modified Package only within your corporation or organization. |
939 | + |
940 | + c) rename any non-standard executables so the names do not conflict with |
941 | + standard executables, which must also be provided, and provide a separate |
942 | + manual page for each non-standard executable that clearly documents how it |
943 | + differs from the Standard Version. |
944 | + |
945 | + d) make other distribution arrangements with the Copyright Holder. |
946 | + |
947 | +4. You may distribute the programs of this Package in object code or executable |
948 | +form, provided that you do at least ONE of the following: |
949 | + |
950 | + a) distribute a Standard Version of the executables and library files, |
951 | + together with instructions (in the manual page or equivalent) on where to |
952 | + get the Standard Version. |
953 | + |
954 | + b) accompany the distribution with the machine-readable source of the Package |
955 | + with your modifications. |
956 | + |
957 | + c) accompany any non-standard executables with their corresponding Standard |
958 | + Version executables, giving the non-standard executables non-standard |
959 | + names, and clearly documenting the differences in manual pages (or |
960 | + equivalent), together with instructions on where to get the Standard |
961 | + Version. |
962 | + |
963 | + d) make other distribution arrangements with the Copyright Holder. |
964 | + |
965 | +5. You may charge a reasonable copying fee for any distribution of this |
966 | +Package. You may charge any fee you choose for support of this Package. You |
967 | +may not charge a fee for this Package itself. However, you may distribute this |
968 | +Package in aggregate with other (possibly commercial) programs as part of a |
969 | +larger (possibly commercial) software distribution provided that you do not |
970 | +advertise this Package as a product of your own. |
971 | + |
972 | +6. The scripts and library files supplied as input to or produced as output |
973 | +from the programs of this Package do not automatically fall under the copyright |
974 | +of this Package, but belong to whomever generated them, and may be sold |
975 | +commercially, and may be aggregated with this Package. |
976 | + |
977 | +7. C or perl subroutines supplied by you and linked into this Package shall not |
978 | +be considered part of this Package. |
979 | + |
980 | +8. The name of the Copyright Holder may not be used to endorse or promote |
981 | +products derived from this software without specific prior written permission. |
982 | + |
983 | +9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED |
984 | +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF |
985 | +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
986 | + |
987 | +The End |
988 | + |
989 | |
990 | === modified file 'MANIFEST' |
991 | --- MANIFEST 2007-11-30 14:01:12 +0000 |
992 | +++ MANIFEST 2013-01-26 22:10:25 +0000 |
993 | @@ -1,11 +1,34 @@ |
994 | -bin/svnweb-install |
995 | -bin/svnweb-server |
996 | CHANGES.pod |
997 | CONTRIBUTING.pod |
998 | -conf/apache1.tt |
999 | -conf/apache2.tt |
1000 | +LICENSE |
1001 | +MANIFEST |
1002 | +MANIFEST.SKIP |
1003 | +META.json |
1004 | +META.yml |
1005 | +Makefile.PL |
1006 | +README |
1007 | +SVN-Web.psgi |
1008 | +TODO |
1009 | +UPDATING.pod |
1010 | +bin/svnweb-install |
1011 | +cpanfile |
1012 | +css/common.css |
1013 | +css/styles-hlb.css |
1014 | +css/trac/browser.css |
1015 | +css/trac/changeset.css |
1016 | +css/trac/code.css |
1017 | +css/trac/diff.css |
1018 | +css/trac/feed-icon-16x16.png |
1019 | +css/trac/file.png |
1020 | +css/trac/filedeny.png |
1021 | +css/trac/folder.png |
1022 | +css/trac/folderdeny.png |
1023 | +css/trac/parent.png |
1024 | +css/trac/svnweb.css |
1025 | +css/trac/text-diff-html.css |
1026 | +css/trac/trac.css |
1027 | +dist.ini |
1028 | lib/SVN/Web.pm |
1029 | -lib/SVN/Web/action.pm |
1030 | lib/SVN/Web/Blame.pm |
1031 | lib/SVN/Web/Browse.pm |
1032 | lib/SVN/Web/Checkout.pm |
1033 | @@ -18,64 +41,78 @@ |
1034 | lib/SVN/Web/I18N/zh_tw.po |
1035 | lib/SVN/Web/List.pm |
1036 | lib/SVN/Web/Log.pm |
1037 | +lib/SVN/Web/RSS.pm |
1038 | lib/SVN/Web/Revision.pm |
1039 | -lib/SVN/Web/RSS.pm |
1040 | -lib/SVN/Web/Style/common.css |
1041 | -lib/SVN/Web/Style/styles-hlb.css |
1042 | -lib/SVN/Web/Style/trac/browser.css |
1043 | -lib/SVN/Web/Style/trac/changeset.css |
1044 | -lib/SVN/Web/Style/trac/code.css |
1045 | -lib/SVN/Web/Style/trac/diff.css |
1046 | -lib/SVN/Web/Style/trac/feed-icon-16x16.png |
1047 | -lib/SVN/Web/Style/trac/file.png |
1048 | -lib/SVN/Web/Style/trac/filedeny.png |
1049 | -lib/SVN/Web/Style/trac/folder.png |
1050 | -lib/SVN/Web/Style/trac/folderdeny.png |
1051 | -lib/SVN/Web/Style/trac/parent.png |
1052 | -lib/SVN/Web/Style/trac/svnweb.css |
1053 | -lib/SVN/Web/Style/trac/text-diff-html.css |
1054 | -lib/SVN/Web/Style/trac/trac.css |
1055 | -lib/SVN/Web/Template/plain/browse |
1056 | -lib/SVN/Web/Template/plain/diff |
1057 | -lib/SVN/Web/Template/plain/footer |
1058 | -lib/SVN/Web/Template/plain/header |
1059 | -lib/SVN/Web/Template/plain/list |
1060 | -lib/SVN/Web/Template/plain/log |
1061 | -lib/SVN/Web/Template/plain/revision |
1062 | -lib/SVN/Web/Template/plain/view |
1063 | -lib/SVN/Web/Template/plain/x |
1064 | -lib/SVN/Web/Template/trac/_action_menu |
1065 | -lib/SVN/Web/Template/trac/_diff |
1066 | -lib/SVN/Web/Template/trac/_log_msg |
1067 | -lib/SVN/Web/Template/trac/blame |
1068 | -lib/SVN/Web/Template/trac/browse |
1069 | -lib/SVN/Web/Template/trac/diff |
1070 | -lib/SVN/Web/Template/trac/footer |
1071 | -lib/SVN/Web/Template/trac/header |
1072 | -lib/SVN/Web/Template/trac/list |
1073 | -lib/SVN/Web/Template/trac/log |
1074 | -lib/SVN/Web/Template/trac/revision |
1075 | -lib/SVN/Web/Template/trac/rss |
1076 | -lib/SVN/Web/Template/trac/view |
1077 | -lib/SVN/Web/Template/trac/x |
1078 | lib/SVN/Web/Test.pm |
1079 | lib/SVN/Web/View.pm |
1080 | lib/SVN/Web/X.pm |
1081 | -Makefile.PL |
1082 | -Build.PL |
1083 | -MANIFEST This list of files |
1084 | -META.yml |
1085 | -README |
1086 | -SIGNATURE |
1087 | +lib/SVN/Web/action.pm |
1088 | t/1use.t |
1089 | t/2basic.t |
1090 | t/3svnweb-install.t |
1091 | +t/author-critic.t |
1092 | t/cache.t |
1093 | -t/cgi.t |
1094 | -t/mod_perl.t |
1095 | -t/svnweb-server.t |
1096 | +t/perlcriticrc |
1097 | +t/release-distmeta.t |
1098 | +t/release-pod-coverage.t |
1099 | +t/release-pod-syntax.t |
1100 | +t/repos/README.txt |
1101 | +t/repos/conf/authz |
1102 | +t/repos/conf/passwd |
1103 | +t/repos/conf/svnserve.conf |
1104 | +t/repos/db/current |
1105 | +t/repos/db/format |
1106 | +t/repos/db/fs-type |
1107 | +t/repos/db/fsfs.conf |
1108 | +t/repos/db/min-unpacked-rev |
1109 | +t/repos/db/rep-cache.db |
1110 | +t/repos/db/revprops/0/0 |
1111 | +t/repos/db/revprops/0/1 |
1112 | +t/repos/db/revprops/0/2 |
1113 | +t/repos/db/revprops/0/3 |
1114 | +t/repos/db/revs/0/0 |
1115 | +t/repos/db/revs/0/1 |
1116 | +t/repos/db/revs/0/2 |
1117 | +t/repos/db/revs/0/3 |
1118 | +t/repos/db/txn-current |
1119 | +t/repos/db/txn-current-lock |
1120 | +t/repos/db/uuid |
1121 | +t/repos/db/write-lock |
1122 | +t/repos/format |
1123 | +t/repos/hooks/post-commit.tmpl |
1124 | +t/repos/hooks/post-lock.tmpl |
1125 | +t/repos/hooks/post-revprop-change.tmpl |
1126 | +t/repos/hooks/post-unlock.tmpl |
1127 | +t/repos/hooks/pre-commit.tmpl |
1128 | +t/repos/hooks/pre-lock.tmpl |
1129 | +t/repos/hooks/pre-revprop-change.tmpl |
1130 | +t/repos/hooks/pre-unlock.tmpl |
1131 | +t/repos/hooks/start-commit.tmpl |
1132 | +t/repos/locks/db-logs.lock |
1133 | +t/repos/locks/db.lock |
1134 | +t/svn-uris.t |
1135 | t/test_repo.dump |
1136 | t/timedate_format.t |
1137 | -TODO |
1138 | -UPDATING.pod |
1139 | -SIGNATURE Added here by Module::Build |
1140 | +template/plain/browse |
1141 | +template/plain/diff |
1142 | +template/plain/footer |
1143 | +template/plain/header |
1144 | +template/plain/list |
1145 | +template/plain/log |
1146 | +template/plain/revision |
1147 | +template/plain/view |
1148 | +template/plain/x |
1149 | +template/trac/_action_menu |
1150 | +template/trac/_diff |
1151 | +template/trac/_log_msg |
1152 | +template/trac/blame |
1153 | +template/trac/browse |
1154 | +template/trac/diff |
1155 | +template/trac/footer |
1156 | +template/trac/header |
1157 | +template/trac/list |
1158 | +template/trac/log |
1159 | +template/trac/revision |
1160 | +template/trac/rss |
1161 | +template/trac/view |
1162 | +template/trac/x |
1163 | |
1164 | === added file 'MANIFEST.SKIP' |
1165 | --- MANIFEST.SKIP 1970-01-01 00:00:00 +0000 |
1166 | +++ MANIFEST.SKIP 2013-01-26 22:10:25 +0000 |
1167 | @@ -0,0 +1,1 @@ |
1168 | +config.yaml |
1169 | |
1170 | === added file 'META.json' |
1171 | --- META.json 1970-01-01 00:00:00 +0000 |
1172 | +++ META.json 2013-01-26 22:10:25 +0000 |
1173 | @@ -0,0 +1,79 @@ |
1174 | +{ |
1175 | + "abstract" : "Subversion repository web frontend", |
1176 | + "author" : [ |
1177 | + "Dean Hamstead <dean@fragfest.com.au>" |
1178 | + ], |
1179 | + "dynamic_config" : 0, |
1180 | + "generated_by" : "Dist::Zilla version 4.300025, CPAN::Meta::Converter version 2.120921", |
1181 | + "license" : [ |
1182 | + "perl_5" |
1183 | + ], |
1184 | + "meta-spec" : { |
1185 | + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", |
1186 | + "version" : "2" |
1187 | + }, |
1188 | + "name" : "SVN-Web", |
1189 | + "prereqs" : { |
1190 | + "build" : { |
1191 | + "requires" : { |
1192 | + "File::Copy" : "0", |
1193 | + "File::Find" : "0" |
1194 | + } |
1195 | + }, |
1196 | + "configure" : { |
1197 | + "requires" : { |
1198 | + "ExtUtils::MakeMaker" : "6.30" |
1199 | + } |
1200 | + }, |
1201 | + "runtime" : { |
1202 | + "recommends" : { |
1203 | + "Cache::Cache" : "0", |
1204 | + "Template::Plugin::Clickable" : "0", |
1205 | + "Template::Plugin::Clickable::Email" : "0", |
1206 | + "Template::Plugin::Subst" : "0", |
1207 | + "Test::Benchmark" : "0", |
1208 | + "Test::HTML::Tidy" : "0", |
1209 | + "XML::RSS::Parser" : "0" |
1210 | + }, |
1211 | + "requires" : { |
1212 | + "Alien::SVN" : "0", |
1213 | + "Carp" : "0", |
1214 | + "Encode" : "0", |
1215 | + "Exception::Class" : "1.22", |
1216 | + "File::Basename" : "0", |
1217 | + "File::Path" : "0", |
1218 | + "File::Spec" : "0", |
1219 | + "File::Temp" : "0", |
1220 | + "FindBin" : "0", |
1221 | + "IO::File" : "0", |
1222 | + "List::Util" : "0", |
1223 | + "Locale::Maketext" : "0", |
1224 | + "Locale::Maketext::Lexicon" : "0", |
1225 | + "Number::Format" : "0", |
1226 | + "POSIX" : "0", |
1227 | + "Plack" : "0", |
1228 | + "Template" : "0", |
1229 | + "Template::Plugin::Number::Format" : "0", |
1230 | + "Time::Zone" : "0", |
1231 | + "URI::Escape" : "0", |
1232 | + "YAML" : "0", |
1233 | + "base" : "0", |
1234 | + "perl" : "5.00404", |
1235 | + "strict" : "0", |
1236 | + "vars" : "0", |
1237 | + "warnings" : "0" |
1238 | + } |
1239 | + }, |
1240 | + "test" : { |
1241 | + "requires" : { |
1242 | + "Cwd" : "0", |
1243 | + "File::Path" : "0", |
1244 | + "Test::More" : "0", |
1245 | + "Test::WWW::Mechanize" : "0" |
1246 | + } |
1247 | + } |
1248 | + }, |
1249 | + "release_status" : "stable", |
1250 | + "version" : "0.63" |
1251 | +} |
1252 | + |
1253 | |
1254 | === modified file 'META.yml' |
1255 | --- META.yml 2007-11-30 14:01:12 +0000 |
1256 | +++ META.yml 2013-01-26 22:10:25 +0000 |
1257 | @@ -1,85 +1,56 @@ |
1258 | --- |
1259 | -name: SVN-Web |
1260 | -version: 0.53 |
1261 | +abstract: 'Subversion repository web frontend' |
1262 | author: |
1263 | - - 'Nik Clayton <nik@FreeBSD.org>' |
1264 | -abstract: Subversion repository web frontend |
1265 | + - 'Dean Hamstead <dean@fragfest.com.au>' |
1266 | +build_requires: |
1267 | + Cwd: 0 |
1268 | + File::Copy: 0 |
1269 | + File::Find: 0 |
1270 | + File::Path: 0 |
1271 | + Test::More: 0 |
1272 | + Test::WWW::Mechanize: 0 |
1273 | +configure_requires: |
1274 | + ExtUtils::MakeMaker: 6.30 |
1275 | +dynamic_config: 0 |
1276 | +generated_by: 'Dist::Zilla version 4.300025, CPAN::Meta::Converter version 2.120921' |
1277 | license: perl |
1278 | -resources: |
1279 | - license: http://dev.perl.org/licenses/ |
1280 | +meta-spec: |
1281 | + url: http://module-build.sourceforge.net/META-spec-v1.4.html |
1282 | + version: 1.4 |
1283 | +name: SVN-Web |
1284 | +recommends: |
1285 | + Cache::Cache: 0 |
1286 | + Template::Plugin::Clickable: 0 |
1287 | + Template::Plugin::Clickable::Email: 0 |
1288 | + Template::Plugin::Subst: 0 |
1289 | + Test::Benchmark: 0 |
1290 | + Test::HTML::Tidy: 0 |
1291 | + XML::RSS::Parser: 0 |
1292 | requires: |
1293 | - Apache::Request: 0 |
1294 | + Alien::SVN: 0 |
1295 | + Carp: 0 |
1296 | + Encode: 0 |
1297 | Exception::Class: 1.22 |
1298 | - HTTP::Server::Simple: 0 |
1299 | + File::Basename: 0 |
1300 | + File::Path: 0 |
1301 | + File::Spec: 0 |
1302 | + File::Temp: 0 |
1303 | + FindBin: 0 |
1304 | + IO::File: 0 |
1305 | List::Util: 0 |
1306 | Locale::Maketext: 0 |
1307 | Locale::Maketext::Lexicon: 0 |
1308 | Number::Format: 0 |
1309 | + POSIX: 0 |
1310 | + Plack: 0 |
1311 | Template: 0 |
1312 | - Template::Plugin::Clickable: 0 |
1313 | - Template::Plugin::Clickable::Email: 0 |
1314 | Template::Plugin::Number::Format: 0 |
1315 | - Test::WWW::Mechanize: 0 |
1316 | Time::Zone: 0 |
1317 | - URI: 0 |
1318 | + URI::Escape: 0 |
1319 | YAML: 0 |
1320 | -recommends: |
1321 | - Cache::Cache: 0 |
1322 | - Template::Plugin::Subst: 0 |
1323 | - Test::Benchmark: 0 |
1324 | - Test::HTML::Tidy: 0 |
1325 | - XML::RSS::Parser: 0 |
1326 | -provides: |
1327 | - SVN::Web: |
1328 | - file: lib/SVN/Web.pm |
1329 | - version: 0.53 |
1330 | - SVN::Web::Blame: |
1331 | - file: lib/SVN/Web/Blame.pm |
1332 | - version: 0.53 |
1333 | - SVN::Web::Browse: |
1334 | - file: lib/SVN/Web/Browse.pm |
1335 | - version: 0.53 |
1336 | - SVN::Web::Checkout: |
1337 | - file: lib/SVN/Web/Checkout.pm |
1338 | - version: 0.53 |
1339 | - SVN::Web::Diff: |
1340 | - file: lib/SVN/Web/Diff.pm |
1341 | - version: 0.53 |
1342 | - SVN::Web::DiffParser: |
1343 | - file: lib/SVN/Web/DiffParser.pm |
1344 | - version: 0.53 |
1345 | - SVN::Web::DiffParser::Change: |
1346 | - file: lib/SVN/Web/DiffParser.pm |
1347 | - SVN::Web::I18N: |
1348 | - file: lib/SVN/Web/I18N.pm |
1349 | - version: 0.53 |
1350 | - SVN::Web::List: |
1351 | - file: lib/SVN/Web/List.pm |
1352 | - version: 0.53 |
1353 | - SVN::Web::Log: |
1354 | - file: lib/SVN/Web/Log.pm |
1355 | - version: 0.53 |
1356 | - SVN::Web::RSS: |
1357 | - file: lib/SVN/Web/RSS.pm |
1358 | - version: 0.53 |
1359 | - SVN::Web::Revision: |
1360 | - file: lib/SVN/Web/Revision.pm |
1361 | - version: 0.53 |
1362 | - SVN::Web::Test: |
1363 | - file: lib/SVN/Web/Test.pm |
1364 | - version: 0.53 |
1365 | - SVN::Web::Test::Mechanize: |
1366 | - file: lib/SVN/Web/Test.pm |
1367 | - SVN::Web::View: |
1368 | - file: lib/SVN/Web/View.pm |
1369 | - version: 0.53 |
1370 | - SVN::Web::X: |
1371 | - file: lib/SVN/Web/X.pm |
1372 | - version: 0.53 |
1373 | - SVN::Web::action: |
1374 | - file: lib/SVN/Web/action.pm |
1375 | - version: 0.53 |
1376 | -generated_by: Module::Build version 0.2807 |
1377 | -meta-spec: |
1378 | - url: http://module-build.sourceforge.net/META-spec-v1.2.html |
1379 | - version: 1.2 |
1380 | + base: 0 |
1381 | + perl: 5.00404 |
1382 | + strict: 0 |
1383 | + vars: 0 |
1384 | + warnings: 0 |
1385 | +version: 0.63 |
1386 | |
1387 | === modified file 'Makefile.PL' |
1388 | --- Makefile.PL 2007-11-30 14:01:12 +0000 |
1389 | +++ Makefile.PL 2013-01-26 22:10:25 +0000 |
1390 | @@ -1,31 +1,84 @@ |
1391 | -# Note: this file was auto-generated by Module::Build::Compat version 0.03 |
1392 | - |
1393 | - unless (eval "use Module::Build::Compat 0.02; 1" ) { |
1394 | - print "This module requires Module::Build to install itself.\n"; |
1395 | - |
1396 | - require ExtUtils::MakeMaker; |
1397 | - my $yn = ExtUtils::MakeMaker::prompt |
1398 | - (' Install Module::Build now from CPAN?', 'y'); |
1399 | - |
1400 | - unless ($yn =~ /^y/i) { |
1401 | - die " *** Cannot install without Module::Build. Exiting ...\n"; |
1402 | - } |
1403 | - |
1404 | - require Cwd; |
1405 | - require File::Spec; |
1406 | - require CPAN; |
1407 | - |
1408 | - # Save this 'cause CPAN will chdir all over the place. |
1409 | - my $cwd = Cwd::cwd(); |
1410 | - |
1411 | - CPAN::Shell->install('Module::Build::Compat'); |
1412 | - CPAN::Shell->expand("Module", "Module::Build::Compat")->uptodate |
1413 | - or die "Couldn't install Module::Build, giving up.\n"; |
1414 | - |
1415 | - chdir $cwd or die "Cannot chdir() back to $cwd: $!"; |
1416 | - } |
1417 | - eval "use Module::Build::Compat 0.02; 1" or die $@; |
1418 | - use lib '_build/lib'; |
1419 | - Module::Build::Compat->run_build_pl(args => \@ARGV); |
1420 | - require MyModuleBuilder; |
1421 | - Module::Build::Compat->write_makefile(build_class => 'MyModuleBuilder'); |
1422 | + |
1423 | +use strict; |
1424 | +use warnings; |
1425 | + |
1426 | +use 5.004040; |
1427 | + |
1428 | +use ExtUtils::MakeMaker 6.30; |
1429 | + |
1430 | + |
1431 | + |
1432 | +my %WriteMakefileArgs = ( |
1433 | + "ABSTRACT" => "Subversion repository web frontend", |
1434 | + "AUTHOR" => "Dean Hamstead <dean\@fragfest.com.au>", |
1435 | + "BUILD_REQUIRES" => { |
1436 | + "Cwd" => 0, |
1437 | + "File::Copy" => 0, |
1438 | + "File::Find" => 0, |
1439 | + "File::Path" => 0, |
1440 | + "Test::More" => 0, |
1441 | + "Test::WWW::Mechanize" => 0 |
1442 | + }, |
1443 | + "CONFIGURE_REQUIRES" => { |
1444 | + "ExtUtils::MakeMaker" => "6.30" |
1445 | + }, |
1446 | + "DISTNAME" => "SVN-Web", |
1447 | + "EXE_FILES" => [ |
1448 | + "bin/svnweb-install" |
1449 | + ], |
1450 | + "LICENSE" => "perl", |
1451 | + "NAME" => "SVN::Web", |
1452 | + "PREREQ_PM" => { |
1453 | + "Alien::SVN" => 0, |
1454 | + "Carp" => 0, |
1455 | + "Encode" => 0, |
1456 | + "Exception::Class" => "1.22", |
1457 | + "File::Basename" => 0, |
1458 | + "File::Path" => 0, |
1459 | + "File::Spec" => 0, |
1460 | + "File::Temp" => 0, |
1461 | + "FindBin" => 0, |
1462 | + "IO::File" => 0, |
1463 | + "List::Util" => 0, |
1464 | + "Locale::Maketext" => 0, |
1465 | + "Locale::Maketext::Lexicon" => 0, |
1466 | + "Number::Format" => 0, |
1467 | + "POSIX" => 0, |
1468 | + "Plack" => 0, |
1469 | + "Template" => 0, |
1470 | + "Template::Plugin::Number::Format" => 0, |
1471 | + "Time::Zone" => 0, |
1472 | + "URI::Escape" => 0, |
1473 | + "YAML" => 0, |
1474 | + "base" => 0, |
1475 | + "strict" => 0, |
1476 | + "vars" => 0, |
1477 | + "warnings" => 0 |
1478 | + }, |
1479 | + "VERSION" => "0.63", |
1480 | + "test" => { |
1481 | + "TESTS" => "t/*.t" |
1482 | + } |
1483 | +); |
1484 | + |
1485 | + |
1486 | +unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) { |
1487 | + my $br = delete $WriteMakefileArgs{BUILD_REQUIRES}; |
1488 | + my $pp = $WriteMakefileArgs{PREREQ_PM}; |
1489 | + for my $mod ( keys %$br ) { |
1490 | + if ( exists $pp->{$mod} ) { |
1491 | + $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod}; |
1492 | + } |
1493 | + else { |
1494 | + $pp->{$mod} = $br->{$mod}; |
1495 | + } |
1496 | + } |
1497 | +} |
1498 | + |
1499 | +delete $WriteMakefileArgs{CONFIGURE_REQUIRES} |
1500 | + unless eval { ExtUtils::MakeMaker->VERSION(6.52) }; |
1501 | + |
1502 | +WriteMakefile(%WriteMakefileArgs); |
1503 | + |
1504 | + |
1505 | + |
1506 | |
1507 | === modified file 'README' |
1508 | --- README 2007-11-30 14:01:12 +0000 |
1509 | +++ README 2013-01-26 22:10:25 +0000 |
1510 | @@ -9,11 +9,10 @@ |
1511 | You need subversion 0.28 release or newer, with perl bindings support |
1512 | to use SVN::Web. |
1513 | |
1514 | -SVN::Web uses the stanard perl module install process: |
1515 | +SVN::Web uses the standard perl module install process: |
1516 | |
1517 | -% perl Makefile.PL |
1518 | -% make |
1519 | -# make install |
1520 | +% perl Build.PL |
1521 | +% Build |
1522 | |
1523 | * Configuration |
1524 | |
1525 | @@ -24,8 +23,7 @@ |
1526 | |
1527 | The latest SVN::Web could be found at: |
1528 | |
1529 | - http://jc.ngo.org.uk/svnweb/jc/browse/nik/CPAN/SVN-Web/trunk/ |
1530 | - svn://jc.ngo.org.uk/nik/CPAN/SVN-Web/trunk/ |
1531 | + https://github.com/djzort/SVN-Web |
1532 | |
1533 | * Copyright |
1534 | |
1535 | @@ -33,6 +31,8 @@ |
1536 | |
1537 | Copyright 2005-2007 by Nik Clayton <nik@FreeBSD.org>. |
1538 | |
1539 | +Copyright 2012 by Dean Hamstead <dean@fragfest.com.au>. |
1540 | + |
1541 | This program is free software; you can redistribute it and/or modify it |
1542 | under the same terms as Perl itself. |
1543 | |
1544 | |
1545 | === removed file 'SIGNATURE' |
1546 | --- SIGNATURE 2007-11-30 14:01:12 +0000 |
1547 | +++ SIGNATURE 1970-01-01 00:00:00 +0000 |
1548 | @@ -1,102 +0,0 @@ |
1549 | -This file contains message digests of all files listed in MANIFEST, |
1550 | -signed via the Module::Signature module, version 0.55. |
1551 | - |
1552 | -To verify the content in this distribution, first make sure you have |
1553 | -Module::Signature installed, then type: |
1554 | - |
1555 | - % cpansign -v |
1556 | - |
1557 | -It will check each file's integrity, as well as the signature's |
1558 | -validity. If "==> Signature verified OK! <==" is not displayed, |
1559 | -the distribution may already have been compromised, and you should |
1560 | -not run its Makefile.PL or Build.PL. |
1561 | - |
1562 | ------BEGIN PGP SIGNED MESSAGE----- |
1563 | -Hash: SHA1 |
1564 | - |
1565 | -SHA1 bea36db34ac69057951dd505e0ca60d65538f35f Build.PL |
1566 | -SHA1 520a583b38b4f2d2aa76d766470baf1b4a4e7a51 CHANGES.pod |
1567 | -SHA1 7b57d0a24319d2a89f5132f37d2294429a388a0f CONTRIBUTING.pod |
1568 | -SHA1 d1062d85c0122a970edbafda5e969f7b4afbe26c MANIFEST |
1569 | -SHA1 20817bbf049938d5bba58a6ca0727157e67c2178 META.yml |
1570 | -SHA1 10ff3cb66031d8671cfbd03cbb4bfc14c3370c8d Makefile.PL |
1571 | -SHA1 6526f05a145d67f12182e1fd4c266b1638de5aaa README |
1572 | -SHA1 62a73f8f454d7ab7d109f9fa935ae05e91a26fce TODO |
1573 | -SHA1 f80fad0adde057b48313e682ffd498f8f7fbef61 UPDATING.pod |
1574 | -SHA1 7d661813b0a7ec8f0791e15279ec168f76def36b bin/svnweb-install |
1575 | -SHA1 4efa43e0c277a3155e319ad6e3bc0c80598643ef bin/svnweb-server |
1576 | -SHA1 41cc64d4add3bdfce753e03e74d2de4ed5b360b0 conf/apache1.tt |
1577 | -SHA1 679ea7e1e56ad8364178ea0f31d85bdc95da5c03 conf/apache2.tt |
1578 | -SHA1 ddf3bd84c2c04b30ed172dc9fdb4c7872ec20d8c lib/SVN/Web.pm |
1579 | -SHA1 196165bf088b87da4e20c5458247cff99aaa0d58 lib/SVN/Web/Blame.pm |
1580 | -SHA1 407b5b526985e8dcb893bd704a3dcd9511a00b44 lib/SVN/Web/Browse.pm |
1581 | -SHA1 d1bd012d5214007d033d10f637b1323866c22376 lib/SVN/Web/Checkout.pm |
1582 | -SHA1 eccb3fdb04af416fd6958ae2db8411c11e4faf88 lib/SVN/Web/Diff.pm |
1583 | -SHA1 429e692a733026d337b3399279185bd57bed33fd lib/SVN/Web/DiffParser.pm |
1584 | -SHA1 6ce1a7f85da7e3b8922b7b05f87df4b26b5c6ded lib/SVN/Web/I18N.pm |
1585 | -SHA1 4a994b088d19d8ee898679c86cbf8fd7ec59c72e lib/SVN/Web/I18N/en.po |
1586 | -SHA1 4682ea1d4eb0d6c8f115bdb098707a7cdc1a60d8 lib/SVN/Web/I18N/fr.po |
1587 | -SHA1 d4a15942a0891cf00c09c032c559b1ef06f17bca lib/SVN/Web/I18N/zh_cn.po |
1588 | -SHA1 8274a5efef8210902776180aa94f1cf5dfbfe67c lib/SVN/Web/I18N/zh_tw.po |
1589 | -SHA1 eb3a6625aff9352db3fb469ccf9ab1aeed9b888c lib/SVN/Web/List.pm |
1590 | -SHA1 8f01ee8f6e24ba2da8f1220e466901dca2c36a3a lib/SVN/Web/Log.pm |
1591 | -SHA1 0ca63032577f87becf3f35f3743b6321603581b6 lib/SVN/Web/RSS.pm |
1592 | -SHA1 b622d5c6a7dfaa196e6d5fa395d39ab70b2fe88e lib/SVN/Web/Revision.pm |
1593 | -SHA1 4e09f47629601557603649a131fb7e259abe7a8c lib/SVN/Web/Style/common.css |
1594 | -SHA1 c7f365aa5f266c338dcf72609844b7b35e07a024 lib/SVN/Web/Style/styles-hlb.css |
1595 | -SHA1 eba6b6abe72e5109b82348188e957825ef109ed4 lib/SVN/Web/Style/trac/browser.css |
1596 | -SHA1 aa619eeb97d689b527e992003995b66f1e21e410 lib/SVN/Web/Style/trac/changeset.css |
1597 | -SHA1 b4b44f2b7ec33e0240bd008ebe85d37f749be0a8 lib/SVN/Web/Style/trac/code.css |
1598 | -SHA1 69333e899b14209268572ab6ec59549c1c1d3e6b lib/SVN/Web/Style/trac/diff.css |
1599 | -SHA1 f5e9f35f7f0a9b9eb7940098ab38aa32bc5c62c1 lib/SVN/Web/Style/trac/feed-icon-16x16.png |
1600 | -SHA1 9dd0a6187297068b664beb63e21594c1a0b2bc62 lib/SVN/Web/Style/trac/file.png |
1601 | -SHA1 9dd0a6187297068b664beb63e21594c1a0b2bc62 lib/SVN/Web/Style/trac/filedeny.png |
1602 | -SHA1 4893f3bba7bd4748784c31d55f9d7a1391d119ed lib/SVN/Web/Style/trac/folder.png |
1603 | -SHA1 4893f3bba7bd4748784c31d55f9d7a1391d119ed lib/SVN/Web/Style/trac/folderdeny.png |
1604 | -SHA1 1aa6724736aba1edc7862be3f2fcce09ae399031 lib/SVN/Web/Style/trac/parent.png |
1605 | -SHA1 70899de94e923e3a9abf3bd6cbd4ebf5af166e5e lib/SVN/Web/Style/trac/svnweb.css |
1606 | -SHA1 4623cb93b8677e5362a0956e4c96a294a74f72e2 lib/SVN/Web/Style/trac/text-diff-html.css |
1607 | -SHA1 ab17e64c0764d55acb26d120348a9f0a956eca7b lib/SVN/Web/Style/trac/trac.css |
1608 | -SHA1 1cd2a07c6228145c475dc4b26543330fd6ea289c lib/SVN/Web/Template/plain/browse |
1609 | -SHA1 688dbac49cf965e5d5661804872ba6fb5dbaf1f2 lib/SVN/Web/Template/plain/diff |
1610 | -SHA1 b7fa80002592240d66801fca04ae83604dc01b3c lib/SVN/Web/Template/plain/footer |
1611 | -SHA1 50916a335d7a2826fde6ac142920134bc3b6c8f8 lib/SVN/Web/Template/plain/header |
1612 | -SHA1 5da68420974ac06fa09864de00064a8c8d9fae25 lib/SVN/Web/Template/plain/list |
1613 | -SHA1 4d9a90b287fbf6f0ee81f5b2b465d27f6799a42f lib/SVN/Web/Template/plain/log |
1614 | -SHA1 c6d768f2a116c3fef0fe3a68eecac4848a0eeeff lib/SVN/Web/Template/plain/revision |
1615 | -SHA1 4c4c53cf4f6de47a58d87a6a53b6bec63cb4a164 lib/SVN/Web/Template/plain/view |
1616 | -SHA1 ea06eb2538a68c0137ccf3b4e768d533b5335d7e lib/SVN/Web/Template/plain/x |
1617 | -SHA1 0d6b9f5f7afef2adec6b83f3accfb48d489e6156 lib/SVN/Web/Template/trac/_action_menu |
1618 | -SHA1 4092be0442cde17dbf4f8c935d49082d809d7d9b lib/SVN/Web/Template/trac/_diff |
1619 | -SHA1 431c0f0c7d252e471d4f15800162f8b99c5b651e lib/SVN/Web/Template/trac/_log_msg |
1620 | -SHA1 dd6b710eb2c7f9d53a83dfc7f4ec727edd551762 lib/SVN/Web/Template/trac/blame |
1621 | -SHA1 6394428270dcadd85f44b67c6265e5181b28b259 lib/SVN/Web/Template/trac/browse |
1622 | -SHA1 db70eaf3635f80e565773afcf32031e6cd9c0c14 lib/SVN/Web/Template/trac/diff |
1623 | -SHA1 4c6638e1cc601ae0a06e1ca310c560f36ca2c9f6 lib/SVN/Web/Template/trac/footer |
1624 | -SHA1 025aca927b96c33302a1fa52a54296bb7cb5fa01 lib/SVN/Web/Template/trac/header |
1625 | -SHA1 6560add4fc20ae5f97970b49c5eeb111c9746420 lib/SVN/Web/Template/trac/list |
1626 | -SHA1 ca666cf10c504d897a1781e4cbb57badc6b7e541 lib/SVN/Web/Template/trac/log |
1627 | -SHA1 e310e8700389748688837e6885e74629a3aec604 lib/SVN/Web/Template/trac/revision |
1628 | -SHA1 99dad950693df574a75bf0b9e459d3bd5c36795d lib/SVN/Web/Template/trac/rss |
1629 | -SHA1 9e54ee48b02f6b3faa2891afda42c01548418ea9 lib/SVN/Web/Template/trac/view |
1630 | -SHA1 c3f9344030d90bd0cd4863fd7926a4db51fada5c lib/SVN/Web/Template/trac/x |
1631 | -SHA1 32786839388333d070edbf7291ba76c2d690a4cd lib/SVN/Web/Test.pm |
1632 | -SHA1 5cff77c77be25c1a3275af96fd2e2835c8abc025 lib/SVN/Web/View.pm |
1633 | -SHA1 cbe0082208239ed360b406082f0cf1d1cc448d56 lib/SVN/Web/X.pm |
1634 | -SHA1 eda250c4743e5f1336a29360e67ece9fcc1b4c2e lib/SVN/Web/action.pm |
1635 | -SHA1 e0133c50fb597f8a0355de9f347a2f1c929b9dcf t/1use.t |
1636 | -SHA1 325ab862e69051c28fb983fa5ddea4038712ac6e t/2basic.t |
1637 | -SHA1 6f8e289b2f687abdee6fb1d7041428a5b6bf6b14 t/3svnweb-install.t |
1638 | -SHA1 ebc0f8645c4fad62c264b949f3a134c0500c355a t/cache.t |
1639 | -SHA1 5fb95714a294283f9b84b6e5fa926883e2aefe88 t/cgi.t |
1640 | -SHA1 697d075aacf296699a1ebc85477b244f82bafe7a t/mod_perl.t |
1641 | -SHA1 becc583be7bec0f4ca504f86dd791d722be53a46 t/svnweb-server.t |
1642 | -SHA1 c3b77dd3c7d132bc44bf31bb0b6e7eb239499a4b t/test_repo.dump |
1643 | -SHA1 455cc3afd0ab331d3e925a0b458e0e5a76060681 t/timedate_format.t |
1644 | ------BEGIN PGP SIGNATURE----- |
1645 | -Version: GnuPG v1.4.7 (FreeBSD) |
1646 | - |
1647 | -iD8DBQFGNPCLk6gHZCw343URAgg/AJ9vB3lsaidMXd3nI2ImRhgnXnywzQCcDneR |
1648 | -/eA8t7gS0WTz0+1KvyEY1vA= |
1649 | -=wbMq |
1650 | ------END PGP SIGNATURE----- |
1651 | |
1652 | === added file 'SVN-Web.psgi' |
1653 | --- SVN-Web.psgi 1970-01-01 00:00:00 +0000 |
1654 | +++ SVN-Web.psgi 2013-01-26 22:10:25 +0000 |
1655 | @@ -0,0 +1,22 @@ |
1656 | +use SVN::Web; |
1657 | + |
1658 | +# load config |
1659 | +SVN::Web::load_config('config.yaml'); |
1660 | + |
1661 | +my $handler = sub { SVN::Web->run_psgi(@_) }; |
1662 | + |
1663 | +# uncomment this __END__ if you dont want to have plack deliver /css |
1664 | +#__END__ |
1665 | + |
1666 | +use Plack::Builder; |
1667 | +use Plack::App::Directory; |
1668 | + |
1669 | +my $css = Plack::App::Directory->new({ root => './css' })->to_app; |
1670 | + |
1671 | +builder { |
1672 | + |
1673 | + mount '/css' => $css, |
1674 | + |
1675 | + mount '/' => $handler, |
1676 | + |
1677 | +} |
1678 | |
1679 | === modified file 'UPDATING.pod' |
1680 | --- UPDATING.pod 2007-11-30 14:01:12 +0000 |
1681 | +++ UPDATING.pod 2013-01-26 22:10:25 +0000 |
1682 | @@ -6,6 +6,10 @@ |
1683 | |
1684 | Notes on updating from previous versions of SVN::Web |
1685 | |
1686 | +=head1 WARNING |
1687 | + |
1688 | +This is out of date for 0.60 |
1689 | + |
1690 | =head1 DESCRIPTION |
1691 | |
1692 | If you have not modified the supplied template files the update can |
1693 | |
1694 | === modified file 'bin/svnweb-install' |
1695 | --- bin/svnweb-install 2012-06-11 23:29:21 +0000 |
1696 | +++ bin/svnweb-install 2013-01-26 22:10:25 +0000 |
1697 | @@ -19,42 +19,14 @@ |
1698 | } |
1699 | } |
1700 | |
1701 | +my $version = SVN::Web->VERSION(); |
1702 | + |
1703 | die "already have config.yaml" if -e 'config.yaml'; |
1704 | |
1705 | -open my $fh, ">config.yaml"; |
1706 | - |
1707 | -my %targets = ( |
1708 | - Template => 'template', |
1709 | - Style => 'css', |
1710 | -); |
1711 | - |
1712 | -while(my($from, $to) = each %targets) { |
1713 | - my $path = $INC{'SVN/Web.pm'}; |
1714 | - $path =~ s{.pm$}{/$from}i or next; |
1715 | - |
1716 | - find( |
1717 | - { |
1718 | - wanted => sub { |
1719 | - my $dst_path = $File::Find::name; |
1720 | - $dst_path =~ s/\Q$path\E/$to/; |
1721 | - |
1722 | - if(-d $File::Find::name) { |
1723 | - mkdir $dst_path |
1724 | - or warn "mkdir($dst_path) failed: $!\n"; |
1725 | - } else { |
1726 | - copy($File::Find::name, $dst_path) |
1727 | - or warn |
1728 | - "Copying $File::Find::name -> $dst_path failed:\n$!\n"; |
1729 | - } |
1730 | - }, |
1731 | - no_chdir => 1 |
1732 | - }, |
1733 | - $path |
1734 | - ); |
1735 | -} |
1736 | +open my $fh, '>', 'config.yaml'; |
1737 | |
1738 | print $fh <<END; |
1739 | -version: 0.53 |
1740 | +version: $version |
1741 | |
1742 | # Actions, the classes that implement them, and where they should appear |
1743 | # in the action menu |
1744 | @@ -81,6 +53,8 @@ |
1745 | class: SVN::Web::Diff |
1746 | list: |
1747 | class: SVN::Web::List |
1748 | + opts: |
1749 | + public_repos_uri: hide_local |
1750 | log: |
1751 | class: SVN::Web::Log |
1752 | action_menu: |
1753 | @@ -146,20 +120,6 @@ |
1754 | |
1755 | close $fh; |
1756 | |
1757 | -open $fh, '>index.cgi'; |
1758 | -print $fh <<"END"; |
1759 | -$Config::Config{startperl} -w |
1760 | -#use lib '.'; |
1761 | -#use lib '../lib'; |
1762 | -use CGI::Carp qw(fatalsToBrowser); |
1763 | -use SVN::Web; |
1764 | -SVN::Web::run_cgi(); |
1765 | -END |
1766 | - |
1767 | -close $fh; |
1768 | - |
1769 | -chmod 0755, 'index.cgi'; |
1770 | - |
1771 | # XXX: export the template too |
1772 | |
1773 | print "SVN::Web now installed! please see config.yaml\n"; |
1774 | @@ -182,6 +142,8 @@ |
1775 | |
1776 | Copyright 2005-2007 by Nik Clayton C<< <nik@FreeBSD.org> >>. |
1777 | |
1778 | +Copyright 2012 by Dean Hamstead C<< <dean@fragfest.com.au> >>. |
1779 | + |
1780 | This program is free software; you can redistribute it and/or modify it |
1781 | under the same terms as Perl itself. |
1782 | |
1783 | |
1784 | === removed file 'bin/svnweb-server' |
1785 | --- bin/svnweb-server 2007-11-30 14:01:12 +0000 |
1786 | +++ bin/svnweb-server 1970-01-01 00:00:00 +0000 |
1787 | @@ -1,142 +0,0 @@ |
1788 | -#!/usr/bin/perl |
1789 | - |
1790 | -# -*- Mode: cperl; cperl-indent-level: 4 -*- |
1791 | - |
1792 | -use strict; |
1793 | -use warnings; |
1794 | - |
1795 | -use base qw(HTTP::Server::Simple::CGI); |
1796 | - |
1797 | -use SVN::Web; |
1798 | -use Getopt::Long; |
1799 | - |
1800 | -=head1 NAME |
1801 | - |
1802 | -svnweb-server - simple webserver for SVN::Web |
1803 | - |
1804 | -=head1 SYNOPSIS |
1805 | - |
1806 | - svnweb-server [--root DIR] [--port PORT] [--net-server Net::Server] |
1807 | - |
1808 | -=head1 DESCRIPTION |
1809 | - |
1810 | -svnweb-server is a webserver that runs SVN::Web. It's an easy way to |
1811 | -use SVN::Web without having to set up Apache (or any other web |
1812 | -server). The tradeoff is that the server is very simple. But for |
1813 | -light use then it may be perfectly acceptable. |
1814 | - |
1815 | -=head1 OPTIONS |
1816 | - |
1817 | -=over |
1818 | - |
1819 | -=item --root DIR |
1820 | - |
1821 | -The directory in which you ran C<svnweb-install>. |
1822 | - |
1823 | -Optional, defaults to C<.>. |
1824 | - |
1825 | -=item --port PORT |
1826 | - |
1827 | -The port the server should listen on. |
1828 | - |
1829 | -Options, defaults to C<8080>. |
1830 | - |
1831 | -=item --net-server Net::Server |
1832 | - |
1833 | -The Net::Server subclass to use to create the server. A single, |
1834 | -non-forking server is created by default. Other types of server can be |
1835 | -created by giving the correct Net::Server subclass. For example, to |
1836 | -use a server that forks to handle each request, use C<--net-server |
1837 | -Net::Server::Fork>. |
1838 | - |
1839 | -=back |
1840 | - |
1841 | -=cut |
1842 | - |
1843 | -my %options = ( |
1844 | - 'root' => '.', |
1845 | - 'port' => '8080', |
1846 | - 'net_server' => undef |
1847 | -); |
1848 | - |
1849 | -GetOptions( |
1850 | - 'root=s' => \$options{root}, |
1851 | - 'port=i' => \$options{port}, |
1852 | - 'net-server=s' => \$options{net_server}, |
1853 | -); |
1854 | - |
1855 | -sub handle_request { |
1856 | - my($self, $cgi) = @_; |
1857 | - |
1858 | - if($cgi->path_info() =~ m{^/css/}) { # Pass /css requests straight through |
1859 | - my $file = $cgi->path_info(); |
1860 | - $file =~ s/^\///g; |
1861 | - open(FILE, $file) or die "Can't open() $file: $!\n"; |
1862 | - local $/ = undef; |
1863 | - print <FILE>; |
1864 | - close FILE; |
1865 | - } else { |
1866 | - $ENV{SCRIPT_NAME} = 'http://' . $self->host() . ':' . $self->port(); |
1867 | - print "HTTP/1.1 200 OK\n"; |
1868 | - SVN::Web::run_cgi(cgi_class => 'CGI'); |
1869 | - } |
1870 | -} |
1871 | - |
1872 | -use CGI::Carp qw(fatalsToBrowser); |
1873 | - |
1874 | -if(!-f "$options{root}/config.yaml") { |
1875 | - print <<EOM; |
1876 | -Can't find $options{root}/config.yaml. Make sure you've run svnweb-install |
1877 | -in $options{root} before running this server. |
1878 | -EOM |
1879 | - exit; |
1880 | -} |
1881 | - |
1882 | -chdir($options{root}); |
1883 | -my $server = __PACKAGE__->new($options{port}); |
1884 | -$server->net_server($options{net_server}) if defined $options{net_server}; |
1885 | -$server->run(); |
1886 | - |
1887 | -exit; |
1888 | - |
1889 | -=head1 SEE ALSO |
1890 | - |
1891 | -L<SVN::Web> |
1892 | - |
1893 | -=head1 BUGS |
1894 | - |
1895 | -This is a simple server. Accordingly, a few features do not work properly |
1896 | -at the moment. |
1897 | - |
1898 | -=over |
1899 | - |
1900 | -=item Redirects |
1901 | - |
1902 | -L<SVN::Web::Browse> will redirect the client if the URL is missing a trailing |
1903 | -C</>. That redirection does not work with this server. That's not an issue |
1904 | -for any URLs generated by L<SVN::Web>, but may be an issue for URLs that |
1905 | -are entered by hand. |
1906 | - |
1907 | -This will also affect L<SVN::Web::List>'s C<redirect_to_browse_when_one_repo> |
1908 | -option. |
1909 | - |
1910 | -=item cgi_class |
1911 | - |
1912 | -The C<cgi_class> declaration (if any) in F<config.yaml> is ignored. L<CGI> |
1913 | -is always used as the CGI class. |
1914 | - |
1915 | -=back |
1916 | - |
1917 | -Please report any bugs or feature requests to |
1918 | -C<bug-svn-web@rt.cpan.org>, or through the web interface at |
1919 | -L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=SVN-Web>. |
1920 | -I will be notified, and then you'll automatically be notified of progress on |
1921 | -your bug as I make changes. |
1922 | - |
1923 | -=head1 AUTHOR |
1924 | - |
1925 | -The current maintainer is Nik Clayton, <nikc@cpan.org>. |
1926 | - |
1927 | -=head1 COPYRIGHT AND LICENSE |
1928 | - |
1929 | -Copyright 2006-2007 Nik Clayton. All Rights Reserved. |
1930 | |
1931 | === removed directory 'conf' |
1932 | === removed file 'conf/apache1.tt' |
1933 | --- conf/apache1.tt 2007-11-30 14:01:12 +0000 |
1934 | +++ conf/apache1.tt 1970-01-01 00:00:00 +0000 |
1935 | @@ -1,82 +0,0 @@ |
1936 | -ServerName 127.0.0.1 |
1937 | -ServerType standalone |
1938 | -ServerRoot "/usr/local" |
1939 | -PidFile /dev/null |
1940 | -Timeout 300 |
1941 | -KeepAlive Off |
1942 | - |
1943 | -LoadModule config_log_module [% libexec_dir %]/mod_log_config.so |
1944 | -LoadModule mime_module [% libexec_dir %]/mod_mime.so |
1945 | -LoadModule alias_module [% libexec_dir %]/mod_alias.so |
1946 | -[% IF mod_perl %] |
1947 | -LoadModule perl_module [% mod_perl_path %] |
1948 | -[% END %] |
1949 | - |
1950 | -[% IF cgi_bin %] |
1951 | -LoadModule cgi_module [% libexec_dir %]/mod_cgi.so |
1952 | -LoadModule dir_module [% libexec_dir %]/mod_dir.so |
1953 | -LoadModule env_module [% libexec_dir %]/mod_env.so |
1954 | -[% END %] |
1955 | - |
1956 | -ClearModuleList |
1957 | -AddModule mod_log_config.c |
1958 | -AddModule mod_mime.c |
1959 | -AddModule mod_alias.c |
1960 | -AddModule mod_so.c |
1961 | -[% IF mod_perl %] |
1962 | -AddModule mod_perl.c |
1963 | -[% END %] |
1964 | - |
1965 | -[% IF cgi_bin %] |
1966 | -AddModule mod_cgi.c |
1967 | -AddModule mod_dir.c |
1968 | -AddModule mod_env.c |
1969 | -[% END %] |
1970 | - |
1971 | -Port [% httpd_port %] |
1972 | - |
1973 | -UseCanonicalName Off |
1974 | - |
1975 | -HostnameLookups Off |
1976 | - |
1977 | -ErrorLog [% svnweb_install_dir %]/log.err |
1978 | -LogLevel debug |
1979 | - |
1980 | -LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined |
1981 | -LogFormat "%h %l %u %t \"%r\" %>s %b" common |
1982 | -LogFormat "%{Referer}i -> %U" referer |
1983 | -LogFormat "%{User-agent}i" agent |
1984 | - |
1985 | -CustomLog [% svnweb_install_dir %]/log common |
1986 | - |
1987 | -ServerSignature Off |
1988 | - |
1989 | -[% IF mod_perl %] |
1990 | -<Perl> |
1991 | - use lib '[% blib_dir %]'; |
1992 | -</Perl> |
1993 | - |
1994 | -<Directory [% svnweb_install_dir %]> |
1995 | - AllowOverride None |
1996 | - Options None |
1997 | - SetHandler perl-script |
1998 | - PerlHandler SVN::Web |
1999 | -</Directory> |
2000 | - |
2001 | -<Directory [% svnweb_install_dir %]/css> |
2002 | - SetHandler default-handler |
2003 | -</Directory> |
2004 | - |
2005 | -[% END %] |
2006 | - |
2007 | -[% IF cgi_bin %] |
2008 | -<Directory [% svnweb_install_dir %]> |
2009 | - Options All ExecCGI |
2010 | - AddHandler cgi-script .cgi |
2011 | - DirectoryIndex index.cgi |
2012 | - SetEnv PERL5LIB [% blib_dir %] |
2013 | -</Directory> |
2014 | -[% END %] |
2015 | - |
2016 | -Alias /svnweb [% svnweb_install_dir %] |
2017 | - |
2018 | |
2019 | === removed file 'conf/apache2.tt' |
2020 | --- conf/apache2.tt 2007-11-30 14:01:12 +0000 |
2021 | +++ conf/apache2.tt 1970-01-01 00:00:00 +0000 |
2022 | @@ -1,69 +0,0 @@ |
2023 | -ServerName 127.0.0.1 |
2024 | -ServerRoot "/usr/local" |
2025 | -PidFile /dev/null |
2026 | -Timeout 300 |
2027 | -KeepAlive Off |
2028 | -LockFile [% svnweb_install_dir %]/lock |
2029 | - |
2030 | - |
2031 | -LoadModule log_config_module [% libexec_dir %]/mod_log_config.so |
2032 | -LoadModule mime_module [% libexec_dir %]/mod_mime.so |
2033 | -LoadModule alias_module [% libexec_dir %]/mod_alias.so |
2034 | -[% IF mod_perl %] |
2035 | -LoadModule perl_module [% mod_perl_path %] |
2036 | -LoadModule apreq_module [% libexec_dir %]/mod_apreq2.so |
2037 | -[% END %] |
2038 | - |
2039 | -[% IF cgi_bin %] |
2040 | -LoadModule cgi_module [% libexec_dir %]/mod_cgi.so |
2041 | -LoadModule dir_module [% libexec_dir %]/mod_dir.so |
2042 | -LoadModule env_module [% libexec_dir %]/mod_env.so |
2043 | -[% END %] |
2044 | - |
2045 | -Listen [% httpd_port %] |
2046 | - |
2047 | -UseCanonicalName Off |
2048 | - |
2049 | -HostnameLookups Off |
2050 | - |
2051 | -ErrorLog [% svnweb_install_dir %]/log.err |
2052 | -LogLevel debug |
2053 | - |
2054 | -LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined |
2055 | -LogFormat "%h %l %u %t \"%r\" %>s %b" common |
2056 | -LogFormat "%{Referer}i -> %U" referer |
2057 | -LogFormat "%{User-agent}i" agent |
2058 | - |
2059 | -CustomLog [% svnweb_install_dir %]/log common |
2060 | - |
2061 | -ServerSignature Off |
2062 | - |
2063 | -[% IF mod_perl %] |
2064 | -<Perl> |
2065 | - use lib '[% blib_dir %]'; |
2066 | -</Perl> |
2067 | - |
2068 | -<Directory [% svnweb_install_dir %]> |
2069 | - AllowOverride None |
2070 | - Options None |
2071 | - SetHandler perl-script |
2072 | - PerlHandler SVN::Web |
2073 | -</Directory> |
2074 | - |
2075 | -<Directory [% svnweb_install_dir %]/css> |
2076 | - SetHandler default-handler |
2077 | -</Directory> |
2078 | - |
2079 | -[% END %] |
2080 | - |
2081 | -[% IF cgi_bin %] |
2082 | -<Directory [% svnweb_install_dir %]> |
2083 | - Options All ExecCGI |
2084 | - AddHandler cgi-script .cgi |
2085 | - DirectoryIndex index.cgi |
2086 | - SetEnv PERL5LIB [% blib_dir %] |
2087 | -</Directory> |
2088 | -[% END %] |
2089 | - |
2090 | -Alias /svnweb [% svnweb_install_dir %]/ |
2091 | - |
2092 | |
2093 | === added file 'cpanfile' |
2094 | --- cpanfile 1970-01-01 00:00:00 +0000 |
2095 | +++ cpanfile 2013-01-26 22:10:25 +0000 |
2096 | @@ -0,0 +1,49 @@ |
2097 | +requires "Alien::SVN" => "0"; |
2098 | +requires "Carp" => "0"; |
2099 | +requires "Encode" => "0"; |
2100 | +requires "Exception::Class" => "1.22"; |
2101 | +requires "File::Basename" => "0"; |
2102 | +requires "File::Path" => "0"; |
2103 | +requires "File::Spec" => "0"; |
2104 | +requires "File::Temp" => "0"; |
2105 | +requires "FindBin" => "0"; |
2106 | +requires "IO::File" => "0"; |
2107 | +requires "List::Util" => "0"; |
2108 | +requires "Locale::Maketext" => "0"; |
2109 | +requires "Locale::Maketext::Lexicon" => "0"; |
2110 | +requires "Number::Format" => "0"; |
2111 | +requires "POSIX" => "0"; |
2112 | +requires "Plack" => "0"; |
2113 | +requires "Template" => "0"; |
2114 | +requires "Template::Plugin::Number::Format" => "0"; |
2115 | +requires "Time::Zone" => "0"; |
2116 | +requires "URI::Escape" => "0"; |
2117 | +requires "YAML" => "0"; |
2118 | +requires "base" => "0"; |
2119 | +requires "perl" => "5.00404"; |
2120 | +requires "strict" => "0"; |
2121 | +requires "vars" => "0"; |
2122 | +requires "warnings" => "0"; |
2123 | +recommends "Cache::Cache" => "0"; |
2124 | +recommends "Template::Plugin::Clickable" => "0"; |
2125 | +recommends "Template::Plugin::Clickable::Email" => "0"; |
2126 | +recommends "Template::Plugin::Subst" => "0"; |
2127 | +recommends "Test::Benchmark" => "0"; |
2128 | +recommends "Test::HTML::Tidy" => "0"; |
2129 | +recommends "XML::RSS::Parser" => "0"; |
2130 | + |
2131 | +on 'build' => sub { |
2132 | + requires "File::Copy" => "0"; |
2133 | + requires "File::Find" => "0"; |
2134 | +}; |
2135 | + |
2136 | +on 'test' => sub { |
2137 | + requires "Cwd" => "0"; |
2138 | + requires "File::Path" => "0"; |
2139 | + requires "Test::More" => "0"; |
2140 | + requires "Test::WWW::Mechanize" => "0"; |
2141 | +}; |
2142 | + |
2143 | +on 'configure' => sub { |
2144 | + requires "ExtUtils::MakeMaker" => "6.30"; |
2145 | +}; |
2146 | |
2147 | === added directory 'css' |
2148 | === added file 'css/common.css' |
2149 | --- css/common.css 1970-01-01 00:00:00 +0000 |
2150 | +++ css/common.css 2013-01-26 22:10:25 +0000 |
2151 | @@ -0,0 +1,84 @@ |
2152 | +#categories li { |
2153 | + display: inline; |
2154 | +} |
2155 | +#categories ul { |
2156 | + list-style: none; |
2157 | +} |
2158 | + |
2159 | +#adminMenu li, #mainMenu li { |
2160 | + display: inline; |
2161 | + text-decoration: underline; |
2162 | +} |
2163 | + |
2164 | +#adminMenu ul, #mainMenu ul { |
2165 | + list-style: none; |
2166 | + padding: 0; |
2167 | + margin: 0; |
2168 | + border: 0; |
2169 | +} |
2170 | + |
2171 | +#adminMenu li:hover, #mainMenu li:hover { |
2172 | + text-decoration: none; |
2173 | +} |
2174 | + |
2175 | + |
2176 | + |
2177 | +#container li { |
2178 | + list-style-position: inside; |
2179 | +} |
2180 | + |
2181 | +#container .storyColumn { |
2182 | + float: left; |
2183 | + width: 75%; |
2184 | +} |
2185 | + |
2186 | +#container .boxColumn .sidetitle { |
2187 | + margin-top: 0; |
2188 | +} |
2189 | + |
2190 | +#container .boxColumn { |
2191 | + padding: 0 0 16px 0; |
2192 | + width: 20%; |
2193 | + float: right; |
2194 | + padding-right: 20px; |
2195 | +} |
2196 | + |
2197 | +.bottomRow { |
2198 | + clear: both; |
2199 | +} |
2200 | + |
2201 | +.siteSearch { |
2202 | + font-size: 12pt; |
2203 | + color: black; |
2204 | +} |
2205 | + |
2206 | + |
2207 | +#body-container { |
2208 | + height: 100%; |
2209 | +} |
2210 | + |
2211 | +#footer { |
2212 | + text-align: right; |
2213 | + /* |
2214 | + position: absolute; |
2215 | + bottom: 20px; |
2216 | + right: 160px; |
2217 | + */ |
2218 | +} |
2219 | + |
2220 | +#links { |
2221 | + padding-top: 10pt; |
2222 | + padding-bottom: 10pt; |
2223 | +} |
2224 | + |
2225 | +#banner .description { |
2226 | + line-height:300%; |
2227 | +} |
2228 | + |
2229 | +TH { |
2230 | + text-align: left; |
2231 | + background: #7D775C; |
2232 | + color: white; |
2233 | + font-size: small; |
2234 | + -moz-opacity: 0.9; |
2235 | +} |
2236 | |
2237 | === added file 'css/styles-hlb.css' |
2238 | --- css/styles-hlb.css 1970-01-01 00:00:00 +0000 |
2239 | +++ css/styles-hlb.css 2013-01-26 22:10:25 +0000 |
2240 | @@ -0,0 +1,241 @@ |
2241 | +@import "common.css"; |
2242 | + |
2243 | +/* block */ |
2244 | +body { |
2245 | + color: #070707; |
2246 | + background-color: #ccc; |
2247 | + margin: 10px; padding: 0; |
2248 | +} |
2249 | + |
2250 | +div#banner { |
2251 | +} |
2252 | + |
2253 | +.description { |
2254 | + padding-left: 30px; |
2255 | +} |
2256 | + |
2257 | +div#content { |
2258 | + margin: 0px; |
2259 | + border-top: 2px solid #666; |
2260 | + border-left: 1px solid #666; |
2261 | + border-right: 1px solid #666; |
2262 | + background: #fffff7; |
2263 | +} |
2264 | + |
2265 | +h2.title { |
2266 | + padding: 10px; |
2267 | +} |
2268 | + |
2269 | +div.upper-nav { |
2270 | + border-top: 1px solid #ccc; |
2271 | + border-bottom: 1px solid #ddd; |
2272 | + margin: 0; |
2273 | + padding: 0 20px; |
2274 | + background: #eee; |
2275 | +} |
2276 | + |
2277 | +.edit { |
2278 | + display: block; |
2279 | + border-top: 1px solid #ccc; |
2280 | + border-bottom: 1px solid #ddd; |
2281 | + margin: 0; |
2282 | + padding: 5px 20px; |
2283 | + background: #eee; |
2284 | +} |
2285 | + |
2286 | +.sidetitle, .side { |
2287 | + display: none; |
2288 | +} |
2289 | + |
2290 | +.powered { |
2291 | + border: 1px solid #666; |
2292 | + padding: 5px; |
2293 | + background: #eee; |
2294 | +} |
2295 | + |
2296 | +h2.comments-head { |
2297 | + width: 5em; |
2298 | + border-right: 1px inset #666; |
2299 | + border-top: 1px groove #fff; |
2300 | + border-bottom: 1px inset #666; |
2301 | + background: #eef; |
2302 | +} |
2303 | + |
2304 | +.comments-post { |
2305 | + padding: 0 20px 20px 20px; |
2306 | +} |
2307 | + |
2308 | +/* basic text style */ |
2309 | +body { |
2310 | + font-family: "Palatino Linotype", Georgia, "Times New Roman", Times, serif; |
2311 | +} |
2312 | + |
2313 | +div#content { |
2314 | + line-height: 180%; |
2315 | +} |
2316 | + |
2317 | +h2.title { |
2318 | + font-size: xx-large; |
2319 | + margin: 0; |
2320 | + border: 0; |
2321 | +} |
2322 | + |
2323 | +.powered { |
2324 | + font-size: x-small; |
2325 | + text-align: center; |
2326 | +} |
2327 | + |
2328 | +div a:link { |
2329 | + text-decoration: none; |
2330 | + color: #993300; } |
2331 | + |
2332 | +div a:visited { |
2333 | + text-decoration: none; |
2334 | + color: #660000;} |
2335 | + |
2336 | +div a:hover { |
2337 | + text-decoration: underline; |
2338 | + color: #cc0000;} |
2339 | + |
2340 | +div a:active { |
2341 | + text-decoration: none; |
2342 | + color: #cc0000;} |
2343 | + |
2344 | +/* content style */ |
2345 | +div p { |
2346 | + margin: 15px; |
2347 | +} |
2348 | + |
2349 | +h1, h2, h3, h4, h5, h6 { |
2350 | + color: #333; |
2351 | + margin: 0 10% 0 0; |
2352 | + padding: 0 10px; |
2353 | + border-bottom: 1px solid #666; |
2354 | + text-decoration: none; |
2355 | +} |
2356 | + |
2357 | +li { |
2358 | + color: black; |
2359 | + margin-bottom: 0.2em; |
2360 | + margin-right: 5%; |
2361 | +} |
2362 | + |
2363 | +ul { |
2364 | + color: black; |
2365 | +} |
2366 | + |
2367 | +/* this reverses the 2nd and 3rd level list item bullets */ |
2368 | +ul>li>ul {list-style-type: square;} |
2369 | +ul>li>ul>li>ul {list-style-type: circle;} |
2370 | + |
2371 | +/* latex style list item */ |
2372 | +ol li ol li { list-style-type: lower-alpha; } |
2373 | +ol li ol li ol li { list-style-type: lower-roman; } |
2374 | + |
2375 | +blockquote pre { |
2376 | + font-family: courier, "courier new", monaco, monospace; |
2377 | + color: #000; |
2378 | + background: #f0f0f0; |
2379 | + margin: 0.5em; |
2380 | +} |
2381 | + |
2382 | +code, pre, tt { |
2383 | + font-family: courier, "courier new", monaco, monospace; |
2384 | + color:#333333; |
2385 | +} |
2386 | + |
2387 | +div#content div.blog div.upper-nav { |
2388 | + display: inline; |
2389 | +} |
2390 | + |
2391 | +a.empty:before { |
2392 | + vertical-align: top; |
2393 | + font-size: xx-small; |
2394 | + content: '?' |
2395 | +} |
2396 | + |
2397 | +a.empty:after { |
2398 | + vertical-align: top; |
2399 | + font-size: xx-small; |
2400 | + content: '?' |
2401 | +} |
2402 | +a.private {color: black} |
2403 | + |
2404 | +a {text-decoration: none} |
2405 | +a:link {color: #d64} |
2406 | +a:visited {color: #864} |
2407 | +a:hover {text-decoration: underline} |
2408 | +a:active {text-decoration: underline} |
2409 | +a.empty {color: gray} |
2410 | +a.private {color: black} |
2411 | + |
2412 | +.error {color: #f00;} |
2413 | + |
2414 | +pre { |
2415 | + font-family: monospace; |
2416 | + font-size: 13px; |
2417 | + color: #EEE; |
2418 | + background-color: #333; |
2419 | + border: 1px dashed #EEE; |
2420 | + padding: 2px; |
2421 | + padding-left: 10px; |
2422 | + margin-left: 30px; |
2423 | + margin-right: 75px; |
2424 | +} |
2425 | + |
2426 | +del { |
2427 | + text-decoration: none; |
2428 | + background-color: yellow; |
2429 | + color: blue; |
2430 | +} |
2431 | +ins { |
2432 | + text-decoration: none; |
2433 | + background-color: lightgreen; |
2434 | + color: blue; |
2435 | +} |
2436 | + |
2437 | +.title, |
2438 | +.side, |
2439 | +.sidetitle { |
2440 | + font-size: large; |
2441 | +} |
2442 | + |
2443 | +.description, |
2444 | +.blogbody, |
2445 | +.date, |
2446 | +.comments-body, |
2447 | +.comments-post, |
2448 | +.comments-head { |
2449 | + font-size: medium; |
2450 | +} |
2451 | + |
2452 | +.posted { |
2453 | + font-size: small; |
2454 | +} |
2455 | + |
2456 | +.syndicate, |
2457 | +.powered { |
2458 | + font-size: x-small; |
2459 | +} |
2460 | + |
2461 | +table.changes { |
2462 | + width: 100%; |
2463 | + table-layout: fixed; |
2464 | +} /* fix width of table from RecentChange page */ |
2465 | + |
2466 | +table.changes td.page-id { |
2467 | +} /* do nothing to "Page-ID" cell from RecentChange table */ |
2468 | + |
2469 | +table.changes td.edit-by { |
2470 | + text-align: right; |
2471 | +} /* make "Edit-By" cell from RecentChange table align to right */ |
2472 | + |
2473 | +table.changes td.edit-time { |
2474 | + font-size: x-small; |
2475 | +} /* decrease font size of "Edit-Time" cell from RecentChange table */ |
2476 | + |
2477 | +div.side a { display: list-item; list-style-type: none } |
2478 | +div.upper-nav { display: none; } |
2479 | +.blog h1 { display: none; } |
2480 | +textarea { width: 100% } |
2481 | +body div#content div.blog div.blogbody h1 { display: inline; } |
2482 | |
2483 | === added directory 'css/trac' |
2484 | === added file 'css/trac/browser.css' |
2485 | --- css/trac/browser.css 1970-01-01 00:00:00 +0000 |
2486 | +++ css/trac/browser.css 2013-01-26 22:10:25 +0000 |
2487 | @@ -0,0 +1,89 @@ |
2488 | +@import url(code.css); |
2489 | +@import url(changeset.css); |
2490 | +@import url(text-diff-html.css); |
2491 | + |
2492 | +/* Browser */ |
2493 | +h1 { font-size: 16px; letter-spacing: -0.028em; margin: 0; padding: 0 0 .5em } |
2494 | +h1 :link, h1 :visited, h1 .filename { border: none; padding: 0 .2em } |
2495 | +h1 :link, h1 :visited { color: #b00 } |
2496 | +h1 .first:link, h1 .first:visited { color: #998 } |
2497 | +h1 .sep { color: #666; padding: 0 .1em } |
2498 | + |
2499 | +img.icon { vertical-align: middle; } |
2500 | + |
2501 | +#navpath { float: left; } |
2502 | + |
2503 | +#language-selection { float: right; font-size: 10px; } |
2504 | +#language-selection select { font-size: 10px; } |
2505 | +#language-selection input { font-size: 10px; } |
2506 | + |
2507 | +#content { clear: both; } |
2508 | + |
2509 | +#jumprev { float: right; font-size: 10px; margin: 0 0 0 } |
2510 | +#jumprev form { margin: 0 } |
2511 | +#jumprev input { font-size: 10px; margin-right: 0 } |
2512 | + |
2513 | +/* Styles for the directory entries table |
2514 | + (extends the styles for "table.listing") */ |
2515 | +#dirlist { margin-top: 0 } |
2516 | +#dirlist td.rev, #dirlist td.age, #dirlist td.change, #dirlist td.size { |
2517 | + color: #888; |
2518 | + white-space: nowrap; |
2519 | +} |
2520 | +#dirlist td.size { text-align: right; } |
2521 | +#dirlist td.name { width: 100% } |
2522 | +#dirlist td.name a, #dirlist td.name span { |
2523 | + background-position: 0% 50%; |
2524 | + background-repeat: no-repeat; |
2525 | + padding-left: 20px; |
2526 | +} |
2527 | +#dirlist td.name a.parent { background-image: url(parent.png) } |
2528 | +#dirlist td.name a.dir { background-image: url(folder.png) } |
2529 | +#dirlist td.name span.dir { background-image: url(folderdeny.png) } |
2530 | +#dirlist td.name a.file { background-image: url(file.png) } |
2531 | +#dirlist td.name span.file { background-image: url(filedeny.png) } |
2532 | +#dirlist td.name a, #dirlist td.rev a { border-bottom: none; display: block } |
2533 | +#dirlist td.change * { font-size: 9px } |
2534 | + |
2535 | +/* Styles for the property list table |
2536 | + (extends the styles for "table.listing") */ |
2537 | +#proplist td.propvalue { width: 100%; } |
2538 | + |
2539 | +/* Styles for the revision log table |
2540 | + (extends the styles for "table.listing") */ |
2541 | +#chglist { margin-top: 0 } |
2542 | +#chglist td.date, #chglist td.diff { white-space: nowrap } |
2543 | +#chglist td.rev, #chglist td.chgset { text-align: center } |
2544 | +#chglist td.rev a, #chglist td.chgset a { border-bottom: none } |
2545 | +#chglist td.summary { width: 100%; } |
2546 | + |
2547 | +/* Styles for the revision info in the file module */ |
2548 | +#info { |
2549 | + background: #f7f7f0; |
2550 | + border: 1px solid #d7d7d7; |
2551 | + border-collapse: collapse; |
2552 | + border-spacing: 0; |
2553 | + clear: both; |
2554 | + width: 100%; |
2555 | +} |
2556 | +#info th { |
2557 | + font-size: 11px; |
2558 | + font-weight: bold; |
2559 | + padding: 2px .5em; |
2560 | + white-space: nowrap; |
2561 | + vertical-align: top; |
2562 | +} |
2563 | +#info td.message { |
2564 | + font-size: 11px; |
2565 | + padding: 2px .5em; |
2566 | + vertical-align: top; |
2567 | + width: 100%; |
2568 | +} |
2569 | +#info .message ul { padding: 0; margin: 0 2em } |
2570 | +#info .message p { margin: 0; padding: 0 } |
2571 | + |
2572 | +/* Styles for the HTML preview */ |
2573 | +#preview { background: #fff; clear: both; margin: 0 } |
2574 | +#preview .code-block { border-top: 1px solid #999; margin: 0 } |
2575 | +#preview .image-file { overflow: hidden } |
2576 | +#preview .image-file img { max-width: 100% } |
2577 | |
2578 | === added file 'css/trac/changeset.css' |
2579 | --- css/trac/changeset.css 1970-01-01 00:00:00 +0000 |
2580 | +++ css/trac/changeset.css 2013-01-26 22:10:25 +0000 |
2581 | @@ -0,0 +1,20 @@ |
2582 | +@import url(diff.css); |
2583 | + |
2584 | +/* Changeset overview */ |
2585 | +#overview .files { padding-top: 1em } |
2586 | +#overview .files ul { margin: 0; padding: 0 } |
2587 | +#overview .files li { list-style-type: none } |
2588 | +#overview .files li .comment { display: none } |
2589 | +#overview .files li div { |
2590 | + border: 1px solid #999; |
2591 | + float: left; |
2592 | + margin: .2em .5em 0 0; |
2593 | + overflow: hidden; |
2594 | + width: .8em; height: .8em; |
2595 | +} |
2596 | +#overview .message { padding: 1em 0 } |
2597 | +#overview dd.message p, #overview dd.message ul, #overview dd.message ol { |
2598 | + margin-bottom: 1em; |
2599 | + margin-top: 0; |
2600 | +} |
2601 | +#overview .files { padding: 1px 0 } |
2602 | |
2603 | === added file 'css/trac/code.css' |
2604 | --- css/trac/code.css 1970-01-01 00:00:00 +0000 |
2605 | +++ css/trac/code.css 2013-01-26 22:10:25 +0000 |
2606 | @@ -0,0 +1,108 @@ |
2607 | +.code-block { |
2608 | + border: 1px dotted #d7d7d7; |
2609 | + margin: 1em 0; |
2610 | + padding: .3em; |
2611 | + overflow: auto |
2612 | +} |
2613 | +.image-file { background: #eee; padding: .3em } |
2614 | +.image-file img { } |
2615 | + |
2616 | +/* Default */ |
2617 | +.css_default, .c_default, .code_default, .pl_default, .p_default, |
2618 | +.hphp_default, .yaml_default, .code-block span { |
2619 | + font-family: monospace; |
2620 | +} |
2621 | + |
2622 | +/* Comments */ |
2623 | +.code-comment, .css_comment, .c_comment, .c_commentdoc, .c_commentline, |
2624 | +.c_commentlinedoc, .h_comment,.pl_commentline, .p_commentblock, |
2625 | +.p_commentline, .hphp_commentblock, .hphp_commentline, |
2626 | +.yaml_comment { |
2627 | + color: #998; |
2628 | + font-style: italic; |
2629 | +} |
2630 | + |
2631 | +/* Language keyword */ |
2632 | +.code-keyword, .pl_word { color: #789; font-weight: bold } |
2633 | + |
2634 | +/* Type */ |
2635 | +.code-type, .c_word, .c_word2, .p_classname, .hphp_classname{ |
2636 | + color: #468; |
2637 | + font-weight: bold; |
2638 | +} |
2639 | + |
2640 | +/* Function */ |
2641 | +.code-func, .p_defname { |
2642 | + color: #900; |
2643 | + font-weight: bold; |
2644 | + border-bottom: none; |
2645 | +} |
2646 | + |
2647 | +/* Pre-processor */ |
2648 | +.code-prep, .c_preprocessor, .pl_preprocessor, .yaml_identifier { |
2649 | + color: #999; |
2650 | + font-weight: bold; |
2651 | +} |
2652 | + |
2653 | +/* Language construct */ |
2654 | +.code-lang, .p_word { color: #000; font-weight: bold } |
2655 | + |
2656 | +/* String */ |
2657 | +.code-string, .c_string, .c_stringeol, .css_doublestring, .css_singlestring, |
2658 | +.h_singlestring, .h_doublestring, .pl_string, .pl_string_q, .pl_string_qq, |
2659 | +.pl_string_qr, .pl_string_qw, .pl_string_qx, .pl_backticks, .pl_character, |
2660 | +.p_string, .p_stringeol, .hphp_string, .hphp_stringeol, .hphp_triple, |
2661 | +.hphp_tripledouble, .p_character, .p_triple, .p_tripledouble { |
2662 | + color: #b84; |
2663 | + font-weight: normal; |
2664 | +} |
2665 | + |
2666 | +/* Variable name */ |
2667 | +.code-var { color: #f9f } |
2668 | + |
2669 | +/* SilverCity-specific styles */ |
2670 | +.css_id, .css_class, .css_pseudoclass, .css_tag { color: #900000 } |
2671 | +.css_directive { color: #009000; font-weight: bold } |
2672 | +.css_important { color: blue } |
2673 | +.css_operator { color: #000090; font-weight: bold } |
2674 | +.css_tag { font-weight: bold } |
2675 | +.css_unknown_identifier, .css_unknown_pseudoclass { color: red } |
2676 | +.css_value { color: navy } |
2677 | +.c_commentdockeyword { color: navy; font-weight: bold } |
2678 | +.c_commentdockeyworderror { color: red; font-weight: bold } |
2679 | +.c_character, .c_regex, .c_uuid, .c_verbatim { color: olive } |
2680 | +.c_number { color: #099 } |
2681 | +.h_asp { color: #ff0 } |
2682 | +.h_aspat { color: #ffdf00 } |
2683 | +.h_attribute { color: teal } |
2684 | +.h_attributeunknown { color: red } |
2685 | +.h_cdata { color: #ffdf00 } |
2686 | +.h_entity { color: purple } |
2687 | +.h_number { color: #099 } |
2688 | +.h_other { color: purple } |
2689 | +.h_script, .h_tag, .h_tagend { color: navy } |
2690 | +.h_tagunknown { color: red } |
2691 | +.h_xmlend, .h_xmlstart { color: blue } |
2692 | +.pl_datasection { color: olive } |
2693 | +.pl_error { color: red; font-weight: bold } |
2694 | +.pl_hash { color: #000 } |
2695 | +.pl_here_delim, .pl_here_q, .pl_here_qq, .pl_here_qx, .pl_longquote { color: olive } |
2696 | +.pl_number { color: #099 } |
2697 | +.pl_pod { font-style: italic } |
2698 | +.pl_regex, .pl_regsubst { color: olive } |
2699 | +.p_number { color: #099 } |
2700 | +.hphp_character { color: olive } |
2701 | +.hphp_defname { color: #099; font-weight: bold } |
2702 | +.hphp_number { color: #099 } |
2703 | +.hphp_word { color: navy; font-weight: bold } |
2704 | +.yaml_document { color: gray; font-style: italic } |
2705 | +.yaml_keyword { color: #808 } |
2706 | +.yaml_number { color: #800 } |
2707 | +.yaml_reference { color: #088 } |
2708 | +.v_comment { color: gray; font-style: italic } |
2709 | +.v_commentline, .v_commentlinebang { color: red; font-style: italic } |
2710 | +.v_number, .v_preprocessor { color: #099 } |
2711 | +.v_string, .v_stringeol { color: olive } |
2712 | +.v_user{ color: blue; font-weight: bold } |
2713 | +.v_word, .v_word3 { color: navy; font-weight: bold } |
2714 | +.v_word2 { color: green; font-weight: bold } |
2715 | |
2716 | === added file 'css/trac/diff.css' |
2717 | --- css/trac/diff.css 1970-01-01 00:00:00 +0000 |
2718 | +++ css/trac/diff.css 2013-01-26 22:10:25 +0000 |
2719 | @@ -0,0 +1,153 @@ |
2720 | +/* Diff preferences */ |
2721 | +#prefs fieldset { margin: 1em .5em .5em; padding: .5em 1em 0 } |
2722 | + |
2723 | +/* Diff/change overview */ |
2724 | +#overview { |
2725 | + line-height: 130%; |
2726 | + margin-top: 1em; |
2727 | + padding: .5em; |
2728 | +} |
2729 | +#overview dt { |
2730 | + font-weight: bold; |
2731 | + padding-right: .25em; |
2732 | + position: absolute; |
2733 | + left: 0; |
2734 | + text-align: right; |
2735 | + width: 7.75em; |
2736 | +} |
2737 | +#overview dd { margin-left: 8em } |
2738 | + |
2739 | +/* Colors for change types */ |
2740 | +#overview .mod, .diff #legend .mod { background: #fd8 } |
2741 | +#overview .rem, .diff #legend .rem { background: #f88 } |
2742 | +#overview .add, .diff #legend .add { background: #dfd } |
2743 | + |
2744 | +/* Legend for diff colors */ |
2745 | +.diff #legend { |
2746 | + float: left; |
2747 | + font-size: 9px; |
2748 | + line-height: 1em; |
2749 | + margin: 1em 0; |
2750 | + padding: .5em; |
2751 | +} |
2752 | +.diff #legend h3 { display: none; } |
2753 | +.diff #legend dt { |
2754 | + background: #fff; |
2755 | + border: 1px solid #999; |
2756 | + float: left; |
2757 | + margin: .1em .5em .1em 2em; |
2758 | + overflow: hidden; |
2759 | + width: .8em; height: .8em; |
2760 | +} |
2761 | +.diff #legend dl, .diff #legend dd { |
2762 | + display: inline; |
2763 | + float: left; |
2764 | + padding: 0; |
2765 | + margin: 0; |
2766 | + margin-right: .5em; |
2767 | +} |
2768 | + |
2769 | +/* Styles for the list of diffs */ |
2770 | +.diff ul { clear: both; margin: 0; padding: 0 } |
2771 | +.diff li { |
2772 | + background: #f7f7f7; |
2773 | + border: 1px solid #d7d7d7; |
2774 | + list-style-type: none; |
2775 | + margin: 0 0 2em; |
2776 | + padding: 2px; |
2777 | + position: relative; |
2778 | +} |
2779 | +.diff h2 { |
2780 | + color: #333; |
2781 | + font-size: 14px; |
2782 | + letter-spacing: normal; |
2783 | + margin: 0 auto; |
2784 | + padding: .1em 0 .25em; |
2785 | + text-align: center; |
2786 | +} |
2787 | + |
2788 | +/* Styles for the actual diff tables (side-by-side and inline) */ |
2789 | +.diff table { |
2790 | + border: 1px solid #ddd; |
2791 | + border-spacing: 0; |
2792 | + border-top: 0; |
2793 | + empty-cells: show; |
2794 | + font-size: 12px; |
2795 | + line-height: 130%; |
2796 | + padding: 0; |
2797 | + margin: 0 auto; |
2798 | + table-layout: fixed; |
2799 | + width: 100%; |
2800 | +} |
2801 | +.diff table col.lineno { width: 4em } |
2802 | +.diff table th { |
2803 | + border-right: 1px solid #d7d7d7; |
2804 | + border-bottom: 1px solid #998; |
2805 | + font-size: 11px; |
2806 | +} |
2807 | +.diff table thead th { |
2808 | + background: #eee; |
2809 | + border-top: 1px solid #d7d7d7; |
2810 | + color: #999; |
2811 | + padding: 0 .25em; |
2812 | + text-align: center; |
2813 | + white-space: nowrap; |
2814 | +} |
2815 | +.diff table tbody th { |
2816 | + background: #eed; |
2817 | + color: #886; |
2818 | + font-weight: normal; |
2819 | + padding: 0 .5em; |
2820 | + text-align: right; |
2821 | + vertical-align: top; |
2822 | +} |
2823 | +.diff table tbody td { |
2824 | + background: #fff; |
2825 | + font: normal 11px monospace; |
2826 | + overflow: hidden; |
2827 | + padding: 1px 2px; |
2828 | + vertical-align: top; |
2829 | +} |
2830 | +.diff table tbody.skippedlines td { |
2831 | + background: #f7f7f7; |
2832 | + border: 1px solid #d7d7d7; |
2833 | +} |
2834 | +.diff table td del, .diff table td ins { text-decoration: none } |
2835 | +.diff table td del { color: #600 } |
2836 | +.diff table td ins { color: #060 } |
2837 | + |
2838 | +/* Styles for the inline diff */ |
2839 | +.diff table.inline tbody.mod td.base, .diff table.inline tbody.rem td.base { |
2840 | + background: #fdd; |
2841 | + border-color: #c00; |
2842 | + border-style: solid; |
2843 | + border-width: 0 1px 0 1px; |
2844 | +} |
2845 | +.diff table.inline tbody.mod td.chg, .diff table.inline tbody.add td.chg { |
2846 | + background: #dfd; |
2847 | + border-color: #0a0; |
2848 | + border-style: solid; |
2849 | + border-width: 0 1px 0 1px; |
2850 | +} |
2851 | +.diff table.inline tbody.mod tr.first td.base, |
2852 | +.diff table.inline tbody.rem tr.first td.base { border-top-width: 1px } |
2853 | +.diff table.inline tbody.mod tr.last td.base, |
2854 | +.diff table.inline tbody.rem tr.last td.base { border-bottom-width: 1px } |
2855 | +.diff table.inline tbody.mod tr.first td.chg, |
2856 | +.diff table.inline tbody.add tr.first td.chg { border-top-width: 1px } |
2857 | +.diff table.inline tbody.mod tr.last td.chg, |
2858 | +.diff table.inline tbody.add tr.last td.chg { border-bottom-width: 1px } |
2859 | +.diff table.inline tbody.mod td del { background: #e99; color: #000 } |
2860 | +.diff table.inline tbody.mod td ins { background: #9e9; color: #000 } |
2861 | + |
2862 | +/* Styles for the side-by-side diff */ |
2863 | +.diff table.sidebyside colgroup.content { width: 50% } |
2864 | +.diff table.sidebyside tbody.mod td.base { background: #fe9 } |
2865 | +.diff table.sidebyside tbody.mod td.chg { background: #fd8 } |
2866 | +.diff table.sidebyside tbody.add td.base { background: #dfd } |
2867 | +.diff table.sidebyside tbody.add td.chg { background: #cfc } |
2868 | +.diff table.sidebyside tbody.rem td.base { background: #f88 } |
2869 | +.diff table.sidebyside tbody.rem td.chg { background: #faa } |
2870 | +.diff table.sidebyside tbody.mod del, .diff table.sidebyside tbody.mod ins { |
2871 | + background: #fc0; |
2872 | +} |
2873 | |
2874 | === added file 'css/trac/feed-icon-16x16.png' |
2875 | Binary files css/trac/feed-icon-16x16.png 1970-01-01 00:00:00 +0000 and css/trac/feed-icon-16x16.png 2013-01-26 22:10:25 +0000 differ |
2876 | === added file 'css/trac/file.png' |
2877 | Binary files css/trac/file.png 1970-01-01 00:00:00 +0000 and css/trac/file.png 2013-01-26 22:10:25 +0000 differ |
2878 | === added file 'css/trac/filedeny.png' |
2879 | Binary files css/trac/filedeny.png 1970-01-01 00:00:00 +0000 and css/trac/filedeny.png 2013-01-26 22:10:25 +0000 differ |
2880 | === added file 'css/trac/folder.png' |
2881 | Binary files css/trac/folder.png 1970-01-01 00:00:00 +0000 and css/trac/folder.png 2013-01-26 22:10:25 +0000 differ |
2882 | === added file 'css/trac/folderdeny.png' |
2883 | Binary files css/trac/folderdeny.png 1970-01-01 00:00:00 +0000 and css/trac/folderdeny.png 2013-01-26 22:10:25 +0000 differ |
2884 | === added file 'css/trac/parent.png' |
2885 | Binary files css/trac/parent.png 1970-01-01 00:00:00 +0000 and css/trac/parent.png 2013-01-26 22:10:25 +0000 differ |
2886 | === added file 'css/trac/svnweb.css' |
2887 | --- css/trac/svnweb.css 1970-01-01 00:00:00 +0000 |
2888 | +++ css/trac/svnweb.css 2013-01-26 22:10:25 +0000 |
2889 | @@ -0,0 +1,24 @@ |
2890 | +@import url(trac.css); |
2891 | +@import url(browser.css); |
2892 | + |
2893 | +/* _action_bar template formatting */ |
2894 | +div.actions { |
2895 | + margin-bottom: 1em; |
2896 | +} |
2897 | + |
2898 | +div.actions ul { |
2899 | + margin-left: 0; |
2900 | + padding-left: 0; |
2901 | + display: inline; |
2902 | +} |
2903 | + |
2904 | +div.actions ul li { |
2905 | + padding: 0.5em; |
2906 | + list-style: none; |
2907 | + display: inline; |
2908 | +} |
2909 | + |
2910 | +.reponame { |
2911 | + color: #888; |
2912 | + font-size: 9px; |
2913 | +} |
2914 | |
2915 | === added file 'css/trac/text-diff-html.css' |
2916 | --- css/trac/text-diff-html.css 1970-01-01 00:00:00 +0000 |
2917 | +++ css/trac/text-diff-html.css 2013-01-26 22:10:25 +0000 |
2918 | @@ -0,0 +1,32 @@ |
2919 | +.file span { |
2920 | + display: block; |
2921 | +} |
2922 | +.file .fileheader, .file .hunkheader { |
2923 | + color: #888; |
2924 | +} |
2925 | +.file .hunk { |
2926 | + font-family: monospace; |
2927 | + white-space: pre; |
2928 | +} |
2929 | +.file .hunk .ctx { |
2930 | + background: #fff; |
2931 | +} |
2932 | +.file .hunk .ins { |
2933 | + background: #dfd; |
2934 | + text-decoration: none; |
2935 | + display: block; |
2936 | +} |
2937 | +.file .hunk .del { |
2938 | + background: #fdd; |
2939 | + text-decoration: none; |
2940 | + display: block; |
2941 | +} |
2942 | +.ins { |
2943 | + border: 1px solid #0c0; |
2944 | +} |
2945 | +.del { |
2946 | + border: 1px solid #c00; |
2947 | +} |
2948 | +span.diff-leader { |
2949 | + display: none; |
2950 | +} |
2951 | |
2952 | === added file 'css/trac/trac.css' |
2953 | --- css/trac/trac.css 1970-01-01 00:00:00 +0000 |
2954 | +++ css/trac/trac.css 2013-01-26 22:10:25 +0000 |
2955 | @@ -0,0 +1,360 @@ |
2956 | +/* Trac CSS */ |
2957 | +body { |
2958 | + background: #fff; |
2959 | + color: #000; |
2960 | + margin: 10px; |
2961 | +} |
2962 | +body, th, td { |
2963 | + font: normal 13px verdana,arial,'Bitstream Vera Sans',helvetica,sans-serif; |
2964 | +} |
2965 | +h1, h2, h3, h4 { |
2966 | + font-family: arial,verdana,'Bitstream Vera Sans',helvetica,sans-serif; |
2967 | + font-weight: bold; |
2968 | + letter-spacing: -0.018em; |
2969 | +} |
2970 | +h1 { font-size: 19px; margin: .15em 1em 0 0 } |
2971 | +h2 { font-size: 16px } |
2972 | +h3 { font-size: 14px } |
2973 | +hr { border: none; border-top: 1px solid #ccb; margin: 2em 0 } |
2974 | +address { font-style: normal } |
2975 | +img { border: none } |
2976 | + |
2977 | +.underline { text-decoration: underline; } |
2978 | +ol.loweralpha { list-style-type: lower-alpha } |
2979 | +ol.upperalpha { list-style-type: upper-alpha } |
2980 | +ol.lowerroman { list-style-type: lower-roman } |
2981 | +ol.upperroman { list-style-type: upper-roman } |
2982 | +ol.arabic { list-style-type: decimal } |
2983 | + |
2984 | +/* Link styles */ |
2985 | +:link, :visited { |
2986 | + text-decoration: none; |
2987 | + color: #b00; |
2988 | + border-bottom: 1px dotted #bbb; |
2989 | +} |
2990 | +:link:hover, :visited:hover { |
2991 | + background-color: #eee; |
2992 | + color: #555; |
2993 | +} |
2994 | +h1 :link, h1 :visited ,h2 :link, h2 :visited, h3 :link, h3 :visited, |
2995 | +h4 :link, h4 :visited, h5 :link, h5 :visited, h6 :link, h6 :visited { |
2996 | + color: inherit; |
2997 | +} |
2998 | + |
2999 | +.ext-link { background: no-repeat 0 58%; padding-left: 16px } |
3000 | +* html .ext-link { background-position: 0 .35em } /* IE hack, see #937 */ |
3001 | + |
3002 | +/* Forms */ |
3003 | +input, textarea, select { margin: 2px } |
3004 | +input, select { vertical-align: middle } |
3005 | +input[type=submit], input[type=reset] { |
3006 | + background: #eee; |
3007 | + color: #222; |
3008 | + border: 1px outset #ccc; |
3009 | + padding: .1em .5em; |
3010 | +} |
3011 | +input[type=submit]:hover, input[type=reset]:hover { background: #ccb } |
3012 | +input[type=text], input.textwidget, textarea { |
3013 | + background: #fff; |
3014 | + color: #000; |
3015 | + border: 1px solid #d7d7d7; |
3016 | +} |
3017 | +input[type=text], input.textwidget { padding: .25em .5em } |
3018 | +input[type=text]:focus, textarea:focus { border: 1px solid #886 } |
3019 | +option { border-bottom: 1px dotted #d7d7d7 } |
3020 | +fieldset { border: 1px solid #d7d7d7; padding: .5em; margin: 0 } |
3021 | +fieldset.iefix { border: none; padding: 0; margin: 0 } |
3022 | +* html fieldset.iefix { width: 98% } |
3023 | +fieldset.iefix p { margin: 0 } |
3024 | +legend { color: #999; padding: 0 .25em; font-size: 90%; font-weight: bold } |
3025 | +label.disabled { color: #d7d7d7 } |
3026 | +.buttons { margin: .5em .5em .5em 0 } |
3027 | +.buttons form, .buttons form div { display: inline } |
3028 | +.buttons input { margin: 1em .5em .1em 0 } |
3029 | + |
3030 | +/* Header */ |
3031 | +#header hr { display: none } |
3032 | +#header img { border: none; margin: 0 0 -3em } |
3033 | +#header :link, #header :visited, #header :link:hover, #header :visited:hover { |
3034 | + background: transparent; |
3035 | + margin-bottom: 2px; |
3036 | + border: none; |
3037 | +} |
3038 | + |
3039 | +/* Quick search */ |
3040 | +#search { |
3041 | + clear: both; |
3042 | + font-size: 10px; |
3043 | + height: 2.2em; |
3044 | + margin: 0 0 1em; |
3045 | + text-align: right; |
3046 | +} |
3047 | +#search input { font-size: 10px } |
3048 | +#search label { display: none } |
3049 | + |
3050 | +/* Navigation */ |
3051 | +.nav h2, .nav hr { display: none } |
3052 | +.nav ul { font-size: 10px; list-style: none; margin: 0; text-align: right } |
3053 | +.nav li { |
3054 | + border-right: 1px solid #d7d7d7; |
3055 | + display: inline; |
3056 | + padding: 0 .75em; |
3057 | + white-space: nowrap; |
3058 | +} |
3059 | +.nav li.last { border-right: none } |
3060 | + |
3061 | +/* Main navigation bar */ |
3062 | +#mainnav { |
3063 | + background: #f7f7f7 0 0; |
3064 | + border: 1px solid #000; |
3065 | + font: normal 10px verdana,'Bitstream Vera Sans',helvetica,arial,sans-serif; |
3066 | + margin: .66em 0 .33em; |
3067 | + padding: .2em 0; |
3068 | +} |
3069 | +#mainnav li { border-right: none; padding: .25em 0 } |
3070 | +#mainnav :link, #mainnav :visited { |
3071 | + background: 0 0 no-repeat; |
3072 | + border-right: 1px solid #fff; |
3073 | + border-bottom: none; |
3074 | + border-left: 1px solid #555; |
3075 | + color: #000; |
3076 | + padding: .2em 20px; |
3077 | +} |
3078 | +* html #mainnav :link, * html #mainnav :visited { background-position: 1px 0 } |
3079 | +#mainnav :link:hover, #mainnav :visited:hover { |
3080 | + background-color: #ccc; |
3081 | + border-right: 1px solid #ddd; |
3082 | +} |
3083 | +#mainnav .active:link, #mainnav .active:visited { |
3084 | + background: #333 0 0 repeat-x; |
3085 | + border-top: none; |
3086 | + border-right: 1px solid #000; |
3087 | + color: #eee; |
3088 | + font-weight: bold; |
3089 | +} |
3090 | +#mainnav .active:link:hover, #mainnav .active:visited:hover { |
3091 | + border-right: 1px solid #000; |
3092 | +} |
3093 | + |
3094 | +/* Context-dependent navigation links */ |
3095 | +#ctxtnav { height: 1em } |
3096 | +#ctxtnav li ul { |
3097 | + background: #f7f7f7; |
3098 | + color: #ccc; |
3099 | + border: 1px solid; |
3100 | + padding: 0; |
3101 | + display: inline; |
3102 | + margin: 0; |
3103 | +} |
3104 | +#ctxtnav li li { padding: 0; } |
3105 | +#ctxtnav li li :link, #ctxtnav li li :visited { padding: 0 1em } |
3106 | +#ctxtnav li li :link:hover, #ctxtnav li li :visited:hover { |
3107 | + background: #bba; |
3108 | + color: #fff; |
3109 | +} |
3110 | + |
3111 | +/* Alternate links */ |
3112 | +#altlinks { clear: both; text-align: center } |
3113 | +#altlinks h3 { font-size: 12px; letter-spacing: normal; margin: 0 } |
3114 | +#altlinks ul { list-style: none; margin: 0; padding: 0 0 1em } |
3115 | +#altlinks li { |
3116 | + border-right: 1px solid #d7d7d7; |
3117 | + display: inline; |
3118 | + font-size: 11px; |
3119 | + line-height: 16px; |
3120 | + padding: 0 1em; |
3121 | + white-space: nowrap; |
3122 | +} |
3123 | +#altlinks li.last { border-right: none } |
3124 | +#altlinks li :link, #altlinks li :visited { |
3125 | + background-position: 0 -1px; |
3126 | + background-repeat: no-repeat; |
3127 | + border: none; |
3128 | +} |
3129 | +#altlinks li a.ics { padding-left: 22px } |
3130 | +#altlinks li a.rss { padding-left: 42px } |
3131 | + |
3132 | +/* Footer */ |
3133 | +#footer { |
3134 | + clear: both; |
3135 | + color: #bbb; |
3136 | + font-size: 10px; |
3137 | + border-top: 1px solid; |
3138 | + height: 31px; |
3139 | + padding: .25em 0; |
3140 | +} |
3141 | +#footer :link, #footer :visited { color: #bbb; } |
3142 | +#footer hr { display: none } |
3143 | +#footer #tracpowered { border: 0; float: left } |
3144 | +#footer #tracpowered:hover { background: transparent } |
3145 | +#footer p { margin: 0 } |
3146 | +#footer p.left { |
3147 | + float: left; |
3148 | + margin-left: 1em; |
3149 | + padding: 0 1em; |
3150 | + border-left: 1px solid #d7d7d7; |
3151 | + border-right: 1px solid #d7d7d7; |
3152 | +} |
3153 | +#footer p.right { |
3154 | + float: right; |
3155 | + text-align: right; |
3156 | +} |
3157 | + |
3158 | +#content { padding-bottom: 2em; position: relative } |
3159 | + |
3160 | +#help { |
3161 | + clear: both; |
3162 | + color: #999; |
3163 | + font-size: 90%; |
3164 | + margin: 1em; |
3165 | + text-align: right; |
3166 | +} |
3167 | +#help :link, #help :visited { cursor: help } |
3168 | +#help hr { display: none } |
3169 | + |
3170 | +/* Page preferences form */ |
3171 | +#prefs { |
3172 | + background: #f7f7f0; |
3173 | + border: 1px outset #998; |
3174 | + float: right; |
3175 | + font-size: 9px; |
3176 | + padding: .8em; |
3177 | + position: relative; |
3178 | + margin: 0 1em 1em; |
3179 | +} |
3180 | +* html #prefs { width: 26em } /* Set width only for IE */ |
3181 | +#prefs input, #prefs select { font-size: 9px; vertical-align: middle } |
3182 | +#prefs fieldset { border: none; margin: .5em; padding: 0 } |
3183 | +#prefs fieldset legend { |
3184 | + background: transparent; |
3185 | + color: #000; |
3186 | + font-size: 9px; |
3187 | + font-weight: normal; |
3188 | + margin: 0 0 0 -1.5em; |
3189 | + padding: 0; |
3190 | +} |
3191 | +#prefs .buttons { text-align: right } |
3192 | + |
3193 | +/* Wiki */ |
3194 | +a.missing:link,a.missing:visited { background: #fafaf0; color: #998 } |
3195 | +a.missing:hover { color: #000; } |
3196 | + |
3197 | +#content.wiki { line-height: 140% } |
3198 | +.wikitoolbar { |
3199 | + border: solid #d7d7d7; |
3200 | + border-width: 1px 1px 1px 0; |
3201 | + float: left; |
3202 | + height: 18px; |
3203 | +} |
3204 | +.wikitoolbar :link, .wikitoolbar :visited { |
3205 | + background: transparent no-repeat; |
3206 | + border: 1px solid #fff; |
3207 | + border-left-color: #d7d7d7; |
3208 | + cursor: default; |
3209 | + display: block; |
3210 | + float: left; |
3211 | + width: 24px; |
3212 | + height: 16px; |
3213 | +} |
3214 | +.wikitoolbar :link:hover, .wikitoolbar :visited:hover { |
3215 | + background-color: transparent; |
3216 | + border: 1px solid #fb2; |
3217 | +} |
3218 | +.wikitoolbar a#em { background-position: 0 0 } |
3219 | +.wikitoolbar a#strong { background-position: 0 -16px } |
3220 | +.wikitoolbar a#heading { background-position: 0 -32px } |
3221 | +.wikitoolbar a#link { background-position: 0 -48px } |
3222 | +.wikitoolbar a#code { background-position: 0 -64px } |
3223 | +.wikitoolbar a#hr { background-position: 0 -80px } |
3224 | + |
3225 | +/* Styles for the form for adding attachments. */ |
3226 | +#attachment .field { margin-top: 1.3em } |
3227 | +#attachment label { padding-left: .2em } |
3228 | +#attachment fieldset { margin-top: 2em } |
3229 | +#attachment fieldset .field { float: left; margin: 0 1em .5em 0 } |
3230 | +#attachment br { clear: left } |
3231 | + |
3232 | +/* Styles for tabular listings such as those used for displaying directory |
3233 | + contents and report results. */ |
3234 | +table.listing { |
3235 | + clear: both; |
3236 | + border-bottom: 1px solid #d7d7d7; |
3237 | + border-collapse: collapse; |
3238 | + border-spacing: 0; |
3239 | + margin-top: 1em; |
3240 | + width: 100%; |
3241 | +} |
3242 | +table.listing th { text-align: left; padding: 0 1em .1em 0; font-size: 12px } |
3243 | +table.listing thead { background: #f7f7f0 } |
3244 | +table.listing thead th { |
3245 | + border: 1px solid #d7d7d7; |
3246 | + border-bottom-color: #999; |
3247 | + font-size: 11px; |
3248 | + font-weight: bold; |
3249 | + padding: 2px .5em; |
3250 | + vertical-align: bottom; |
3251 | +} |
3252 | +table.listing thead th :link:hover, table.listing thead th :visited:hover { |
3253 | + background-color: transparent; |
3254 | +} |
3255 | +table.listing thead th a { border: none; padding-right: 12px } |
3256 | +table.listing th.asc a, table.listing th.desc a { font-weight: bold } |
3257 | +table.listing th.asc a, table.listing th.desc a { |
3258 | + background-position: 100% 50%; |
3259 | + background-repeat: no-repeat; |
3260 | +} |
3261 | +table.listing th.asc a { } |
3262 | +table.listing th.desc a { } |
3263 | +table.listing tbody td, table.listing tbody th { |
3264 | + border: 1px dotted #ddd; |
3265 | + padding: .33em .5em; |
3266 | + vertical-align: top; |
3267 | +} |
3268 | +table.listing tbody td a:hover, table.listing tbody th a:hover { |
3269 | + background-color: transparent; |
3270 | +} |
3271 | +table.listing tbody tr { border-top: 1px solid #ddd } |
3272 | +table.listing tbody tr.even { background-color: #fcfcfc } |
3273 | +table.listing tbody tr.odd { background-color: #f7f7f7 } |
3274 | +table.listing tbody tr:hover { background: #eed !important } |
3275 | + |
3276 | +.wikipage p { margin-left: 1em } |
3277 | +pre.wiki, pre.literal-block { |
3278 | + background: #f7f7f7; |
3279 | + border: 1px solid #d7d7d7; |
3280 | + margin: 1em 1.75em; |
3281 | + padding: .25em; |
3282 | + overflow: auto; |
3283 | +} |
3284 | +table.wiki { |
3285 | + border: 2px solid #ccc; |
3286 | + border-collapse: collapse; |
3287 | + border-spacing: 0; |
3288 | +} |
3289 | +table.wiki td { border: 1px solid #ccc; padding: .1em .25em; } |
3290 | + |
3291 | +/* Styles for the error page (and rst errors) */ |
3292 | +#content.error .message, div.system-message { |
3293 | + background: #fdc; |
3294 | + border: 2px solid #d00; |
3295 | + color: #500; |
3296 | + padding: .5em; |
3297 | + margin: 1em 0; |
3298 | +} |
3299 | +#content.error pre, div.system-message pre { margin-left: 1em; overflow: auto } |
3300 | +div.system-message p { margin: 0; } |
3301 | +div.system-message p.system-message-title { font-weight: bold; } |
3302 | + |
3303 | +/* Styles for search word highlighting */ |
3304 | +@media screen { |
3305 | + .searchword0 { background: #ff9 } |
3306 | + .searchword1 { background: #cfc } |
3307 | + .searchword2 { background: #cff } |
3308 | + .searchword3 { background: #ccf } |
3309 | + .searchword4 { background: #fcf } |
3310 | +} |
3311 | + |
3312 | +@media print { |
3313 | + #header, #altlinks, #footer { display: none } |
3314 | + .nav, form, .buttons form { display: none } |
3315 | +} |
3316 | |
3317 | === modified file 'debian/changelog' |
3318 | --- debian/changelog 2012-06-11 23:29:21 +0000 |
3319 | +++ debian/changelog 2013-01-26 22:10:25 +0000 |
3320 | @@ -1,3 +1,18 @@ |
3321 | +libsvn-web-perl (0.63-1ubuntu1) raring; urgency=low |
3322 | + |
3323 | + * debian/rules: Resolve FTBFS, explictly run tests with UTF-8 encoding. |
3324 | + |
3325 | + -- Allison Randal <allison@ubuntu.com> Sat, 26 Jan 2013 13:53:36 -0800 |
3326 | + |
3327 | +libsvn-web-perl (0.63-1) unstable; urgency=low |
3328 | + |
3329 | + * New Upstream version |
3330 | + * Updated dependencies |
3331 | + * Switched to Debhelper 8 |
3332 | + * Set locale for running tests |
3333 | + |
3334 | + -- Hilko Bengen <bengen@debian.org> Mon, 22 Oct 2012 21:08:14 +0200 |
3335 | + |
3336 | libsvn-web-perl (0.53-4) unstable; urgency=low |
3337 | |
3338 | * Adopted package after mail exchange with David Moreno. |
3339 | |
3340 | === modified file 'debian/compat' |
3341 | --- debian/compat 2007-11-30 14:01:12 +0000 |
3342 | +++ debian/compat 2013-01-26 22:10:25 +0000 |
3343 | @@ -1,1 +1,1 @@ |
3344 | -5 |
3345 | +8 |
3346 | |
3347 | === modified file 'debian/control' |
3348 | --- debian/control 2012-06-11 23:29:21 +0000 |
3349 | +++ debian/control 2013-01-26 22:10:25 +0000 |
3350 | @@ -1,16 +1,19 @@ |
3351 | Source: libsvn-web-perl |
3352 | Section: perl |
3353 | Priority: optional |
3354 | -Build-Depends: debhelper (>= 5.0.0), |
3355 | +Build-Depends: debhelper (>= 8.1.3~), |
3356 | libexception-class-perl, |
3357 | liblocale-maketext-lexicon-perl, |
3358 | libmodule-build-perl, |
3359 | + libplack-perl, |
3360 | libsvn-perl, |
3361 | libtemplate-perl, |
3362 | + libtemplate-plugin-number-format-perl, |
3363 | libtest-www-mechanize-perl, |
3364 | subversion, |
3365 | Build-Depends-Indep: perl |
3366 | -Maintainer: Hilko Bengen <bengen@debian.org> |
3367 | +Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> |
3368 | +XSBC-Original-Maintainer: Hilko Bengen <bengen@debian.org> |
3369 | Standards-Version: 3.9.3 |
3370 | Homepage: http://search.cpan.org/dist/SVN-Web/ |
3371 | |
3372 | @@ -21,6 +24,7 @@ |
3373 | libhtml-parser-perl, |
3374 | libhttp-server-simple-perl, |
3375 | liblocale-maketext-lexicon-perl, |
3376 | + libplack-perl, |
3377 | libsvn-perl, |
3378 | libtemplate-perl, |
3379 | libtemplate-plugin-number-format-perl, |
3380 | |
3381 | === added file 'debian/docs' |
3382 | --- debian/docs 1970-01-01 00:00:00 +0000 |
3383 | +++ debian/docs 2013-01-26 22:10:25 +0000 |
3384 | @@ -0,0 +1,2 @@ |
3385 | +README |
3386 | +TODO |
3387 | |
3388 | === modified file 'debian/rules' |
3389 | --- debian/rules 2012-06-11 23:29:21 +0000 |
3390 | +++ debian/rules 2013-01-26 22:10:25 +0000 |
3391 | @@ -1,79 +1,7 @@ |
3392 | #!/usr/bin/make -f |
3393 | -# This debian/rules file is provided as a template for normal perl |
3394 | -# packages. It was created by Marc Brockschmidt <marc@dch-faq.de> for |
3395 | -# the Debian Perl Group (http://pkg-perl.alioth.debian.org/) but may |
3396 | -# be used freely wherever it is useful. |
3397 | -# |
3398 | -# It was later modified by Jason Kohles <email@jasonkohles.com> |
3399 | -# http://www.jasonkohles.com/ to support Module::Build installed modules |
3400 | - |
3401 | -# Uncomment this to turn on verbose mode. |
3402 | -export DH_VERBOSE=1 |
3403 | - |
3404 | -# If set to a true value then MakeMaker's prompt function will |
3405 | -# always return the default without waiting for user input. |
3406 | -export PERL_MM_USE_DEFAULT=1 |
3407 | - |
3408 | -PACKAGE=$(shell dh_listpackages) |
3409 | - |
3410 | -ifndef PERL |
3411 | -PERL = /usr/bin/perl |
3412 | -endif |
3413 | - |
3414 | -TMP =$(CURDIR)/debian/$(PACKAGE) |
3415 | - |
3416 | -build: build-arch build-indep |
3417 | -build-arch: build-stamp |
3418 | -build-indep: build-stamp |
3419 | -build-stamp: |
3420 | - dh_testdir |
3421 | - |
3422 | - # Add commands to compile the package here |
3423 | - $(PERL) Build.PL installdirs=vendor |
3424 | - $(PERL) Build |
3425 | -# $(PERL) Build test |
3426 | - |
3427 | - touch build-stamp |
3428 | - |
3429 | -clean: |
3430 | - dh_testdir |
3431 | - dh_testroot |
3432 | - |
3433 | - dh_clean build-stamp install-stamp |
3434 | - |
3435 | - # Add commands to clean up after the build process here |
3436 | - [ ! -f Build ] || $(PERL) Build distclean |
3437 | - |
3438 | -install: build install-stamp |
3439 | -install-stamp: |
3440 | - dh_testdir |
3441 | - dh_testroot |
3442 | - dh_clean -k |
3443 | - |
3444 | - # Add commands to install the package into debian/$PACKAGE_NAME here |
3445 | - $(PERL) Build install destdir=$(TMP) create_packlist=0 |
3446 | - |
3447 | - touch install-stamp |
3448 | - |
3449 | -binary-arch: |
3450 | -# We have nothing to do here for an architecture-independent package |
3451 | - |
3452 | -binary-indep: build install |
3453 | - dh_testdir |
3454 | - dh_testroot |
3455 | - dh_installdocs README TODO |
3456 | - dh_installexamples |
3457 | - dh_installchangelogs |
3458 | - dh_perl |
3459 | - dh_compress |
3460 | - dh_fixperms |
3461 | - dh_installdeb |
3462 | - dh_gencontrol |
3463 | - dh_md5sums |
3464 | - dh_builddeb |
3465 | - |
3466 | -source diff: |
3467 | - @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false |
3468 | - |
3469 | -binary: binary-indep binary-arch |
3470 | -.PHONY: build clean binary-indep binary-arch binary |
3471 | + |
3472 | +%: |
3473 | + dh $@ |
3474 | + |
3475 | +override_dh_auto_test: |
3476 | + dh_auto_test -- LC_ALL=C.UTF-8 |
3477 | |
3478 | === added file 'dist.ini' |
3479 | --- dist.ini 1970-01-01 00:00:00 +0000 |
3480 | +++ dist.ini 2013-01-26 22:10:25 +0000 |
3481 | @@ -0,0 +1,77 @@ |
3482 | +name = SVN-Web |
3483 | +version = 0.63 |
3484 | +author = Dean Hamstead <dean@fragfest.com.au> |
3485 | +license = Perl_5 |
3486 | +copyright_holder = Dean Hamstad |
3487 | +copyright_year = 2012 |
3488 | + |
3489 | +[GatherDir] |
3490 | +[MetaYAML] |
3491 | +[MetaJSON] |
3492 | +[MetaTests] |
3493 | +[Manifest] |
3494 | +[ManifestSkip] |
3495 | +[PruneCruft] |
3496 | +[License] |
3497 | +[MakeMaker] |
3498 | +[ExtraTests] |
3499 | +[CPANFile] |
3500 | +[Test::Perl::Critic] |
3501 | +critic_config = t/perlcriticrc |
3502 | +[PodCoverageTests] |
3503 | +[PodSyntaxTests] |
3504 | +[TestRelease] |
3505 | +[ConfirmRelease] |
3506 | +[UploadToCPAN] |
3507 | +[ExecDir] |
3508 | + |
3509 | +[Twitter] |
3510 | +hash_tags = #perl #cpan |
3511 | + |
3512 | +[Prereqs] |
3513 | +Alien::SVN = 0 |
3514 | +Carp = 0 |
3515 | +Encode = 0 |
3516 | +Exception::Class = 1.22 |
3517 | +File::Basename = 0 |
3518 | +File::Path = 0 |
3519 | +File::Spec = 0 |
3520 | +File::Temp = 0 |
3521 | +FindBin = 0 |
3522 | +IO::File = 0 |
3523 | +List::Util = 0 |
3524 | +Locale::Maketext = 0 |
3525 | +Locale::Maketext::Lexicon = 0 |
3526 | +POSIX = 0 |
3527 | +Plack = 0 |
3528 | +Number::Format = 0 |
3529 | +Template = 0 |
3530 | +Template::Plugin::Number::Format = 0 |
3531 | +Time::Zone = 0 |
3532 | +URI::Escape = 0 |
3533 | +YAML = 0 |
3534 | +base = 0 |
3535 | +perl = 5.00404 |
3536 | +strict = 0 |
3537 | +vars = 0 |
3538 | +warnings = 0 |
3539 | + |
3540 | + |
3541 | +[Prereqs / BuildRequires] |
3542 | +File::Copy = 0 |
3543 | +File::Find = 0 |
3544 | + |
3545 | +[Prereqs / RuntimeRecommends ] |
3546 | +Cache::Cache = 0 |
3547 | +Template::Plugin::Subst = 0 |
3548 | +Template::Plugin::Clickable = 0 |
3549 | +Template::Plugin::Clickable::Email = 0 |
3550 | +Test::Benchmark = 0 |
3551 | +Test::HTML::Tidy = 0 |
3552 | +XML::RSS::Parser = 0 |
3553 | + |
3554 | +[Prereqs / TestRequires] |
3555 | +Cwd = 0 |
3556 | +Test::More = 0 |
3557 | +Test::WWW::Mechanize = 0 |
3558 | +File::Path = 0 |
3559 | |
3560 | === modified file 'lib/SVN/Web.pm' |
3561 | --- lib/SVN/Web.pm 2007-11-30 14:01:12 +0000 |
3562 | +++ lib/SVN/Web.pm 2013-01-26 22:10:25 +0000 |
3563 | @@ -1,15 +1,17 @@ |
3564 | +#!/bin/false |
3565 | package SVN::Web; |
3566 | |
3567 | use strict; |
3568 | use warnings; |
3569 | |
3570 | +use Encode (); |
3571 | use URI::Escape; |
3572 | use SVN::Client; |
3573 | use SVN::Ra; |
3574 | use YAML (); |
3575 | use Template; |
3576 | use File::Spec; |
3577 | -use POSIX (); |
3578 | +use Plack::Request; |
3579 | |
3580 | use SVN::Web::X; |
3581 | use FindBin; |
3582 | @@ -21,14 +23,10 @@ |
3583 | # any error messages generated *before* it's overridden are generated |
3584 | # properly. |
3585 | SVN::Web::I18N::add_directory( |
3586 | - File::Spec->catdir(substr(__FILE__, 0, -3), 'I18N') |
3587 | -); |
3588 | + File::Spec->catdir( substr( __FILE__, 0, -3 ), 'I18N' ) ); |
3589 | SVN::Web::I18N::loc_lang('en'); |
3590 | |
3591 | -use constant mod_perl_2 => |
3592 | - (exists $ENV{MOD_PERL_API_VERSION} and $ENV{MOD_PERL_API_VERSION} >= 2); |
3593 | - |
3594 | -our $VERSION = 0.53; |
3595 | +our $VERSION = 0.63; |
3596 | |
3597 | my $template; |
3598 | my $config; |
3599 | @@ -43,45 +41,48 @@ |
3600 | } |
3601 | |
3602 | sub canonicalise_config { |
3603 | + |
3604 | # Catch missing / incorrect 'version' entries |
3605 | die "Config file does not define a 'version' key." |
3606 | - unless exists $config->{version} and defined $config->{version}; |
3607 | + unless exists $config->{version} and defined $config->{version}; |
3608 | |
3609 | - die "Configuration file version ($config->{version}) does not match SVN::Web version ($VERSION)" |
3610 | - if $config->{version} != $VERSION; |
3611 | + die |
3612 | +"Configuration file version ($config->{version}) does not match SVN::Web version ($VERSION)" |
3613 | + if $config->{version} != $VERSION; |
3614 | |
3615 | # Deal with possibly conflicting 'templatedir' and 'templatedirs' settings. |
3616 | |
3617 | # If neither of them are set, use 'templatedirs' |
3618 | - if(!exists $config->{templatedir} and !exists $config->{templatedirs}) { |
3619 | - $config->{templatedirs} = [File::Spec->catdir(qw(template trac))]; |
3620 | + if ( !exists $config->{templatedir} and !exists $config->{templatedirs} ) { |
3621 | + $config->{templatedirs} = [ File::Spec->catdir(qw(template trac)) ]; |
3622 | } |
3623 | |
3624 | # If 'templatedir' is the only one set, use it. |
3625 | - if(exists $config->{templatedir} and !exists $config->{templatedirs}) { |
3626 | - $config->{templatedirs} = [$config->{templatedir}]; |
3627 | + if ( exists $config->{templatedir} and !exists $config->{templatedirs} ) { |
3628 | + $config->{templatedirs} = [ $config->{templatedir} ]; |
3629 | delete $config->{templatedir}; |
3630 | } |
3631 | |
3632 | # If they're both set then throw an error |
3633 | - if(exists $config->{templatedir} and exists $config->{templatedirs}) { |
3634 | + if ( exists $config->{templatedir} and exists $config->{templatedirs} ) { |
3635 | die "templatedir and templatedirs both defined in config.yaml"; |
3636 | } |
3637 | |
3638 | # Handle tt_compile_dir. If it doesn't exist then set it to undef. |
3639 | # If it does exist, and is defined, append a '.' and the current |
3640 | # real UID, to help ensure uniqueness. |
3641 | - if(!exists $config->{tt_compile_dir}) { |
3642 | + unless ( exists $config->{tt_compile_dir} ) { |
3643 | $config->{tt_compile_dir} = undef; # undef == no compiling |
3644 | - } else { |
3645 | - if(defined $config->{tt_compile_dir}) { |
3646 | + } |
3647 | + else { |
3648 | + if ( defined $config->{tt_compile_dir} ) { |
3649 | $config->{tt_compile_dir} .= '.' . $<; |
3650 | } |
3651 | } |
3652 | |
3653 | # Handle timedate_format |
3654 | - if(! exists $config->{timedate_format}) { |
3655 | - $config->{timedate_format} = '%Y/%m/%d %H:%M:%S'; |
3656 | + unless ( exists $config->{timedate_format} ) { |
3657 | + $config->{timedate_format} = '%Y/%m/%d %H:%M:%S'; |
3658 | } |
3659 | |
3660 | # Set the timezone, if not already specified. |
3661 | @@ -90,15 +91,15 @@ |
3662 | # If cache/opts/directory_umask is configured, and it has a leading |
3663 | # 0 then ensure it's treated as an octal number. |
3664 | $config->{cache}{opts}{directory_umask} = |
3665 | - oct($config->{cache}{opts}{directory_umask}) |
3666 | - if exists $config->{cache}{opts}{directory_umask} |
3667 | - and $config->{cache}{opts}{directory_umask} =~ /^0/;; |
3668 | + oct( $config->{cache}{opts}{directory_umask} ) |
3669 | + if exists $config->{cache}{opts}{directory_umask} |
3670 | + and $config->{cache}{opts}{directory_umask} =~ m/^0/; |
3671 | |
3672 | # Add any additional language directories |
3673 | - if(defined $config->{language_dirs}) { |
3674 | - foreach my $dir (@{ $config->{language_dirs} }) { |
3675 | - SVN::Web::I18N::add_directory($dir); |
3676 | - } |
3677 | + if ( defined $config->{language_dirs} ) { |
3678 | + for my $dir ( @{ $config->{language_dirs} } ) { |
3679 | + SVN::Web::I18N::add_directory($dir); |
3680 | + } |
3681 | } |
3682 | |
3683 | return; |
3684 | @@ -117,7 +118,7 @@ |
3685 | my $repospool = SVN::Pool->new(); |
3686 | |
3687 | sub get_repos { |
3688 | - my($repos) = @_; |
3689 | + my $repos = shift; |
3690 | |
3691 | SVN::Web::X->throw( |
3692 | error => '(unconfigured repository)', |
3693 | @@ -125,37 +126,46 @@ |
3694 | ) unless exists $config->{repos}{$repos} || $config->{reposparent}; |
3695 | |
3696 | my $repo_uri = |
3697 | - $config->{reposparent} |
3698 | - ? File::Spec->catdir($config->{reposparent}, $repos) |
3699 | - : $config->{repos}{$repos}; |
3700 | + $config->{reposparent} |
3701 | + ? File::Spec->catdir( $config->{reposparent}, $repos ) |
3702 | + : $config->{repos}{$repos}; |
3703 | |
3704 | SVN::Web::X->throw( |
3705 | error => '(no such repo %1 %2)', |
3706 | - vars => [$repos, $repo_uri] |
3707 | - ) unless defined $repos and (exists $config->{repos}{$repos} or -e $repo_uri); |
3708 | + vars => [ $repos, $repo_uri ] |
3709 | + ) |
3710 | + unless defined $repos |
3711 | + and ( exists $config->{repos}{$repos} or -e $repo_uri ); |
3712 | |
3713 | - $repo_uri =~ s{/$}{}g; # Trim trailing '/', SVN::Repos::open fails |
3714 | - # otherwise |
3715 | + $repo_uri =~ s{/$}{}g; # Trim trailing '/', SVN::Repos::open fails |
3716 | + # otherwise |
3717 | |
3718 | # If there's a leading '/' then tack 'file://' on to the start |
3719 | $repo_uri = "file://$repo_uri" if $repo_uri =~ m{^/}; |
3720 | |
3721 | + # warn "REPO_URI: $repo_uri"; |
3722 | + |
3723 | eval { |
3724 | - $REPOS{$repos}{uri} ||= $repo_uri; |
3725 | - $REPOS{$repos}{ra} ||= SVN::Ra->new(url => $repo_uri, |
3726 | - pool => $repospool); |
3727 | + my $client = SVN::Client->new( pool => $repospool ); |
3728 | + my $auth = $client->auth; |
3729 | + $REPOS{$repos}{uri} ||= $repo_uri; |
3730 | + $REPOS{$repos}{ra} ||= SVN::Ra->new( |
3731 | + url => $repo_uri, |
3732 | + pool => $repospool, |
3733 | + auth => $auth, |
3734 | + ); |
3735 | }; |
3736 | |
3737 | - if($@) { |
3738 | + if ($@) { |
3739 | my $e = $@; |
3740 | SVN::Web::X->throw( |
3741 | error => '(SVN::Client->new() failed: %1 %2)', |
3742 | - vars => [$repo_uri, $e] |
3743 | + vars => [ $repo_uri, $e ] |
3744 | ); |
3745 | } |
3746 | |
3747 | - if($config->{block}) { |
3748 | - foreach my $blocked (@{ $config->{block} }) { |
3749 | + if ( $config->{block} ) { |
3750 | + for my $blocked ( @{ $config->{block} } ) { |
3751 | delete $REPOS{$blocked}; |
3752 | } |
3753 | } |
3754 | @@ -165,25 +175,25 @@ |
3755 | my $cfg = shift; |
3756 | my $action_pkg; |
3757 | |
3758 | - if(exists $config->{actions}{ $cfg->{action} }) { |
3759 | - if(ref($config->{actions}{ $cfg->{action} }) eq 'HASH') { |
3760 | - if(exists $config->{actions}{ $cfg->{action} }{class}) { |
3761 | + if ( exists $config->{actions}{ $cfg->{action} } ) { |
3762 | + if ( ref( $config->{actions}{ $cfg->{action} } ) eq 'HASH' ) { |
3763 | + if ( exists $config->{actions}{ $cfg->{action} }{class} ) { |
3764 | $action_pkg = $config->{actions}{ $cfg->{action} }{class}; |
3765 | } |
3766 | } |
3767 | } |
3768 | |
3769 | - unless($action_pkg) { |
3770 | + unless ($action_pkg) { |
3771 | $action_pkg = $cfg->{action}; |
3772 | $action_pkg =~ s{^(\w)}{\U$1}; |
3773 | $action_pkg = __PACKAGE__ . "::$action_pkg"; |
3774 | } |
3775 | |
3776 | eval "require $action_pkg && $action_pkg->can('run')" |
3777 | - or SVN::Web::X->throw( |
3778 | + or SVN::Web::X->throw( |
3779 | error => '(missing package %1 for action %2: %3)', |
3780 | - vars => [$action_pkg, $cfg->{action}, $@] |
3781 | - ); |
3782 | + vars => [ $action_pkg, $cfg->{action}, $@ ] |
3783 | + ); |
3784 | |
3785 | my $repos = $cfg->{repos} ? $REPOS{ $cfg->{repos} } : undef; |
3786 | |
3787 | @@ -202,130 +212,114 @@ |
3788 | my $html; |
3789 | my $cache; |
3790 | |
3791 | - if(defined $config->{cache}{class}) { |
3792 | - eval "require $config->{cache}{class}" |
3793 | - or SVN::Web::X->throw(error => '(require %1 failed: %2)', |
3794 | - vars => [$config->{cache}{class}, $@] |
3795 | - ); |
3796 | - |
3797 | - $config->{cache}{opts} = {} unless exists $config->{cache}{opts}; |
3798 | - $config->{cache}{opts}{namespace} = $cfg->{repos}; |
3799 | - $cache = $config->{cache}{class}->new($config->{cache}{opts}); |
3800 | - } |
3801 | - |
3802 | - if(defined $cfg->{repos} && length $cfg->{repos}) { |
3803 | - get_repos($cfg->{repos}); |
3804 | - } |
3805 | - |
3806 | - if($cfg->{repos} && $REPOS{ $cfg->{repos} }) { |
3807 | - @{ $cfg->{navpaths} } = File::Spec::Unix->splitdir($cfg->{path}); |
3808 | + if ( defined $config->{cache}{class} ) { |
3809 | + eval "require $config->{cache}{class}" |
3810 | + or SVN::Web::X->throw( |
3811 | + error => '(require %1 failed: %2)', |
3812 | + vars => [ $config->{cache}{class}, $@ ] |
3813 | + ); |
3814 | + |
3815 | + $config->{cache}{opts} = {} unless exists $config->{cache}{opts}; |
3816 | + $config->{cache}{opts}{namespace} = $cfg->{repos}; |
3817 | + $cache = $config->{cache}{class}->new( $config->{cache}{opts} ); |
3818 | + } |
3819 | + |
3820 | + if ( defined $cfg->{repos} && length $cfg->{repos} ) { |
3821 | + get_repos( $cfg->{repos} ); |
3822 | + } |
3823 | + |
3824 | + if ( $cfg->{repos} && $REPOS{ $cfg->{repos} } ) { |
3825 | + @{ $cfg->{navpaths} } = File::Spec::Unix->splitdir( $cfg->{path} ); |
3826 | shift @{ $cfg->{navpaths} }; |
3827 | |
3828 | # should use attribute or things alike |
3829 | - $action = get_action({ |
3830 | - %$cfg, |
3831 | - opts => exists $config->{actions}{ $cfg->{action} }{opts} |
3832 | + $action = get_action( |
3833 | + { |
3834 | + %$cfg, |
3835 | + opts => exists $config->{actions}{ $cfg->{action} }{opts} |
3836 | ? $config->{actions}{ $cfg->{action} }{opts} |
3837 | - : {}, |
3838 | - }); |
3839 | - } else { |
3840 | + : {}, |
3841 | + } |
3842 | + ); |
3843 | + } |
3844 | + else { |
3845 | $cfg->{action} = 'list'; |
3846 | - $action = get_action({ |
3847 | - %$cfg, |
3848 | - opts => exists $config->{actions}{ $cfg->{action} }{opts} |
3849 | + $action = get_action( |
3850 | + { |
3851 | + %$cfg, |
3852 | + opts => exists $config->{actions}{ $cfg->{action} }{opts} |
3853 | ? $config->{actions}{ $cfg->{action} }{opts} |
3854 | - : {}, |
3855 | - }); |
3856 | + : {}, |
3857 | + } |
3858 | + ); |
3859 | } |
3860 | |
3861 | # Determine the language to use |
3862 | - my $lang = get_language($cfg->{cgi}, $config->{languages}, |
3863 | - $config->{default_language}); |
3864 | - |
3865 | - $cfg->{lang} = $lang; # Note the preference, stored in a cookie |
3866 | - # later |
3867 | - |
3868 | - SVN::Web::I18N::loc_lang($lang); # Set the localisation language |
3869 | + my $lang = |
3870 | + get_language( $cfg->{cgi}, $config->{languages}, |
3871 | + $config->{default_language} ); |
3872 | + |
3873 | + $cfg->{lang} = $lang; # Note the preference, stored in a cookie |
3874 | + # later |
3875 | + |
3876 | + SVN::Web::I18N::loc_lang($lang); # Set the localisation language |
3877 | |
3878 | # Generate output, from the cache if necessary. |
3879 | |
3880 | # Does the action support caching? If so, get the cache key |
3881 | my $cache_key; |
3882 | - if(defined $cache and $action->can('cache_key')) { |
3883 | - $cache_key = join(':', $cfg->{action}, $lang) . ':' . $action->cache_key(); |
3884 | + if ( defined $cache and $action->can('cache_key') ) { |
3885 | + $cache_key = |
3886 | + join( ':', $cfg->{action}, $lang ) . ':' . $action->cache_key(); |
3887 | } |
3888 | |
3889 | # If there's a key, retrieve the data from the cache |
3890 | $html = $cache->get($cache_key) if defined $cache_key; |
3891 | |
3892 | # No data? Get the action to generate it, then cache it |
3893 | - if(! defined $html) { |
3894 | - # Create a default pool for the action's allocation |
3895 | - my $pool = SVN::Pool->new_default(); |
3896 | - |
3897 | - $REPOS{$cfg->{repos}}{client} = SVN::Client->new(config => {}); |
3898 | - |
3899 | - $html = $action->run(); |
3900 | - |
3901 | - $pool->clear(); |
3902 | - |
3903 | - if(defined $cache_key) { |
3904 | - $cache->set($cache_key, $html, $cfg->{cache}{expires_in}); |
3905 | - } |
3906 | + unless ( defined $html ) { |
3907 | + |
3908 | + # Create a default pool for the action's allocation |
3909 | + my $pool = SVN::Pool->new_default(); |
3910 | + |
3911 | + $REPOS{ $cfg->{repos} }{client} = SVN::Client->new( config => {} ); |
3912 | + |
3913 | + $html = $action->run(); |
3914 | + |
3915 | + $pool->clear(); |
3916 | + |
3917 | + if ( defined $cache_key ) { |
3918 | + $cache->set( $cache_key, $html, $cfg->{cache}{expires_in} ); |
3919 | + } |
3920 | } |
3921 | |
3922 | return $html; |
3923 | } |
3924 | |
3925 | sub get_language { |
3926 | - my $obj = shift; # CGI or Apache instance |
3927 | - my $languages = shift; # Hash ref of valid langauges |
3928 | - my $default_lang = shift; # Default language |
3929 | + my $obj = shift; # Plack object |
3930 | + my $languages = shift; # Hash ref of valid langauges |
3931 | + my $default_lang = shift; # Default language |
3932 | |
3933 | my $lang = $obj->param('lang'); |
3934 | |
3935 | # If lang was included in the query string then delete it now we've |
3936 | - # got it. This stops it showing up in from calls to self_url(). Have |
3937 | - # to do this in three different ways, depending on whether this is an |
3938 | - # Apache::Request, Apache2::Request, or a CGI object. |
3939 | - if(defined $lang) { |
3940 | - if(ref($obj) eq 'Apache::Request') { |
3941 | - my $table = $obj->parms(); |
3942 | - delete $table->{lang}; |
3943 | - } elsif(ref($obj) eq 'Apache2::Request') { |
3944 | - # Get the query string, remove lang param, replace queue string |
3945 | - my $args = $obj->args(); |
3946 | - $args =~ s/lang = $lang (?:&|;)?//xms; |
3947 | - $obj->args($args); |
3948 | - } else { |
3949 | - $obj->delete('lang'); # Remove from self_url() invocations |
3950 | - } |
3951 | - } |
3952 | + # got it. This stops it showing up in from calls to self_url(). |
3953 | + |
3954 | + ## FIXME for Plack |
3955 | |
3956 | # If no valid lang=.. param was found then check the user's cookies |
3957 | - if(! defined $lang) { |
3958 | - if(ref($obj) eq 'Apache::Request') { |
3959 | - my $cookies = Apache::Cookie->fetch(); |
3960 | - if(defined $cookies->{'svnweb-lang'}) { |
3961 | - $lang = $cookies->{'svnweb-lang'}->value(); |
3962 | - } |
3963 | - } elsif(ref($obj) eq 'Apache2::Request') { |
3964 | - my $jar = Apache2::Cookie::Jar->new($obj); |
3965 | - my $lang_in_cookie = $jar->cookies('svnweb-lang'); |
3966 | - if(defined $lang_in_cookie) { |
3967 | - $lang = $lang_in_cookie->value();; |
3968 | - } |
3969 | - } else { |
3970 | - $lang = $obj->cookie('svnweb-lang'); |
3971 | - } |
3972 | + |
3973 | + unless ( defined $lang ) { |
3974 | + $lang = $obj->cookies->{'svnweb-lang'}; |
3975 | } |
3976 | |
3977 | # If $lang is not defined, or if it's not in the hash of valid languages |
3978 | # then use the default configured language, falling back to English as |
3979 | # a last resort. |
3980 | - if(! defined $lang or ! exists $languages->{$lang}) { |
3981 | - $lang = $default_lang; |
3982 | - $lang = 'en' unless defined $lang; |
3983 | + if ( !defined $lang or !exists $languages->{$lang} ) { |
3984 | + $lang = $default_lang; |
3985 | + $lang = 'en' unless defined $lang; |
3986 | } |
3987 | |
3988 | die "lang is not defined" unless defined $lang; |
3989 | @@ -333,312 +327,196 @@ |
3990 | return $lang; |
3991 | } |
3992 | |
3993 | -sub cgi_output { |
3994 | - my($cfg, $html) = @_; |
3995 | +sub psgi_output { |
3996 | + my ( $req, $cfg, $html ) = @_; |
3997 | |
3998 | return unless defined $html; |
3999 | |
4000 | - my @cookies = (); |
4001 | - push @cookies, $cfg->{cgi}->cookie(-name => 'svnweb-lang', |
4002 | - -value => $cfg->{lang}, |
4003 | - ); |
4004 | - |
4005 | - if(ref($html)) { |
4006 | - print $cfg->{cgi}->header( |
4007 | - -charset => $html->{charset} || 'UTF-8', |
4008 | - -type => $html->{mimetype} || 'text/html', |
4009 | - -cookie => \@cookies, |
4010 | - ); |
4011 | - |
4012 | - $cfg->{path} = encode_path($cfg->{path}); |
4013 | - if($html->{template}) { |
4014 | - $template->process($html->{template}, { |
4015 | - c => $cfg, |
4016 | - %{ $html->{data} } |
4017 | - }) or die "Template::process() error: " . $template->error; |
4018 | - } else { |
4019 | - print $html->{body}; |
4020 | - } |
4021 | - } else { |
4022 | - print $cfg->{cgi}->header( |
4023 | - -charset => 'UTF-8', |
4024 | - -type => 'text/html', |
4025 | - -cookie => \@cookies, |
4026 | - ); |
4027 | - print $html; |
4028 | - } |
4029 | -} |
4030 | - |
4031 | -sub mod_perl_output { |
4032 | - my($cfg, $html) = @_; |
4033 | - |
4034 | - my @cookies = (); |
4035 | - |
4036 | - if(mod_perl_2) { |
4037 | - push @cookies, Apache2::Cookie->new($cfg->{request}, |
4038 | - -name => 'svnweb-lang', |
4039 | - -value => $cfg->{lang}, |
4040 | - ); |
4041 | - $_->bake($cfg->{request}) foreach @cookies; |
4042 | - } else { |
4043 | - push @cookies, Apache::Cookie->new($cfg->{request}, |
4044 | - -name => 'svnweb-lang', |
4045 | - -value => $cfg->{lang}, |
4046 | - ); |
4047 | - $_->bake() foreach @cookies; |
4048 | - } |
4049 | - |
4050 | - if(ref($html)) { |
4051 | - my $content_type = $html->{mimetype} || 'text/html'; |
4052 | - $content_type .= '; charset='; |
4053 | - $content_type .= $html->{charset} || 'UTF-8'; |
4054 | - $cfg->{request}->content_type($content_type); |
4055 | - |
4056 | - if(mod_perl_2) { |
4057 | - $cfg->{request}->headers_out(); |
4058 | - } else { |
4059 | - $cfg->{request}->send_http_header(); |
4060 | - } |
4061 | - |
4062 | - if($html->{template}) { |
4063 | - $template ||= get_template(); |
4064 | - $cfg->{path} = encode_path($cfg->{path}); |
4065 | - $template->process($html->{template}, |
4066 | - { c => $cfg, %{ $html->{data} } }, |
4067 | - $cfg->{request}) |
4068 | - or die $template->error; |
4069 | - } else { |
4070 | - $cfg->{request}->print($html->{body}); |
4071 | - } |
4072 | - } else { |
4073 | - $cfg->{request}->content_type('text/html; charset=UTF-8'); |
4074 | - |
4075 | - if(mod_perl_2) { |
4076 | - $cfg->{request}->headers_out(); |
4077 | - } else { |
4078 | - $cfg->{request}->send_http_header(); |
4079 | - } |
4080 | - |
4081 | - $cfg->{request}->print($html); |
4082 | - } |
4083 | + my $res = $req->new_response(200); |
4084 | + $res->cookies->{ 'svnweb-lang' } = $cfg->{lang}; |
4085 | + |
4086 | + |
4087 | + if ( ref $html ) { |
4088 | + |
4089 | + if ( $html->{template} ) { |
4090 | + my $body; |
4091 | + $template->process( |
4092 | + $html->{template}, |
4093 | + { |
4094 | + c => $cfg, |
4095 | + %{ $html->{data} } |
4096 | + }, \$body |
4097 | + ) or die "Template::process() error: " . $template->error; |
4098 | + |
4099 | + $res->content_type('text/html; charset=utf-8'); |
4100 | + $res->body(Encode::encode('utf8',$body)); |
4101 | + } |
4102 | + else { |
4103 | + $res->content_type($html->{mimetype} || 'text/plain'); |
4104 | + $res->body($html->{body}); |
4105 | + } |
4106 | + } |
4107 | + else { |
4108 | + $res->content_type('text/plain'); |
4109 | + $res->body($html); |
4110 | + } |
4111 | + |
4112 | + return $res->finalize |
4113 | + |
4114 | } |
4115 | |
4116 | sub get_template { |
4117 | - Template->new({ |
4118 | - INCLUDE_PATH => $config->{templatedirs}, |
4119 | - COMPILE_DIR => $config->{tt_compile_dir}, |
4120 | - PRE_CHOMP => 2, |
4121 | - POST_CHOMP => 2, |
4122 | - FILTERS => { |
4123 | - l => ([\&loc_filter, 1]), |
4124 | - } |
4125 | - }); |
4126 | + Template->new( |
4127 | + { |
4128 | + INCLUDE_PATH => $config->{templatedirs}, |
4129 | + COMPILE_DIR => $config->{tt_compile_dir}, |
4130 | + PRE_CHOMP => 2, |
4131 | + POST_CHOMP => 2, |
4132 | + FILTERS => { |
4133 | + l => ( [ \&loc_filter, 1 ] ), |
4134 | + anchor => ( [ \&anchor_filter, 1 ] ), |
4135 | + }, |
4136 | + ENCODING => 'utf8', |
4137 | + } |
4138 | + ); |
4139 | } |
4140 | |
4141 | -sub run_cgi { |
4142 | - my %opts = @_; |
4143 | - die $@ if $@; |
4144 | - |
4145 | - load_config('config.yaml'); |
4146 | - |
4147 | - $config->{$_} = $opts{$_} foreach keys %opts; |
4148 | - $template ||= get_template(); |
4149 | - |
4150 | - # Pull in the configured CGI class. Propogate any errors back, and |
4151 | - # call the correct import() routine. |
4152 | - # |
4153 | - # This is more complicated than it should be. If $config->{cgi_class} |
4154 | - # is defined then use that. If not, use CGI::Fast. If that can't be |
4155 | - # loaded then use CGI. |
4156 | - # |
4157 | - # There's a problem with (at least) CGI::Fast. It's possible for the |
4158 | - # require() to fail, but for CGI::Fast's entry in %INC to be populated. |
4159 | - # This seems to happen when CGI::Fast loads, but its dependency (such |
4160 | - # as FCGI) fails to load. So if the require() fails for any reason |
4161 | - # we explicitly remove the %INC entry. |
4162 | - |
4163 | - my $cgi_class; |
4164 | - my $eval_result; |
4165 | - |
4166 | - if(exists $config->{cgi_class}) { |
4167 | - $eval_result = eval "require $config->{cgi_class}"; |
4168 | - die $@ if $@; |
4169 | - $cgi_class = $config->{cgi_class}; |
4170 | - } else { |
4171 | - foreach('CGI::Fast', 'CGI') { |
4172 | - $eval_result = eval "require $_"; |
4173 | - if($@) { |
4174 | - my $path = $_; |
4175 | - my @path_components = split('::', $path); |
4176 | - $path = File::Spec->catfile(@path_components); |
4177 | - $path .= '.pm'; |
4178 | - delete $INC{$path}; |
4179 | - } else { |
4180 | - $cgi_class = $_; |
4181 | - last; |
4182 | - } |
4183 | - } |
4184 | +sub run_psgi { |
4185 | + |
4186 | + my $c = shift; |
4187 | + my $env = shift; |
4188 | + my $req = Plack::Request->new($env); |
4189 | + |
4190 | + $template ||= get_template(); |
4191 | + |
4192 | + my ( $html, $cfg ); |
4193 | + |
4194 | + $cfg = { |
4195 | + style => $config->{style}, |
4196 | + cgi => $req, |
4197 | + languages => $config->{languages}, |
4198 | + }; |
4199 | + |
4200 | + eval { |
4201 | + my ( $action, $base, $repo, $script, $path ) = crack_url($req); |
4202 | + |
4203 | + SVN::Web::X->throw( |
4204 | + error => '(action %1 not supported)', |
4205 | + vars => [$action] |
4206 | + ) unless exists $config->{actions}{ lc($action) }; |
4207 | + |
4208 | + $cfg->{repos} = $repo; |
4209 | + $cfg->{action} = $action; |
4210 | + $cfg->{path} = $path; |
4211 | + $cfg->{script} = $script; |
4212 | + $cfg->{base_uri} = $base; |
4213 | + $cfg->{self_uri} = $req->path(); |
4214 | + $cfg->{config} = $config; |
4215 | + |
4216 | + $html = run($cfg); |
4217 | + }; |
4218 | + |
4219 | + if ( my $e = SVN::Web::X->caught() ) { |
4220 | + $html->{template} = 'x'; |
4221 | + $html->{data}{error_msg} = |
4222 | + SVN::Web::I18N::loc( $e->error(), @{ $e->vars() } ); |
4223 | } |
4224 | - |
4225 | - die "Could not load a CGI class" unless $eval_result; |
4226 | - $cgi_class->import(); |
4227 | - |
4228 | - # Save the selected module so that future calls to this routine |
4229 | - # don't waste time trying to find the correct class. |
4230 | - $config->{cgi_class} = $cgi_class unless exists $config->{cgi_class}; |
4231 | - |
4232 | - while(my $cgi = $cgi_class->new) { |
4233 | - my($html, $cfg); |
4234 | - |
4235 | - $cfg = { |
4236 | - style => $config->{style}, |
4237 | - cgi => $cgi, |
4238 | - languages => $config->{languages}, |
4239 | - }; |
4240 | - |
4241 | - eval { |
4242 | - my($action, $base, $repo, $script, $path) = crack_url($cgi); |
4243 | - |
4244 | - SVN::Web::X->throw( |
4245 | - error => '(action %1 not supported)', |
4246 | - vars => [$action] |
4247 | - ) unless exists $config->{actions}{ lc($action) }; |
4248 | - |
4249 | - $cfg->{repos} = $repo; |
4250 | - $cfg->{action} = $action; |
4251 | - $cfg->{path} = $path; |
4252 | - $cfg->{script} = $script; |
4253 | - $cfg->{base_uri} = $base; |
4254 | - $cfg->{self_uri} = $cgi->self_url(); |
4255 | - $cfg->{config} = $config; |
4256 | - |
4257 | - $html = run($cfg); |
4258 | - }; |
4259 | - |
4260 | - my $e; |
4261 | - if($e = SVN::Web::X->caught()) { |
4262 | + else { |
4263 | + if ($@) { |
4264 | $html->{template} = 'x'; |
4265 | - $html->{data}{error_msg} = SVN::Web::I18N::loc($e->error(), @{ $e->vars() }); |
4266 | - } else { |
4267 | - if($@) { |
4268 | - $html->{template} = 'x'; |
4269 | - $html->{data}{error_msg} = $@; |
4270 | - } |
4271 | + $html->{data}{error_msg} = $@; |
4272 | } |
4273 | - |
4274 | - cgi_output($cfg, $html); |
4275 | - last if $cgi_class eq 'CGI'; |
4276 | } |
4277 | + |
4278 | + return psgi_output( $req, $cfg, $html ); |
4279 | } |
4280 | |
4281 | sub loc_filter { |
4282 | my $context = shift; |
4283 | my @args = @_; |
4284 | - return sub { SVN::Web::I18N::loc($_[0], @args) }; |
4285 | -} |
4286 | - |
4287 | -# Crack a URL and determine the components we need. Takes either a CGI |
4288 | -# or Apache object as the only argument, so this is misnamed. |
4289 | + return sub { SVN::Web::I18N::loc( $_[0], @args ) }; |
4290 | +} |
4291 | + |
4292 | +sub anchor_filter { |
4293 | + my $context = shift; |
4294 | + return sub { |
4295 | + my $str = shift; |
4296 | + $str =~ s/[\/% ]/_/g; |
4297 | + return $str; |
4298 | + }; |
4299 | +} |
4300 | + |
4301 | +# Crack a URL and determine the components we need. |
4302 | sub crack_url { |
4303 | + |
4304 | my $obj = shift; |
4305 | |
4306 | -# warn "REF: ", ref($obj), "\n"; |
4307 | - |
4308 | - my($location, $filename, $path_info, $uri); |
4309 | - |
4310 | - if(ref($obj) eq 'Apache' or ref($obj) eq 'Apache2::RequestRec') { |
4311 | - $location = $obj->location(); |
4312 | - $filename = $obj->filename(); |
4313 | - $path_info = $obj->path_info(); |
4314 | - $uri = $obj->uri(); |
4315 | - } else { |
4316 | - # For compatibility with Apache::Request->filename(): |
4317 | - # 1. $location is the current working directory |
4318 | - # 2. $filename is $location + the first component of path_info() |
4319 | - $location = POSIX::getcwd(); |
4320 | - |
4321 | - # Split path_info, keeping trailing fields |
4322 | - my @path = split('/', $obj->path_info(), -1); |
4323 | - $filename = $location; |
4324 | - if($#path) { |
4325 | - shift @path; # Leading empty null field |
4326 | - if(defined $path[0]) { |
4327 | - $filename .= '/' . shift @path; |
4328 | - } |
4329 | - } |
4330 | - |
4331 | - $path_info = '/' . join('/', @path); |
4332 | - $uri = $obj->url(-relative => 1, -path_info => 1); |
4333 | - } |
4334 | - |
4335 | -# warn "LOCATION: $location\n"; |
4336 | -# warn "FILENAME: $filename\n"; |
4337 | -# warn "PATH_INFO: $path_info\n"; |
4338 | -# warn "URI: $uri\n"; |
4339 | - |
4340 | - my($action, $base, $repo, $script, $path); |
4341 | + my $path_info = Encode::decode('utf8',$obj->path); |
4342 | + |
4343 | + # warn "PATH_INFO: $path_info"; |
4344 | + |
4345 | + my ( $action, $base, $repo, $script, $path ); |
4346 | |
4347 | # Determine $repo. |
4348 | # |
4349 | # This is used as the key in to the hash of configured repositories. |
4350 | # It may be the empty string, in which case the action to run is |
4351 | # the 'list repositories' action. |
4352 | - if($location eq $filename) { |
4353 | - $repo = ''; # No repo, show repo list |
4354 | - $action = 'list'; |
4355 | - } else { |
4356 | - # Start with $repo equal to $filename. Then remove $location. |
4357 | - # This needs to be quoted for systems where the path may include |
4358 | - # backslashes. There may also be a trailing directory separator |
4359 | - # which needs removing. |
4360 | - # |
4361 | - # XXX In an ideal world File::Spec would tell us what the directory |
4362 | - # separator is. For the time being, punt, and use both forward and |
4363 | - # backward slashes. |
4364 | - $repo = $filename; |
4365 | - my $quoted_location = quotemeta($location); |
4366 | - $repo =~ s{^ $quoted_location [/\\]? }{}x; |
4367 | - $repo = uri_unescape($repo); |
4368 | - } |
4369 | - |
4370 | -# warn "REPO: $repo\n"; |
4371 | + if ( $path_info eq '/' ) { |
4372 | + $repo = ''; # No repo, show repo list |
4373 | + $action = 'list'; |
4374 | + } |
4375 | + else { |
4376 | + |
4377 | + # Start with $repo equal to $filename. Then remove $location. |
4378 | + # This needs to be quoted for systems where the path may include |
4379 | + # backslashes. There may also be a trailing directory separator |
4380 | + # which needs removing. |
4381 | + # |
4382 | + # XXX In an ideal world File::Spec would tell us what the directory |
4383 | + # separator is. For the time being, punt, and use both forward and |
4384 | + # backward slashes. |
4385 | + ($repo) = $path_info =~ m{^/([^/]+)/?}; |
4386 | + $repo = uri_unescape($repo); |
4387 | + } |
4388 | + |
4389 | + # warn "REPO: $repo"; |
4390 | |
4391 | # Determine $action |
4392 | # |
4393 | # This will be used as the key in to the hash of configured actions |
4394 | # and their classes. If no action is included in the URL then the |
4395 | # default action is 'browse'. |
4396 | - if(! defined $action) { |
4397 | - if($path_info eq '/' or $path_info eq '') { |
4398 | - $action = 'browse'; |
4399 | - } else { |
4400 | - my @path = split('/', $path_info); |
4401 | - $action = $path[1]; |
4402 | - } |
4403 | + unless ( defined $action ) { |
4404 | + my @path = split( '/', $path_info ); |
4405 | + # warn "SPLIT PATH: ", join('|', @path); |
4406 | + $action = $path[2] || 'browse'; |
4407 | } |
4408 | |
4409 | -# warn "ACTION: $action\n"; |
4410 | + # warn "ACTION: $action"; |
4411 | |
4412 | # Determine $path |
4413 | # |
4414 | # This is the path in the repository that we will be acting on. Some |
4415 | # actions don't need this set. |
4416 | - if($action eq 'list') { |
4417 | - $path = '/'; |
4418 | - } else { |
4419 | - if($path_info eq '' or $path_info eq '/') { |
4420 | - $path = '/'; |
4421 | - } else { |
4422 | - $path = $path_info; |
4423 | - $path =~ s{^/$action}{}; |
4424 | - $path =~ s{/+$}{} unless $path eq '/'; |
4425 | - } |
4426 | + if ( $action eq 'list' ) { |
4427 | + $path = '/'; |
4428 | + } |
4429 | + else { |
4430 | + if ( $path_info eq '/' ) { |
4431 | + $path = '/'; |
4432 | + } |
4433 | + else { |
4434 | + $path = $path_info; |
4435 | + $path =~ s{^/$repo(/$action)?}{}; |
4436 | + $path =~ s{/+$}{} unless $path eq '/'; |
4437 | + } |
4438 | } |
4439 | |
4440 | # Unescape it, as it will have been escaped on the web page |
4441 | $path = uri_unescape($path); |
4442 | |
4443 | -# warn "PATH: $path\n"; |
4444 | + # warn "PATH: $path"; |
4445 | |
4446 | # Determine $script |
4447 | # |
4448 | @@ -646,39 +524,10 @@ |
4449 | # is CGI then it's something like 'http://host//svnweb/index.cgi'. |
4450 | # If it's an Apache handler then it will be a directory reference, |
4451 | # like '/svnweb', or possibly '/'. |
4452 | - # |
4453 | - # In the CGI case this is just the SCRIPT_NAME environment |
4454 | - # variable. There's no Apache equivalent, so for Apache 1 take |
4455 | - # the URI, prepend the protocol, host, and port, then starting |
4456 | - # from the right end, remove the path, the action, and the |
4457 | - # repository name. The result is the root URI for the handler. |
4458 | - # |
4459 | - # For Apache 2 use Apache2::URI::construct_url() to get the full |
4460 | - # URL (without the query string), and then perform the same |
4461 | - # substitutions as for the Apache 1 case. |
4462 | - if(ref($obj) eq 'Apache') { |
4463 | - my $port = $obj->server()->port(); |
4464 | - |
4465 | - $script = sprintf('%s://%s:%s%s', |
4466 | - $port == 443 ? 'https' : 'http', |
4467 | - $obj->server()->server_hostname(), |
4468 | - $port, |
4469 | - $uri); |
4470 | - $script =~ s{$path/?$}{}; |
4471 | - $script =~ s{/$action$}{}; |
4472 | - $script =~ s{/$repo$}{}; |
4473 | - } elsif(ref($obj) eq 'Apache2::RequestRec') { |
4474 | - $script = $obj->construct_url(); |
4475 | - $script =~ s{$path/?$}{}; |
4476 | - $script =~ s{/$action$}{}; |
4477 | - $script =~ s{/$repo$}{}; |
4478 | - } else { |
4479 | - $script = $ENV{SCRIPT_NAME}; |
4480 | - } |
4481 | - |
4482 | - $script =~ s{/$}{}; # Remove trailing slash |
4483 | - |
4484 | -# warn "SCRIPT: $script\n"; |
4485 | + |
4486 | + $script = $obj->script_name; |
4487 | + |
4488 | + # warn "SCRIPT: $script"; |
4489 | |
4490 | # Determine $base |
4491 | # |
4492 | @@ -688,127 +537,14 @@ |
4493 | |
4494 | # In all cases, $base is a substring of $script. In the mod_perl and |
4495 | # svnweb-server cases it's identical |
4496 | - $base = $script; # Only in mod_perl case |
4497 | - |
4498 | - # If we're running as a CGI then SCRIPT_FILENAME will (or should) |
4499 | - # be set in the environment. If it is, find the filename component, |
4500 | - # which should be the name of this script, and remove that component |
4501 | - # from $base. |
4502 | - # |
4503 | - # This turns '/svnweb/index.cgi' into '/svnweb/'. We go through these |
4504 | - # shenanigans so that the script can be called something other than |
4505 | - # index.cgi. |
4506 | - if(ref($obj) ne 'Apache') { |
4507 | - if(exists $ENV{SCRIPT_FILENAME}) { |
4508 | - my $path = $ENV{SCRIPT_FILENAME}; |
4509 | - my(undef, undef, $file) = File::Spec->splitpath($path); |
4510 | - $base =~ s{$file$}{}; |
4511 | - } else { |
4512 | -# warn 'SCRIPT_FILENAME not set in environment, assuming script is called index.cgi'; |
4513 | - $base =~ s{index.cgi$}{}; |
4514 | - } |
4515 | - } |
4516 | - $base =~ s{/$}{}; # Remove trailing slash |
4517 | - |
4518 | -# warn "BASE: $base\n"; |
4519 | - |
4520 | - return($action, $base, $repo, $script, $path); |
4521 | -} |
4522 | - |
4523 | -sub handler { |
4524 | - my $ok; |
4525 | - require CGI; |
4526 | - |
4527 | - eval { |
4528 | - if(mod_perl_2) { |
4529 | - require Apache2::RequestRec; |
4530 | - require Apache2::RequestUtil; |
4531 | - require Apache2::RequestIO; |
4532 | - require Apache2::Response; |
4533 | - require Apache2::Request; |
4534 | - require Apache2::Const; |
4535 | - require Apache2::Cookie; |
4536 | - require Apache2::URI; |
4537 | - Apache2::Const->import(-compile => qw(OK DECLINED)); |
4538 | - $ok = &Apache2::Const::OK; |
4539 | - } else { |
4540 | - require Apache::Request; |
4541 | - require Apache::Constants; |
4542 | - require Apache::Cookie; |
4543 | - Apache::Constants->import(qw(OK DECLINED)); |
4544 | - $ok = &Apache::Constants::OK; |
4545 | - } |
4546 | - }; |
4547 | - |
4548 | - die $@ if $@; # Fail if the mod_perl imports failed |
4549 | - |
4550 | - my $r = shift; # Apache or Apache2::RequestRec object |
4551 | - |
4552 | - my $apr = mod_perl_2 ? Apache2::Request->new($r) |
4553 | - : Apache::Request->new($r); |
4554 | - |
4555 | - my($action, $base, $repo, $script, $path) = crack_url($r); |
4556 | - |
4557 | - chdir($r->location()); |
4558 | - load_config('config.yaml'); |
4559 | - |
4560 | - my($html, $cfg); |
4561 | - |
4562 | - $cfg = { |
4563 | - style => $config->{style}, |
4564 | - cgi => $apr, |
4565 | - languages => $config->{languages}, |
4566 | - request => $r, |
4567 | - }; |
4568 | - |
4569 | - eval { |
4570 | - SVN::Web::X->throw( |
4571 | - error => '(action %1 not supported)', |
4572 | - vars => [$action] |
4573 | - ) unless exists $config->{actions}{ lc($action) }; |
4574 | - |
4575 | - $cfg->{repos} = $repo; |
4576 | - $cfg->{action} = $action; |
4577 | - $cfg->{path} = $path; |
4578 | - $cfg->{script} = $script; |
4579 | - $cfg->{base_uri} = $base; |
4580 | - $cfg->{config} = $config; |
4581 | - |
4582 | - $cfg->{self_uri} = $r->uri(); |
4583 | - my $args = $r->args(); |
4584 | - if($args) { |
4585 | - $cfg->{self_uri} .= "?$args"; |
4586 | - } |
4587 | - |
4588 | - $html = run($cfg); |
4589 | - }; |
4590 | - |
4591 | - my $e; |
4592 | - if($e = SVN::Web::X->caught()) { |
4593 | - $html->{template} = 'x'; |
4594 | - $html->{data}{error_msg} = SVN::Web::I18N::loc($e->error(), |
4595 | - @{ $e->vars() }); |
4596 | - } else { |
4597 | - if($@) { |
4598 | - $html->{template} = 'x'; |
4599 | - $html->{data}{error_msg} = $@; |
4600 | - } |
4601 | - } |
4602 | - |
4603 | - mod_perl_output($cfg, $html); |
4604 | - return $ok; |
4605 | -} |
4606 | - |
4607 | -sub encode_path { |
4608 | - my $path = shift; |
4609 | - |
4610 | - return unless defined $path; |
4611 | - |
4612 | - my @path = split('/', $path); |
4613 | - |
4614 | - $path = join('/', map { uri_escape($_) } @path); |
4615 | - |
4616 | - return $path; |
4617 | + # $base = $script; # Only in mod_perl case |
4618 | + $base = $obj->base; # Only in mod_perl case |
4619 | + |
4620 | + $base =~ s{/$}{}; # Remove trailing slash |
4621 | + |
4622 | + # warn "BASE: $base"; |
4623 | + |
4624 | + return ( $action, $base, $repo, $script, $path ); |
4625 | } |
4626 | |
4627 | 1; |
4628 | @@ -858,24 +594,18 @@ |
4629 | =item 4. |
4630 | |
4631 | Either configure your web server (see L</"WEB SERVERS">) to use SVN::Web, |
4632 | -or run C<svnweb-server> to start a simple web server for testing. |
4633 | - |
4634 | - svnweb-server |
4635 | - |
4636 | -Note: C<svnweb-server> requires HTTP::Server::Simple to run, which is not |
4637 | -a requirement of SVN::Web. You may have to install HTTP::Server::Simple |
4638 | -first. |
4639 | +or run with C<plackup> to start a simple web server for testing. |
4640 | + |
4641 | + plackup -Ilib/ ./SVN-Web.psgi |
4642 | |
4643 | =item 5. |
4644 | |
4645 | Point your web browser at the correct URL to browse your repository. |
4646 | -If you've run C<svnweb-server> then this is L<http://localhost:8080/>. |
4647 | +If you've run C<plackup> then this is L<http://localhost:5000/>. |
4648 | |
4649 | =back |
4650 | |
4651 | -See |
4652 | -L<http://jc.ngo.org.uk/svnweb/jc/browse/nik/CPAN/SVN-Web/trunk/> |
4653 | -for the SVN::Web source code, browsed using SVN::Web. |
4654 | +See L<https://github.com/djzort/SVN-Web> for the SVN::Web source code. |
4655 | |
4656 | =head1 DESCRIPTION |
4657 | |
4658 | @@ -1545,113 +1275,48 @@ |
4659 | SVN::Web. In all cases, C</path/to/svnweb> in the examples is the |
4660 | directory you ran C<svnweb-install> in, and contains F<config.yaml>. |
4661 | |
4662 | +SVN::Web now uses L<Plack> to provide connectivity to the web server. |
4663 | +Previously a cgi, stand alone, fastcgi, mod_perl1 and a mod_perl2 |
4664 | +interface was provided as part of this software. All of which have been |
4665 | +removed and replaced by Plack. In doing so, Plack now will connect |
4666 | +SVN::Web to all of the above, plus PSGI, nginx_perl and anything else |
4667 | +cooked up in the future. |
4668 | + |
4669 | If you've configured a web server that isn't listed here for SVN::Web, |
4670 | please send in the instructions so they can be included in a future |
4671 | release. |
4672 | |
4673 | -=head2 svnweb-server |
4674 | +=head2 plackup |
4675 | |
4676 | -C<svnweb-server> is a simple web server that runs SVN::Web, and is |
4677 | -included and installed by this module. It may be all you need to |
4678 | +C<plackups> is a simple web server that can run SVN::Web stand alone, |
4679 | +and is included and installed by Plack. It may be all you need to |
4680 | productively use SVN::Web without needing to install a larger server. |
4681 | To use it, run: |
4682 | |
4683 | - svnweb-server --root /path/to/svnweb |
4684 | + plackup SVN-Web.psgi |
4685 | |
4686 | -See C<perldoc svnweb-server> for details about additional options you can |
4687 | +See C<perldoc plackup> for details about additional options you can |
4688 | use. |
4689 | |
4690 | -=head2 Apache as CGI |
4691 | - |
4692 | -Apache must be configured to support CGI scripts in the directory in which |
4693 | -you ran C<svnweb-install> |
4694 | - |
4695 | - <Directory /path/to/svnweb> |
4696 | - Options All ExecCGI |
4697 | - </Directory> |
4698 | - |
4699 | -If F</path/to/svnweb> is not under your normal Apache web hosting root then |
4700 | -you will need to alias a URL to that path too. |
4701 | - |
4702 | - Alias /svnweb /path/to/svnweb |
4703 | - |
4704 | -With that configuration the full path to browse the repository would be: |
4705 | - |
4706 | - http://server/svnweb/index.cgi |
4707 | +=head2 Apache as CGI (not recommended) |
4708 | + |
4709 | +See L<Plack::Handler::CGI> |
4710 | |
4711 | =head2 Apache with mod_perl or mod_perl2 |
4712 | |
4713 | -You can use mod_perl or mod_perl2 with SVN::Web. You must install |
4714 | -L<Apache::Request|Apache::Request> (for mod_perl) or |
4715 | -L<Apache2::Request|Apache2::Request> (for mod_perl2) to enable this support. |
4716 | - |
4717 | -The following Apache configuration is suitable. |
4718 | - |
4719 | - <Directory /path/to/svnweb> |
4720 | - AllowOverride None |
4721 | - Options None |
4722 | - SetHandler perl-script |
4723 | - PerlHandler SVN::Web |
4724 | - </Directory> |
4725 | - |
4726 | - <Directory /path/to/svnweb/css> |
4727 | - SetHandler default-handler |
4728 | - </Directory> |
4729 | - |
4730 | -If F</path/to/svnweb> is not under your normal Apache web hosting root then |
4731 | -you will need to alias a URL to that path too. |
4732 | - |
4733 | - Alias /svnweb /path/to/svnweb/ |
4734 | - |
4735 | -With that configuration the full path to browse the repository would be: |
4736 | - |
4737 | - http://server/svnweb |
4738 | +See L<Plack::Handler::Apache1> or L<Plack::Handler::Apache2> respectively. |
4739 | |
4740 | =head2 Apache with FastCGI |
4741 | |
4742 | -SVN::Web works with Apache and FastCGI. The following Apache configuration |
4743 | -is suitable. |
4744 | - |
4745 | - FastCgiServer /path/to/svnweb/index.cgi |
4746 | - ScriptAlias /svnweb /path/to/svnweb/index.cgi |
4747 | - |
4748 | - Alias /svnweb/css /path/to/svnweb/css |
4749 | - <Directory /path/to/svnweb/css> |
4750 | - SetHandler default-handler |
4751 | - </Directory> |
4752 | +See L<Plack::Handler::FCGI> |
4753 | |
4754 | =head2 IIS |
4755 | |
4756 | -SVN::Web works as a CGI script with IIS and Subversion on Windows servers. |
4757 | - |
4758 | -After following the instructions in L</SYNOPSIS>, ensure that IIS makes |
4759 | -the new F<svnweb> directory available either as a directory or a |
4760 | -virtual host. |
4761 | - |
4762 | -Using IIS Manager: |
4763 | - |
4764 | -=over |
4765 | - |
4766 | -=item |
4767 | - |
4768 | -Allow executable access to this directory (see I<Execute Permissions> in |
4769 | -the I<Home Directory> tab under I<Properties>). |
4770 | - |
4771 | -=item |
4772 | - |
4773 | -Add F<index.cgi> to the list of default content pages under I<Documents>. |
4774 | - |
4775 | -=back |
4776 | - |
4777 | -=head1 MAILING LIST |
4778 | - |
4779 | -There is a mailing list for SVN::Web users and developers. The address |
4780 | -is svnweb@ngo.org.uk. To subscribe please visit |
4781 | -L<http://jc.ngo.org.uk/mailman/listinfo/svnweb>. |
4782 | +For now this is probably broken. |
4783 | |
4784 | =head1 SEE ALSO |
4785 | |
4786 | -L<SVN::Web::action>, svnweb-install(1), svnweb-server(1) |
4787 | +L<SVN::Web::action>, svnweb-install(1), plackup(1), L<Plack> |
4788 | |
4789 | =head1 BUGS |
4790 | |
4791 | @@ -1667,12 +1332,16 @@ |
4792 | |
4793 | Nik Clayton C<< <nik@FreeBSD.org> >> |
4794 | |
4795 | +Dean Hamstead C<< <dean@fragfest.com.au> >> |
4796 | + |
4797 | =head1 COPYRIGHT |
4798 | |
4799 | Copyright 2003-2004 by Chia-liang Kao C<< <clkao@clkao.org> >>. |
4800 | |
4801 | Copyright 2005-2007 by Nik Clayton C<< <nik@FreeBSD.org> >>. |
4802 | |
4803 | +Copyright 2012 by Dean Hamstead C<< <dean@fragfest.com.au> >>. |
4804 | + |
4805 | This program is free software; you can redistribute it and/or modify it |
4806 | under the same terms as Perl itself. |
4807 | |
4808 | |
4809 | === modified file 'lib/SVN/Web/Blame.pm' |
4810 | --- lib/SVN/Web/Blame.pm 2007-11-30 14:01:12 +0000 |
4811 | +++ lib/SVN/Web/Blame.pm 2013-01-26 22:10:25 +0000 |
4812 | @@ -5,7 +5,9 @@ |
4813 | |
4814 | use base 'SVN::Web::action'; |
4815 | |
4816 | -our $VERSION = 0.53; |
4817 | +use Encode (); |
4818 | + |
4819 | +our $VERSION = 0.62; |
4820 | |
4821 | =head1 NAME |
4822 | |
4823 | @@ -117,51 +119,54 @@ |
4824 | my $self = shift; |
4825 | my $path = $self->{path}; |
4826 | |
4827 | - my(undef, undef, $act_rev, $head) = $self->get_revs(); |
4828 | + my ( undef, undef, $act_rev, $head ) = $self->get_revs(); |
4829 | |
4830 | return "$act_rev:$head:$path"; |
4831 | } |
4832 | |
4833 | sub run { |
4834 | my $self = shift; |
4835 | - my $ctx = $self->{repos}{client}; |
4836 | - my $ra = $self->{repos}{ra}; |
4837 | - my $uri = $self->{repos}{uri}; |
4838 | - my $path = $self->{path}; |
4839 | + my $uri = $self->{repos}{uri} . $self->{path}; |
4840 | |
4841 | - my($exp_rev, $yng_rev, $act_rev, $head) = $self->get_revs(); |
4842 | + my ( $exp_rev, $yng_rev, $act_rev, $head ) = $self->get_revs(); |
4843 | |
4844 | my $rev = $act_rev; |
4845 | |
4846 | my @blame_details; |
4847 | |
4848 | - $ctx->blame("$uri$path", 1, $rev, sub { |
4849 | - push @blame_details, { |
4850 | - line_no => $_[0], |
4851 | - rev => $_[1], |
4852 | - author => $_[2], |
4853 | - date => $self->format_svn_timestamp($_[3]), |
4854 | - line => $_[4], |
4855 | - }; |
4856 | - }); |
4857 | + $self->ctx_blame( |
4858 | + $uri, |
4859 | + 1, $rev, |
4860 | + sub { |
4861 | + push @blame_details, |
4862 | + { |
4863 | + line_no => $_[0], |
4864 | + rev => $_[1], |
4865 | + author => $_[2], |
4866 | + date => $self->format_svn_timestamp( $_[3] ), |
4867 | + line => Encode::decode('utf8',$_[4]), |
4868 | + }; |
4869 | + } |
4870 | + ); |
4871 | |
4872 | my $mime_type; |
4873 | - my $props = $ctx->propget('svn:mime-type', $uri . $path, $rev, 0); |
4874 | - if(exists $props->{$uri . $path}) { |
4875 | - $mime_type = $props->{$uri . $path}; |
4876 | - } else { |
4877 | - $mime_type = 'text/plain'; |
4878 | + my $props = $self->ctx_propget( 'svn:mime-type', $uri, $rev, 0 ); |
4879 | + if ( exists $props->{$uri} ) { |
4880 | + $mime_type = $props->{$uri}; |
4881 | + } |
4882 | + else { |
4883 | + $mime_type = 'text/plain'; |
4884 | } |
4885 | |
4886 | return { |
4887 | template => 'blame', |
4888 | data => { |
4889 | - context => 'file', |
4890 | + context => 'file', |
4891 | rev => $act_rev, |
4892 | youngest_rev => $yng_rev, |
4893 | - at_head => $head, |
4894 | + at_head => $head, |
4895 | mimetype => $mime_type, |
4896 | - blame_details => \@blame_details, |
4897 | + blame_details => \@blame_details, |
4898 | } |
4899 | }; |
4900 | } |
4901 | |
4902 | === modified file 'lib/SVN/Web/Browse.pm' |
4903 | --- lib/SVN/Web/Browse.pm 2007-11-30 14:01:12 +0000 |
4904 | +++ lib/SVN/Web/Browse.pm 2013-01-26 22:10:25 +0000 |
4905 | @@ -5,11 +5,12 @@ |
4906 | |
4907 | use base 'SVN::Web::action'; |
4908 | |
4909 | +use Encode (); |
4910 | use SVN::Ra; |
4911 | use SVN::Client; |
4912 | use SVN::Web::X; |
4913 | |
4914 | -our $VERSION = 0.53; |
4915 | +our $VERSION = 0.63; |
4916 | |
4917 | =head1 NAME |
4918 | |
4919 | @@ -136,91 +137,85 @@ |
4920 | my $self = shift; |
4921 | my $path = $self->{path}; |
4922 | |
4923 | - my(undef, undef, $act_rev, $at_head) = $self->get_revs(); |
4924 | + my ( undef, undef, $act_rev, $at_head ) = $self->get_revs(); |
4925 | |
4926 | return "$act_rev:$at_head:$path"; |
4927 | } |
4928 | |
4929 | sub run { |
4930 | my $self = shift; |
4931 | - my $ctx = $self->{repos}{client}; |
4932 | - my $ra = $self->{repos}{ra}; |
4933 | - my $path = $self->{path}; |
4934 | - |
4935 | - my $uri = $path eq '/' ? $self->{repos}{uri} |
4936 | - : $self->{repos}{uri} . $path; |
4937 | - |
4938 | - my($exp_rev, $yng_rev, $act_rev, $at_head) = $self->get_revs(); |
4939 | - |
4940 | - my $rev = $act_rev; |
4941 | - |
4942 | - my $node_kind; |
4943 | - $ctx->info($uri, $rev, $rev, |
4944 | - sub { $node_kind = $_[1]->kind(); }, 0); |
4945 | - |
4946 | - if($node_kind == $SVN::Node::none) { |
4947 | + my $uri = $self->{repos}{uri}; |
4948 | + $uri .= '/'.$self->rpath if $self->rpath; |
4949 | + |
4950 | + my ( $exp_rev, $yng_rev, $act_rev, $at_head ) = $self->get_revs(); |
4951 | + |
4952 | + my $rev = $act_rev; |
4953 | + |
4954 | + my $node_kind = $self->svn_get_node_kind($uri, $rev, $rev); |
4955 | + |
4956 | + if ( $node_kind == $SVN::Node::none ) { |
4957 | SVN::Web::X->throw( |
4958 | error => '(path %1 does not exist in revision %2)', |
4959 | - vars => [$path, $rev] |
4960 | - ); |
4961 | - } |
4962 | - |
4963 | - if($node_kind != $SVN::Node::dir) { |
4964 | - SVN::Web::X->throw( |
4965 | - error => '(path %1 is not a directory in revision %2)', |
4966 | - vars => [$path, $rev], |
4967 | - ); |
4968 | - } |
4969 | - |
4970 | - my $dirents = $ctx->ls($uri, $rev, 0); |
4971 | + vars => [ $self->rpath, $rev ] |
4972 | + ); |
4973 | + } |
4974 | + |
4975 | + if ( $node_kind != $SVN::Node::dir ) { |
4976 | + SVN::Web::X->throw( |
4977 | + error => '(path %1 is not a directory in revision %2)', |
4978 | + vars => [ $self->rpath, $rev ], |
4979 | + ); |
4980 | + } |
4981 | + |
4982 | + my $dirents = $self->ctx_ls( $uri, $rev, 0 ); |
4983 | |
4984 | my $entries = []; |
4985 | - my($name, $dirent); |
4986 | my $current_time = time(); |
4987 | |
4988 | - while(($name, $dirent) = each %{ $dirents }) { |
4989 | - my $kind = $dirent->kind(); |
4990 | - my $entry_path = $path eq '/' ? "$path$name" |
4991 | - : "$path/$name"; |
4992 | - |
4993 | - my @log_result = $self->recent_interesting_rev($entry_path, $rev); |
4994 | - |
4995 | - push @{ $entries }, { |
4996 | - name => $name, |
4997 | - rev => $log_result[1], |
4998 | - kind => $kind, |
4999 | - isdir => ($kind == $SVN::Node::dir), |
5000 | - size => ($kind == $SVN::Node::dir ? '' : $dirent->size()), |
The diff has been truncated for viewing.
Thanks for your work, uploading.