package Iotta::Feeder::Recurse;
use strict;
require Iotta::Elem;
our @ISA = ("Iotta::Elem");
sub run {
my $self = shift;
my $meta = shift;
$self->recurse ($self->root, $meta);
}
sub recurse {
my ($dir, @dirs, $self);
$self = shift;
$dir = shift;
$self -> level ($self -> level + 1);
my $filt = $self->filter;
my $ign = $self->ignore;
opendir (DIR, $dir);
@dirs = readdir (DIR);
closedir DIR;
for (@dirs) {
if (! /^\.$|^\.\.$/) {
#print STDERR "iotta::ctrl::mfile::recurse: $_\n";
if ( -f "$dir/$_" && "$dir/$_" =~ $filt ) {
$self->file_proc ("$dir/$_") if ("$dir/$_" !~ $ign);
} elsif ( -d "$dir/$_" && ! /^\./) {
$self->recurse ("$dir/$_")
unless ("$dir/$_" eq "./".$self->{outdir});
}
}
}
$self -> level ($self -> level - 1);
}
sub file_proc {
my $self = shift;
my $f = shift;
my %meta = %{$self->meta};
my $i = 0;
print STDERR "input=$f\n";
$meta{input} = $f;
$meta{root_dir} = $self->root;
$meta{top} = '.';
while ($i < $self -> level) {
$meta{top} .= "/..";
$i ++;
}
$self->next->run(\%meta, 0) if ($self->next);
}
sub setup {
my $self = shift;
my $o = shift;
$self->filter ($$o{filter});
$self->root ($$o{root});
$self->ignore ($$o{ignore});
$self->ignore ("^\$") unless ($self->ignore);
}
sub initialize {
my $self = shift;
$self->SUPER::initialize (@_);
$self->{root}="";
$self->{filter}="";
$self->{ignore}="";
$self->{meta}={};
$self->{level} = -1;
}
1;
Platon Group <platon@platon.sk> http://platon.sk/
|