btrbk: accept long options (use Getopt::Long instead of Getopt::Std)

pull/44/head
Axel Burri 2015-08-15 17:51:00 +02:00
parent 7017e14c32
commit 752dbc6157
2 changed files with 43 additions and 37 deletions

66
btrbk
View File

@ -44,7 +44,7 @@ use warnings FATAL => qw( all );
use Carp qw(confess); use Carp qw(confess);
use Date::Calc qw(Today Delta_Days Day_of_Week); use Date::Calc qw(Today Delta_Days Day_of_Week);
use Getopt::Std; use Getopt::Long qw(GetOptions);
use Data::Dumper; use Data::Dumper;
our $VERSION = "0.20.0-dev"; our $VERSION = "0.20.0-dev";
@ -130,14 +130,16 @@ sub HELP_MESSAGE
print STDERR "usage: btrbk [options] <command>\n"; print STDERR "usage: btrbk [options] <command>\n";
print STDERR "\n"; print STDERR "\n";
print STDERR "options:\n"; print STDERR "options:\n";
print STDERR " --help display this help message\n"; # "--------------------------------------------------------------------------------"; # 80
print STDERR " --version display version information\n"; print STDERR " -h, --help display this help message\n";
print STDERR " -c FILE specify configuration file\n"; print STDERR " -v, --version display version information\n";
print STDERR " -p preserve all backups (do not delete any old targets)\n"; print STDERR " -c, --config=FILE specify configuration file\n";
print STDERR " -r resume only (no new snapshots, resume all missing backups)\n"; print STDERR " -p, --preserve preserve all backups (do not delete any old targets)\n";
print STDERR " -v be verbose (set loglevel=info)\n"; print STDERR " -r, --resume-only resume only (do not create new snapshots, only resume\n";
print STDERR " -q be quiet (do not print summary at end of \"run\" command)\n"; print STDERR " missing backups)\n";
print STDERR " -l LEVEL set loglevel (warn, info, debug, trace)\n"; print STDERR " -v, --verbose be verbose (set loglevel=info)\n";
print STDERR " -q, --quiet be quiet (do not print summary for the \"run\" command)\n";
print STDERR " -l, --loglevel=LEVEL set logging level (warn, info, debug, trace)\n";
print STDERR "\n"; print STDERR "\n";
print STDERR "commands:\n"; print STDERR "commands:\n";
print STDERR " run [subvol...] perform backup operations as defined in the config file\n"; print STDERR " run [subvol...] perform backup operations as defined in the config file\n";
@ -1438,41 +1440,45 @@ MAIN:
# install the "btrfs" executable to different locations. # install the "btrfs" executable to different locations.
$ENV{PATH} = '/sbin:/bin:/usr/sbin:/usr/bin'; $ENV{PATH} = '/sbin:/bin:/usr/sbin:/usr/bin';
$Getopt::Std::STANDARD_HELP_VERSION = 1; Getopt::Long::Configure qw(gnu_getopt);
$Data::Dumper::Sortkeys = 1; $Data::Dumper::Sortkeys = 1;
my $start_time = time; my $start_time = time;
my @today = Today(); my @today = Today();
my %opts;
unless(getopts('hc:prvql:', \%opts)) { my ($config_cmdline, $quiet, $verbose, $preserve_backups, $resume_only);
unless(GetOptions(
'help|h' => sub { VERSION_MESSAGE(); HELP_MESSAGE(0); exit 0; },
'version' => sub { VERSION_MESSAGE(); exit 0; },,
'config|c=s' => \$config_cmdline,
'preserve|p' => \$preserve_backups,
'resume-only|r' => \$resume_only,
'quiet|q' => \$quiet,
'verbose|v' => sub { $loglevel = 2; },
'loglevel|l=s' => \$loglevel,
))
{
VERSION_MESSAGE(); VERSION_MESSAGE();
HELP_MESSAGE(0); HELP_MESSAGE(0);
exit 1; exit 1;
} }
my $command = shift @ARGV; my $command = shift @ARGV;
unless($command) {
# assign command line options
$loglevel = $opts{l} || "";
if (lc($loglevel) eq "warn") { $loglevel = 1; }
elsif(lc($loglevel) eq "info") { $loglevel = 2; }
elsif(lc($loglevel) eq "debug") { $loglevel = 3; }
elsif(lc($loglevel) eq "trace") { $loglevel = 4; }
elsif($loglevel =~ /^[0-9]+$/) { ; }
else {
$loglevel = $opts{v} ? 2 : 1;
}
@config_src = ( $opts{c} ) if($opts{c});
my $quiet = $opts{q};
my $preserve_backups = $opts{p};
my $resume_only = $opts{r};
# check command line options
if($opts{h} || (not $command)) {
VERSION_MESSAGE(); VERSION_MESSAGE();
HELP_MESSAGE(0); HELP_MESSAGE(0);
exit 0; exit 0;
} }
# assign command line options
if (lc($loglevel) eq "warn") { $loglevel = 1; }
elsif(lc($loglevel) eq "info") { $loglevel = 2; }
elsif(lc($loglevel) eq "debug") { $loglevel = 3; }
elsif(lc($loglevel) eq "trace") { $loglevel = 4; }
elsif($loglevel =~ /^[0-9]+$/) { ; }
else { $loglevel = 1; }
@config_src = ( $config_cmdline ) if($config_cmdline);
# check command line options
my ($action_run, $action_info, $action_tree, $action_diff, $action_origin); my ($action_run, $action_info, $action_tree, $action_diff, $action_origin);
my @subvol_args; my @subvol_args;
my ($args_expected_min, $args_expected_max) = (0, 0); my ($args_expected_min, $args_expected_max) = (0, 0);

View File

@ -21,29 +21,29 @@ be incremented on each backup, starting at 1.
\-\-version \-\-version
Prints the btrbk version. Prints the btrbk version.
.TP .TP
\-\-help \-h, \-\-help
Prints the synopsis and a list of the commands. Prints the synopsis and a list of the commands.
.TP .TP
\-c <file> \-c, \-\-config <file>
Read the configuration from <file>. Read the configuration from <file>.
.TP .TP
\-p \-p, \-\-preserve
Preserve all backups. Skips deletion of old backups, even if specified Preserve all backups. Skips deletion of old backups, even if specified
in the configuration file. in the configuration file.
.TP .TP
\-r \-r, \-\-resume-only
Resume only. Skips snapshot creation, only resumes missing Resume only. Skips snapshot creation, only resumes missing
backups. This only makes sense if the \fIresume_missing\fR option is backups. This only makes sense if the \fIresume_missing\fR option is
set to \[lq]yes\[rq] in the configuration file. set to \[lq]yes\[rq] in the configuration file.
.TP .TP
\-v \-v, \-\-verbose
Verbose output. Identical to: \-l info. Verbose output. Identical to: \-l info.
.TP .TP
\-q \-q, \-\-quiet
Quiet operation. If set, btrbk does not print the summary after Quiet operation. If set, btrbk does not print the summary after
executing the "run" command. executing the "run" command.
.TP .TP
\-l <level> \-l, \-\-loglevel <level>
Set the level of verbosity. Accepted levels are warn, info, debug, Set the level of verbosity. Accepted levels are warn, info, debug,
and trace. and trace.
.SH COMMANDS .SH COMMANDS