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 )