Coding Guidelines/Command-line Processing

From wiki.zmanda.com
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

All Amanda applications should process their commandlines with Perl's Getopt::Long module, for consistency. Moreover, they should use the bundling configuration flag -- this allows short command line options to be concatenated with their arguments as in -ofoo=bar.

All applications should accept both short and long options for all common operations. Where possible, applications should accept -o to overwrite configuration options.

Here's a typical command-line handling sequence:

use Getopt::Long;

# ...

sub usage {
    print <<EOF;
Usage: amprototype <config> [-o configoption]* [-x] [-y foo]
  ...
EOF
    exit(1);
}

# ...

my $config_overwrites = new_config_overwrites($#ARGV+1);
Getopt::Long::Configure(qw{bundling});
GetOptions(
    'x' => \$opt_x,
    'y=s' => \$opt_y,
    'o=s' => sub { add_config_overwrite_opt($config_overwrites, $_[1]); },
) or usage();
usage() unless (@ARGV == 1);
my $config_name = $ARGV[0];

# ...

my $cfg_ok = config_init($CONFIG_INIT_EXPLICIT_NAME, $config_name);
apply_config_overwrites($config_overwrites);

See the source to one of the simpler Amanda applications for the definitive pattern to follow, and if this page has become outdated, please update it!