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
|
# ABSTRACT: Fix the configuration of an application
package App::Cme::Command::fix ;
use strict;
use warnings;
use 5.10.1;
use App::Cme -command ;
use base qw/App::Cme::Common/;
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 (
[ "from=s@" => "fix only a subset of a configuration tree" ],
[ "filter=s" => "pattern to select the element name to be fixed"],
$class->cme_global_options,
);
}
sub usage_desc {
my ($self) = @_;
my $desc = $self->SUPER::usage_desc; # "%c COMMAND %o"
return "$desc [application] [ 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 @fix_from = $opt->{from} ? @{$opt->{from}} : ('') ;
foreach my $path (@fix_from) {
my $node_to_fix = $inst->config_root->grab($path);
my $msg = "cme: running fix on ".$inst->name." configuration";
$msg .= "from node ". $node_to_fix->name if $path;
say $msg. "..." if $opt->{verbose};
$node_to_fix->apply_fixes($opt->{fix_filter});
}
$self->save($inst,$opt) ;
return;
}
1;
__END__
=head1 SYNOPSIS
# fix dpkg (this example requires Config::Model::Dpkg)
cme fix dpkg
=head1 DESCRIPTION
Checks the content of the configuration file of an application (and
show warnings if needed), update deprecated parameters (old value are
saved to new parameters) and fix warnings are fixed. The configuration
is saved if anything was changed. If no changes are done, the file is
not saved.
=head1 Common options
See L<cme/"Global Options">.
=head1 options
=over
=item from
Use option C<-from> to fix only a subset of a configuration tree. Example:
cme fix dpkg -from 'control binary:foo Depends'
This option can be repeated:
cme fix dpkg -from 'control binary:foo Depends' -from 'control source Build-Depends'
=item filter
Filter the leaf according to a pattern. The pattern is applied to the element name to be fixed
Example:
cme fix dpkg -from control -filter Build # will fix all Build-Depends and Build-Depend-Indep
or
cme fix dpkg -filter Depend
=back
=head1 SEE ALSO
L<cme>, L<App::Cme::Command::migrate>
=cut
|