diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2018-06-14 16:27:09 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2018-06-14 16:27:09 +0200 |
commit | 7c785ca236c25c0f18448c9c01bdb784cbcbf615 (patch) | |
tree | 4f9672d270b0d4d51d8c0b2d5e0efef49601f183 | |
parent | 14f145017b8c50e92384ab16bbdf48a84d7acc96 (diff) | |
download | slackbuilder-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.pm | 27 | ||||
-rw-r--r-- | lib/SlackBuilder.pm | 3 |
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); |