diff options
author | Jeffrey Ryan Thalhammer <jeff@imaginative-software.com> | 2011-06-28 00:52:17 -0700 |
---|---|---|
committer | Ricardo Signes <rjbs@cpan.org> | 2013-04-13 12:18:52 +0100 |
commit | 53ead4c513e7905bfaed6152703296481ab04911 (patch) | |
tree | 1313a90d23968785c0c1f3e5cb32afa8493c72e1 | |
parent | 2a7b36a93d390d45414f0249f60b935cfd410133 (diff) |
Pass all config parameters to CPAN::Mini->new().
-rw-r--r-- | lib/CPAN/Mini/App.pm | 94 |
1 files changed, 42 insertions, 52 deletions
diff --git a/lib/CPAN/Mini/App.pm b/lib/CPAN/Mini/App.pm index 5208541..2b39b75 100644 --- a/lib/CPAN/Mini/App.pm +++ b/lib/CPAN/Mini/App.pm @@ -56,38 +56,22 @@ sub initialize_minicpan { my %commandline; - my ($quiet, $debug, $log_level); + my @option_spec = $class->_option_spec(); + GetOptions(\%commandline, @option_spec) or pod2usage(2); - GetOptions( - 'c|class=s' => \$commandline{class}, + # These two options will cause the program to exit before finishing ->run + pod2usage(1) if $commandline{help}; + $version = 1 if $commandline{version}; - # These two options will cause the program to exit before finishing ->run - 'h|help' => sub { pod2usage(1); }, - 'v|version' => sub { $version = 1 }, - - # How noisy should we be? - 'quiet|q+' => \$quiet, - 'qq' => sub { $quiet = 2 }, - 'debug' => \$debug, - 'log-level=s' => \$log_level, - - 'l|local=s' => \$commandline{local}, - 'r|remote=s' => \$commandline{remote}, - - 'd|dirmode=s' => \$commandline{dirmode}, - 'offline' => \$commandline{offline}, - 'f' => \$commandline{force}, - 'p' => \$commandline{perl}, - 'x' => \$commandline{exact_mirror}, - 't|timeout=i' => \$commandline{timeout}, - - # Where to look for config not provided on the command line: - 'C|config=s' => \$commandline{config_file}, - ) or pod2usage(2); + # How noisy should we be? + my $debug = $commandline{debug}; + my $log_level = $commandline{log_level}; + my $quiet = $commandline{qq} ? 2 : $commandline{quiet}; die "can't mix --debug, --log-level, and --debug\n" if defined($quiet) + defined($debug) + defined($log_level) > 1; + # Set log_level accordingly $quiet ||= 0; $log_level = $debug ? 'debug' : $quiet == 1 ? 'warn' @@ -95,8 +79,6 @@ sub initialize_minicpan { : $log_level ? $log_level : undef; - $class->_validate_log_level($log_level) if defined $log_level; - my %config = CPAN::Mini->read_config({ log_level => 'info', %commandline @@ -104,12 +86,10 @@ sub initialize_minicpan { $config{class} ||= 'CPAN::Mini'; - foreach my $key (keys %commandline) { - $config{$key} = $commandline{$key} if defined $commandline{$key}; - } + # Override config with commandline options + %config = (%config, %commandline); $config{log_level} = $log_level || $config{log_level} || 'info'; - $class->_validate_log_level($config{log_level}); eval "require $config{class}"; @@ -119,28 +99,38 @@ sub initialize_minicpan { pod2usage(2) unless $config{local} and $config{remote}; $|++; - $config{dirmode} &&= oct($config{dirmode}); - - return $config{class}->new( - remote => $config{remote}, - local => $config{local}, - force => $config{force}, - offline => $config{offline}, - also_mirror => $config{also_mirror}, - exact_mirror => $config{exact_mirror}, - module_filters => $config{module_filters}, - path_filters => $config{path_filters}, - skip_cleanup => $config{skip_cleanup}, - skip_perl => (not $config{perl}), - timeout => $config{timeout}, - ignore_source_control => $config{ignore_source_control}, - (defined $config{dirmode} ? (dirmode => $config{dirmode}) : ()), - - log_level => $config{log_level}, - ); + + # Convert dirmode string to a real octal value, if given + $config{dirmode} = oct $config{dirmode} if $config{dirmode}; + + # Turn the 'perl' option into 'skip_perl', for backward compatibility + $config{skip_perl} = not delete $config{perl}; + + return $config{class}->new(%config); +} + +sub _option_spec { + return qw< + class|c=s + help|h + version|v + quiet|q+ + qq + debug + log_level|log-level=s + local|l=s + remote|r=s + dirmode|d=s + offline + force|f + perl + exact_mirror|x + timeout|t=i + config_file|config|C=s + >; } -=head1 SEE ALSO +=head1 SEE ALSO Randal Schwartz's original article, which can be found here: |