Factor out parsing of options
Why: * Want to be able to selectively apply filepath expansion to: 1. Only options in a stowrc file. 2. Only options that take a file path. * Because of need 1, any expansion must be performed on stowrc options before merging with cli options. * Because of need 2, stowrc options need to be parsed before expansion in order to know which options need expanding. This change addresses the need by: * Create parse_options() * Implements option parsing logic previously in process_options() * Takes an array as parameter instead of assuming ARGV * Edit process_options() to still work as expected. * Only change was to call parse_options() instead of directly parsing ARGV * By factoring out the option parsing code, we can reuse the existing parsing code for stowrc options. * Allows expansion of only the option itself, i.e expansion on "$HOME/target" rather than "--target=$HOME/target" * Allows easy determination of which options need expansion.
This commit is contained in:
parent
ebc895a540
commit
feb885fda6
1 changed files with 32 additions and 10 deletions
42
bin/stow.in
42
bin/stow.in
|
@ -432,7 +432,7 @@ use warnings;
|
|||
require 5.006_001;
|
||||
|
||||
use POSIX qw(getcwd);
|
||||
use Getopt::Long;
|
||||
use Getopt::Long qw(GetOptionsFromArray);
|
||||
|
||||
@USE_LIB_PMDIR@
|
||||
use Stow;
|
||||
|
@ -481,23 +481,49 @@ sub main {
|
|||
|
||||
#===== SUBROUTINE ===========================================================
|
||||
# Name : process_options()
|
||||
# Purpose : parse command line options
|
||||
# Purpose : Parse and process command line and .stowrc file options
|
||||
# Parameters: none
|
||||
# Returns : (\%options, \@pkgs_to_unstow, \@pkgs_to_stow)
|
||||
# Throws : a fatal error if a bad command line option is given
|
||||
# Throws : a fatal error if a bad option is given
|
||||
# Comments : checks @ARGV for valid package names
|
||||
#============================================================================
|
||||
sub process_options {
|
||||
|
||||
unshift @ARGV, get_config_file_options();
|
||||
#$,="\n"; print @ARGV,"\n"; # for debugging rc file
|
||||
|
||||
my ($options,
|
||||
$pkgs_to_unstow,
|
||||
$pkgs_to_stow) = parse_options(@ARGV);
|
||||
|
||||
sanitize_path_options($options);
|
||||
check_packages($pkgs_to_unstow, $pkgs_to_stow);
|
||||
|
||||
return ($options, $pkgs_to_unstow, $pkgs_to_stow);
|
||||
}
|
||||
|
||||
#===== SUBROUTINE ===========================================================
|
||||
# Name : parse_options()
|
||||
# Purpose : parse command line options
|
||||
# Parameters: @arg_array => array of options to parse
|
||||
# Example: parse_options(@ARGV)
|
||||
# Returns : (\%options, \@pkgs_to_unstow, \@pkgs_to_stow)
|
||||
# Throws : a fatal error if a bad command line option is given
|
||||
# Comments : Used for parsing both command line options and rc file. Used
|
||||
# for parsing only. Sanity checks and post-processing belong in
|
||||
# process_options().
|
||||
#============================================================================
|
||||
sub parse_options {
|
||||
my %options = ();
|
||||
my @pkgs_to_unstow = ();
|
||||
my @pkgs_to_stow = ();
|
||||
my $action = 'stow';
|
||||
|
||||
unshift @ARGV, get_config_file_options();
|
||||
#$,="\n"; print @ARGV,"\n"; # for debugging rc file
|
||||
#$,="\n"; print @_,"\n"; # for debugging rc file
|
||||
|
||||
Getopt::Long::config('no_ignore_case', 'bundling', 'permute');
|
||||
GetOptions(
|
||||
GetOptionsFromArray(
|
||||
\@_,
|
||||
\%options,
|
||||
'verbose|v:+', 'help|h', 'simulate|n|no',
|
||||
'version|V', 'compat|p', 'dir|d=s', 'target|t=s',
|
||||
|
@ -548,12 +574,8 @@ sub process_options {
|
|||
usage() if $options{help};
|
||||
version() if $options{version};
|
||||
|
||||
sanitize_path_options(\%options);
|
||||
check_packages(\@pkgs_to_unstow, \@pkgs_to_stow);
|
||||
|
||||
return (\%options, \@pkgs_to_unstow, \@pkgs_to_stow);
|
||||
}
|
||||
|
||||
sub sanitize_path_options {
|
||||
my ($options) = @_;
|
||||
|
||||
|
|
Loading…
Reference in a new issue