blob: af39f4d5eb9e43a34b6354f58096e271be0f22b5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
package Carton::Environment;
use strict;
use Moo;
use Carton::Error;
use Path::Tiny;
has cpanfile => (is => 'rw');
has lockfile => (is => 'lazy');
has install_path => (is => 'lazy');
has vendor_cache => (is => 'lazy');
sub _build_lockfile {
my $self = shift;
Path::Tiny->new($self->cpanfile->dirname . "/carton.lock");
}
sub _build_install_path {
my $self = shift;
if ($ENV{PERL_CARTON_PATH}) {
return Path::Tiny->new($ENV{PERL_CARTON_PATH})->absolute;
} else {
return Path::Tiny->new($self->cpanfile->dirname . "/local");
}
}
sub _build_vendor_cache {
my $self = shift;
Path::Tiny->new($self->install_path->dirname . "/vendor/cache");
}
sub build {
my $class = shift;
my $self = $class->new;
if (my $cpanfile = $self->locate_cpanfile) {
$self->cpanfile($cpanfile);
} else {
Carton::Error::CPANfileNotFound->throw(error => "Can't locate cpanfile");
}
$self;
}
sub locate_cpanfile {
my $self = shift;
my $current = Path::Tiny->cwd;
my $previous = '';
until ($current eq '/' or $current eq $previous) {
# TODO support PERL_CARTON_CPANFILE
my $try = $current->child('cpanfile');
if ($try->exists) {
return $try->absolute;
}
($previous, $current) = ($current, $current->parent);
}
return;
}
1;
|