Skip to content

Commit

Permalink
make perlbrew installl able to accept an URL to skaji/relocatable-p…
Browse files Browse the repository at this point in the history
…erl tarball.

It should be able to accept URLs found on this page:

    https://github.com/skaji/relocatable-perl/releases

For example:

    perlbrew install https://github.com/skaji/relocatable-perl/releases/download/5.40.0.0/perl-linux-amd64.tar.gz

Or, with `--as` parameter:

    perlbrew install https://github.com/skaji/relocatable-perl/releases/download/5.40.0.0/perl-linux-amd64.tar.gz --as perl-5.40

Currently this only download + extract the tarball, then move its
content to the installation dir, without checking whether os/arch
actually matches current environment.
  • Loading branch information
gugod committed Sep 19, 2024
1 parent faaf86c commit 3dcdef3
Showing 1 changed file with 64 additions and 2 deletions.
66 changes: 64 additions & 2 deletions lib/App/perlbrew.pm
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ BEGIN {
use Getopt::Long ();
use CPAN::Perl::Releases ();
use JSON::PP qw( decode_json );
use File::Copy qw( copy );
use File::Copy qw( copy move );
use Capture::Tiny ();

use App::Perlbrew::Util qw( files_are_the_same uniq find_similar_tokens );
use App::Perlbrew::Util qw( files_are_the_same uniq find_similar_tokens looks_like_url_of_skaji_relocatable_perl );
use App::Perlbrew::Path ();
use App::Perlbrew::Path::Root ();
use App::Perlbrew::HTTP qw( http_download http_get );
Expand Down Expand Up @@ -1227,6 +1227,10 @@ sub run_command_install {
exit(-1);
}
if ( my $detail = looks_like_url_of_skaji_relocatable_perl($dist) ) {
return $self->do_install_skaji_relocatable_perl($detail);
}
$self->{dist_name} = $dist; # for help msg generation, set to non
# normalized name
Expand Down Expand Up @@ -1630,6 +1634,64 @@ INSTALL
return;
}
sub do_install_skaji_relocatable_perl {
my ($self, $detail) = @_;
my $installation_name = $self->{as} || ("skaji-relocatable-perl-" . $detail->{version});
my $installation_path = $self->root->perls->child($installation_name);
die "ERROR: Installation target \"${installation_name}\" already exists\n"
if $installation_path->exists;
my $path = $self->root->dists
->child("skaji-relocatable-perl")
->child($detail->{version})
->mkpath()
->child($detail->{original_filename});
if (-f $path) {
print "Re-using the downloaded $path\n";
} else {
my $url = $detail->{url};
print "Downloading $url as $path\n";
my $error = http_download( $detail->{url}, $path );
if ($error) {
die "Failed to download from $url\nError: $error";
}
}
my $extracted_path = $self->do_extract_skaji_relocatable_perl_tarball($detail, $path);
move $extracted_path, $installation_path;
print "$installation_name is installed at $installation_path.\n";
print "$installation_name is successfully installed.\n";
}
sub do_extract_skaji_relocatable_perl_tarball {
my ($self, $detail, $tarball_path) = @_;
my $workdir = $self->builddir
->child("skaji-relocatable-perl")
->child($detail->{version});
$workdir->rmpath()
if $workdir->exists();
$workdir->mkpath();
my $tarx = "tar xzf";
my $extract_command = "cd $workdir; $tarx $tarball_path";
system($extract_command) == 0
or die "Failed to extract $tarball_path";
my ($extracted_path) = $workdir->children;
return $extracted_path;
}
sub do_install_program_from_url {
my ( $self, $url, $program_name, $body_filter ) = @_;
Expand Down

0 comments on commit 3dcdef3

Please sign in to comment.