Hello community,
here is the log from the commit of package perl-App-perlbrew for
openSUSE:Factory checked in at 2019-10-30 14:44:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-App-perlbrew (Old)
and /work/SRC/openSUSE:Factory/.perl-App-perlbrew.new.2990 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-App-perlbrew"
Wed Oct 30 14:44:02 2019 rev:24 rq:743755 version:0.87
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-App-perlbrew/perl-App-perlbrew.changes
2019-01-21 11:03:22.899040805 +0100
+++
/work/SRC/openSUSE:Factory/.perl-App-perlbrew.new.2990/perl-App-perlbrew.changes
2019-10-30 14:44:04.537943516 +0100
@@ -1,0 +2,17 @@
+Mon Oct 28 10:45:36 UTC 2019 - <[email protected]>
+
+- updated to 0.87
+ see /usr/share/doc/packages/perl-App-perlbrew/Changes
+
+ 0.87
+ - Released at 2019-10-25T22:55:40+0900
+ - Thanks to our contributors: Branislav ZahradnĂk, Christopher Chavez,
Jon Jacobson, Konstantin S. Uvarin, Pali, Shoichi Kaji, Tomasz Konojacki,
jkjacobson, rage311
+ - Use the new official repo url for fetching perl blead. Github issue
#677
+ - Add `--min` and `--max` options to `exec` command. Github PR #656
+ - Fix "ERROR: Cannot find the tarball for perl-$version". Github PR #669
+ - Fix calling patchperl on readonly files. Github PR #674
+ - Fix installation from local tarbal files. See
https://rt.cpan.org/Ticket/Display.html?id=129871
+ - Internal refactoring. Github PR #667, #662
+ - Various corrections of documentation. Github PR #676, #660
+
+-------------------------------------------------------------------
Old:
----
App-perlbrew-0.86.tar.gz
New:
----
App-perlbrew-0.87.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-App-perlbrew.spec ++++++
--- /var/tmp/diff_new_pack.jIC15E/_old 2019-10-30 14:44:05.761944817 +0100
+++ /var/tmp/diff_new_pack.jIC15E/_new 2019-10-30 14:44:05.765944822 +0100
@@ -17,7 +17,7 @@
Name: perl-App-perlbrew
-Version: 0.86
+Version: 0.87
Release: 0
%define cpan_name App-perlbrew
Summary: Manage perl installations in your C<$HOME>
@@ -30,10 +30,10 @@
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: perl
BuildRequires: perl-macros
-BuildRequires: perl(CPAN::Perl::Releases) >= 3.66
+BuildRequires: perl(CPAN::Perl::Releases) >= 4.12
BuildRequires: perl(Capture::Tiny) >= 0.36
-BuildRequires: perl(Devel::PatchPerl) >= 1.52
-BuildRequires: perl(ExtUtils::MakeMaker) >= 6.86
+BuildRequires: perl(Devel::PatchPerl) >= 1.54
+BuildRequires: perl(ExtUtils::MakeMaker) >= 7.22
BuildRequires: perl(File::Temp) >= 0.2304
BuildRequires: perl(File::Which) >= 1.21
BuildRequires: perl(IO::All) >= 0.51
@@ -50,10 +50,10 @@
BuildRequires: perl(Test::Spec) >= 0.47
BuildRequires: perl(Test::TempDir::Tiny) >= 0.016
BuildRequires: perl(local::lib) >= 2.000014
-Requires: perl(CPAN::Perl::Releases) >= 3.66
+Requires: perl(CPAN::Perl::Releases) >= 4.12
Requires: perl(Capture::Tiny) >= 0.36
-Requires: perl(Devel::PatchPerl) >= 1.52
-Requires: perl(ExtUtils::MakeMaker) >= 6.86
+Requires: perl(Devel::PatchPerl) >= 1.54
+Requires: perl(ExtUtils::MakeMaker) >= 7.22
Requires: perl(File::Temp) >= 0.2304
Requires: perl(JSON::PP)
Requires: perl(Pod::Parser) >= 1.63
++++++ App-perlbrew-0.86.tar.gz -> App-perlbrew-0.87.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/Build.PL
new/App-perlbrew-0.87/Build.PL
--- old/App-perlbrew-0.86/Build.PL 2019-01-19 01:44:06.000000000 +0100
+++ new/App-perlbrew-0.87/Build.PL 2019-10-25 16:15:13.000000000 +0200
@@ -1,4 +1,4 @@
-# This Build.PL for App-perlbrew was generated by mbtiny 0.023.
+# This Build.PL for App-perlbrew was generated by mbtiny 0.026.
use 5.006;
use Module::Build::Tiny 0.034;
Build_PL();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/Changes
new/App-perlbrew-0.87/Changes
--- old/App-perlbrew-0.86/Changes 2019-01-19 01:44:06.000000000 +0100
+++ new/App-perlbrew-0.87/Changes 2019-10-25 16:15:13.000000000 +0200
@@ -1,3 +1,14 @@
+0.87
+ - Released at 2019-10-25T22:55:40+0900
+ - Thanks to our contributors: Branislav ZahradnĂk, Christopher Chavez,
Jon Jacobson, Konstantin S. Uvarin, Pali, Shoichi Kaji, Tomasz Konojacki,
jkjacobson, rage311
+ - Use the new official repo url for fetching perl blead. Github issue
#677
+ - Add `--min` and `--max` options to `exec` command. Github PR #656
+ - Fix "ERROR: Cannot find the tarball for perl-$version". Github PR #669
+ - Fix calling patchperl on readonly files. Github PR #674
+ - Fix installation from local tarbal files. See
https://rt.cpan.org/Ticket/Display.html?id=129871
+ - Internal refactoring. Github PR #667, #662
+ - Various corrections of documentation. Github PR #676, #660
+
0.86
- Released at 2019-01-19T09:39:55+0900
- Thanks to our contributors: Olaf Alders, Paul Cochrane
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/MANIFEST
new/App-perlbrew-0.87/MANIFEST
--- old/App-perlbrew-0.86/MANIFEST 2019-01-19 01:44:06.000000000 +0100
+++ new/App-perlbrew-0.87/MANIFEST 2019-10-25 16:15:13.000000000 +0200
@@ -16,6 +16,7 @@
lib/App/Perlbrew/Path/Installation.pm
lib/App/Perlbrew/Path/Installations.pm
lib/App/Perlbrew/Path/Root.pm
+lib/App/Perlbrew/Util.pm
lib/App/perlbrew.pm
metamerge.json
script/perlbrew
@@ -58,7 +59,9 @@
t/command-help.t
t/command-info.t
t/command-install-cpanm.t
+t/command-install-from-archive.t
t/command-install-patchperl.t
+t/command-install.t
t/command-lib.t
t/command-list.t
t/current_perl.t
@@ -67,7 +70,6 @@
t/failure-command-install-cpanm.t
t/failure-command-install-patchperl.t
t/fake-bin/curl
-t/get_blead_perl.t
t/home.t
t/http-program-control.t
t/http-ua-detect-non-curl.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/META.json
new/App-perlbrew-0.87/META.json
--- old/App-perlbrew-0.86/META.json 2019-01-19 01:44:06.000000000 +0100
+++ new/App-perlbrew-0.87/META.json 2019-10-25 16:15:13.000000000 +0200
@@ -4,7 +4,7 @@
"Kang-min Liu C<< <[email protected]> >>"
],
"dynamic_config" : 0,
- "generated_by" : "App::ModuleBuildTiny version 0.023",
+ "generated_by" : "App::ModuleBuildTiny version 0.026",
"license" : [
"mit"
],
@@ -21,16 +21,16 @@
},
"develop" : {
"requires" : {
- "App::ModuleBuildTiny" : "0.023",
+ "App::ModuleBuildTiny" : "0.026",
"Pod::Markdown" : "2.002"
}
},
"runtime" : {
"requires" : {
- "CPAN::Perl::Releases" : "3.66",
+ "CPAN::Perl::Releases" : "4.12",
"Capture::Tiny" : "0.36",
- "Devel::PatchPerl" : "1.52",
- "ExtUtils::MakeMaker" : "6.86",
+ "Devel::PatchPerl" : "1.54",
+ "ExtUtils::MakeMaker" : "7.22",
"File::Temp" : "0.2304",
"JSON::PP" : "0",
"Pod::Parser" : "1.63",
@@ -66,9 +66,12 @@
"App::Perlbrew::Path::Root" : {
"file" : "lib/App/Perlbrew/Path/Root.pm"
},
+ "App::Perlbrew::Util" : {
+ "file" : "lib/App/Perlbrew/Util.pm"
+ },
"App::perlbrew" : {
"file" : "lib/App/perlbrew.pm",
- "version" : "0.86"
+ "version" : "0.87"
}
},
"release_status" : "stable",
@@ -79,7 +82,8 @@
"web" : "https://github.com/gugod/App-perlbrew"
}
},
- "version" : "0.86",
+ "version" : "0.87",
"x_serialization_backend" : "JSON::PP version 2.97001",
+ "x_spdx_expression" : "MIT",
"x_static_install" : "1"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/META.yml
new/App-perlbrew-0.87/META.yml
--- old/App-perlbrew-0.86/META.yml 2019-01-19 01:44:06.000000000 +0100
+++ new/App-perlbrew-0.87/META.yml 2019-10-25 16:15:13.000000000 +0200
@@ -16,7 +16,7 @@
configure_requires:
Module::Build::Tiny: '0.034'
dynamic_config: 0
-generated_by: 'App::ModuleBuildTiny version 0.023, CPAN::Meta::Converter
version 2.150010'
+generated_by: 'App::ModuleBuildTiny version 0.026, CPAN::Meta::Converter
version 2.150010'
license: mit
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -31,14 +31,16 @@
file: lib/App/Perlbrew/Path/Installations.pm
App::Perlbrew::Path::Root:
file: lib/App/Perlbrew/Path/Root.pm
+ App::Perlbrew::Util:
+ file: lib/App/Perlbrew/Util.pm
App::perlbrew:
file: lib/App/perlbrew.pm
- version: '0.86'
+ version: '0.87'
requires:
- CPAN::Perl::Releases: '3.66'
+ CPAN::Perl::Releases: '4.12'
Capture::Tiny: '0.36'
- Devel::PatchPerl: '1.52'
- ExtUtils::MakeMaker: '6.86'
+ Devel::PatchPerl: '1.54'
+ ExtUtils::MakeMaker: '7.22'
File::Temp: '0.2304'
JSON::PP: '0'
Pod::Parser: '1.63'
@@ -46,6 +48,7 @@
local::lib: '2.000014'
resources:
repository: https://github.com/gugod/App-perlbrew.git
-version: '0.86'
+version: '0.87'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
+x_spdx_expression: MIT
x_static_install: '1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/cpanfile
new/App-perlbrew-0.87/cpanfile
--- old/App-perlbrew-0.86/cpanfile 2019-01-19 01:44:06.000000000 +0100
+++ new/App-perlbrew-0.87/cpanfile 2019-10-25 16:15:13.000000000 +0200
@@ -1,13 +1,13 @@
-requires 'CPAN::Perl::Releases' => '3.66';
+requires 'CPAN::Perl::Releases' => '4.12';
requires 'Capture::Tiny' => '0.36';
-requires 'Devel::PatchPerl' => '1.52';
+requires 'Devel::PatchPerl' => '1.54';
requires 'Pod::Parser' => '1.63';
requires 'Pod::Usage' => '1.68';
requires 'File::Temp' => '0.2304';
requires 'JSON::PP' => '0';
requires 'local::lib' => '2.000014';
-requires 'ExtUtils::MakeMaker' => '6.86';
-
+requires 'ExtUtils::MakeMaker' => '7.22';
+
on test => sub {
requires 'File::Temp' => '0.2304';
requires 'File::Which' => '1.21';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/lib/App/Perlbrew/Util.pm
new/App-perlbrew-0.87/lib/App/Perlbrew/Util.pm
--- old/App-perlbrew-0.86/lib/App/Perlbrew/Util.pm 1970-01-01
01:00:00.000000000 +0100
+++ new/App-perlbrew-0.87/lib/App/Perlbrew/Util.pm 2019-10-25
16:15:13.000000000 +0200
@@ -0,0 +1,43 @@
+package App::Perlbrew::Util;
+use strict;
+use warnings;
+use 5.008;
+
+use Exporter 'import';
+our @EXPORT = qw(uniq min editdist);
+
+sub uniq {
+ my %seen;
+ grep { !$seen{$_}++ } @_;
+}
+
+sub min(@) {
+ my $m = $_[0];
+ for(@_) {
+ $m = $_ if $_ < $m;
+ }
+ return $m;
+}
+
+# straight copy of Wikipedia's "Levenshtein Distance"
+sub editdist {
+ my @a = split //, shift;
+ my @b = split //, shift;
+
+ # There is an extra row and column in the matrix. This is the
+ # distance from the empty string to a substring of the target.
+ my @d;
+ $d[$_][0] = $_ for (0 .. @a);
+ $d[0][$_] = $_ for (0 .. @b);
+
+ for my $i (1 .. @a) {
+ for my $j (1 .. @b) {
+ $d[$i][$j] = ($a[$i-1] eq $b[$j-1] ? $d[$i-1][$j-1]
+ : 1 + min($d[$i-1][$j], $d[$i][$j-1], $d[$i-1][$j-1]));
+ }
+ }
+
+ return $d[@a][@b];
+}
+
+1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/lib/App/perlbrew.pm
new/App-perlbrew-0.87/lib/App/perlbrew.pm
--- old/App-perlbrew-0.86/lib/App/perlbrew.pm 2019-01-19 01:44:06.000000000
+0100
+++ new/App-perlbrew-0.87/lib/App/perlbrew.pm 2019-10-25 16:15:13.000000000
+0200
@@ -2,7 +2,7 @@
use strict;
use warnings;
use 5.008;
-our $VERSION = "0.86";
+our $VERSION = "0.87";
use Config;
BEGIN {
@@ -23,21 +23,10 @@
use CPAN::Perl::Releases;
use JSON::PP 'decode_json';
+use App::Perlbrew::Util;
use App::Perlbrew::Path;
use App::Perlbrew::Path::Root;
-sub min(@) {
- my $m = $_[0];
- for(@_) {
- $m = $_ if $_ < $m;
- }
- return $m;
-}
-
-sub uniq {
- my %seen; grep { !$seen{$_}++ } @_;
-}
-
### global variables
# set $ENV{SHELL} to executable path of parent process (= shell) if it's
missing
@@ -246,29 +235,7 @@
return $v[1]*1000000 + $v[2]*1000 + $v[3];
}
-# straight copy of Wikipedia's "Levenshtein Distance"
-sub editdist {
- my @a = split //, shift;
- my @b = split //, shift;
-
- # There is an extra row and column in the matrix. This is the
- # distance from the empty string to a substring of the target.
- my @d;
- $d[$_][0] = $_ for (0 .. @a);
- $d[0][$_] = $_ for (0 .. @b);
-
- for my $i (1 .. @a) {
- for my $j (1 .. @b) {
- $d[$i][$j] = ($a[$i-1] eq $b[$j-1] ? $d[$i-1][$j-1]
- : 1 + min($d[$i-1][$j], $d[$i][$j-1], $d[$i-1][$j-1]));
- }
- }
-
- return $d[@a][@b];
-}
-
### methods
-
sub new {
my($class, @argv) = @_;
@@ -418,7 +385,7 @@
}
sub builddir {
- my ($self) = @_;
+ my ($self) = @_;
return $self->{builddir} || $self->root->build;
}
@@ -728,8 +695,8 @@
}
sub _firstrcfile {
- my ($self) = @_;
- foreach my $path (@_) {
+ my ($self, @files) = @_;
+ foreach my $path (@files) {
return $path if -f App::Perlbrew::Path->new ($self->env('HOME'),
$path);
}
return;
@@ -981,7 +948,7 @@
}
}
- my $json =
http_get("https://fastapi.metacpan.org/v1/release/_search?size=1&q=name:perl-${version}");
+ my $json =
http_get("'https://fastapi.metacpan.org/v1/release/_search?size=1&q=name:perl-${version}'");
my $result;
unless ($json and $result = decode_json($json)->{hits}{hits}[0]) {
@@ -1057,7 +1024,7 @@
}
}
- my $json =
http_get("https://fastapi.metacpan.org/v1/release/_search?size=1&q=name:perl-${version}");
+ my $json =
http_get("'https://fastapi.metacpan.org/v1/release/_search?size=1&q=name:perl-${version}'");
my $result;
unless ($json and $result = decode_json($json)->{hits}{hits}[0]) {
@@ -1205,11 +1172,11 @@
elsif ($shell =~ m/zsh\d?$/) {
$code = "source $root_dir/etc/bashrc";
$yourshrc = $self->_firstrcfile(qw(
- zshenv
+ .zshenv
.bash_profile
.bash_login
.profile
- )) || "zshenv";
+ )) || ".zshenv";
}
elsif ($shell =~ m/fish/) {
$code = ". $root_dir/etc/perlbrew.fish";
@@ -1308,7 +1275,7 @@
require File::Spec;
my $dist_extracted_dir = File::Spec->rel2abs($dist);
- $self->do_install_this($dist_extracted_dir, $dist_version,
"$dist_name-$dist_version");
+ $self->do_install_this(App::Perlbrew::Path->new ($dist_extracted_dir),
$dist_version, "$dist_name-$dist_version");
return;
}
@@ -1319,7 +1286,11 @@
my ($dist_version) = $dist =~ m/-([\d.]+(?:-RC\d+)?|git)\./;
my ($dist_tarball) = $dist =~ m{/([^/]*)$};
- my $dist_tarball_path = $self->root->dists ($dist_tarball);
+ if (! $dist_version && $dist =~ /blead\.tar.gz$/) {
+ $dist_version = "blead";
+ }
+
+ my $dist_tarball_path = $self->root->dists($dist_tarball);
my $dist_tarball_url = $dist;
$dist = "$dist_name-$dist_version"; # we install it as this name later
@@ -1373,74 +1344,15 @@
return $extracted_dir;
}
-# Search for directories inside a extracted tarball downloaded as perl "blead"
-# Use a Schwartzian Transform in case there are lots of dirs that
-# look like "perl-$SHA1", which is what's inside blead.tar.gz,
-# so we stat each one only once, ordering (descending )the directories per
mtime
-# Expects as parameters:
-# - the path to the extracted "blead" tarball
-# - an array reference, that will be used to cache all contents from the read
directory
-# Returns the most recent directory which name matches the expected one.
-sub search_blead_dir {
- my ($build_dir, $contents_ref) = @_;
- local *DIRH;
- opendir DIRH, $build_dir or die "Couldn't open ${build_dir}: $!";
- @{$contents_ref} = grep {!/^\./ && -d $build_dir->child ($_)} readdir DIRH;
- closedir DIRH or warn "Couldn't close ${build_dir}: $!";
- my @candidates = grep { m/^perl-blead-[0-9a-f]{4,40}$/ } @{$contents_ref};
- @candidates = map { $_->[0] }
- sort { $b->[1] <=> $a->[1] } # descending
- map { [ $_, (stat( $build_dir->child ($_) ))[9] ] }
@candidates;
- if (scalar(@candidates) > 0) {
- # take the newest one
- return $candidates[0];
- } else {
- return;
- }
-}
-
sub do_install_blead {
- my ($self, $dist) = @_;
- my $dist_name = 'perl';
- my $dist_git_describe = 'blead';
- my $dist_version = 'blead';
+ my ($self) = @_;
# We always blindly overwrite anything that's already there,
# because blead is a moving target.
- my $dist_tarball = 'blead.tar.gz';
- my $dist_tarball_path = $self->root->dists ($dist_tarball);
- print "Fetching $dist_git_describe as $dist_tarball_path\n";
-
- my $error =
http_download("http://perl5.git.perl.org/perl.git/snapshot/$dist_tarball",
$dist_tarball_path);
+ my $dist_tarball_path = $self->root->dists("blead.tar.gz");
+ unlink($dist_tarball_path) if -f $dist_tarball_path;
- if ($error) {
- die "\nERROR: Failed to download perl-blead tarball.\n\n";
- }
-
- # Returns the wrong extracted dir for blead
- $self->do_extract_tarball($dist_tarball_path);
-
- my $build_dir = $self->builddir;
- my @contents;
- my $dist_extracted_subdir = search_blead_dir($build_dir, \@contents);
-
- # there might be an additional level on $build_dir
- unless (defined($dist_extracted_subdir)) {
- warn "No candidate found at $build_dir, trying a level deeper";
- for my $item (@contents) {
- my $another_sub = $build_dir->child ($item);
- $dist_extracted_subdir = search_blead_dir($another_sub);
- if (defined($dist_extracted_subdir)) {
- $build_dir = $another_sub;
- last;
- }
- }
- }
-
- die "Could not identify where is the source code to build under
$build_dir, aborting..." unless (defined($dist_extracted_subdir));
- my $dist_extracted_dir = $build_dir->child ($dist_extracted_subdir);
- $self->do_install_this($dist_extracted_dir, $dist_version,
"$dist_name-$dist_version");
- return;
+
$self->do_install_url("https://github.com/Perl/perl5/archive/blead.tar.gz");
}
sub resolve_stable_version {
@@ -1500,7 +1412,6 @@
my ($dist_type, $dist_version);
if (($dist_type, $dist_version) = $dist =~
/^(?:(c?perl)-?)?([\d._]+(?:-RC\d+)?|git|stable|blead)$/) {
- my $dist_version = ($dist_version eq 'stable' ?
$self->resolve_stable_version : $2);
$dist_version = $self->resolve_stable_version if $dist_version eq
'stable';
$dist_type ||= "perl";
$dist = "${dist_type}-${dist_version}"; # normalize dist name
@@ -1511,7 +1422,7 @@
}
if ($dist_type eq 'perl' && $dist_version eq 'blead') {
- $self->do_install_blead($dist);
+ $self->do_install_blead();
}
else {
$self->do_install_release($dist, $dist_version);
@@ -1523,7 +1434,7 @@
$self->do_install_git($dist);
}
elsif (-f $dist) {
- $self->do_install_archive($dist);
+ $self->do_install_archive(App::Perlbrew::Path->new ($dist));
}
elsif ($dist =~ m/^(?:https?|ftp|file)/) { # more protocols needed?
$self->do_install_url($dist);
@@ -1733,8 +1644,8 @@
}
my $dist_extracted_path = $self->do_extract_tarball($dist_tarball_path);
+
$self->do_install_this($dist_extracted_path, $dist_version,
$installation_name);
- return;
}
sub do_install_this {
@@ -1805,7 +1716,7 @@
"cd $dist_extracted_dir",
"rm -f config.sh Policy.sh",
);
- push @preconfigure_commands, $patchperl unless $self->{"no-patchperl"} ||
$looks_like_we_are_installing_cperl;
+ push @preconfigure_commands, 'chmod -R +w .', $patchperl unless
$self->{"no-patchperl"} || $looks_like_we_are_installing_cperl;
my $configure_flags = $self->env("PERLBREW_CONFIGURE_FLAGS") || '-de';
@@ -2167,7 +2078,7 @@
my $is_verbose = $self->{verbose};
for my $i ($self->installed_perls) {
- printf "%2s %-20s %-20s %s\n",
+ printf "%-2s%-20s %-20s %s\n",
$i->{is_current} ? '*' : '',
$i->{name},
( $is_verbose ?
@@ -2468,7 +2379,7 @@
local (@ARGV) = @{$self->{original_argv}};
Getopt::Long::Configure ('require_order');
- my @command_options = ('with=s', 'halt-on-error');
+ my @command_options = ('with=s', 'halt-on-error', 'min=s', 'max=s');
$self->parse_cmdline (\%opts, @command_options);
shift @ARGV; # "exec"
@@ -2491,6 +2402,16 @@
@exec_with = map { ($_, @{$_->{libs}}) } $self->installed_perls;
}
+ if ($opts{min}) {
+ # TODO use comparable version.
+ # For now, it doesn't produce consistent results for 5.026001 and
5.26.1
+ @exec_with = grep { $_->{orig_version} >= $opts{min} } @exec_with;
+ };
+
+ if ($opts{max}) {
+ @exec_with = grep { $_->{orig_version} <= $opts{max} } @exec_with;
+ };
+
if (0 == @exec_with) {
print "No perl installation found.\n" unless $self->{quiet};
}
@@ -2801,7 +2722,7 @@
'perl',
'-MExtUtils::Installed',
'-le',
- sprintf('BEGIN{@INC=grep {$_ ne q!.!} @INC}; %s print {%s} $_ for
ExtUtils::Installed->new->modules;',
+ sprintf('BEGIN{@INC=grep {$_ ne q!.!} @INC}; %s print {%s} $_ for grep
{$_ ne q!Perl!} ExtUtils::Installed->new->modules;',
$output_filename ? sprintf('open my $output_fh, \'>\', "%s";
', $output_filename) : '',
$output_filename ? '$output_fh' : 'STDOUT')
);
@@ -3291,14 +3212,14 @@
return <<'WRAPPER';
set perlbrew_exit_status=0
-if ( $1 =~ -* ) then
- set perlbrew_short_option=$1
+if ( "$1" =~ -* ) then
+ set perlbrew_short_option="$1"
shift
else
set perlbrew_short_option=""
endif
-switch ( $1 )
+switch ( "$1" )
case use:
if ( $%2 == 0 ) then
if ( $?PERLBREW_PERL == 0 ) then
@@ -3312,8 +3233,8 @@
endif
else
set perlbrew_line_count=0
- foreach perlbrew_line ( "`\perlbrew env $2`" )
- eval $perlbrew_line
+ foreach perlbrew_line ( "`\perlbrew env $2:q`" )
+ eval "$perlbrew_line"
@ perlbrew_line_count++
end
if ( $perlbrew_line_count == 0 ) then
@@ -3328,27 +3249,27 @@
if ( $%2 == 0 ) then
\perlbrew switch
else
- perlbrew use $2 && source $PERLBREW_ROOT/etc/csh_reinit $2
+ perlbrew use "$2" && source "$PERLBREW_ROOT/etc/csh_reinit" "$2"
endif
breaksw
case off:
unsetenv PERLBREW_PERL
foreach perlbrew_line ( "`\perlbrew env`" )
- eval $perlbrew_line
+ eval "$perlbrew_line"
end
- source $PERLBREW_ROOT/etc/csh_set_path
+ source "$PERLBREW_ROOT/etc/csh_set_path"
echo "perlbrew is turned off."
breaksw
case switch-off:
unsetenv PERLBREW_PERL
- source $PERLBREW_ROOT/etc/csh_reinit ''
+ source "$PERLBREW_ROOT/etc/csh_reinit" ''
echo "perlbrew is switched off."
breaksw
default:
- \perlbrew $perlbrew_short_option $argv
+ \perlbrew $perlbrew_short_option:q $argv:q
set perlbrew_exit_status=$?
breaksw
endsw
@@ -3412,7 +3333,7 @@
endif
source "$PERLBREW_ROOT/etc/csh_set_path"
-alias perlbrew 'source $PERLBREW_ROOT/etc/csh_wrapper'
+alias perlbrew 'source "$PERLBREW_ROOT/etc/csh_wrapper"'
CSHRC
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/script/perlbrew
new/App-perlbrew-0.87/script/perlbrew
--- old/App-perlbrew-0.86/script/perlbrew 2019-01-19 01:44:06.000000000
+0100
+++ new/App-perlbrew-0.87/script/perlbrew 2019-10-25 16:15:13.000000000
+0200
@@ -384,7 +384,15 @@
=head1 COMMAND: EXEC
-Usage: perlbrew exec [--with perl-name[,perl-name...]] <command> <args...>
+Usage: perlbrew exec [options] <command> <args...>
+
+Options for C<exec> command:
+
+ --with perl-version,... - only use these versions
+ --min n.nnnnn - minimum perl version
+ (format is the same as in 'use 5.012')
+ --max n.nnnnn - maximum perl version
+ --halt-on-error - stop on first nonzero exit status
Execute command for each perl installations, one by one.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/t/08.error_install_blead.t
new/App-perlbrew-0.87/t/08.error_install_blead.t
--- old/App-perlbrew-0.86/t/08.error_install_blead.t 2019-01-19
01:44:06.000000000 +0100
+++ new/App-perlbrew-0.87/t/08.error_install_blead.t 2019-10-25
16:15:13.000000000 +0200
@@ -21,7 +21,7 @@
my $app = App::perlbrew->new("install", "perl-blead");
$app->run;
},
- qr[ERROR: Failed to download perl-blead tarball.]
+ qr[ERROR: Failed to download https://.+/blead\.tar\.gz]
);
throws_ok(
@@ -29,7 +29,7 @@
my $app = App::perlbrew->new("install", "blead");
$app->run;
},
- qr[ERROR: Failed to download perl-blead tarball.]
+ qr[ERROR: Failed to download https://.+/blead\.tar\.gz]
);
done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/t/11.editdist.t
new/App-perlbrew-0.87/t/11.editdist.t
--- old/App-perlbrew-0.86/t/11.editdist.t 2019-01-19 01:44:06.000000000
+0100
+++ new/App-perlbrew-0.87/t/11.editdist.t 2019-10-25 16:15:13.000000000
+0200
@@ -2,14 +2,13 @@
use strict;
use warnings;
use Test::More;
-use App::perlbrew;
+use App::Perlbrew::Util qw< editdist >;
-*ed = *App::perlbrew::editdist;
-is ed(qw/Joe Jim/), 2;
-is ed(qw/Jack Jill/), 3;
-is ed(qw/Jim Jimmy/), 2;
-is ed(qw/superman supergirl/), 4;
-is ed(qw/supercalifragilisticexpyalligocious superman/), 29;
-is ed(qw/foo bar/), 3;
+is editdist(qw/Joe Jim/), 2;
+is editdist(qw/Jack Jill/), 3;
+is editdist(qw/Jim Jimmy/), 2;
+is editdist(qw/superman supergirl/), 4;
+is editdist(qw/supercalifragilisticexpyalligocious superman/), 29;
+is editdist(qw/foo bar/), 3;
done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/t/command-exec.t
new/App-perlbrew-0.87/t/command-exec.t
--- old/App-perlbrew-0.86/t/command-exec.t 2019-01-19 01:44:06.000000000
+0100
+++ new/App-perlbrew-0.87/t/command-exec.t 2019-10-25 16:15:13.000000000
+0200
@@ -265,7 +265,49 @@
};
};
+describe "minimal perl version" => sub {
+ it "only executes the needed version" => sub {
+ my @perl_paths;
+ my $app = App::perlbrew->new(qw(exec --min 5.014), qw(perl -E), "say
42");
+ $app->expects("do_system_with_exit_code")->exactly(2)->returns(sub {
+ my ($self, @args) = @_;
+ my ($perlbrew_bin_path, $perlbrew_perl_bin_path, @paths) =
split(":", $ENV{PATH});
+ push @perl_paths, $perlbrew_perl_bin_path;
+ return 0;
+ });
+
+ $app->run;
+
+ # Don't care about the order, just the fact all of them were visited
+ is_deeply [sort @perl_paths], [sort (
+ App::Perlbrew::Path->new($App::perlbrew::PERLBREW_ROOT, "perls",
"perl-5.14.2", "bin"),
+ App::Perlbrew::Path->new($App::perlbrew::PERLBREW_ROOT, "perls",
"perl-5.14.1", "bin"),
+ )];
+ };
+};
+
+describe "maximum perl version" => sub {
+ it "only executes the needed version" => sub {
+
+ my @perl_paths;
+ my $app = App::perlbrew->new(qw(exec --max 5.014), qw(perl -E), "say
42");
+ $app->expects("do_system_with_exit_code")->exactly(2)->returns(sub {
+ my ($self, @args) = @_;
+ my ($perlbrew_bin_path, $perlbrew_perl_bin_path, @paths) =
split(":", $ENV{PATH});
+ push @perl_paths, $perlbrew_perl_bin_path;
+ return 0;
+ });
+
+ $app->run;
+
+ # Don't care about the order, just the fact all of them were visited
+ is_deeply [sort @perl_paths], [sort (
+ App::Perlbrew::Path->new($App::perlbrew::PERLBREW_ROOT, "perls",
"perl-5.12.4", "bin"),
+ App::Perlbrew::Path->new($App::perlbrew::PERLBREW_ROOT, "perls",
"perl-5.12.3", "bin"),
+ )];
+ };
+};
runtests unless caller;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/t/command-install-from-archive.t
new/App-perlbrew-0.87/t/command-install-from-archive.t
--- old/App-perlbrew-0.86/t/command-install-from-archive.t 1970-01-01
01:00:00.000000000 +0100
+++ new/App-perlbrew-0.87/t/command-install-from-archive.t 2019-10-25
16:15:13.000000000 +0200
@@ -0,0 +1,148 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use Test::Spec 0.49; # with_deep
+use Test::Deep;
+
+use FindBin;
+use lib $FindBin::Bin;
+
+use App::perlbrew;
+
+use Hash::Util;
+
+require 'test_helpers.pl';
+
+sub arrange_file;
+sub arrange_available_perls;
+sub arrange_command_line;
+sub expect_dispatch_via;
+sub should_install_from_archive;
+sub is_path;
+
+describe "command install <archive>" => sub {
+ should_install_from_archive "with perl source archive" => (
+ filename => 'perl-5.28.0.tar.gz',
+ dist_version => '5.28.0',
+ installation_name => 'perl-5.28.0',
+ );
+
+ should_install_from_archive "with perfixed perl source archive" => (
+ filename => 'downloaded-perl-5.28.0.tar.gz',
+ dist_version => '5.28.0',
+ installation_name => 'perl-5.28.0',
+ );
+
+ should_install_from_archive "with cperl source archive" => (
+ filename => 'cperl-5.28.0.tar.gz',
+ dist_version => '5.28.0',
+ installation_name => 'cperl-5.28.0',
+ );
+
+ should_install_from_archive "with prefixed cperl source archive" => (
+ filename => 'downloaded-cperl-5.28.0.tar.gz',
+ dist_version => '5.28.0',
+ installation_name => 'cperl-5.28.0',
+ );
+
+};
+
+runtests unless caller;
+
+sub should_install_from_archive {
+ my ($title, %params) = @_;
+
+ Hash::Util::lock_keys %params,
+ 'filename',
+ 'dist_version',
+ 'installation_name',
+ ;
+
+ context $title => sub {
+ my $file;
+
+ before each => sub {
+ $file = arrange_file
+ name => $params{filename},,
+ tempdir => 1,
+ ;
+
+ arrange_command_line install => $file;
+ };
+
+ expect_dispatch_via
+ method => 'do_install_archive',
+ with_args => [
+ is_path (methods (basename =>
$params{filename}))
+ ];
+
+ expect_dispatch_via method => 'do_extract_tarball',
+ stubs => { do_install_this => '' },
+ with_args => [
+ is_path (methods (basename =>
$params{filename}))
+ ];
+
+ expect_dispatch_via method => 'do_install_this',
+ stubs => { do_extract_tarball => sub {
$_[-1]->dirname->child ('foo') } },
+ with_args => [
+ is_path (methods (basename => 'foo')),
+ $params{dist_version},
+ $params{installation_name},
+ ];
+ };
+};
+
+sub is_path {
+ my (@tests) = @_;
+
+ all (
+ obj_isa ('App::Perlbrew::Path'),
+ @tests,
+ );
+}
+
+sub arrange_file {
+ my (%params) = @_;
+
+ my $dir;
+ $dir ||= $params{dir} if $params{dir};
+ $dir ||= tempdir (CLEANUP => 1) if $params{tempdir};
+ $dir ||= '.';
+
+ my $file = file ($dir, $params{name});
+
+ open my $fh, '>', $file;
+ close $fh;
+
+ return $file;
+}
+
+sub arrange_command_line {
+ my (@command_line) = @_;
+
+ share my %shared;
+
+ # Enforce stringification
+ $shared{app} = App::perlbrew->new (map "$_", @command_line);
+}
+
+sub expect_dispatch_via {
+ my (%params) = @_;
+
+ it "should dispatch via $params{method}()" => sub {
+ share my %shared;
+
+ App::perlbrew->stubs (%{ $params{stubs} })
+ if $params{stubs};
+
+ my $expectation = App::perlbrew->expects ($params{method});
+ $expectation = $expectation->with_deep (@{ $params{with_args} })
+ if $params{with_args};
+
+ $shared{app}->run;
+
+ ok $expectation->verify;
+ };
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/t/command-install.t
new/App-perlbrew-0.87/t/command-install.t
--- old/App-perlbrew-0.86/t/command-install.t 1970-01-01 01:00:00.000000000
+0100
+++ new/App-perlbrew-0.87/t/command-install.t 2019-10-25 16:15:13.000000000
+0200
@@ -0,0 +1,111 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use Test::Spec 0.49; # with_deep
+use Test::Deep;
+
+use FindBin;
+use lib $FindBin::Bin;
+
+use App::perlbrew;
+
+require 'test_helpers.pl';
+
+sub arrange_available_perls;
+sub arrange_command_line;
+sub expect_dispatch_via;
+
+describe "command install" => sub {
+ it "should install exact perl version" => sub {
+ arrange_command_line install => 'perl-5.12.1';
+
+ expect_dispatch_via do_install_release => [ 'perl-5.12.1',
'5.12.1' ];
+ };
+
+ it "should install exact cperl version" => sub {
+ arrange_command_line install => 'cperl-5.26.4';
+
+ expect_dispatch_via do_install_release => [ 'cperl-5.26.4',
'5.26.4' ];
+ };
+
+ it "should install stable version of perl" => sub {
+ arrange_command_line install => 'perl-stable';
+
+ arrange_available_perls qw[
+ perl-5.12.2
+ perl-5.12.3
+ perl-5.14.1
+ perl-5.14.2
+ perl-5.29.0
+ ];
+
+ expect_dispatch_via do_install_release => [ 'perl-5.14.2',
'5.14.2' ];
+ };
+
+ it "should install blead perl" => sub {
+ arrange_command_line install => 'perl-blead';
+ expect_dispatch_via do_install_blead => [];
+ };
+
+ it "should install git checkout" => sub {
+ my $checkout = tempdir (CLEANUP => 1);
+ dir ($checkout, '.git')->mkpath;
+
+ arrange_command_line install => $checkout;
+
+ expect_dispatch_via do_install_git => [ $checkout ];
+ };
+
+ it "should install from archive" => sub {
+ my $checkout = tempdir (CLEANUP => 1);
+ my $file = file ($checkout, 'archive.tar.gz')->stringify;
+
+ open my $fh, '>', $file;
+ close $fh;
+
+ arrange_command_line install => $file;
+
+ expect_dispatch_via do_install_archive => [ all (
+ obj_isa ('App::Perlbrew::Path'),
+ methods (stringify => $file),
+ ) ];
+ };
+
+ it "should install from uri" => sub {
+ arrange_command_line install => 'http://example.com/foo/bar';
+
+ expect_dispatch_via do_install_url => [
'http://example.com/foo/bar' ];
+ };
+};
+
+runtests unless caller;
+
+sub arrange_available_perls {
+ my (@list) = @_;
+
+ App::perlbrew->stubs (available_perls => sub {
$_[0]->sort_perl_versions (@list) });
+}
+
+sub arrange_command_line {
+ my (@command_line) = @_;
+
+ share my %shared;
+
+ $shared{app} = App::perlbrew->new (@command_line);
+}
+
+sub expect_dispatch_via {
+ my ($method, $arguments) = @_;
+
+ share my %shared;
+
+ my $expectation = App::perlbrew->expects ($method);
+ $expectation = $expectation->with_deep (@$arguments)
+ if $arguments;
+
+
+ $shared{app}->run;
+
+ ok $expectation->verify;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/t/command-list.t
new/App-perlbrew-0.87/t/command-list.t
--- old/App-perlbrew-0.86/t/command-list.t 2019-01-19 01:44:06.000000000
+0100
+++ new/App-perlbrew-0.87/t/command-list.t 2019-10-25 16:15:13.000000000
+0200
@@ -32,7 +32,7 @@
describe "when there no libs under PERLBREW_HOME,", sub {
it "displays a list of perl installation names", sub {
my $app = App::perlbrew->new("list");
- stdout_like sub { $app->run(); },
qr/^(\s\*)?\s{1,3}c?perl-?\d\.\d{1,3}[_.]\d{1,2}\s+/, 'Cannot find Perl in
output'
+ stdout_like sub { $app->run(); },
qr/^(\s|\*)\sc?perl-?\d\.\d{1,3}[_.]\d{1,2}\s+/, 'Cannot find Perl in output'
};
};
@@ -48,13 +48,13 @@
it "displays lib names" => sub {
my $app = App::perlbrew->new("list");
- stdout_like sub { $app->run(); },
qr/^(\s\*)?\s{1,3}c?perl-?\d\.\d{1,3}[_.]\d{1,2}(@\w+)?/, 'Cannot find Perl
with libraries in output'
+ stdout_like sub { $app->run(); },
qr/^(\s|\*)\sc?perl-?\d\.\d{1,3}[_.]\d{1,2}(@\w+)?/, 'Cannot find Perl with
libraries in output'
};
it "marks currently activated lib", sub {
$ENV{PERLBREW_LIB} = "nobita";
my $app = App::perlbrew->new("list");
- stdout_like sub { $app->run(); },
qr/^(\s\*)?\s{1,3}c?perl-?\d\.\d{1,3}[_.]\d{1,2}(\@nobita)?/, 'Cannot find Perl
with libraries in output'
+ stdout_like sub { $app->run(); },
qr/^(\s|\*)\sc?perl-?\d\.\d{1,3}[_.]\d{1,2}(\@nobita)?/, 'Cannot find Perl with
libraries in output'
};
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/App-perlbrew-0.86/t/get_blead_perl.t
new/App-perlbrew-0.87/t/get_blead_perl.t
--- old/App-perlbrew-0.86/t/get_blead_perl.t 2019-01-19 01:44:06.000000000
+0100
+++ new/App-perlbrew-0.87/t/get_blead_perl.t 1970-01-01 01:00:00.000000000
+0100
@@ -1,34 +0,0 @@
-use warnings;
-use strict;
-use Test::More tests => 6;
-use App::perlbrew;
-use Test::TempDir::Tiny 0.016;
-
-my $dir = tempdir();
-mkdir("$dir/build");
-mkdir("$dir/build/blead");
-touch( "$dir/build/blead", 'OYFTV_51234' );
-touch( "$dir/build/blead", 'Hwefwo8124' );
-touch( "$dir/build/blead", 'perl-blead-hsf743r' );
-my $blead = 'perl-blead-e7e8ce8';
-mkdir("$dir/build/blead/$blead");
-
-my @content;
-my $found_dir = App::perlbrew::search_blead_dir( App::Perlbrew::Path->new
("$dir/build"), \@content );
-is( $found_dir, undef, 'no candidate directory is found' );
-is( scalar(@content), 1, 'there are only directories on content cache' );
-is( $content[0], 'blead', 'have the expected directory in the content cache' );
-$found_dir = App::perlbrew::search_blead_dir( App::Perlbrew::Path->new
("$dir/build/blead"), \@content );
-is( $found_dir, $blead, 'the expected directory is found' );
-is( scalar(@content), 1, 'there are only directories on content cache' );
-is( $content[0], $blead, 'have the expected directory in the content cache' );
-
-# creating files to make sure search_blead_dir only considers directories
-sub touch {
- my ( $dir, $file ) = @_;
- my $path = "$dir/$file";
- open( my $out, '>', $path ) or die "Cannot create $path: $!";
- print $out '...';
- close($out);
-}
-