]> git.decadent.org.uk Git - dak.git/blobdiff - dak/dominate.py
Use correct db_name for MD5 hash
[dak.git] / dak / dominate.py
index 73eee8ca18f5261b95da7f930813b45334abfa53..52f1b17220cea6824e7b6d91deb3ba04e572ca9f 100755 (executable)
@@ -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()