Config-Augeas-Validator
view release on metacpan or search on metacpan
lib/Config/Augeas/Validator.pm view on Meta::CPAN
my $lens = $self->{cfg}->val(CONF_DEFAULT_SECTION, CONF_LENS);
$self->debug_msg("Finding files for lens $lens");
my $sys_path = AUGEAS_META_TREE."/files//*[lens =~ regexp('@?${lens}(\.lns)?')]/path";
$self->debug_msg($sys_path);
for my $f ($self->{aug}->match($sys_path)) {
my $p = $self->{aug}->get($f);
$p =~ s|^/files||;
$self->debug_msg("Found file $p");
push @filtered_files, $p;
}
} else {
my $pattern = $self->{cfg}->val(CONF_DEFAULT_SECTION, CONF_PATTERN);
my $exclude = $self->{cfg}->val(CONF_DEFAULT_SECTION, CONF_EXCLUDE);
$exclude ||= '^$';
foreach my $file (@$files) {
push @filtered_files, $file
if ($file =~ /^$pattern$/ && $file !~ /^$exclude$/);
}
}
return \@filtered_files;
}
sub tick {
my ($self) = @_;
$self->{tick}++;
my $tick = $self->{tick} % 4;
my $hourglass;
$hourglass = "|" if ( $tick == 0 );
$hourglass = "/" if ( $tick == 1 );
$hourglass = "-" if ( $tick == 2 );
$hourglass = "\\" if ( $tick == 3 );
print colored ($hourglass, COLOR_INFO),"\b";
}
sub get_all_files {
my ($self) = @_;
my @files;
$self->{aug}->load();
for my $f ($self->{aug}->match(AUGEAS_META_TREE."/files//path[. != '']")) {
my $p = $self->{aug}->get($f);
$p =~ s|^/files||;
push @files, $p;
}
return @files;
}
sub play {
my ($self, @infiles) = @_;
my @files;
if ($self->{recurse}) {
printf "\033[?25l"; # hide cursor
print colored ("I: Recursively analyzing directories ", COLOR_INFO) unless $self->{quiet};
find sub {
my $exclude = $self->{exclude};
$exclude ||= '^$';
push @files, $File::Find::name
if(-e && $File::Find::name !~ /^$exclude$/);
$self->tick unless $self->{quiet}
}, @infiles;
print colored("[done]", COLOR_OK),"\n" unless $self->{quiet};
printf "\033[?25h"; # restore cursor
} elsif ($#infiles < 0) {
@files = $self->get_all_files();
$self->{syswide} = 1;
}else {
@files = @infiles;
}
if ($self->{conffile}) {
$self->load_conf($self->{conffile});
$self->play_one(@files);
} else {
my @rulesdirs = split(/:/, $self->{rulesdir});
foreach my $rulesdir (@rulesdirs) {
opendir (RULESDIR, $rulesdir)
or die MSG_ERR.": Could not open rules directory $rulesdir: $!\n";
while (my $conffile = readdir(RULESDIR)) {
next unless ($conffile =~ /.*\.ini$/);
$self->{conffile} = "$rulesdir/$conffile";
$self->load_conf($self->{conffile});
next unless ($self->{cfg}->val(CONF_DEFAULT_SECTION, CONF_PATTERN));
my $filtered_files = $self->filter_files(\@files);
my $elems = @$filtered_files;
next unless ($elems > 0);
$self->play_one(@$filtered_files);
}
closedir(RULESDIR);
}
}
}
sub set_aug_file {
my ($self, $file) = @_;
my $absfile = `readlink -f $file`;
chomp($absfile);
my $aug = $self->{aug};
my $lens = $self->{lens};
if ($self->{syswide} != 1) {
$aug->rm("/files");
if ($aug->count_match(AUGEAS_META_TREE."/load/$lens/lens") == 0) {
# Lenses with no autoload xfm => bet on lns
$aug->set(AUGEAS_META_TREE."/load/$lens/lens", "$lens.lns");
}
$aug->rm(AUGEAS_META_TREE."/load/$lens/incl");
$aug->set(AUGEAS_META_TREE."/load/$lens/incl", $absfile);
$aug->load;
}
$aug->defvar('file', "/files$absfile");
my $err_lens_path = AUGEAS_META_TREE."/load/$lens/error";
my $err_lens = $aug->get($err_lens_path);
if ($err_lens) {
( run in 0.537 second using v1.01-cache-2.11-cpan-f56aa216473 )