Net-FTPTurboSync
view release on metacpan or search on metacpan
lib/Net/FTPTurboSync/PrgOpts.pm view on Meta::CPAN
elsif ($curoptchar =~ /[iI]/) { $self->{doinfoonly}=1; }
elsif ($curoptchar =~ /[lL]/) { $self->{followsymlinks}=1; }
elsif ($curoptchar =~ /[qQ]/) { $self->{dodebug}=0; $self->{doverbose}=0; $self->{doquiet}=1; }
elsif ($curoptchar =~ /[vV]/) { $self->{doverbose}++; }
elsif ($curoptchar =~ /[nN]/) { $self->{nodelete}=1; }
elsif ($curoptchar =~ /[bB]/) { $self->{buildDB} = 1 ; }
else { print "ERROR: Unknown option: \"-".$curoptchar."\"\n"; $self->{returncode}+=1; }
}
}
sub parseLocalDir {
my ( $self, $curopt ) = @_;
if ($self->{localdir} eq "") {
$self->{noofopts}++;
$self->{localdir} = $curopt;
} else {
print "ERROR: Unknown parameter: \"".$curopt."\"\n"; $self->{returncode}+=1
}
}
# function has side effect; return nothing
# it changes variables of current package
sub parseOptionsAndParameters {
my ( $self, $cfgfoptions, $cloptions ) = @_;
$self->{noofopts}=0;
for my $curopt (@$cfgfoptions, @$cloptions) {
if ($curopt =~ /^-[a-zA-Z]/) {
$self->parseOptions( $curopt );
}
elsif ($curopt =~ /^ftp:\/\/(([^@\/\\\:]+)(:([^@\/\\\:]+))?@)?([a-zA-Z01-9\.\-]+)\/(.*)/) {
$self->parseFtpParameter ( $curopt );
}
elsif ($curopt =~ /^[a-z]+=.+/) {
$self->parseParameters ( $curopt );
}
else {
$self->parseLocalDir ( $curopt );
}
}
if (0 == $self->{noofopts}) { $self->print_syntax(); exit 0; }
}
sub parseCfg {
my ( $self, $argv ) = @_ ;
my @cloptions=();
for my $curopt (@ARGV) {
if ($curopt =~ /^cfg=/) {
$self->{configfile}="$'";
if (! -r $self->{configfile}) {
print "Config file does not exist: "
. $self->{configfile} . "\n";
$self->{returncode} += 1;
}
} else {
push @cloptions, $curopt;
}
}
return \@cloptions;
}
sub netRC {
my ( $self ) = @_;
if ( ($self->{ftpserver} ne "") and ($self->{ftppasswd} eq "anonymous") ) {
if ($self->{ftpuser} eq "ftp") {
my $netrcdata = Net::Netrc->lookup($self->{ftpserver});
if ( defined $netrcdata ) {
$self->{ftpuser} = $netrcdata->login;
$self->{ftppasswd} = $netrcdata->password;
}
} else {
my $netrcdata = Net::Netrc->lookup($self->{ftpserver},$self->{ftpuser});
if ( defined $netrcdata ) {
$self->{ftppasswd} = $netrcdata->password;
}
}
}
}
sub validateFtp {
my ( $self ) = @_;
if ($self->{ftpuser} eq "?") { print "User: "; $self->{ftpuser}=<STDIN>; chomp($self->{ftpuser}); }
if ($self->{ftppasswd} eq "?") { print "Password: "; $self->{ftppasswd}=<STDIN>; chomp($self->{ftppasswd}); }
if ($self->{ftpserver} eq "") { print "ERROR: No FTP server given.\n"; $self->{returncode}+=1; }
if ($self->{ftpdir} eq "") { print "ERROR: No FTP directory given.\n"; $self->{returncode}+=1; }
if ($self->{ftpuser} eq "") { print "ERROR: No FTP user given.\n"; $self->{returncode}+=1; }
if ($self->{ftppasswd} eq "") { print "ERROR: No FTP password given.\n"; $self->{returncode}+=1; }
}
sub parseCommandLineParameters {
my ( $self, $argv ) = @_;
my $cloptions = $self->parseCfg ( $argv );
my $cfgfoptions = $self->readConfigFile ();
$self->parseOptionsAndParameters( $cfgfoptions, $cloptions );
if ( $self->{dbpath} eq "" ){
die "Required path to a file with the database (use parameter db=)";
}
if ( $self->{dodebug} ) { $self->print_options(); }
if ( ($self->{localdir} eq "" ) || (! -d $self->{localdir} ) ) {
print "ERROR: Local directory does not exist: '$self->{localdir}'\n";
$self->{returncode}+=1;
}
$self->{newDB} = ! -f $self->{dbpath};
if ( ! $self->{buildDB} ) {
$self->netRC();
$self->validateFtp();
}
if ($self->{returncode} > 0) {
die "Aborting due to missing or wrong options!"
. "Call turbo-ftp-sync -? for more information.\n";
}
}
1;
( run in 2.015 seconds using v1.01-cache-2.11-cpan-ceb78f64989 )