--- trunk/lib/Frey/SVK.pm 2008/11/29 01:01:14 615 +++ trunk/lib/Frey/SVK.pm 2008/12/16 21:01:53 863 @@ -3,10 +3,11 @@ extends 'Frey'; with 'Frey::Web'; +with 'Frey::Path'; use Moose::Util::TypeConstraints; -enum 'SVK_Action' => ( 'commit', 'revert' ); +enum 'SVK_Action' => ( 'commit', 'revert', 'postpone' ); has action => ( is => 'rw', @@ -16,10 +17,10 @@ has path => ( documentation => 'path to work with', is => 'rw', - isa => 'Str', + isa => 'Str|ArrayRef', ); -has message => ( +has commit_message => ( documentation => 'commit message', is => 'rw', isa => 'Str', @@ -35,11 +36,13 @@ close($svk) or die "can't close svk $exec: $@"; } +our $svk_status_path = '^(\w+[\+\s]+)(.+)'; + sub modified { my ($self) = @_; my @modified; my $svk = $self->svk('status -q', sub { - push @modified, $1 if /^\w+\s+(.+)/; + push @modified, $2 if m{$svk_status_path}; }); return @modified; } @@ -63,37 +66,42 @@ } } -sub status_as_markup { +sub commit_as_markup { 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{$svk_status_path}{$1 . $self->checkbox('path',$2) . qq|$2|}egm; if ( $status ) { $self->add_css(qq| pre.l a { text-decoration: none; } - div.commit { - background: #ffd; + form.commit { + background: #eee; padding: 1em 1em; position: fixed; top: 1em; right: 1em; z-index: 10; + opacity: .2; + filter: alpha(opacity=20); + } + form.commit:hover { + opacity: 1; + filter: alpha(opacity=100); } | ); + $status = qq| -
$diff|; + $diff = qq|
$diff| if $diff; warn "diff_as_markup ",length($diff)," bytes"; return $diff; } -sub as_markup { +sub action_as_markup { 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; + $new =~ s{/([^/]+)$}{/.postponed.$1}; + + die "Allready have ", $self->path_size($new) if -e $new; + $cmd = "mv $old $new && svk revert $old"; + } elsif ( $self->action ) { + $cmd = 'svk ' . $self->action; if ( $self->action eq 'commit' ) { - confess "need message" unless $self->message; - my $msg = $self->message; + my $msg = $self->commit_message || return $self->error( "need commit message\n" ); $msg =~ s{"}{\\"}gs; $cmd .= qq{ -m "$msg"}; } else { confess "need path" unless $self->path; } + + my @paths = eval { @{ $self->path } }; # XXX sigh! + @paths = ( $self->path ) unless @paths; + warn "# path ", $self->dump( @paths ); + + $cmd .= ' ' . join( ' ',@paths ); + } + if ( $cmd ) { $cmd .= ' 2>&1'; + warn "# cmd $cmd"; + my $out = `$cmd`; - warn "$cmd $out"; - $html .= qq| -
- $cmd\n
- $out
-
+ warn "# output of $cmd is: $out";
+
+ return qq|
+ Command $cmd produced output:
+ $out+ reload page to prevent this post from triggering again