X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fdominate.py;h=52f1b17220cea6824e7b6d91deb3ba04e572ca9f;hb=17c5cab4eb8d5181ec7a81267a4e2e6b43c0fc65;hp=73eee8ca18f5261b95da7f930813b45334abfa53;hpb=5d96dd418e466052dc9ab0198ae42d699bdd0cd3;p=dak.git diff --git a/dak/dominate.py b/dak/dominate.py index 73eee8ca..52f1b172 100755 --- a/dak/dominate.py +++ b/dak/dominate.py @@ -35,10 +35,11 @@ def fetch(reason, query, args, session): for row in session.execute(query, args).fetchall(): (id, package, version, suite_name, architecture) = row if Options['No-Action']: - print "Delete %s %s from %s architecture %s (%s)" % \ - (package, version, suite_name, architecture, reason) + print "Delete %s %s from %s architecture %s (%s, %d)" % \ + (package, version, suite_name, architecture, reason, id) else: - Logger.log([reason, package, version, suite_name, architecture]) + Logger.log([reason, package, version, suite_name, \ + architecture, id]) idList.append(id) return idList @@ -83,12 +84,16 @@ def obsoleteAllAssociations(suite, session): return fetch('old_and_unreferenced', query, { 'suite': suite }, session) def deleteAssociations(table, idList, session): + global Options query = """ DELETE FROM %s - WHERE id = :id + WHERE id IN :idList """ % table - session.execute(query, [{'id': id} for id in idList]) + if not idList or Options['No-Action']: + return + params = {'idList': tuple(idList)} + session.execute(query, params) def doDaDoDa(suite, session): # keep this part disabled because it is too dangerous @@ -124,27 +129,37 @@ def main(): ('s', "suite", "Obsolete::Options::Suite", "HasArg"), ('n', "no-action", "Obsolete::Options::No-Action"), ('f', "force", "Obsolete::Options::Force")] - query_suites = DBConn().session().query(Suite) - suites = [suite.suite_name for suite in query_suites.all()] - if not cnf.has_key('Obsolete::Options::Suite'): - cnf['Obsolete::Options::Suite'] = ','.join(suites) cnf['Obsolete::Options::Help'] = '' cnf['Obsolete::Options::No-Action'] = '' cnf['Obsolete::Options::Force'] = '' - apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv) - Options = cnf.SubTree("Obsolete::Options") + apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv) + Options = cnf.subtree("Obsolete::Options") if Options['Help']: usage() - Logger = daklog.Logger(cnf.Cnf, "dominate") + if 'Suite' not in Options: + query_suites = DBConn().session().query(Suite) + suites = [suite.suite_name for suite in query_suites] + cnf['Obsolete::Options::Suite'] = str(','.join(suites)) + + if not Options['No-Action']: + Logger = daklog.Logger("dominate") session = DBConn().session() for suite_name in utils.split_args(Options['Suite']): suite = session.query(Suite).filter_by(suite_name = suite_name).one() + + # Skip policy queues. We don't want to remove obsolete packages from those. + policy_queue = session.query(PolicyQueue).filter_by(suite=suite).first() + if policy_queue is not None: + continue + if not suite.untouchable or Options['Force']: doDaDoDa(suite.suite_id, session) if Options['No-Action']: session.rollback() else: session.commit() + if Logger: + Logger.close() if __name__ == '__main__': main()