--- 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

|; - - $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";