package SVN::Web::Revision;
use strict;
use SVN::Core;
use SVN::Repos;
use SVN::Fs;
sub new {
my $class = shift;
my $self = bless {}, $class;
%$self = @_;
return $self;
}
sub _log {
my ($self, $paths, $rev, $author, $date, $msg, $pool) = @_;
$pool->default;
my $data = {rev => $rev, author => $author,
date => $date, msg => $msg};
$data->{paths} = {map { $_ => {action => $paths->{$_}->action,
copyfrom => $paths->{$_}->copyfrom_path,
copyfromrev => $paths->{$_}->copyfrom_rev,
}} keys %$paths};
my $root = $self->{repos}->fs->revision_root ($rev);
my $oldroot = $self->{repos}->fs->revision_root ($rev-1);
for (keys %{$data->{paths}}) {
$data->{paths}{$_}{isdir} = 1
if $data->{paths}{$_}{action} eq 'D' ? $oldroot->is_dir ($_) : $root->is_dir ($_);
}
return $data;
}
sub run {
my $self = shift;
my $pool = SVN::Pool->new_default_sub;
my $rev = $self->{cgi}->param('rev') || die 'no revision';
$self->{repos}->get_logs ([], $rev, $rev, 1, 0,
sub { $self->{REV} = $self->_log(@_)});
return {template => 'revision',
data => { rev => $rev, %{$self->{REV}}}};
}
1;