From 3ef714b05cc00f3a30da34df0270024bc72ac341 Mon Sep 17 00:00:00 2001 From: freesource Date: Fri, 12 Oct 2001 03:47:09 +0000 Subject: [PATCH] A little prettfycation. --- swim | 870 ++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 467 insertions(+), 403 deletions(-) diff --git a/swim b/swim index 30ec6d6..ca28e5d 100755 --- a/swim +++ b/swim @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -#use diagnostics; + require 5.004; use strict; use Getopt::Long; @@ -8,32 +8,38 @@ use SWIM::Global; use SWIM::Library; -################################################################################ -# Package administration and research tool for Debian # -# Copyright (C) 1999-2000 Jonathan D. Rosenbaum # -# # -# This program is free software; you can redistribute it and/or modify # -# it under the terms of the GNU General Public License as published by # -# the Free Software Foundation; either version 2 of the License, or # -# (at your option) any later version. # -# # -# This program is distributed in the hope that it will be useful, # -# but WITHOUT ANY WARRANTY; without even the implied warranty of # -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # -# GNU General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with this program; if not, write to the Free Software # -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.# -################################################################################ +############################################################################ +# +# Package administration and research tool for Debian +# +# Copyright (C) 1999-2000 Jonathan D. Rosenbaum +# +# +# +# This program is free software; you can redistribute it and/or modify +# +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +# USA +# +############################################################################# =pod -Description: Show World Intelligent Management - Show World Packaging Method or .... +Description: System Wide Information System -Swim is a program which adds rpm-like quering capabilities to the Debian +SWIM is a program which adds rpm-like quering capabilities to the Debian system. Information for an installed Debian system is extracted from the /var/lib/dpkg/info* files and the status file, information for an uninstalled (not-installed) system is extracted from Packages and Contents files which can @@ -83,114 +89,116 @@ anyone, find the program to do the job easily. # The MAIN # First let's determine what options are being used. - + my $home = $ENV{'HOME'}; + + Getopt::Long::config("bundling","no_auto_abbrev"); # will use pass_through my($result) = - GetOptions (\%commands, - "query", "q", # query - "b", # build - "a", # all packages = /. - "f", # file query - "dir", # same as "f", but verifies dir - "i", # information - "l", # file listing - "df", # file/directory listing w/-l - "v", # verbose listing - "p", # package query - "extract=s", # extract all files/file from package - "remove", "r", # remove all, but conf. - "purge", # remove it all - "apt", # apt-get - "update", # using sources.list - "clean", # remove archives or apt2ftp - "autoclean", # remove some archives - "upgrade", # currently installed packages - "dist_upgrade", # whole dist. upgrade - "x", # simulate apt's actions - "y", # automatic yes for -z - "z", # apt install - "nz", # apt download - "source", # ftp source and package - "source_only", # ftp only source for package - "diff", # just grab diff for source - "stdin", # read in from stdin - "md5sum", # show md5sum - "c", # configuration files - "d", # show documentation - "g", # packages belonging to group (27) - "allgroups", # show all groups - "n", # not-installed - "pre_depends", # required before installation - "depends", # like requires, def. needed - "recommends", # packages important to this one - "suggests", # complimentary packages - "replaces", # package(s) being replaces - "provides", # capabilities provided (virtual) - "conflicts", # package(s) which conflict - "T", # all characteristics - "shlibs", # provided shared libraries - "total", "t", # when there is more than one - "no", # no output on searches - "scripts", # the scripts - "preinst", # before inst. script - "postinst", # after inst. script - "prerm", # before removal script - "postrm", # after removal script - "menu", "m", # menu script - "copyright", # copyright - "changelog", # changelog.Debian.gz changelog.gz - "root=s", # use alternative db & root dir - "db", # update the database - "initdb", # make the databases - "rebuilddb", # remake the database - "lowmem", # lowmem method - "initndb", # make not-installed database - "ndb", # update not-installed database - "report", # report for --ndb - "check", # show changes|update cache - "rebuildndb", # remake not-installed database - "cron", # intelligent cron - "Contents=s", # Contents file required - "onec", # download only 1 Contents - "nue", # non-US or Exp. in Contents - "main", # this section and/or - "contrib", # this section and/or - "non-free", # this section and/or - "non-us", # this section and/or - "arch=s", # architecture - i386 ... - "dists=s", # distribution - stable ... - "alt=s", # alternative base for dist - "dbpath=s", # override default db location - "split_data=s", # make things faster - "rebuildflatdb", # rebuild flat databases - "rebuildflatndb", # rebuild n-flat databases - "nopager", "n", # no pager - "search=s", # search database for package - "powersearch=s", # match files, directories, and - "ps=s", # packages. - "research=s", # search the results - "refinesearch=s", # refine the existing search - "searchfile", # search databases - "cs", # case sensitive search - "S", # query packages from search - "C", "audit", # dpkg standard options - "status", # clues one in about -C - "status_only", # n* update - "ramdiskon", # turn on the thing - "ramdiskoff", # turn it off - "ftp", # ftp client protocol - "apt2ftp", # mv archives to DF - "ftp2apt", # install DF with apt-get - "Packages=s", # Packages file - "Release_only", # grab Release files only - "version", # program version - "history", # swim history - "h", # "" - "testmenu", # tmp test for menuindex.deb - "help" # it better - - ); + GetOptions (\%commands, + "query", "q", # query + "b", # build + "a", # all packages = /. + "f", # file query + "dir", # same as "f", but verifies dir + "i", # information + "l", # file listing + "df", # file/directory listing w/-l + "v", # verbose listing + "p", # package query + "extract=s", # extract all files/file from package + "remove", "r", # remove all, but conf. + "purge", # remove it all + "apt", # apt-get + "update", # using sources.list + "clean", # remove archives or apt2ftp + "autoclean", # remove some archives + "upgrade", # currently installed packages + "dist_upgrade", # whole dist. upgrade + "x", # simulate apt's actions + "y", # automatic yes for -z + "z", # apt install + "nz", # apt download + "source", # ftp source and package + "source_only", # ftp only source for package + "diff", # just grab diff for source + "stdin", # read in from stdin + "md5sum", # show md5sum + "c", # configuration files + "d", # show documentation + "g", # packages belonging to group (27) + "allgroups", # show all groups + "n", # not-installed + "pre_depends", # required before installation + "depends", # like requires, def. needed + "recommends", # packages important to this one + "suggests", # complimentary packages + "replaces", # package(s) being replaces + "provides", # capabilities provided (virtual) + "conflicts", # package(s) which conflict + "T", # all characteristics + "shlibs", # provided shared libraries + "total", "t", # when there is more than one + "no", # no output on searches + "scripts", # the scripts + "preinst", # before inst. script + "postinst", # after inst. script + "prerm", # before removal script + "postrm", # after removal script + "menu", "m", # menu script + "copyright", # copyright + "changelog", # changelog.Debian.gz changelog.gz + "root=s", # use alternative db & root dir + "db", # update the database + "initdb", # make the databases + "rebuilddb", # remake the database + "lowmem", # lowmem method + "initndb", # make not-installed database + "ndb", # update not-installed database + "report", # report for --ndb + "check", # show changes|update cache + "rebuildndb", # remake not-installed database + "cron", # intelligent cron + "Contents=s", # Contents file required + "onec", # download only 1 Contents + "nue", # non-US or Exp. in Contents + "main", # this section and/or + "contrib", # this section and/or + "non-free", # this section and/or + "non-us", # this section and/or + "arch=s", # architecture - i386 ... + "dists=s", # distribution - stable ... + "alt=s", # alternative base for dist + "dbpath=s", # override default db location + "split_data=s", # make things faster + "rebuildflatdb", # rebuild flat databases + "rebuildflatndb", # rebuild n-flat databases + "nopager", "n", # no pager + "search=s", # search database for package + "powersearch=s", # match files, directories, and + "ps=s", # packages. + "research=s", # search the results + "refinesearch=s", # refine the existing search + "searchfile", # search databases + "cs", # case sensitive search + "S", # query packages from search + "C", "audit", # dpkg standard options + "status", # clues one in about -C + "status_only", # n* update + "ramdiskon", # turn on the thing + "ramdiskoff", # turn it off + "ftp", # ftp client protocol + "apt2ftp", # mv archives to DF + "ftp2apt", # install DF with apt-get + "Packages=s", # Packages file + "Release_only", # grab Release files only + "version", # program version + "history", # swim history + "h", # "" + "testmenu", # tmp test for menuindex.deb + "help" # it better + + ); command(); @@ -201,84 +209,100 @@ command(); sub command { - # test - if ($commands{"testmenu"}) { - menuindex(); - } + # test + if ($commands{"testmenu"}) { + menuindex(); + } - # Turn on pager for everything, -t value is usefull, since we don't - # want the pager working if the output is short. In situations where -t - # isn't prompted for, -t shouldn't be used, pretty beta. - # The best way is to read the output into a variable than use the pager. - # This can be done simply. - # if ($commands{"t"}) { - # open(STDOUT, "|$pager"); - # } - if ($#ARGV == -1 && !defined %commands){ - if ($Getopt::Long::error != 1) { - pager(usage()); - exit; + if ($Getopt::Long::error != 1) { + pager(usage()); + exit; + } } elsif (($commands{"n"} || $commands{"nopager"}) && - $#ARGV == -1 && !($commands{"q"} || $commands{"ps"} || - $commands{"research"} || $commands{"refinesearch"} || - $commands{"powersearch"} || $commands{"search"} || - $commands{"ramdiskon"} || $commands{"ramdiskoff"} || - $commands{"help"})) { - print nusage() if !($commands{"history"} || $commands{"h"}); - exit if !($commands{"history"} || $commands{"h"}); + $#ARGV == -1 && !($commands{"q"} || + $commands{"ps"} || + $commands{"research"} || + $commands{"refinesearch"} || + $commands{"powersearch"} || + $commands{"search"} || + $commands{"ramdiskon"} || + $commands{"ramdiskoff"} || + $commands{"help"})) { + + print nusage() if !($commands{"history"} || $commands{"h"}); + exit if !($commands{"history"} || $commands{"h"}); + } - elsif (!($commands{"n"} || $commands{"nopager"}) && $commands{"help"} - && $#ARGV == -1 && !($commands{"q"} || $commands{"ps"} || - $commands{"research"} || $commands{"refinesearch"} || - $commands{"powersearch"} || $commands{"search"} || - $commands{"ramdiskon"} || $commands{"ramdiskoff"})) { - pager(help()) if !($commands{"history"} || $commands{"h"}); - exit if !($commands{"history"} || $commands{"h"}); + elsif (!($commands{"n"} || $commands{"nopager"}) && + $commands{"help"} && + $#ARGV == -1 && + !($commands{"q"} || + $commands{"ps"} || + $commands{"research"} || + $commands{"refinesearch"} || + $commands{"powersearch"} || + $commands{"search"} || + $commands{"ramdiskon"} || + $commands{"ramdiskoff"})) { + + pager(help()) if !($commands{"history"} || $commands{"h"}); + exit if !($commands{"history"} || $commands{"h"}); + } - elsif ((($commands{"n"} || $commands{"nopager"}) && $commands{"help"}) - && $#ARGV == -1 && !($commands{"q"} || $commands{"ps"} || - $commands{"research"} || $commands{"refinesearch"} || - $commands{"powersearch"} || $commands{"search"} || - $commands{"ramdiskon"} || $commands{"ramdiskoff"})) { - print help() if !($commands{"history"} || $commands{"h"}); - exit if !($commands{"history"} || $commands{"h"}); + elsif ((($commands{"n"} || $commands{"nopager"}) && + $commands{"help"}) + && $#ARGV == -1 && + !($commands{"q"} || + $commands{"ps"} || + $commands{"research"} || + $commands{"refinesearch"} || + $commands{"powersearch"} || + $commands{"search"} || + $commands{"ramdiskon"} || + $commands{"ramdiskoff"})) { + + print help() if !($commands{"history"} || $commands{"h"}); + exit if !($commands{"history"} || $commands{"h"}); + } # version of the program if ($commands{"version"}) { - print "SWIM version $swim_version\n"; + print "SWIM version $swim_version\n"; } # Do the the dpkg -C thing, nice no need for a separate approach if (($commands{"C"} || $commands{"audit"} || $commands{"status"}) && - defined $dpkg) { + defined $dpkg) { + system "$dpkg", "-C"; exit; + } # apt administration if ($commands{"apt"}) { - if (defined $apt_get) { - my @amount = keys %commands; - if ($#amount == 0) { - print "swim: no options given for --apt\n"; - exit; - } - require SWIM::Apt; - SWIM::Apt->import(qw(apt)); - apt($apt_get,$sources,\%commands); - exit; - } - else { - print "swim: operation requires apt\n"; - exit; - } + if (defined $apt_get) { + my @amount = keys %commands; + if ($#amount == 0) { + print "swim: no options given for --apt\n"; + exit; + } + require SWIM::Apt; + SWIM::Apt->import(qw(apt)); + apt($apt_get,$sources,\%commands); + exit; + } + else { + print "swim: operation requires apt\n"; + exit; + } } @@ -288,237 +312,277 @@ sub command { exit; } elsif ($commands{"md5sum"} && - !($commands{"l"} || $commands{"d"} || $commands{"c"} || - $commands{"p"}) && ($commands{"q"} || $commands{"query"})) { + !($commands{"l"} || $commands{"d"} || $commands{"c"} || + $commands{"p"}) && ($commands{"q"} || $commands{"query"})) { print "swim: --md5sum of queries must be used with -l, -d, -c, or -p\n"; exit; } - # Some error testing for major mode. Will handle all. - if (($commands{"initdb"} && $commands{"rebuilddb"}) || - ($commands{"initdb"} && $commands{"db"}) || - ($commands{"db"} && $commands{"rebuilddb"}) || - ($commands{"initdb"} && $commands{"db"}) || - ($commands{"initdb"} && $commands{"rebuilddb"} && $commands{"db"})) { - print "swim: only one major mode may be specified\n"; - exit; - } + # Some error testing for major mode. Will handle all. + if (($commands{"initdb"} && $commands{"rebuilddb"}) || + ($commands{"initdb"} && $commands{"db"}) || + ($commands{"db"} && $commands{"rebuilddb"}) || + ($commands{"initdb"} && $commands{"db"}) || + ($commands{"initdb"} && $commands{"rebuilddb"} && $commands{"db"})) { + print "swim: only one major mode may be specified\n"; + exit; + } - # this will handle options with arguments - if ($Getopt::Long::error == 1 || $commands{"root"} || $commands{"dbpath"}) { - # If two options are used - if ($Getopt::Long::error == 1) { - if ($commands{"dbpath"} && !$commands{"root"}) { - exit; - } - elsif (!$commands{"dbpath"} && $commands{"root"}) { - exit; - } - } + # this will handle options with arguments + if ($Getopt::Long::error == 1 || $commands{"root"} || + $commands{"dbpath"}) { + # If two options are used + if ($Getopt::Long::error == 1) { + if ($commands{"dbpath"} && !$commands{"root"}) { + exit; + } + elsif (!$commands{"dbpath"} && $commands{"root"}) { + exit; + } + } # Check whether a different filesystem is being used with --root - my($arch, $dist) = which_archdist(\%commands); - if ($commands{"root"} && !$commands{"dbpath"}) { - if ($commands{"q"} || $commands{"query"} || $commands{"search"} || - $commands{"refinesearch"} || $commands{"research"} || - $commands{"powersearch"} || $commands{"ps"} || - $commands{"ramdiskon"} || $commands{"history"} || - $commands{"h"}) { - if ($commands{"root"} =~ m,^\/.*,) { - $parent = $commands{"root"}; - my $root; - if (!($commands{"n"} || $commands{"initndb"} || - $commands{"rebuildndb"} || $commands{"p"} || - $commands{"ndb"})) { - $root = "$parent$base/packages.deb"; - } - else { - $root = "$parent$base/npackages$arch$dist.deb"; - } - if (!-e $root && !-f $root) { - print "failed to open $root\n\n"; - exit; - } - } - elsif ($commands{"root"} ne "") { - print "swim: arguments to --root must begin with a /\n"; - exit; - } - } - else { - if ($commands{"initdb"} || $commands{"rebuilddb"} || - $commands{"db"} || $commands{"initndb"} || $commands{"ndb"} || - $commands{"rebuildndb"} || $commands{"rebuildflatdb"} || - $commands{"rebuildflatndb"}) { - if ($commands{"root"} =~ m,^\/.*,) { - $parent = $commands{"root"}; - my $root = "$parent$base"; - if (!-e $root && !-f $root) { - print "failed to open $root\n\n"; - exit; - } - } - elsif ($commands{"root"} ne "") { - print "swim: arguments to --root must begin with a /\n"; - exit; - } - } - else { - print "swim: --root may only be specified during querying, and database rebuilds\n"; - exit; - } - } - } - # check whether a different database location is being used with --dbpath. - elsif ($commands{"dbpath"} && !$commands{"root"}) { - if ($commands{"q"} || $commands{"query"} || $commands{"search"} || - $commands{"refinesearch"} || $commands{"research"} || - $commands{"powersearch"} || $commands{"ps"} || - $commands{"ramdiskon"} || $commands{"history"} || - $commands{"h"}) { - if ($commands{"dbpath"} =~ m,^\/.*,) { - my $dbpath; - $library = $commands{"dbpath"}; - if (!($commands{"n"} || $commands{"initndb"} || - $commands{"rebuildndb"} || - $commands{"p"} || $commands{"ndb"})) { - $dbpath = "$library/packages.deb"; - } - else { - $dbpath = "$library/npackages$arch$dist.deb"; - } - if (!-e $dbpath && !-f $dbpath) { - print "failed to open $dbpath\n\n"; - exit; - } - } - elsif ($commands{"dbpath"} ne "") { - print "swim: arguments to --dbpath must begin with a /\n"; - exit; - } - } - else { - if ($commands{"dbpath"} !~ m,^\/,) { - print "swim: arguments to --dbpath must begin with a /\n"; - } - else { - if ($commands{"initdb"} || $commands{"rebuilddb"} || - $commands{"db"} || $commands{"rebuildndb"} || - $commands{"initndb"} || $commands{"rebuildflatdb"} - || $commands{"ndb"} || $commands{"rebuildflatndb"}) { - if ($commands{"dbpath"} =~ m,^\/.*,) { - $library = $commands{"dbpath"}; - my $dbpath = "$library"; - if (!-e $dbpath && !-f $dbpath) { - print "failed to open $dbpath\n\n"; - exit; - } - } - elsif ($commands{"dbpath"} ne "") { - print "swim: arguments to --dbpath must begin with a /\n"; - exit; - } - } - else { - print "swim: --dbpath given for operation that does not use a database\n"; - exit; - } - } - } - } - # check whether a different database location is being used with --dbpath - # and --root / are being used, dbpath takes priority but uses --root as - # the base. - elsif ($commands{"dbpath"} && $commands{"root"}) { - if ($commands{"q"} || $commands{"query"} || $commands{"search"} || - $commands{"refinesearch"} || $commands{"research"} || - $commands{"powersearch"} || $commands{"ps"} || - $commands{"ramdiskon"} || $commands{"history"} || - $commands{"h"}) { - if ($commands{"dbpath"} =~ m,^\/.*, && - $commands{"root"} =~ m,^\/.*,) { - $parent = $commands{"root"}; - $library = $commands{"dbpath"}; - my $root = "$parent$library"; - my $dbpath; - if (!($commands{"n"} || $commands{"initndb"} || - $commands{"rebuildndb"} || $commands{"p"} || - $commands{"ndb"})) { - $dbpath = "$parent$library/packages.deb"; - } - else { - $dbpath = "$parent$library/npackages$arch$dist.deb"; - } - if (!-e $dbpath && !-f $dbpath) { - print "failed to open $dbpath\n\n"; - exit; - } - if (!-e $root && !-f $root) { - print "failed to open $root\n\n"; - exit; - } - } - elsif ($commands{"dbpath"} ne "") { - print "swim: arguments to --dbpath must begin with a /\n"; - exit; - } - } - else { - if ($commands{"dbpath"} !~ m,^\/,) { - print "swim: arguments to --dbpath must begin with a /\n"; - exit; - } - if ($commands{"initdb"} || $commands{"rebuilddb"} || - $commands{"db"} || $commands{"initndb"} || $commands{"ndb"} || - $commands{"rebuildndb"} || $commands{"rebuildflatdb"} || - $commands{"rebuildflatndb"}) { - if ($commands{"dbpath"} =~ m,^\/.*, && - $commands{"root"} =~ m,^\/.*,) { - $parent = $commands{"root"}; - $library = $commands{"dbpath"}; - my $root = "$parent$library"; - my $dbpath = "$parent$library"; - if (!-e $dbpath && !-f $dbpath) { - print "failed to open $dbpath\n\n"; - exit; - } - if (!-e $root && !-f $root) { - print "failed to open $root\n\n"; - exit; - } - } - elsif ($commands{"dbpath"} ne "") { - print "swim: arguments to --dbpath must begin with a /\n"; - exit; - } - } - else { - print "\nswim: --dbpath given for operation that does not use a database\n"; - exit; - } - } - } - # final monster ... but, really only as a trap. - elsif ($commands{"root"}) { - exit; + my($arch, $dist) = which_archdist(\%commands); + if ($commands{"root"} && + !$commands{"dbpath"}) { + if ($commands{"q"} || + $commands{"query"} || + $commands{"search"} || + $commands{"refinesearch"} || + $commands{"research"} || + $commands{"powersearch"} || + $commands{"ps"} || + $commands{"ramdiskon"} || + $commands{"history"} || + $commands{"h"}) { + if ($commands{"root"} =~ m,^\/.*,) { + $parent = $commands{"root"}; + my $root; + if (!($commands{"n"} || + $commands{"initndb"} || + $commands{"rebuildndb"} || + $commands{"p"} || + $commands{"ndb"})) { + $root = "$parent$base/packages.deb"; + } + else { + $root = "$parent$base/npackages$arch$dist.deb"; + } + if (!-e $root && !-f $root) { + print "failed to open $root\n\n"; + exit; + } + } + elsif ($commands{"root"} ne "") { + print "swim: arguments to --root must begin with a /\n"; + exit; + } + } + else { + if ($commands{"initdb"} || + $commands{"rebuilddb"} || + $commands{"db"} || + $commands{"initndb"} || + $commands{"ndb"} || + $commands{"rebuildndb"} || + $commands{"rebuildflatdb"} || + $commands{"rebuildflatndb"}) { + if ($commands{"root"} =~ m,^\/.*,) { + $parent = $commands{"root"}; + my $root = "$parent$base"; + if (!-e $root && !-f $root) { + print "failed to open $root\n\n"; + exit; + } + } + elsif ($commands{"root"} ne "") { + print "swim: arguments to --root must begin with a /\n"; + exit; + } + } + else { + print "swim: --root may only be specified during querying, and database rebuilds\n"; + exit; + } + } + } + # check whether a different database location is being used with --dbpath. + elsif ($commands{"dbpath"} && + !$commands{"root"}) { + if ($commands{"q"} || + $commands{"query"} || + $commands{"search"} || + $commands{"refinesearch"} || + $commands{"research"} || + $commands{"powersearch"} || + $commands{"ps"} || + $commands{"ramdiskon"} || + $commands{"history"} || + $commands{"h"}) { + if ($commands{"dbpath"} =~ m,^\/.*,) { + my $dbpath; + $library = $commands{"dbpath"}; + if (!($commands{"n"} || + $commands{"initndb"} || + $commands{"rebuildndb"} || + $commands{"p"} || + $commands{"ndb"})) { + $dbpath = "$library/packages.deb"; + } + else { + $dbpath = "$library/npackages$arch$dist.deb"; + } + if (!-e $dbpath && !-f $dbpath) { + print "failed to open $dbpath\n\n"; + exit; + } + } + elsif ($commands{"dbpath"} ne "") { + print "swim: arguments to --dbpath must begin with a /\n"; + exit; + } + } + else { + if ($commands{"dbpath"} !~ m,^\/,) { + print "swim: arguments to --dbpath must begin with a /\n"; + } + else { + if ($commands{"initdb"} || + $commands{"rebuilddb"} || + $commands{"db"} || + $commands{"rebuildndb"} || + $commands{"initndb"} || + $commands{"rebuildflatdb"} || + $commands{"ndb"} || + $commands{"rebuildflatndb"}) { + if ($commands{"dbpath"} =~ m,^\/.*,) { + $library = $commands{"dbpath"}; + my $dbpath = "$library"; + if (!-e $dbpath && !-f $dbpath) { + print "failed to open $dbpath\n\n"; + exit; + } + } + elsif ($commands{"dbpath"} ne "") { + print "swim: arguments to --dbpath must begin with a /\n"; + exit; + } + } + else { + print "swim: --dbpath given for operation that does not use a database\n"; + exit; + } + } + } + } + # check whether a different database location is being used with + # --dbpath + # and --root / are being used, dbpath takes priority but uses --root as + # the base. + elsif ($commands{"dbpath"} && $commands{"root"}) { + if ($commands{"q"} || + $commands{"query"} || + $commands{"search"} || + $commands{"refinesearch"} || + $commands{"research"} || + $commands{"powersearch"} || + $commands{"ps"} || + $commands{"ramdiskon"} || + $commands{"history"} || + $commands{"h"}) { + if ($commands{"dbpath"} =~ m,^\/.*, && + $commands{"root"} =~ m,^\/.*,) { + $parent = $commands{"root"}; + $library = $commands{"dbpath"}; + my $root = "$parent$library"; + my $dbpath; + if (!($commands{"n"} || + $commands{"initndb"} || + $commands{"rebuildndb"} || + $commands{"p"} || + $commands{"ndb"})) { + $dbpath = "$parent$library/packages.deb"; + } + else { + $dbpath = "$parent$library/npackages$arch$dist.deb"; + } + if (!-e $dbpath && !-f $dbpath) { + print "failed to open $dbpath\n\n"; + exit; + } + if (!-e $root && !-f $root) { + print "failed to open $root\n\n"; + exit; + } + } + elsif ($commands{"dbpath"} ne "") { + print "swim: arguments to --dbpath must begin with a /\n"; + exit; + } + } + else { + if ($commands{"dbpath"} !~ m,^\/,) { + print "swim: arguments to --dbpath must begin with a /\n"; + exit; + } + if ($commands{"initdb"} || + $commands{"rebuilddb"} || + $commands{"db"} || + $commands{"initndb"} || + $commands{"ndb"} || + $commands{"rebuildndb"} || + $commands{"rebuildflatdb"} || + $commands{"rebuildflatndb"}) { + if ($commands{"dbpath"} =~ m,^\/.*, && + $commands{"root"} =~ m,^\/.*,) { + $parent = $commands{"root"}; + $library = $commands{"dbpath"}; + my $root = "$parent$library"; + my $dbpath = "$parent$library"; + if (!-e $dbpath && !-f $dbpath) { + print "failed to open $dbpath\n\n"; + exit; + } + if (!-e $root && !-f $root) { + print "failed to open $root\n\n"; + exit; + } + } + elsif ($commands{"dbpath"} ne "") { + print "swim: arguments to --dbpath must begin with a /\n"; + exit; + } + } + else { + print "\nswim: --dbpath given for operation that does not use a database\n"; + exit; + } + } + } + # final monster ... but, really only as a trap. + elsif ($commands{"root"}) { + exit; + } + elsif ($commands{"dbpath"}) { + exit; + } + } # end if (Getopt + + + # need Package(s) and Contents file(s) --ftp + if ($commands{"ftp"} && + !($commands{"q"} || + $commands{"search"} || + $commands{"powersearch"} || + $commands{"ps"} || + $commands{"research"} || + $commands{"refinesearch"})) { + require SWIM::Apt; + SWIM::Apt->import(qw(ftp)); + ftp(\%commands); + exit; } - elsif ($commands{"dbpath"}) { - exit; - } - } # end if (Getopt - - - # need Package(s) and Contents file(s) --ftp - if ($commands{"ftp"} && !($commands{"q"} || - $commands{"search"} || $commands{"powersearch"} || - $commands{"ps"} || $commands{"research"} || - $commands{"refinesearch"})) { - require SWIM::Apt; - SWIM::Apt->import(qw(ftp)); - ftp(\%commands); - exit; - } # make things a lot faster