summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2018-06-14 16:27:09 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2018-06-14 16:27:09 +0200
commit7c785ca236c25c0f18448c9c01bdb784cbcbf615 (patch)
tree4f9672d270b0d4d51d8c0b2d5e0efef49601f183
parent14f145017b8c50e92384ab16bbdf48a84d7acc96 (diff)
downloadslackbuilder-7c785ca236c25c0f18448c9c01bdb784cbcbf615.tar.gz
slackbuilder-7c785ca236c25c0f18448c9c01bdb784cbcbf615.tar.bz2
Optionally modify local file names for downloaded sources
* lib/SlackBuild/Request.pm (local_name): New attribute. (extract_local_name): New method. * lib/SlackBuilder.pm (run): Use request->extract_local_name to obtain local file name from URI.
-rw-r--r--lib/SlackBuild/Request.pm27
-rw-r--r--lib/SlackBuilder.pm3
2 files changed, 29 insertions, 1 deletions
diff --git a/lib/SlackBuild/Request.pm b/lib/SlackBuild/Request.pm
index 531c221..53d1e16 100644
--- a/lib/SlackBuild/Request.pm
+++ b/lib/SlackBuild/Request.pm
@@ -5,6 +5,8 @@ use Carp;
use SlackBuild::URI;
use Text::ParseWords;
use JSON;
+use File::Basename;
+use Safe;
=head1 NAME
@@ -95,6 +97,9 @@ my %attributes = (
},
environ => {
type => 'HASH'
+ },
+ local_name => {
+ type => 'ARRAY'
}
);
@@ -219,4 +224,26 @@ sub prereq {
}
}
+sub extract_local_name {
+ my ($self, $path) = @_;
+ my $result;
+
+ if (my $codelist = $self->local_name) {
+ my $s = new Safe;
+ my $package = $self->package;
+ my $version = $self->version;
+ $s->share('$package','$version');
+ foreach my $code (@$codelist) {
+ $_ = $path;
+ if (defined(my $r = $s->reval($code))) {
+ $result = $_;
+ last;
+ } else {
+ croak "failed to eval \"$code\" on \"$path\": \n$@\n";
+ }
+ }
+ }
+ return $result || basename($path)
+}
+
1;
diff --git a/lib/SlackBuilder.pm b/lib/SlackBuilder.pm
index 6e30054..fc2fffe 100644
--- a/lib/SlackBuilder.pm
+++ b/lib/SlackBuilder.pm
@@ -260,7 +260,8 @@ sub run {
if (my $urilist = $self->request->source_uri) {
foreach my $s (@$urilist) {
my $uri = new SlackBuild::URI($s);
- my $dest = File::Spec->catfile($self->wd, basename($uri->path));
+ my $dest = File::Spec->catfile($self->wd,
+ $self->request->extract_local_name($uri->as_string));
unless ($uri->download($dest)) {
$self->error("can't download $uri: ".$uri->download_status);
return $self->errno(E_FAIL);

Return to:

Send suggestions and report system problems to the System administrator.