1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
# ABSTRACT: Check the configuration of an application
package App::Cme::Command::check ;
use strict;
use warnings;
use 5.10.1;
use App::Cme -command ;
use base qw/App::Cme::Common/;
use Config::Model::ObjTreeScanner;
sub validate_args {
my ($self, $opt, $args) = @_;
$self->check_unknown_args($args);
$self->process_args($opt,$args);
return;
}
sub opt_spec {
my ( $class, $app ) = @_;
return (
[ "strict!" => "cme will exit 1 if warnings are found during check" ],
$class->cme_global_options,
);
}
sub usage_desc {
my ($self) = @_;
my $desc = $self->SUPER::usage_desc; # "%c COMMAND %o"
return "$desc [application] [ config_file ]";
}
sub description {
my ($self) = @_;
return $self->get_documentation;
}
sub execute {
my ($self, $opt, $args) = @_;
my ($model, $inst, $root) = $self->init_cme($opt,$args);
my $check = $opt->{force_load} ? 'no' : 'yes' ;
say "Loading data..." if $opt->{verbose};
Config::Model::ObjTreeScanner->new(
leaf_cb => sub { },
check => $check,
)->scan_node( undef, $root );
say "Checking data.." if $opt->{verbose};
$root->dump_tree( mode => 'full' ); # light check (value per value)
$root->deep_check; # consistency check
say "Check done." if $opt->{verbose};
my $ouch = $inst->has_warning;
if ( $ouch ) {
my $app = $inst->application;
warn "you can try 'cme fix $app' to fix the warnings shown above\n";
die "Found $ouch warnings in strict mode\n" if $opt->{strict};
}
return;
}
1;
__END__
=head1 SYNOPSIS
# standard usage
cme check popcon
# read data from arbitrary file (with Config::Model::Dpkg)
cme check dpkg-copyright path/to/file
=head1 DESCRIPTION
Checks the content of the configuration file of an application. Prints warnings
and errors on STDOUT.
Example:
cme check fstab
Some applications allows one to override the default configuration file.
For instance, with Debian copyright model, you can run cme on a different file:
cme check dpkg-copyright foobar
or directly check copyright data on STDIN:
curl http://metadata.ftp-master.debian.org/changelogs/main/f/frozen-bubble/unstable_copyright \
| cme check dpkg-copyright -
=head1 Common options
See L<cme/"Global Options">.
=head1 options
=over
=item -strict
When set, cme exits 1 if warnings are found. By default, C<cme> exits
0 when warnings are found.
=back
=head1 EXIT CODE
cme exits 0 when no errors are found. Exit 1 otherwise.
If C<-strict> option is set, cme exits 1 when warnings are found.
=head1 SEE ALSO
L<cme>
=cut
|