--- trunk/lib/Frey/SVK.pm 2008/11/24 22:21:02 505 +++ trunk/lib/Frey/SVK.pm 2008/11/28 18:29:59 598 @@ -1,7 +1,20 @@ package Frey::SVK; use Moose; -with 'Frey::Escape'; +extends 'Frey'; +with 'Frey::Web'; + +has commit_path => ( + documentation => 'path to commit', + is => 'rw', + isa => 'ArrayRef|Str', +); + +has message => ( + documentation => 'commit message', + is => 'rw', + isa => 'Str', +); sub svk { my ( $self, $exec, $coderef ) = @_; @@ -17,7 +30,7 @@ my ($self) = @_; my @modified; my $svk = $self->svk('status -q', sub { - push @modified, $1 if /^M\s+(.+)/; + push @modified, $1 if /^\w+\s+(.+)/; }); return @modified; } @@ -28,8 +41,9 @@ return $info if $info; my $svk = $self->svk('info', sub { my ( $label, $value ) = split(/:\s+/, $_, 2); - $info->{$label} = $value; + $info->{$label} = $value if $label; }); + warn "# svk info ",$self->dump( $info ); return $info; } @@ -40,18 +54,57 @@ } } -sub as_markup { +sub status_as_markup { my ($self) = @_; - my $status = `svk status -q`; + $status =~ s{^(\w+\s+)(\S+)$}{$1$2}gm; + $self->add_css( qq| pre.l a { text-decoration: none; } | ); + $status = qq| +
+
+ +
+
+
$status
+
+ |; + $self->add_status( $status ); + warn "status_as_markup ",length($status)," bytes"; + return $status; +} + +sub diff_as_markup { + my ($self) = @_; + my $diff = `svk diff`; - my $html - = qq|
$status

|
-		. $self->html_escape( $diff )
-		. qq|
| + $diff = $self->html_escape( $diff ); + $self->add_css( qq| + pre span.add { background: #dfd } + pre span.del { background: #fdd } + | ); + $diff =~ s{^(\+.+?)$}{$1}gm; + $diff =~ s{^(\-.+?)$}{$1}gm; + $diff =~ s{^(===\s+)(\S+)$}{$1$2}gm; + + $diff = qq|
$diff
|; + warn "diff_as_markup ",length($diff)," bytes"; + return $diff; +} + +sub as_markup { + my ($self) = @_; + + if ( ! $self->can('html_escape') ) { + Frey::Web->meta->apply( $self ); + $self->TODO( "Frey::Web role missing" ); + } + + my $html + = ( $self->status_as_markup || $self->error('no status_or_markup output') ) + . ( $self->diff_as_markup || $self->error('no diff_as_markup output') ) ; - warn "diff ",length($html)," bytes"; + warn "as_markup ",length($html)," bytes"; return $html; }