]> git.decadent.org.uk Git - dak.git/blobdiff - dak/dominate.py
Merge remote-tracking branch 'nthykier/auto-decruft'
[dak.git] / dak / dominate.py
index 73eee8ca18f5261b95da7f930813b45334abfa53..449b9595949f5cf830a8a9c130b56b00e7655357 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
 
@@ -88,7 +89,10 @@ def deleteAssociations(table, idList, session):
             FROM %s
             WHERE id = :id
     """ % table
-    session.execute(query, [{'id': id} for id in idList])
+    params = [{'id': id} for id in idList]
+    if len(params) == 0:
+        return
+    session.execute(query, params)
 
 def doDaDoDa(suite, session):
     # keep this part disabled because it is too dangerous
@@ -124,27 +128,35 @@ 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))
+
+    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 __name__ == '__main__':
     main()