--- svn/svn2js.cgi 2008/10/06 09:41:28 15 +++ svn/index.cgi 2008/10/06 17:09:17 16 @@ -8,24 +8,120 @@ use XML::Simple; use Data::Dump qw/dump/; use JSON; +use CGI; my $debug = 0; my $max_items = 500; -my $repository = 'file:///srv/svn/strix/'; -my $svnweb = 'https://svn-strix.carnet.hr/private/svnweb/index.cgi/strix/revision?rev='; +my $repository_dir = '/srv/svn'; +my $svnweb = 'https://svn-strix.carnet.hr/private/svnweb/index.cgi/%s/revision?rev=%d'; +my $strip_branch = s!^/(branches/)?[^/]+/!/!; + +# my local config for development +$repository_dir = '/home/dpavlin/private/svn'; +$svnweb = 'http://localhost/svnweb/index.cgi/%s/revision?rev=%d'; +$strip_branch = s!!!; # for older JSON -sub encode_json { objToJson( @_ ) } +#sub encode_json { objToJson( @_ ) } sub path_strip { my $path = shift; -# $path =~ s!^/[^/]+/[^/]+/!/!; - $path =~ s!^/(branches/)?[^/]+/!/!; + $path =~ $strip_branch; return $path; } +opendir(my $dir, $repository_dir) || die "can't open $repository_dir: $!"; +my @repositories = sort grep { -f "$repository_dir/$_/format" } readdir($dir); +closedir($dir); + +our $q = CGI->new; +my $repository = $q->param('repository'); +$repository = (grep { m/^\Q$repository\E$/ } @repositories )[0]; + +sub select_repository { + $q->start_form( -name => 'current_repository', -id => 'current_repository' ), + "Select repository: ", + $q->popup_menu( -name => 'repository', -values => [ @repositories ], -onChange => qq{document.getElementById('current_repository').submit();} ), + $q->submit, + $q->end_form; +} + +if ( ! $repository ) { + print $q->header,$q->start_html("Select repository"), select_repository; + exit; +} elsif ( ! $q->param('json') ) { + $repository ||= 'Select repository'; + print $q->header, qq| + + +$repository -- Exhibit SVN exhibit facet browsing + + + + + + + + + +
+based on, +exhibit
+|, select_repository, qq| + + + + + + + + + +
+
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +
+ +
+
+ + + + |; + exit; +} + my $json = { properties => { revision => { @@ -40,7 +136,7 @@ my $log; { - open( my $log_fh, '-|', "svn log --xml --stop-on-copy -v $repository" ) || die "can't read svn log: $!"; + open( my $log_fh, '-|', "svn log --xml --stop-on-copy -v file://$repository_dir/$repository" ) || die "can't read svn log: $!"; local $/ = undef; $log = <$log_fh>; close( $log_fh ); @@ -59,7 +155,7 @@ type => 'Item', id => $label, label => $label, - uri => $svnweb . $e->{'revision'}, + uri => sprintf($svnweb, $repository, $e->{'revision'}), path_full => $path, path => path_strip( $path ), };