/usr/local/CPAN/VCI/VCI/VCS/Cvs/Diff.pm


package VCI::VCS::Cvs::Diff;
use Moose;

extends 'VCI::Abstract::Diff';

our $_header_part;
BEGIN {
    # This matches the "wrong" cvsps diff headers.
    $_header_part =
        '([^:]+?)\t\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d+ [\-+]\d{4}';
}
use constant DIFF_HEADER => qr/^(--- $_header_part\n\+\+\+ $_header_part)$/mso;

sub _transform_filename {
    my ($self, $name) = @_;
    my $project = $self->project->name;
    $name =~ s|^\Q$project\E/||;
    # cvsps adds :revision to the end of file names.
    $name =~ s/:[\d+\.]+$//;
    return $name;
}

# We have to add "diff -u" headers that cvsps misses.
override _build__parsed => sub {
    my $self = shift;
    my $raw = $self->raw;
    my $old_raw = $raw;
    my $diff_re = DIFF_HEADER;
    $raw =~ s/$diff_re/diff -u $2 $3\n$1/g;
    $self->{raw} = $raw;
    my $parsed = super;
    $self->{raw} = $old_raw;
    return $parsed;
};

__PACKAGE__->meta->make_immutable;

1;