package SVN::Web::Checkout; use strict; use warnings; use base 'SVN::Web::action'; use SVN::Web::X; our $VERSION = 0.53; =head1 NAME SVN::Web::Checkout - SVN::Web action to checkout a given file =head1 SYNOPSIS In F actions: ... checkout: class: SVN::Web::Checkout action_menu: show: - file link_text: (checkout) ... =head1 DESCRIPTION Returns the contents of the given filename. Uses the C property. =head1 OPTIONS =over 4 =item rev The repository revision to checkout. Defaults to the repository's youngest revision. =back =head1 TEMPLATE VARIABLES N/A =head1 EXCEPTIONS =over 4 =item (path %1 is not a file in revision %2) The given path is not a file in the given revision. =back =cut sub run { my $self = shift; my $ctx = $self->{repos}{client}; my $ra = $self->{repos}{ra}; my $uri = $self->{repos}{uri}; my $rev = $self->{cgi}->param('rev') || $ra->get_latest_revnum(); my $path = $self->{path}; my $node_kind; $ctx->info("$uri$path", $rev, $rev, sub { $node_kind = $_[1]->kind(); }, 0); if($node_kind != $SVN::Node::file) { SVN::Web::X->throw( error => '(path %1 is not a file in revision %2)', vars => [$path, $rev] ); } my($fh, $fc) = (undef, ''); open($fh, '>', \$fc); $ctx->cat($fh, $uri . $path, $rev); close($fh); my $mime_type; my $props = $ctx->propget('svn:mime-type', $uri . $path, $rev, 0); if(exists $props->{$uri . $path}) { $mime_type = $props->{$uri . $path}; } else { $mime_type = 'text/plain'; } return { mimetype => $mime_type, body => $fc, }; } 1; =head1 COPYRIGHT Copyright 2003-2004 by Chia-liang Kao C<< >>. Copyright 2005-2007 by Nik Clayton C<< >>. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L =cut