--- trunk/lib/SourceSnoop.pm 2008/09/09 23:16:26 185 +++ trunk/lib/Frey/VCI.pm 2008/11/25 14:58:59 518 @@ -1,4 +1,4 @@ -package SourceSnoop; +package Frey::VCI; use Moose; @@ -7,49 +7,76 @@ extends 'Frey'; with 'Frey::Web'; +with 'Frey::Escape'; 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 { - my $t = shift; - return "
$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, - ); - - $html .= qq|

Projects

|; - - $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; -} + repo => $self->repo, + type => $self->type, + debug => $self->debug, + ) || die "can't open ",$self->type," ",$self->repo; + + 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 ) . + '
' . $self->html_escape( $diff->raw ) . '
'; + + $self->add_status({ dump => $diff }); + + $self->title( $self->repo . '/' . $project->name ); + return $body; +}; warn "## VCI loaded";