diff --git a/src/lib/Hydra/Controller/Build.pm b/src/lib/Hydra/Controller/Build.pm index d58b9664..c4eb7998 100644 --- a/src/lib/Hydra/Controller/Build.pm +++ b/src/lib/Hydra/Controller/Build.pm @@ -204,7 +204,6 @@ sub download_by_type : Chained('build') PathPart('download-by-type') { $c->res->redirect(defaultUriForProduct($self, $c, $product, @path)); } - sub contents : Chained('build') PathPart Args(1) { my ($self, $c, $productnr) = @_; @@ -220,6 +219,10 @@ sub contents : Chained('build') PathPart Args(1) { if ($product->type eq "nix-build" && -d $path) { $res = `cd $path && find . -print0 | xargs -0 ls -ld --`; error($c, "`ls -lR' error: $?") if $? != 0; + + my $baseuri = $c->uri_for('/build', $c->stash->{build}->id, 'download', $product->productnr); + $baseuri .= "/".$product->name if $product->name; + $res =~ s/(\.\/)($relPathRE)/$1$2<\/a>/g; } elsif ($path =~ /\.rpm$/) { @@ -259,8 +262,9 @@ sub contents : Chained('build') PathPart Args(1) { die unless $res; - $c->stash->{'plain'} = { data => $res }; - $c->forward('Hydra::View::Plain'); + $c->stash->{title} = "Contents of ".$product->path; + $c->stash->{contents} = "
$res
"; + $c->stash->{template} = 'plain.tt'; } diff --git a/src/lib/Hydra/Controller/Root.pm b/src/lib/Hydra/Controller/Root.pm index ae8e0e07..45a145a7 100644 --- a/src/lib/Hydra/Controller/Root.pm +++ b/src/lib/Hydra/Controller/Root.pm @@ -145,6 +145,7 @@ sub robots_txt : Path('robots.txt') { , uri_for('Build', 'view_nixlog', ["*"], "*") , uri_for('Build', 'view_log', ["*"], "*") , uri_for('Build', 'view_log', ["*"]) + , uri_for('Build', 'download', ["*"], "*") , uri_for('Root', 'nar', [], "*") , uri_for('Root', 'status', []) , uri_for('Root', 'all', []) diff --git a/src/lib/Hydra/Helper/CatalystUtils.pm b/src/lib/Hydra/Helper/CatalystUtils.pm index 165a6413..c82627b7 100644 --- a/src/lib/Hydra/Helper/CatalystUtils.pm +++ b/src/lib/Hydra/Helper/CatalystUtils.pm @@ -206,7 +206,7 @@ sub trim { # Security checking of filenames. -Readonly::Scalar our $pathCompRE => "(?:[A-Za-z0-9-\+][A-Za-z0-9-\+\._]*)"; +Readonly::Scalar our $pathCompRE => "(?:[A-Za-z0-9-\+\.][A-Za-z0-9-\+\._]*)"; Readonly::Scalar our $relPathRE => "(?:$pathCompRE(?:/$pathCompRE)*)"; Readonly::Scalar our $relNameRE => "(?:[A-Za-z0-9-][A-Za-z0-9-\.]*)"; Readonly::Scalar our $attrNameRE => "(?:[A-Za-z_][A-Za-z0-9_]*)";