X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fcompare_suites.py;h=05d5863a2b19c444d20796c473e627a2c94e30a0;hb=935bd2ad8079341123590d80658562d81ac87c86;hp=cbceeb1144bc1783739619248dcfa351c1694d6b;hpb=30413cf0ff7bc21b8d2b8b4346406357fe55dc19;p=dak.git diff --git a/dak/compare_suites.py b/dak/compare_suites.py index cbceeb11..05d5863a 100755 --- a/dak/compare_suites.py +++ b/dak/compare_suites.py @@ -1,8 +1,7 @@ #!/usr/bin/env python -# Check for fixable discrepancies between stable and unstable -# Copyright (C) 2000, 2001, 2002, 2003 James Troup -# $Id: andrea,v 1.10 2003-09-07 13:52:13 troup Exp $ +""" Check for fixable discrepancies between stable and unstable """ +# Copyright (C) 2000, 2001, 2002, 2003, 2006 James Troup # 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 @@ -21,19 +20,16 @@ ################################################################################ -import pg, sys -import utils, db_access +import sys import apt_pkg -################################################################################ - -Cnf = None -projectB = None +from daklib.dbconn import * +from daklib.config import Config ################################################################################ def usage(exit_code=0): - print """Usage: andrea + print """Usage: dak compare-suites Looks for fixable descrepancies between stable and unstable. -h, --help show this help and exit.""" @@ -42,61 +38,54 @@ Looks for fixable descrepancies between stable and unstable. ################################################################################ def main (): - global Cnf, projectB + cnf = Config() + Arguments = [('h',"help","Compare-Suites::Options::Help")] - Cnf = utils.get_conf() - Arguments = [('h',"help","Andrea::Options::Help")] for i in [ "help" ]: - if not Cnf.has_key("Andrea::Options::%s" % (i)): - Cnf["Andrea::Options::%s" % (i)] = "" + if not cnf.has_key("Compare-Suites::Options::%s" % (i)): + cnf["Compare-Suites::Options::%s" % (i)] = "" - apt_pkg.ParseCommandLine(Cnf, Arguments, sys.argv) + apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv) - Options = Cnf.SubTree("Andrea::Options") + Options = cnf.SubTree("Compare-Suites::Options") if Options["Help"]: - usage() - - projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"])) - db_access.init(Cnf, projectB) + usage() - src_suite = "stable" - dst_suite = "unstable" + session = DBConn().session() - 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") + src_suite = get_suite("stable") + dst_suite = get_suite("unstable") - for arch in Cnf.ValueList("Suite::%s::Architectures" % (src_suite)): - if arch == "source": - continue + arch_all = get_architecture("all") + dsc_type = get_override_type("dsc") - # 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(""" + # Arch: all doesn't work; consider packages which go from + # arch: all to arch: any, e.g. debconf... needs more checks + # and thought later. + for arch in get_suite_architectures(src_suite.suite_name, skipsrc=True, skipall=True): + q = session.execute(""" SELECT b_src.package, b_src.version, a.arch_string FROM binaries b_src, bin_associations ba, override o, architecture a - WHERE ba.bin = b_src.id AND ba.suite = %s AND b_src.architecture = %s + WHERE ba.bin = b_src.id AND ba.suite = :src_suite_id AND b_src.architecture = :arch_id AND a.id = b_src.architecture AND o.package = b_src.package - AND o.suite = %s AND o.type != %s AND NOT EXISTS + AND o.suite = :dst_suite_id AND o.type != :arch_id AND NOT EXISTS (SELECT 1 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 + AND (b_dst.architecture = :arch_id OR b_dst.architecture = :arch_all_id) + AND ba2.suite = :dst_suite_id AND EXISTS (SELECT 1 FROM bin_associations ba3, binaries b2 - WHERE ba3.bin = b2.id AND ba3.suite = %s AND b2.package = b_dst.package)) + WHERE ba3.bin = b2.id AND ba3.suite = :dst_suite_id 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)) - for i in q.getresult(): + % {'src_suite_id': src_suite.suite_id, + 'arch_id': arch.arch_id, + 'dst_suite_id': dst_suite.suite_id, + 'dsc_type_id': dsc_type.overridetype_id, + 'arch_all_id': arch_all.arch_id}) + + for i in q.fetchall(): print " ".join(i) ####################################################################################### if __name__ == '__main__': main() -