use strict;
use vars qw($VERSION $LOG
%what_todo %need_network $todo $sysconfdir $loader %initval %pnest);
;# modules
use Fan::Loader;
use Fan::Cool;
use Fan;
;#
BEGIN {
;# For non-blocking stdout.
$| = 1;
$LOG = 5;
# Data and time string.
my $t = time;
my $s = str4date($t).' '.str4time($t);
# Show start up message.
warn("$s FTPMIRROR starting...\n") if $LOG > 5;
}
;#
END {
# Data and time string.
my $t = time;
my $s = str4date($t).' '.str4time($t);
;# Show terminate message.
warn("$s FTPMIRROR terminated\n") if $LOG > 5;
}
;# initialization...
{
use Config;
# system configuration files
$sysconfdir = $Config{prefix}.'/etc';
}
$what_todo{'full-mirror'} = 'run_full_mirror';
$what_todo{'step-mirror'} = 'run_step_mirror';
$what_todo{'scan-local'} = 'scan_local';
$what_todo{'scan-remote'} = 'scan_remote';
$what_todo{'mkdirinfo'} = 'mkdirinfo';
$what_todo{'synch-remote'} = 'step_synch';
$what_todo{'update-master'} = 'update_master';
$need_network{'full-mirror'} = 1;
$need_network{'step-mirror'} = 1;
$need_network{'scan-remote'} = 1;
$need_network{'synch-remote'} = 1;
;# check what shall we do
($todo) = $0 =~ m|([^/]+)$|;
;#
if (@ARGV > 0 && $ARGV[$[] =~ /^--(\S+)$/ && defined($what_todo{$1})) {
$todo = $1;
shift;
}
;#
if (!defined($what_todo{$todo})) {
$todo = 'full-mirror';
}
;#
%initval = (
'sysconfdir' => $sysconfdir,
'load-config' => "ftpmirror.cf",
'create-directories' => 1,
'override-file-uid' => 0,
'override-file-gid' => 0,
'override-file-mode' => '0644',
'override-directory-mode' => '0755',
'default-file-uid' => 0,
'default-file-gid' => 0,
'default-file-mode' => '0644',
'default-directory-mode' => '0755',
'unlink' => 'yes',
'backup-suffix' => '~',
);
;#
%pnest = (
'archive' => 'PACKAGE::$_',
'package' => 'PACKAGE::$_',
'server' => 'SERVER::$_',
);
;#
$loader = Fan::Loader->new(
loader_keys => \%Fan::pkeys,
loader_nest => \%pnest,
);
ref($loader) && $loader->isa('Fan::Loader')
or die("Can't create loader");
;# Initial default parameters.
$loader->merge_hash(\%initval, 'INIT')
or die("Loader: Can't initialize values");
;# Parsing options.
$loader->parse_option($_, \@ARGV, 'OPTION')
or die("Loader: Can't parse option: $_\n");
;# Set logging level first.
if (defined($_ = $loader->get_value('log-mask', 'INIT', 'OPTION'))) {
plog_mask($_);
}
;# Get 'load-config' parameter
if (defined($_ = $loader->get_value('load-config', 'INIT', 'OPTION'))) {
# get 'load-config' parameter
my $dir = $loader->get_value('sysconfdir', 'INIT', 'OPTION');
# debug...
warn("load files = $_\n") if $LOG > 6;
# load configuration files
for my $file (split(/\s+/)) {
next if $file eq '';
$file = "$dir/$file" if ! -f $file && $dir ne '';
warn("loading $file...\n") if $LOG > 5;
$loader->parse_file($file, 'DEFAULT')
or die ("Loader Can't parse $file.\n");
}
}
#
$loader->dumpall;
exit;
syntax highlighted by Code2HTML, v. 0.9.1