Carton
view release on metacpan or search on metacpan
lib/Carton/CLI.pm view on Meta::CPAN
}
sub cmd_help {
my $self = shift;
my $module = $_[0] ? ("Carton::Doc::" . ucfirst $_[0]) : "Carton.pm";
system "perldoc", $module;
}
sub cmd_version {
my $self = shift;
$self->print("carton $Carton::VERSION\n");
}
sub cmd_bundle {
my($self, @args) = @_;
my $env = Carton::Environment->build;
$env->snapshot->load;
$self->print("Bundling modules using @{[$env->cpanfile]}\n");
my $builder = Carton::Builder->new(
mirror => $self->mirror,
cpanfile => $env->cpanfile,
);
$builder->bundle($env->install_path, $env->vendor_cache, $env->snapshot);
$self->printf("Complete! Modules were bundled into %s\n", $env->vendor_cache, SUCCESS);
}
sub cmd_fatpack {
my($self, @args) = @_;
my $env = Carton::Environment->build;
require Carton::Packer;
Carton::Packer->new->fatpack_carton($env->vendor_bin);
}
sub cmd_install {
my($self, @args) = @_;
my($install_path, $cpanfile_path, @without);
$self->parse_options(
\@args,
"p|path=s" => \$install_path,
"cpanfile=s" => \$cpanfile_path,
"without=s" => sub { push @without, split /,/, $_[1] },
"deployment!" => \my $deployment,
"cached!" => \my $cached,
);
my $env = Carton::Environment->build($cpanfile_path, $install_path);
$env->snapshot->load_if_exists;
if ($deployment && !$env->snapshot->loaded) {
$self->error("--deployment requires cpanfile.snapshot: Run `carton install` and make sure cpanfile.snapshot is checked into your version control.\n");
}
my $builder = Carton::Builder->new(
cascade => 1,
mirror => $self->mirror,
without => \@without,
cpanfile => $env->cpanfile,
);
# TODO: --without with no .lock won't fetch the groups, resulting in insufficient requirements
if ($deployment) {
$self->print("Installing modules using @{[$env->cpanfile]} (deployment mode)\n");
$builder->cascade(0);
} else {
$self->print("Installing modules using @{[$env->cpanfile]}\n");
}
# TODO merge CPANfile git to mirror even if lock doesn't exist
if ($env->snapshot->loaded) {
my $index_file = $env->install_path->child("cache/modules/02packages.details.txt");
$index_file->parent->mkpath;
$env->snapshot->write_index($index_file);
$builder->index($index_file);
}
if ($cached) {
$builder->mirror(Carton::Mirror->new($env->vendor_cache));
}
$builder->install($env->install_path);
unless ($deployment) {
$env->cpanfile->load;
$env->snapshot->find_installs($env->install_path, $env->cpanfile->requirements);
$env->snapshot->save;
}
$self->print("Complete! Modules were installed into @{[$env->install_path]}\n", SUCCESS);
}
sub cmd_show {
my($self, @args) = @_;
my $env = Carton::Environment->build;
$env->snapshot->load;
for my $module (@args) {
my $dist = $env->snapshot->find($module)
or $self->error("Couldn't locate $module in cpanfile.snapshot\n");
$self->print( $dist->name . "\n" );
}
}
sub cmd_list {
my($self, @args) = @_;
my $format = 'name';
$self->parse_options(
\@args,
"distfile" => sub { $format = 'distfile' },
);
my $env = Carton::Environment->build;
$env->snapshot->load;
for my $dist ($env->snapshot->distributions) {
$self->print($dist->$format . "\n");
}
}
sub cmd_tree {
( run in 0.556 second using v1.01-cache-2.11-cpan-d8267643d1d )