forked from lix-project/hydra
* A quick hack to list the contents of various types of files (RPM,
Debs, tars, ...).
This commit is contained in:
parent
b39e2c5e32
commit
9e4b029285
|
@ -82,8 +82,10 @@ let
|
|||
''; # */
|
||||
|
||||
hydraPath = stdenv.lib.concatStringsSep ":" (map (p: "${p}/bin") [
|
||||
libxslt sqlite subversion nix coreutils
|
||||
gzip bzip2 gnused graphviz
|
||||
libxslt sqlite subversion nix coreutils findutils
|
||||
gzip bzip2 lzma gnutar unzip
|
||||
gnused graphviz
|
||||
rpm dpkg
|
||||
]);
|
||||
|
||||
installPhase = ''
|
||||
|
|
|
@ -90,7 +90,7 @@ sub showLog {
|
|||
}
|
||||
|
||||
|
||||
sub download : Chained('build') PathPart('download') {
|
||||
sub download : Chained('build') PathPart {
|
||||
my ($self, $c, $productnr, @path) = @_;
|
||||
|
||||
my $product = $c->stash->{build}->buildproducts->find({productnr => $productnr});
|
||||
|
@ -125,6 +125,60 @@ sub download : Chained('build') PathPart('download') {
|
|||
}
|
||||
|
||||
|
||||
sub contents : Chained('build') PathPart {
|
||||
my ($self, $c, $productnr, @path) = @_;
|
||||
|
||||
my $product = $c->stash->{build}->buildproducts->find({productnr => $productnr});
|
||||
notFound($c, "Build doesn't have a product $productnr.") if !defined $product;
|
||||
|
||||
my $path = $product->path;
|
||||
|
||||
notFound($c, "Product $path has disappeared.") unless -e $path;
|
||||
|
||||
my $res;
|
||||
|
||||
if ($product->type eq "nix-build") {
|
||||
$res = `cd $path && find . -print0 | xargs -0 ls -ld --`;
|
||||
error($c, "`ls -lR' error: $?") if $? != 0;
|
||||
}
|
||||
|
||||
elsif ($path =~ /\.rpm$/) {
|
||||
$res = `rpm --query --info --package "$path"`;
|
||||
error($c, "RPM error: $?") if $? != 0;
|
||||
$res .= "===\n";
|
||||
$res .= `rpm --query --list --verbose --package "$path"`;
|
||||
error($c, "RPM error: $?") if $? != 0;
|
||||
}
|
||||
|
||||
elsif ($path =~ /\.deb$/) {
|
||||
$res = `dpkg-deb --info "$path"`;
|
||||
error($c, "`dpkg-deb' error: $?") if $? != 0;
|
||||
$res .= "===\n";
|
||||
$res .= `dpkg-deb --contents "$path"`;
|
||||
error($c, "`dpkg-deb' error: $?") if $? != 0;
|
||||
}
|
||||
|
||||
elsif ($path =~ /\.tar(\.gz|\.bz2|\.lzma)?$/ ) {
|
||||
$res = `tar tvfa "$path"`;
|
||||
error($c, "`tar' error: $?") if $? != 0;
|
||||
}
|
||||
|
||||
elsif ($path =~ /\.zip$/ ) {
|
||||
$res = `unzip -v "$path"`;
|
||||
error($c, "`unzip' error: $?") if $? != 0;
|
||||
}
|
||||
|
||||
else {
|
||||
error($c, "Unsupported file type.");
|
||||
}
|
||||
|
||||
die unless $res;
|
||||
|
||||
$c->stash->{'plain'} = { data => $res };
|
||||
$c->forward('Hydra::View::Plain');
|
||||
}
|
||||
|
||||
|
||||
sub runtimedeps : Chained('build') PathPart('runtime-deps') {
|
||||
my ($self, $c) = @_;
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
_ (product.name ? "/" _ product.name : "")
|
||||
_ (product.defaultpath ? "/" _ product.defaultpath : "") %]
|
||||
|
||||
[% contents = c.uri_for('/build' build.id 'contents' product.productnr) %]
|
||||
|
||||
[% SWITCH product.type %]
|
||||
|
||||
[% CASE "nix-build" %]
|
||||
|
@ -20,7 +22,7 @@
|
|||
<img src="/static/images/nix-build.png" alt="Source" />
|
||||
One-click install of Nix package <tt>[% build.nixname %]</tt>
|
||||
</a>
|
||||
[<a class="productDetailsToggle" href="javascript:">help</a>]
|
||||
[<a class="productDetailsToggle" href="javascript:">help</a>, <a href="[% contents %]">contents</a>]
|
||||
<div class="help productDetails">
|
||||
<p>If you have Nix installed on your machine, you can
|
||||
install this package and all its dependencies automatically
|
||||
|
@ -96,7 +98,7 @@
|
|||
File <tt>[% product.name %]</tt> of type <tt>[% product.subtype %]</tt>
|
||||
[% END %]
|
||||
</a>
|
||||
[<a class="productDetailsToggle" href="javascript:">details</a>]
|
||||
[<a class="productDetailsToggle" href="javascript:">details</a>, <a href="[% contents %]">contents</a>]
|
||||
<div class="productDetails">
|
||||
<table>
|
||||
<tr>
|
||||
|
|
Loading…
Reference in a new issue