diff options
Diffstat (limited to 'lib/Carton/Snapshot.pm')
-rw-r--r-- | lib/Carton/Snapshot.pm | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/lib/Carton/Snapshot.pm b/lib/Carton/Snapshot.pm index 40e5db6..88dbd06 100644 --- a/lib/Carton/Snapshot.pm +++ b/lib/Carton/Snapshot.pm @@ -4,6 +4,7 @@ use warnings NONFATAL => 'all'; use Config; use Carton::Dist; use Carton::Dist::Core; +use Carton::Dist::Specific; use Carton::Error; use Carton::Package; use Carton::Index; @@ -99,7 +100,8 @@ sub packages { my @packages; for my $dist ($self->distributions) { - while (my($package, $provides) = each %{$dist->provides}) { + my $provides = $dist->provides; + while (my($package, $provides) = each %$provides) { # TODO what if duplicates? push @packages, Carton::Package->new($package, $provides->{version}, $dist->pathname); } @@ -154,9 +156,11 @@ sub find_installs { for qw( configure build runtime ); if ($accepts->($module)) { + my $pathname = $module->{source} && $module->{source} eq 'git' + ? join('@', $module->{uri}, $module->{revision}) : $module->{pathname}; $installs{$module->{name}} = Carton::Dist->new( name => $module->{dist}, - pathname => $module->{pathname}, + pathname => $pathname, provides => $module->{provides}, version => $module->{version}, requirements => $reqs, @@ -172,4 +176,17 @@ sub find_installs { $self->_distributions(\@new_dists); } +sub preload_cpanfile { + my($self, $cpanfile) = @_; + + my $reqs = $cpanfile->merged_requirements; + for my $module ($reqs->required_modules) { + my $prereq = $cpanfile->prereq_for_module($module) or next; + if ($prereq->requirement->git) { + my $dist = Carton::Dist::Specific->new(module => $module, requirement => $prereq->requirement); + $self->add_distribution($dist); + } + } +} + 1; |