From: James Troup Date: Mon, 12 Feb 2001 03:29:52 +0000 (+0000) Subject: Initial version. X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5a9e3cc689fa3e4a499807aab7a37dc66e900da;p=dak Initial version. --- diff --git a/andrea b/andrea new file mode 100755 index 00000000..618188a2 --- /dev/null +++ b/andrea @@ -0,0 +1,94 @@ +#!/usr/bin/env python + +# Check for fixable discrepancies between stable and unstable +# Copyright (C) 2000 James Troup +# $Id: andrea,v 1.1 2001-02-12 03:29:52 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 +# 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 + + +################################################################################ + +import pg, sys +import utils, db_access +import apt_pkg; + +################################################################################ + +Cnf = None; +projectB = None; + +################################################################################ + +def main (): + global Cnf, projectB; + + apt_pkg.init(); + + Cnf = apt_pkg.newConfiguration(); + apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file()); + + Arguments = [('D',"debug","Catherine::Options::Debug", "IntVal"), + ('h',"help","Catherine::Options::Help"), + ('V',"version","Catherine::Options::Version")] + + apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv); + + projectB = pg.connect('projectb', 'localhost'); + db_access.init(Cnf, projectB); + + src_suite = "stable"; + dst_suite = "unstable"; + + src_suite_id = db_access.get_suite_id(src_suite); + dst_suite_id = db_access.get_suite_id(dst_suite); + arch_all_id = db_access.get_architecture_id("all"); + dsc_type_id = db_access.get_override_type_id("dsc"); + + for arch in Cnf.SubTree("Suite::%s::Architectures" % (src_suite)).List(): + if arch == "source": + continue; + + # Arch: all doesn't work; consider packages which go from + # arch: all to arch: any, e.g. debconf... needs more checks + # and thought later. + + if arch == "all": + continue; + arch_id = db_access.get_architecture_id(arch); + q = projectB.query(""" +SELECT b_src.package, b_src.version AS stable_version + FROM binaries b_src, bin_associations ba, override o + WHERE ba.bin = b_src.id AND ba.suite = %s AND b_src.architecture = %s + AND o.package = b_src.package AND o.suite = %s AND o.type != %s AND NOT EXISTS + (SELECT b_dst.id FROM bin_associations ba2, binaries b_dst + WHERE ba2.bin = b_dst.id AND b_dst.package = b_src.package + AND (b_dst.architecture = %s OR b_dst.architecture = %s) + AND ba2.suite = %s AND EXISTS + (SELECT b2.id FROM bin_associations ba3, binaries b2 + WHERE ba3.bin = b2.id AND ba3.suite = %s AND b2.package = b_dst.package)) +ORDER BY b_src.package;""" + % (src_suite_id, arch_id, dst_suite_id, dsc_type_id, arch_id, arch_all_id, dst_suite_id, dst_suite_id)); + print + print arch + print "======" + print q + + +####################################################################################### + +if __name__ == '__main__': + main() + diff --git a/rene b/rene new file mode 100755 index 00000000..b6f079be --- /dev/null +++ b/rene @@ -0,0 +1,119 @@ +#!/usr/bin/env python + +# Check for obsolete binary packages +# Copyright (C) 2000 James Troup +# $Id: rene,v 1.1 2001-02-12 03:29:52 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 +# 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 + +# "Welcome to where time stands still, +# No one leaves and no one will." +# - Sanitarium - Metallica / Master of the puppets + +################################################################################ + +import commands, os, string, sys, tempfile; +import utils; +import apt_pkg; + +################################################################################ + +Cnf = None; +projectB = None; + +################################################################################ + +def main (): + global Cnf, projectB; + + apt_pkg.init(); + + Cnf = apt_pkg.newConfiguration(); + apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file()); + + Arguments = [('D',"debug","Catherine::Options::Debug", "IntVal"), + ('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")]; + + apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv); + + bin_pkgs = {}; + miss_src = {}; + src_pkgs = {}; + source_binaries = {}; + + suite = "unstable"; + + components = Cnf.SubTree("Suite::%s::Components" % (suite)).List(); + for component in components: + filename = "%s/dists/%s/%s/source/Sources.gz" % (Cnf["Dir::RootDir"], suite, component); + print "Processing %s..." % (filename); + # apt_pkg.ParseTagFile needs a real file handle and can't handle a GzipFile instance... + temp_filename = tempfile.mktemp(); + fd = os.open(temp_filename, os.O_RDWR|os.O_CREAT|os.O_EXCL, 0700); + os.close(fd); + (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)); + if (result != 0): + sys.stderr.write("Gunzip invocation failed!\n%s\n" % (output)); + sys.exit(result); + sources = utils.open_file(temp_filename, 'r'); + Sources = apt_pkg.ParseTagFile(sources); + while Sources.Step(): + source = Sources.Section.Find('Package'); + source_index = component + '/' + source; + 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; + binaries = Sources.Section.Find('Binary'); + for binary in string.split(binaries, ','): + binary = string.strip(binary); + if bin_pkgs.has_key(binary): + print " %s is duplicated in %s and %s" % (binary, source, bin_pkgs[binary]); + bin_pkgs[binary] = source; + source_binaries[source] = binaries; + sources.close(); + os.unlink(temp_filename); + + for component in components: + architectures = Cnf.SubTree("Suite::%s::Architectures" % (suite)).List(); + for architecture in architectures: + if [ "source", "all" ].count(architecture) != 0: + continue; + filename = "%s/dists/%s/%s/binary-%s/Packages" % (Cnf["Dir::RootDir"], suite, component, architecture); + print "Processing %s..." % (filename); + packages = utils.open_file(filename, 'r'); + Packages = apt_pkg.ParseTagFile(packages); + while Packages.Step(): + package = Packages.Section.Find('Package'); + source = Packages.Section.Find('Source', ""); + if source == "": + source = package; + if string.find(source, "(") != -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): + miss_src[package] = 1; + print " %s has no source [%s: %s]" % (package, source, source_binaries.get(source, "(source does not exist)")); + packages.close(); + + return; + +#################################################################################################### + +if __name__ == '__main__': + main()