Carmel
view release on metacpan or search on metacpan
lib/Carmel/App.pm view on Meta::CPAN
package Carmel::App;
use strict;
use warnings;
use Carmel;
use Carmel::Runner;
use Carp ();
use Carmel::Builder;
use Carmel::CPANfile;
use Carmel::Repository;
use Carmel::Resolver;
use Carmel::ProgressBar qw(progress);
use Config qw(%Config);
use CPAN::Meta::Requirements;
use Getopt::Long ();
use Module::CPANfile;
use Module::Metadata;
use Path::Tiny ();
use Pod::Usage ();
use Try::Tiny;
# prefer Parse::CPAN::Meta in XS, PP order with JSON.pm
$ENV{PERL_JSON_BACKEND} = 1
unless defined $ENV{PERL_JSON_BACKEND};
use Class::Tiny {
verbose => sub { 0 },
perl_arch => sub { "$Config{version}-$Config{archname}" },
};
sub parse_options {
my($self, $args) = @_;
return if $args->[0] && $args->[0] eq 'exec';
my $cmd;
my $parser = Getopt::Long::Parser->new(
config => [ "no_ignore_case", "pass_through" ],
);
$parser->getoptionsfromarray(
$args,
"h|help" => sub { $cmd = 'help' },
"version" => sub { $cmd = 'version' },
"v|verbose!" => sub { $Carmel::DEBUG = $self->verbose($_[1]) },
);
unshift @$args, $cmd if $cmd;
}
sub run {
my($self, @args) = @_;
$self->parse_options(\@args);
my $cmd = shift @args || 'install';
my $call = $self->can("cmd_$cmd")
or die "Can't find command '$cmd': run `carmel help` to see the list of commands.\n";
my $code = 0;
try {
$self->$call(@args);
} catch {
warn $_;
$code = 1;
};
return $code;
}
sub repository_base {
my $self = shift;
my $home = $ENV{HOME} || $ENV{HOMEPATH};
Path::Tiny->new($ENV{PERL_CARMEL_REPO} || "$home/.carmel/" . $self->perl_arch);
}
sub repo {
my $self = shift;
$self->{repo} ||= $self->build_repo;
}
( run in 0.583 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )