[carton] 275/472: refactor dependency tracker as Carton::Requirements class
Lucas Kanashiro
kanashiro-guest at moszumanska.debian.org
Fri Jul 24 00:38:54 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 2ddfe5831639cc40555e77bf2920a7edb286a67b
Author: Tatsuhiko Miyagawa <miyagawa at bulknews.net>
Date: Tue Jun 4 13:14:07 2013 +0900
refactor dependency tracker as Carton::Requirements class
---
lib/Carton/CLI.pm | 42 +++++++--------------------
lib/Carton/Dependency.pm | 20 ++++---------
lib/Carton/{Dependency.pm => Dist.pm} | 2 +-
lib/Carton/Lock.pm | 8 +++---
lib/Carton/Requirements.pm | 54 +++++++++++++++++++++++++++++++++++
5 files changed, 74 insertions(+), 52 deletions(-)
diff --git a/lib/Carton/CLI.pm b/lib/Carton/CLI.pm
index 5fed9bc..7a65286 100644
--- a/lib/Carton/CLI.pm
+++ b/lib/Carton/CLI.pm
@@ -12,12 +12,11 @@ use Carton::Mirror;
use Carton::Lock;
use Carton::Util;
use Carton::Error;
-use Scalar::Util;
+use Carton::Requirements;
use Try::Tiny;
use Moo;
use Module::CPANfile;
-use CPAN::Meta::Requirements;
use constant { SUCCESS => 0, INFO => 1, WARN => 2, ERROR => 3 };
@@ -231,9 +230,9 @@ sub cmd_show {
or $self->error("Can't find carton.lock: Run `carton install`\n");
for my $module (@args) {
- my $dependency = $lock->find($module)
+ my $dist = $lock->find($module)
or $self->error("Couldn't locate $module in carton.lock\n");
- $self->print( $dependency->dist . "\n" );
+ $self->print( $dist->dist . "\n" );
}
}
@@ -250,8 +249,8 @@ sub cmd_list {
my $lock = $self->find_lock
or $self->error("Can't find carton.lock: Run `carton install` to rebuild the lock file.\n");
- for my $dependency ($lock->dependencies) {
- $self->print($dependency->$format . "\n");
+ for my $dist ($lock->distributions) {
+ $self->print($dist->$format . "\n");
}
}
@@ -262,35 +261,14 @@ sub cmd_tree {
or $self->error("Can't find carton.lock: Run `carton install` to rebuild the lock file.\n");
my $cpanfile = Module::CPANfile->load($self->find_cpanfile);
+ my $requirements = Carton::Requirements->new(lock => $lock, cpanfile => $cpanfile);
- my $dumper = $self->_make_dumper($lock);
- $dumper->(undef, $cpanfile->prereqs, 0, {});
+ $requirements->walk_down(sub { $self->_dump_requirement(@_) });
}
-sub _make_dumper {
- my($self, $lock) = @_;
-
- my $dumper; $dumper = sub {
- my($dependency, $prereqs, $level, $seen) = @_;
-
- my $req = CPAN::Meta::Requirements->new;
- $req->add_requirements($prereqs->requirements_for($_, 'requires'))
- for qw( configure build runtime test);
-
- if ($dependency) {
- $self->printf( "%s%s (%s)\n", " " x ($level - 1), $dependency->name, $dependency->dist, INFO );
- }
-
- my $requirements = $req->as_string_hash;
- while (my($module, $version) = each %$requirements) {
- if (my $dependency = $lock->find($module)) {
- next if $seen->{$dependency->dist}++;
- $dumper->($dependency, $dependency->prereqs, $level + 1, $seen);
- } else {
- # TODO: probably core, what if otherwise?
- }
- }
- };
+sub _dump_requirement {
+ my($self, $dependency, $level) = @_;
+ $self->printf( "%s%s (%s)\n", " " x ($level - 1), $dependency->module, $dependency->distname, INFO );
}
sub cmd_check {
diff --git a/lib/Carton/Dependency.pm b/lib/Carton/Dependency.pm
index a204265..3c38e9a 100644
--- a/lib/Carton/Dependency.pm
+++ b/lib/Carton/Dependency.pm
@@ -1,24 +1,14 @@
package Carton::Dependency;
use strict;
-use CPAN::Meta;
use Moo;
-has name => (is => 'ro');
-has pathname => (is => 'ro');
-has provides => (is => 'ro');
-has version => (is => 'ro');
-has target => (is => 'ro');
-has dist => (is => 'ro');
-has mymeta => (is => 'ro', coerce => sub { CPAN::Meta->new($_[0], { lazy_validation => 1 }) });
+has module => (is => 'rw');
+has version => (is => 'rw');
+has dist => (is => 'rw', handles => [ qw(prereqs) ]);
-sub distfile {
+sub distname {
my $self = shift;
- $self->pathname;
-}
-
-sub prereqs {
- my $self = shift;
- $self->mymeta->effective_prereqs;
+ $self->dist->dist;
}
1;
diff --git a/lib/Carton/Dependency.pm b/lib/Carton/Dist.pm
similarity index 94%
copy from lib/Carton/Dependency.pm
copy to lib/Carton/Dist.pm
index a204265..2586803 100644
--- a/lib/Carton/Dependency.pm
+++ b/lib/Carton/Dist.pm
@@ -1,4 +1,4 @@
-package Carton::Dependency;
+package Carton::Dist;
use strict;
use CPAN::Meta;
use Moo;
diff --git a/lib/Carton/Lock.pm b/lib/Carton/Lock.pm
index 02d8651..7abd40b 100644
--- a/lib/Carton/Lock.pm
+++ b/lib/Carton/Lock.pm
@@ -1,7 +1,7 @@
package Carton::Lock;
use strict;
use Config;
-use Carton::Dependency;
+use Carton::Dist;
use Carton::Package;
use Carton::Index;
use Carton::Util;
@@ -26,8 +26,8 @@ sub write {
Carton::Util::dump_json({ %$self }, $file);
}
-sub dependencies {
- map Carton::Dependency->new($_), values %{$_[0]->modules}
+sub distributions {
+ map Carton::Dist->new($_), values %{$_[0]->modules}
}
sub find {
@@ -35,7 +35,7 @@ sub find {
for my $meta (values %{$_[0]->modules}) {
if ($meta->{provides}{$module}) {
- return Carton::Dependency->new( $self->modules->{$meta->{name}} );
+ return Carton::Dist->new( $self->modules->{$meta->{name}} );
}
}
diff --git a/lib/Carton/Requirements.pm b/lib/Carton/Requirements.pm
new file mode 100644
index 0000000..4d7b587
--- /dev/null
+++ b/lib/Carton/Requirements.pm
@@ -0,0 +1,54 @@
+package Carton::Requirements;
+use strict;
+use Carton::Dependency;
+use Moo;
+use CPAN::Meta::Requirements;
+
+has lock => (is => 'ro');
+has cpanfile => (is => 'ro');
+
+sub walk_down {
+ my($self, $cb) = @_;
+
+ my $dumper; $dumper = sub {
+ my($dependency, $prereqs, $level, $seen) = @_;
+
+ $cb->($dependency, $level) if $dependency;
+
+ my $reqs = CPAN::Meta::Requirements->new;
+ $reqs->add_requirements($prereqs->requirements_for($_, 'requires'))
+ for qw( configure build runtime test);
+
+ for my $module (sort $reqs->required_modules) {
+ my $dependency = $self->dependency_for($module, $reqs);
+ if ($dependency->dist) {
+ next if $seen->{$dependency->distname}++;
+ $dumper->($dependency, $dependency->prereqs, $level + 1, $seen);
+ } else {
+ # no dist found in lock - probably core
+ }
+ }
+ };
+
+ $dumper->(undef, $self->cpanfile->prereqs, 0, {});
+}
+
+sub dependency_for {
+ my($self, $module, $reqs) = @_;
+
+ my $version = $reqs->requirements_for_module($module);
+
+ my $dep = Carton::Dependency->new;
+ $dep->module($module);
+ $dep->version($version);
+
+ if (my $dist = $self->lock->find($module)) {
+ $dep->dist($dist);
+ }
+
+ return $dep;
+}
+
+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