X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=rene;h=e9a9c04bc3f37a827ed5b615ddddc1e4c9db146a;hb=0033f44841536672e70316678c0ce78099bea144;hp=15d7cd0f6d6a1d83f3b5518ecf2c0ea913c2daaf;hpb=74e8cb55abf459f821f60e24e75b84016ce7bd86;p=dak.git diff --git a/rene b/rene index 15d7cd0f..e9a9c04b 100755 --- a/rene +++ b/rene @@ -2,7 +2,7 @@ # Check for obsolete binary packages # Copyright (C) 2000, 2001, 2002 James Troup -# $Id: rene,v 1.12 2002-05-14 15:33:32 troup Exp $ +# $Id: rene,v 1.16 2003-01-02 18:10:02 troup Exp $ # 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 @@ -20,13 +20,13 @@ ################################################################################ -# "Welcome to where time stands still, -# No one leaves and no one will." -# - Sanitarium - Metallica / Master of the puppets +# ``If you're claiming that's a "problem" that needs to be "fixed", +# you might as well write some letters to God about how unfair entropy +# is while you're at it.'' -- 20020802143104.GA5628@azure.humbug.org.au ################################################################################ -import commands, pg, os, string, sys, tempfile; +import commands, pg, os, sys, tempfile; import utils, db_access; import apt_pkg; @@ -37,18 +37,31 @@ projectB = None; ################################################################################ +def usage(exit_code=0): + print """Usage: rene +Check for obsolete or duplicated packages. + + -h, --help show this help and exit.""" + sys.exit(exit_code) + +################################################################################ + def main (): global Cnf, projectB; - Cnf = utils.get_conf() + Cnf = utils.get_conf(); - Arguments = [('h',"help","Catherine::Options::Help"), - ('V',"version","Catherine::Options::Version"), - ('l',"limit", "Catherine::Options::Limit", "HasArg"), - ('n',"no-action","Catherine::Options::No-Action"), - ('v',"verbose","Catherine::Options::Verbose")]; + Arguments = [('h',"help","Rene::Options::Help")]; + for i in [ "help" ]: + if not Cnf.has_key("Rene::Options::%s" % (i)): + Cnf["Rene::Options::%s" % (i)] = ""; + + apt_pkg.ParseCommandLine(Cnf, Arguments, sys.argv); + + Options = Cnf.SubTree("Rene::Options") + if Options["Help"]: + usage(); - apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv); projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"])); db_access.init(Cnf, projectB); @@ -81,10 +94,10 @@ def main (): # Check for packages built on architectures they shouldn't be. if architecture != "any" and architecture != "all": architectures = {}; - for arch in string.split(architecture): - architectures[string.strip(arch)] = ""; - for binary in string.split(binaries, ','): - binary = string.strip(binary); + for arch in architecture.split(): + architectures[arch.strip()] = ""; + for binary in binaries.split(','): + binary = binary.strip(); q = projectB.query("SELECT a.arch_string, b.version FROM binaries b, bin_associations ba, architecture a WHERE ba.suite = %s AND ba.bin = b.id AND b.architecture = a.id AND b.package = '%s'" % (suite_id, binary)); ql = q.getresult(); if not ql: @@ -121,10 +134,10 @@ def main (): if src_pkgs.has_key(source): print " %s is a duplicated source package (%s and %s)" % (source, source_index, src_pkgs[source]); src_pkgs[source] = source_index; - for binary in string.split(binaries, ','): - binary = string.strip(binary); + for binary in binaries.split(','): + binary = binary.strip(); if bin_pkgs.has_key(binary): - print " %s is duplicated in %s and %s" % (binary, source, bin_pkgs[binary]); + print " binary %s is duplicated in source packages %s and %s" % (binary, source, bin_pkgs[binary]); bin_pkgs[binary] = source; source_binaries[source] = binaries; @@ -132,10 +145,8 @@ def main (): os.unlink(temp_filename); for component in components: - architectures = Cnf.ValueList("Suite::%s::Architectures" % (suite)); + architectures = filter(utils.real_arch, Cnf.ValueList("Suite::%s::Architectures" % (suite))); for architecture in architectures: - if [ "source", "all" ].count(architecture) != 0: - continue; filename = "%s/dists/%s/%s/binary-%s/Packages" % (Cnf["Dir::Root"], suite, component, architecture); packages = utils.open_file(filename); Packages = apt_pkg.ParseTagFile(packages); @@ -144,7 +155,7 @@ def main (): source = Packages.Section.Find('Source', ""); if source == "": source = package; - if string.find(source, "(") != -1: + if source.find("(") != -1: m = utils.re_extract_src_version.match(source) source = m.group(1) if not bin_pkgs.has_key(package) and not miss_src.has_key(package): @@ -169,7 +180,7 @@ SELECT s.source, s.version AS experimental, s2.version AS unstable print print q -#################################################################################################### +################################################################################ if __name__ == '__main__': main()