summaryrefslogtreecommitdiff
path: root/lib/Carton/Snapshot.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Carton/Snapshot.pm')
-rw-r--r--lib/Carton/Snapshot.pm21
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;