--- trunk/lib/Frey/SVK.pm 2008/11/29 01:05:39 616 +++ trunk/lib/Frey/SVK.pm 2008/11/30 23:49:32 653 @@ -6,7 +6,7 @@ use Moose::Util::TypeConstraints; -enum 'SVK_Action' => ( 'commit', 'revert' ); +enum 'SVK_Action' => ( 'commit', 'revert', 'postpone' ); has action => ( is => 'rw', @@ -19,7 +19,7 @@ isa => 'Str', ); -has message => ( +has commit_message => ( documentation => 'commit message', is => 'rw', isa => 'Str', @@ -67,7 +67,7 @@ my ($self) = @_; my $status = `svk status -q`; # $status =~ s{^(\w+\s+)(\S+)$}{$1$2}gm; # FIXME - $status =~ s{^(\w+\s+)(\S+)$}{$1$2}gm; + $status =~ s{^(\w+[\+\s]+)(\S+)$}{$1$2}gm; if ( $status ) { $self->add_css(qq| pre.l a { text-decoration: none; } @@ -82,9 +82,9 @@ | ); $status = qq| -
+
- +
@@ -106,11 +106,15 @@ $self->add_css( qq| pre span.add { background: #dfd } pre span.del { background: #fdd } - pre form.revert { display: inline } + pre form.inline { display: inline } | ); $diff =~ s{^(\+.+?)$}{$1}gm; $diff =~ s{^(\-.+?)$}{$1}gm; - $diff =~ s{^(===\s+)(\S+)$}{$1
$2}gm; + sub form { + my ( $path, $action ) = @_; + qq|
|; + }; + $diff =~ s{^(===\s+)(\S+)$}{$1 . form($2,'revert') . qq| $2 | . form($2,'postpone') }gem; $diff = qq|
$diff
|; warn "diff_as_markup ",length($diff)," bytes"; @@ -121,20 +125,29 @@ my ($self) = @_; my $html = ''; + my $cmd; - if ( $self->action ) { - my $cmd = 'svk ' . $self->action . ' ' . $self->path; + if ( $self->action eq 'postpone' ) { + my $old = $self->path; + my $new = $old . '.postponed'; + die "Allready have $new" if -e $new; + $cmd = "mv $old $new && svk revert $old"; + } elsif ( $self->action ) { + $cmd = 'svk ' . $self->action . ' ' . $self->path; if ( $self->action eq 'commit' ) { - confess "need message" unless $self->message; - my $msg = $self->message; + confess "need commit message" unless $self->commit_message; + my $msg = $self->commit_message; $msg =~ s{"}{\\"}gs; $cmd .= qq{ -m "$msg"}; } else { confess "need path" unless $self->path; } + } + if ( $cmd ) { $cmd .= ' 2>&1'; my $out = `$cmd`; warn "$cmd $out"; + $html .= qq| $cmd\n @@ -145,11 +158,6 @@ $self->title( 'svk' . ( $self->action ? ' - ' . $self->action : '' ) ); # XXX without this we get wrong icon and title - if ( ! $self->can('html_escape') ) { - Frey::Web->meta->apply( $self ); - $self->TODO( "Frey::Web role missing" ); - } - $html .= $self->status_as_markup || 'No changes in files tracked by SVK'; $html .= $self->diff_as_markup;