--- trunk/lib/Frey/SVK.pm 2008/12/02 18:12:38 684
+++ trunk/lib/Frey/SVK.pm 2008/12/02 22:05:25 690
@@ -17,7 +17,7 @@
has path => (
documentation => 'path to work with',
is => 'rw',
- isa => 'Str',
+ isa => 'Str|ArrayRef',
);
has commit_message => (
@@ -64,16 +64,25 @@
}
}
+sub checkbox {
+ my ($self,$name,$value) = @_;
+ my $checked = '';
+ my $all_checkboxes = $self->$name;
+ $all_checkboxes = [ $all_checkboxes ] unless ref($all_checkboxes) eq 'ARRAY'; # sigh, too chatty
+ $checked = ' checked' if grep { $_ eq $value } @$all_checkboxes;
+ warn "# checkbox $name $value $checked\t", $self->dump( $self->$name );
+ qq||;
+}
+
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{^(\w+[\+\s]+)(\S+)$}{$1 . $self->checkbox('path',$2) . qq|$2|}egm;
if ( $status ) {
$self->add_css(qq|
pre.l a { text-decoration: none; }
form.commit {
- background: #ffd;
+ background: #eee;
padding: 1em 1em;
position: fixed;
top: 1em;
@@ -121,10 +130,9 @@
return $diff;
}
-sub as_markup {
+sub action_as_markup {
my ($self) = @_;
- my $html = '';
my $cmd;
if ( $self->action eq 'postpone' ) {
@@ -137,28 +145,36 @@
} elsif ( $self->action ) {
$cmd = 'svk ' . $self->action;
if ( $self->action eq 'commit' ) {
- my $msg = $self->commit_message || confess "need commit message";
+ my $msg = $self->commit_message || return $self->error( "need commit message\n" );
$msg =~ s{"}{\\"}gs;
$cmd .= qq{ -m "$msg"};
- } elsif ( my $path = $self->path ) {
- $cmd .= " $path";
} else {
confess "need path" unless $self->path;
}
+ $cmd .= ' ' . join(' ',$self->path);
}
if ( $cmd ) {
$cmd .= ' 2>&1';
+ warn "# cmd $cmd";
+
my $out = `$cmd`;
- warn "$cmd $out";
+ warn "# output of $cmd is: $out";
- $html .= qq|
+ return qq|
+ Command $cmd produced output:
- $cmd\n
- $out
+ $out
|;
}
+}
+
+sub as_markup {
+ my ($self) = @_;
+
+ my $html = $self->action_as_markup;
+
$self->title( 'svk' . ( $self->action ? ' - ' . $self->action : '' ) ); # XXX without this we get wrong icon and title
$html .= $self->commit_as_markup . $self->diff_as_markup;