]> git.decadent.org.uk Git - dak.git/blobdiff - dak/dominate.py
Use correct db_name for MD5 hash
[dak.git] / dak / dominate.py
index 5c919ab89b05a74f1082c78159c10df843e79805..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,10 +129,6 @@ 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'] = ''
@@ -136,17 +136,30 @@ def main():
     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()