#!/usr/bin/env python
# Check for fixable discrepancies between stable and unstable
-# Copyright (C) 2000 James Troup <james@nocrew.org>
-# $Id: andrea,v 1.1 2001-02-12 03:29:52 troup Exp $
+# Copyright (C) 2000, 2001, 2002, 2003 James Troup <james@nocrew.org>
+# $Id: andrea,v 1.10 2003-09-07 13:52:13 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
################################################################################
-import pg, sys
-import utils, db_access
+import pg, sys;
+import utils, db_access;
import apt_pkg;
################################################################################
################################################################################
+def usage(exit_code=0):
+ print """Usage: andrea
+Looks for fixable descrepancies between stable and unstable.
+
+ -h, --help show this help and exit."""
+ sys.exit(exit_code)
+
+################################################################################
+
def main ():
global Cnf, projectB;
- apt_pkg.init();
-
- Cnf = apt_pkg.newConfiguration();
- apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file());
+ 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)] = "";
- Arguments = [('D',"debug","Catherine::Options::Debug", "IntVal"),
- ('h',"help","Catherine::Options::Help"),
- ('V',"version","Catherine::Options::Version")]
+ apt_pkg.ParseCommandLine(Cnf, Arguments, sys.argv);
- apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv);
+ Options = Cnf.SubTree("Andrea::Options")
+ if Options["Help"]:
+ usage();
- projectB = pg.connect('projectb', 'localhost');
+ projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"]));
db_access.init(Cnf, projectB);
src_suite = "stable";
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():
+ for arch in Cnf.ValueList("Suite::%s::Architectures" % (src_suite)):
if arch == "source":
continue;
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
+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
- 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
+ AND a.id = b_src.architecture AND o.package = b_src.package
+ AND o.suite = %s AND o.type != %s 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
+ (SELECT 1 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
-
+ for i in q.getresult():
+ print " ".join(i);
#######################################################################################