1 |
dpavlin |
513 |
package Frey::VCI; |
2 |
dpavlin |
185 |
|
3 |
|
|
use Moose; |
4 |
|
|
|
5 |
|
|
use lib '/rest/cvs/vci/lib'; # FIXME |
6 |
|
|
use VCI; |
7 |
|
|
|
8 |
|
|
extends 'Frey'; |
9 |
|
|
with 'Frey::Web'; |
10 |
dpavlin |
515 |
with 'Frey::Escape'; |
11 |
dpavlin |
185 |
|
12 |
|
|
use Data::Dump qw/dump/; |
13 |
|
|
|
14 |
dpavlin |
513 |
has 'repo' => ( |
15 |
|
|
is => 'rw', |
16 |
|
|
isa => 'Str', |
17 |
|
|
required => 1, |
18 |
|
|
default => 'file:///home/dpavlin/private/svn/Frey', |
19 |
|
|
); |
20 |
dpavlin |
185 |
|
21 |
dpavlin |
513 |
has 'type' => ( |
22 |
|
|
is => 'rw', |
23 |
|
|
isa => 'Str', |
24 |
|
|
required => 1, |
25 |
|
|
default => 'Svn', |
26 |
|
|
); |
27 |
|
|
|
28 |
|
|
has 'project' => ( |
29 |
|
|
is => 'rw', |
30 |
|
|
isa => 'Str', |
31 |
|
|
required => 1, |
32 |
|
|
default => 'trunk', |
33 |
|
|
); |
34 |
|
|
|
35 |
|
|
has 'revision' => ( |
36 |
|
|
is => 'rw', |
37 |
|
|
isa => 'Int|Str', |
38 |
|
|
documentation => 'last revision in repository if not specified', |
39 |
|
|
); |
40 |
|
|
|
41 |
|
|
sub as_markup { |
42 |
|
|
my ( $self ) = @_; |
43 |
dpavlin |
192 |
|
44 |
dpavlin |
185 |
my $html; |
45 |
|
|
|
46 |
|
|
my $repo = VCI->connect( |
47 |
dpavlin |
513 |
repo => $self->repo, |
48 |
|
|
type => $self->type, |
49 |
|
|
debug => $self->debug, |
50 |
dpavlin |
515 |
) || die "can't open ",$self->type," ",$self->repo; |
51 |
dpavlin |
185 |
|
52 |
dpavlin |
513 |
my @projects_available = map { $_->name } @{ $repo->projects }; |
53 |
|
|
die $self->project," not one of valid projects ", dump( @projects_available ) unless grep { $self->project } @projects_available; |
54 |
dpavlin |
185 |
|
55 |
dpavlin |
513 |
my $project = $repo->get_project( name => $self->project ); |
56 |
|
|
my $rev = $self->revision || $project->head_revision; |
57 |
dpavlin |
185 |
|
58 |
dpavlin |
513 |
my $commit = $project->get_commit( revision => $rev ) || die "can't get revision $rev: $@"; |
59 |
dpavlin |
185 |
|
60 |
dpavlin |
188 |
sub div { |
61 |
|
|
my ( $class, $text ) = @_; |
62 |
|
|
return "<div class=\"$class\">$text</div>"; |
63 |
|
|
} |
64 |
|
|
|
65 |
dpavlin |
189 |
my $diff = $commit->as_diff; |
66 |
|
|
|
67 |
dpavlin |
188 |
my $body = |
68 |
|
|
'<h1>Commit</h1>' . |
69 |
|
|
div( 'revision', $commit->revision ) . |
70 |
|
|
div( 'commiter', $commit->committer ) . |
71 |
|
|
div( 'date', $commit->time->iso8601 ) . |
72 |
|
|
div( 'message', $commit->message ) . |
73 |
dpavlin |
518 |
'<pre>' . $self->html_escape( $diff->raw ) . '</pre>'; |
74 |
|
|
|
75 |
|
|
$self->add_status({ dump => $diff }); |
76 |
dpavlin |
188 |
|
77 |
dpavlin |
513 |
$self->title( $self->repo . '/' . $project->name ); |
78 |
|
|
return $body; |
79 |
dpavlin |
192 |
}; |
80 |
dpavlin |
185 |
|
81 |
|
|
warn "## VCI loaded"; |
82 |
|
|
|
83 |
|
|
1; |