--- trunk/lib/SourceSnoop.pm 2008/09/13 16:59:07 188 +++ trunk/lib/Frey/VCI.pm 2008/11/25 13:53:53 513 @@ -1,16 +1,43 @@ -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; +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; @@ -22,58 +49,47 @@ } else { $t = dump( $o ); } - return "
$t
"; + 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

|; - - $request->print( $self->page( title => $path, body => $html ) ); - $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; - %param = $request->params; - warn "## params = ",dump( %param ); + my $project = $repo->get_project( name => $self->project ); + my $rev = $self->revision || $project->head_revision; - my $project = $repo->get_project( name => $param{name} ); - my $rev = $project->head_revision; - - my $commit = $project->get_commit( revision => $rev ); + 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 ) . - '
' . $commit->as_diff->raw . '
'; + '
' . encode_entities( $diff->raw ) . '
' . + pre_dump( $diff ); - $request->print( $self->page( - title => $path . '/' . $project->name, - body => $body, - ) ); - $request->next; -} + $self->title( $self->repo . '/' . $project->name ); + return $body; +}; warn "## VCI loaded";