From d8c1ef55cd04568c6886e94a5d5704d89b43cf4c Mon Sep 17 00:00:00 2001 From: Peter von Kaehne Date: Sat, 21 Dec 2013 13:47:33 +0000 Subject: added perl script to recognise repos on remote FTP server and create installmgr.conf file git-svn-id: https://www.crosswire.org/svn/sword-tools/trunk@471 07627401-56e2-0310-80f4-f8cd0041bdcd --- repos/automagic.pl | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100755 repos/automagic.pl (limited to 'repos/automagic.pl') diff --git a/repos/automagic.pl b/repos/automagic.pl new file mode 100755 index 0000000..1da3fc8 --- /dev/null +++ b/repos/automagic.pl @@ -0,0 +1,123 @@ +#!/usr/bin/perl + +# finds SWORD repos on a given server and returns the skeleton for a +# installmgr configuration + +## Licensed under the standard BSD license: + +# Copyright (c) 2009 CrossWire Bible Society +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of the CrossWire Bible Society nor the names of +# its contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +## For general inquiries, comments, suggestions, bug reports, etc. email: +## sword-support@crosswire.org + +######################################################################### + +use Net::FTP; + + +## Obtain arguments +if (scalar(@ARGV) < 1) { + print "\nautomagic.pl [-l user] [-p password] [-o output] -- - connect to a ftp server and find SWORD repos on it \n"; + print "- Arguments in braces < > are required. Arguments in brackets [ ] are optional.\n"; + print "- If no -o option is specified the output will go to \n"; + exit (-1); +} + +$server = @ARGV[0]; + +$nextarg = 1; + +if (@ARGV[$nextarg] eq "-l") { + $user = "@ARGV[$nextarg+1]"; + $nextarg += 2; +} +else { + $user = "anonymous"; +} + +if (@ARGV[$nextarg] eq "-p") { + $password = "@ARGV[$nextarg+1]"; + $nextarg += 2; +} +else { + $password = ""; +} + +if (@ARGV[$nextarg] eq "-o") { + $outputFilename = "@ARGV[$nextarg+1]"; + open (OUTF, ">", "$outputFilename") or die "Could not open file $outputFilename for writing."; + binmode OUTF; + select(OUTF); +} + + +#open ftp server and obtain listing of all directories + +$ftp = Net::FTP->new($server, Debug => 0) + or die "Cannot connect to $server:\n $@"; +$ftp->login($user,$password) + or die "Username or password incorrect"; +@data=$ftp->ls("-Rla"); +$ftp->quit; + +#parse listings and create repo list + +foreach my $line (@data) + { + if ($line =~ /^\.\//) {$path = $line} + if ($line =~ /mods\.d$/) { + $path =~ s/://; + $path =~ s/^\.//; + push(@output,$path); + } + } + + +my $i=0; +if ($user eq "anonymous") { + $user=""; + } + +if (@output>0) { + print "[General]\nPassiveFTP=true\n\n[Sources]\n"; + foreach my $path (@output) + { + print "FTPSource=Repo$i|$server|$path|$user|$password|\n"; + $i++ + } + $return=0; + } +else { + print STDERR "This server contains no SWORD repos"; + $return=1; + } + +exit $return; \ No newline at end of file -- cgit