--- trunk/lib/SourceSnoop.pm 2008/09/09 23:16:26 185
+++ trunk/lib/Frey/VCI.pm 2008/11/25 13:53:53 513
@@ -1,55 +1,95 @@
-package SourceSnoop;
+package Frey::VCI;
use Moose;
use lib '/rest/cvs/vci/lib'; # FIXME
use VCI;
+use HTML::Entities qw/encode_entities/;
+
extends 'Frey';
with 'Frey::Web';
use Data::Dump qw/dump/;
-our $debug = 1;
-
-sub pre {
- my $t = shift;
- return "
$t
";
+has 'repo' => (
+ is => 'rw',
+ isa => 'Str',
+ required => 1,
+ default => 'file:///home/dpavlin/private/svn/Frey',
+);
+
+has 'type' => (
+ is => 'rw',
+ isa => 'Str',
+ required => 1,
+ default => 'Svn',
+);
+
+has 'project' => (
+ is => 'rw',
+ isa => 'Str',
+ required => 1,
+ default => 'trunk',
+);
+
+has 'revision' => (
+ is => 'rw',
+ isa => 'Int|Str',
+ documentation => 'last revision in repository if not specified',
+);
+
+sub pre_dump {
+ my $o = shift;
+ # because Data::Dumper::HTML sucks
+ my $t;
+ if ( blessed($o) && $o->can('dump') ) {
+ $t = $o->dump;
+ $t =~ s/ {8}/ /gm;
+ } else {
+ $t = dump( $o );
+ }
+ return '
' . encode_entities($t) . '
';
}
-sub html {
- my ( $self, $request ) = @_;
-
- my %param = $request->params;
- warn "## params = ",dump( %param );
+sub as_markup {
+ my ( $self ) = @_;
my $html;
- my $path = 'file:///home/dpavlin/private/svn/Frey';
my $repo = VCI->connect(
- repo => $path,
- type => 'Svn',
- debug => 1,
+ repo => $self->repo,
+ type => $self->type,
+ debug => $self->debug,
);
- $html .= qq|Projects
|;
- $html .= qq|- $_
| foreach map { $_->name } @{ $repo->projects };
- $html .= qq|
|;
-
- $request->print( $self->page( title => $path, body => $html ) );
- $request->next;
-
- my %param = $request->params;
- warn "## params = ",dump( %param );
-
- my $project = $repo->get_project( name => $param{name} );
-
- $request->print( $self->page(
- title => $path . '/' . $project->name ,
- body => pre( $project->dump )
- ) );
- $request->next;
-}
+ my @projects_available = map { $_->name } @{ $repo->projects };
+ die $self->project," not one of valid projects ", dump( @projects_available ) unless grep { $self->project } @projects_available;
+
+ my $project = $repo->get_project( name => $self->project );
+ my $rev = $self->revision || $project->head_revision;
+
+ my $commit = $project->get_commit( revision => $rev ) || die "can't get revision $rev: $@";
+
+ sub div {
+ my ( $class, $text ) = @_;
+ return "$text
";
+ }
+
+ my $diff = $commit->as_diff;
+
+ my $body =
+ 'Commit
' .
+ div( 'revision', $commit->revision ) .
+ div( 'commiter', $commit->committer ) .
+ div( 'date', $commit->time->iso8601 ) .
+ div( 'message', $commit->message ) .
+ '' . encode_entities( $diff->raw ) . '
' .
+ pre_dump( $diff );
+
+ $self->title( $self->repo . '/' . $project->name );
+ return $body;
+};
warn "## VCI loaded";