--- 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;