[carton] 249/472: Refactor install/bundle to a new Builder class.
Lucas Kanashiro
kanashiro-guest at moszumanska.debian.org
Fri Jul 24 00:38:51 UTC 2015
This is an automated email from the git hooks/post-receive script.
kanashiro-guest pushed a commit to branch master
in repository carton.
commit c47061888c5075376c78208c2d816588aa0f6687
Author: Tatsuhiko Miyagawa <miyagawa at bulknews.net>
Date: Sat Jun 1 18:19:11 2013 +0900
Refactor install/bundle to a new Builder class.
---
lib/Carton.pm | 51 +++++++++++++-------------------------------
lib/Carton/Builder.pm | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++
lib/Carton/Mirror.pm | 25 ++++++++++++++++++++++
3 files changed, 99 insertions(+), 36 deletions(-)
diff --git a/lib/Carton.pm b/lib/Carton.pm
index 0ae437d..7fffe82 100644
--- a/lib/Carton.pm
+++ b/lib/Carton.pm
@@ -6,6 +6,8 @@ use 5.008_005;
use version; our $VERSION = version->declare("v0.9.52");
use Config qw(%Config);
+use Carton::Builder;
+use Carton::Mirror;
use Carton::Util;
use CPAN::Meta;
use File::Path ();
@@ -14,13 +16,12 @@ use File::Temp ();
use Module::CPANfile;
use constant CARTON_LOCK_VERSION => '0.9';
-our $DefaultMirror = 'http://cpan.metacpan.org/';
sub new {
my($class, %args) = @_;
bless {
path => $ENV{PERL_CARTON_PATH} || 'local',
- mirror => $ENV{PERL_CARTON_MIRROR} || $DefaultMirror,
+ mirror => $ENV{PERL_CARTON_MIRROR} || $Carton::Mirror::DefaultMirror,
}, $class;
}
@@ -28,21 +29,9 @@ sub local_cache {
File::Spec->rel2abs("vendor/cache");
}
-sub effective_mirrors {
- my($self, $cached) = @_;
-
- # push default CPAN mirror always, as a fallback
- my @mirrors;
- push @mirrors, ($cached ? $self->local_cache : $self->{mirror});
- push @mirrors, $DefaultMirror if $self->use_darkpan;
- push @mirrors, 'http://backpan.perl.org/';
-
- @mirrors;
-}
-
sub use_darkpan {
my $self = shift;
- $self->{mirror} ne $DefaultMirror;
+ $self->{mirror} ne $Carton::Mirror::DefaultMirror;
}
sub bundle {
@@ -50,15 +39,12 @@ sub bundle {
$lock->write_index($self->{mirror_file});
- local $self->{path} = File::Temp::tempdir(CLEANUP => 1); # ignore installed
-
- $self->run_cpanm(
- (map { ("--mirror", $_) } $self->effective_mirrors),
- "--mirror-index", $self->{mirror_file},
- "--skip-satisfied",
- "--save-dists", $self->local_cache,
- "--installdeps", ".",
+ my $builder = Carton::Builder->new(
+ mirror => Carton::Mirror->new($self->{mirror}),
+ index => $self->{mirror_file},
);
+
+ $builder->bundle($self->local_cache);
}
sub install {
@@ -69,20 +55,13 @@ sub install {
$lock->write_index($self->{mirror_file});
}
- $self->run_cpanm(
- (map { ("--mirror", $_) } $self->effective_mirrors($cached)),
- "--skip-satisfied",
- ( $lock ? ("--mirror-index", $self->{mirror_file}) : () ),
- ( $cascade ? "--cascade-search" : () ),
- ( $self->use_darkpan ? "--mirror-only" : () ),
- "--installdeps", ".",
- ) or die "Installing modules failed\n";
-}
+ my $mirror = Carton::Mirror->new($cached ? $self->local_cache : $self->{mirror});
+ my $builder = Carton::Builder->new(
+ mirror => $mirror,
+ index => $lock ? $self->{mirror_file} : undef,
+ );
-sub run_cpanm {
- my($self, @args) = @_;
- local $ENV{PERL_CPANM_OPT};
- !system "cpanm", "--quiet", "-L", $self->{path}, "--notest", @args;
+ $builder->install($self->{path}, $cascade);
}
sub update_lock_file {
diff --git a/lib/Carton/Builder.pm b/lib/Carton/Builder.pm
new file mode 100644
index 0000000..3b0a5e7
--- /dev/null
+++ b/lib/Carton/Builder.pm
@@ -0,0 +1,59 @@
+package Carton::Builder;
+use strict;
+use Moo;
+
+has mirror => (is => 'ro');
+has index => (is => 'ro');
+
+sub effective_mirrors {
+ my $self = shift;
+
+ # push default CPAN mirror always, as a fallback
+ my @mirrors = ($self->mirror);
+ push @mirrors, Carton::Mirror->default if $self->use_darkpan;
+ push @mirrors, Carton::Mirror->new('http://backpan.perl.org/');
+
+ @mirrors;
+}
+
+sub use_darkpan {
+ my $self = shift;
+ ! $self->mirror->is_default;
+}
+
+sub bundle {
+ my($self, $path) = @_;
+
+ my $temp = File::Temp::tempdir(CLEANUP => 1); # ignore installed
+
+ $self->run_cpanm(
+ "-L", $temp,
+ (map { ("--mirror", $_->url) } $self->effective_mirrors),
+ "--mirror-index", $self->index,
+ "--skip-satisfied",
+ "--save-dists", $path,
+ "--installdeps", ".",
+ );
+}
+
+sub install {
+ my($self, $path, $cascade) = @_;
+
+ $self->run_cpanm(
+ "-L", $path,
+ (map { ("--mirror", $_->url) } $self->effective_mirrors),
+ "--skip-satisfied",
+ ( $self->index ? ("--mirror-index", $self->index) : () ),
+ ( $cascade ? "--cascade-search" : () ),
+ ( $self->use_darkpan ? "--mirror-only" : () ),
+ "--installdeps", ".",
+ ) or die "Installing modules failed\n";
+}
+
+sub run_cpanm {
+ my($self, @args) = @_;
+ local $ENV{PERL_CPANM_OPT};
+ !system "cpanm", "--quiet", "--notest", @args;
+}
+
+1;
diff --git a/lib/Carton/Mirror.pm b/lib/Carton/Mirror.pm
new file mode 100644
index 0000000..b5ccfa8
--- /dev/null
+++ b/lib/Carton/Mirror.pm
@@ -0,0 +1,25 @@
+package Carton::Mirror;
+use strict;
+use Moo;
+
+our $DefaultMirror = 'http://cpan.metacpan.org/';
+
+has url => (is => 'ro');
+
+sub BUILDARGS {
+ my($class, $url) = @_;
+ return { url => $url };
+}
+
+sub default {
+ my $class = shift;
+ $class->new($DefaultMirror);
+}
+
+sub is_default {
+ my $self = shift;
+ $self->url eq $DefaultMirror;
+}
+
+1;
+
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/carton.git
More information about the Pkg-perl-cvs-commits
mailing list