]> git.decadent.org.uk Git - dak.git/blobdiff - dak/dominate.py
Debug suites might also miss the source package
[dak.git] / dak / dominate.py
index 5d1bafdf7562092cec8c63ab450f9275917736d2..52f1b17220cea6824e7b6d91deb3ba04e572ca9f 100755 (executable)
@@ -84,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
@@ -125,28 +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("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()
-    Logger.close()
+    if Logger:
+        Logger.close()
 
 if __name__ == '__main__':
     main()