/[Frey]/trunk/lib/Frey/SVK.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/Frey/SVK.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 576 - (hide annotations)
Fri Nov 28 00:09:51 2008 UTC (15 years, 4 months ago) by dpavlin
File size: 1622 byte(s)
syntax highlight diff and make local anchors for files
1 dpavlin 485 package Frey::SVK;
2     use Moose;
3    
4 dpavlin 535 extends 'Frey';
5     with 'Frey::Web';
6 dpavlin 498
7 dpavlin 505 sub svk {
8     my ( $self, $exec, $coderef ) = @_;
9     open(my $svk, '-|', 'svk ' . $exec) or die "svk $exec: $@";
10     while(<$svk>) {
11     chomp;
12     $coderef->( $_ );
13     }
14     close($svk) or die "can't close svk $exec: $@";
15     }
16    
17 dpavlin 485 sub modified {
18     my ($self) = @_;
19     my @modified;
20 dpavlin 505 my $svk = $self->svk('status -q', sub {
21 dpavlin 552 push @modified, $1 if /^(M|A)\s+(.+)/;
22 dpavlin 505 });
23 dpavlin 485 return @modified;
24     }
25    
26 dpavlin 505 our $info; # cache, we use it on every hit
27     sub info {
28     my ($self) = @_;
29     return $info if $info;
30     my $svk = $self->svk('info', sub {
31     my ( $label, $value ) = split(/:\s+/, $_, 2);
32 dpavlin 535 $info->{$label} = $value if $label;
33 dpavlin 505 });
34 dpavlin 576 warn "# svk info ",$self->dump( $info );
35 dpavlin 505 return $info;
36     }
37    
38 dpavlin 485 sub as_data {
39     my ($self) = @_;
40     {
41     modified => [ $self->modified ],
42     }
43     }
44    
45 dpavlin 498 sub as_markup {
46     my ($self) = @_;
47    
48 dpavlin 576 if ( ! $self->can('html_escape') ) {
49     Frey::Web->meta->apply( $self );
50     $self->TODO( "Frey::Web role missing" );
51     }
52    
53 dpavlin 498 my $status = `svk status -q`;
54 dpavlin 576 $status =~ s{^(\w+\s+)(\S+)$}{$1<a href="#$2">$2</a>}gm;
55     $self->add_css( qq| pre.l a { text-decoration: none; } | );
56     $status = qq|<pre class="l">$status</pre>|;
57     $self->add_status( $status );
58    
59 dpavlin 498 my $diff = `svk diff`;
60    
61 dpavlin 576 $diff = $self->html_escape( $diff );
62     $self->add_css( qq|
63     pre span.add { background: #dfd }
64     pre span.del { background: #fdd }
65     | );
66     $diff =~ s{^(\+.+?)$}{<span class="add">$1</span>}gm;
67     $diff =~ s{^(\-.+?)$}{<span class="del">$1</span>}gm;
68     $diff =~ s{^(===\s+)(\S+)$}{$1<a name="$2">$2</a>}gm;
69 dpavlin 552
70 dpavlin 576 $diff = qq|<pre>$diff</pre>|;
71 dpavlin 498
72 dpavlin 576 my $html = $status . $diff;
73     warn "html ",length($html)," bytes";
74    
75 dpavlin 498 return $html;
76     }
77    
78 dpavlin 485 1;

  ViewVC Help
Powered by ViewVC 1.1.26