]> git.decadent.org.uk Git - dak.git/blobdiff - dak/process_new.py
Remove files that are (no longer) generated
[dak.git] / dak / process_new.py
index 53b4bf7be608cb341dd128b78254123024c96611..55397c7dc79a4e2df577397d9262a6addb047df1 100755 (executable)
@@ -54,6 +54,8 @@ import pwd
 import apt_pkg, apt_inst
 import examine_package
 import subprocess
 import apt_pkg, apt_inst
 import examine_package
 import subprocess
+import daklib.daksubprocess
+from sqlalchemy import or_
 
 from daklib.dbconn import *
 from daklib.queue import *
 
 from daklib.dbconn import *
 from daklib.queue import *
@@ -64,7 +66,6 @@ from daklib.dak_exceptions import CantOpenError, AlreadyLockedError, CantGetLock
 from daklib.summarystats import SummaryStats
 from daklib.config import Config
 from daklib.policy import UploadCopy, PolicyQueueUploadHandler
 from daklib.summarystats import SummaryStats
 from daklib.config import Config
 from daklib.policy import UploadCopy, PolicyQueueUploadHandler
-from sqlalchemy.sql import not_
 
 # Globals
 Options = None
 
 # Globals
 Options = None
@@ -119,23 +120,27 @@ class Priority_Completer:
 
 ################################################################################
 
 
 ################################################################################
 
-def claimed_overrides(upload, missing, session):
-    source = [upload.source.source]
+def takenover_binaries(upload, missing, session):
+    rows = []
     binaries = set([x.package for x in upload.binaries])
     binaries = set([x.package for x in upload.binaries])
-    suites = ('unstable','experimental')
     for m in missing:
         if m['type'] != 'dsc':
     for m in missing:
         if m['type'] != 'dsc':
-            binaries.remove(m['package'])
+            binaries.discard(m['package'])
     if binaries:
     if binaries:
-        return session.query(DBBinary.package, DBSource.source).distinct(). \
+        source = upload.binaries[0].source.source
+        suite = upload.target_suite.overridesuite or \
+                    upload.target_suite.suite_name
+        suites = [s[0] for s in session.query(Suite.suite_name).filter \
+                                    (or_(Suite.suite_name == suite,
+                                     Suite.overridesuite == suite)).all()]
+        rows = session.query(DBSource.source, DBBinary.package).distinct(). \
                              filter(DBBinary.package.in_(binaries)). \
                              join(DBBinary.source). \
                              filter(DBBinary.package.in_(binaries)). \
                              join(DBBinary.source). \
-                             filter(not_(DBSource.source.in_(source))). \
+                             filter(DBSource.source != source). \
                              join(DBBinary.suites). \
                              filter(Suite.suite_name.in_(suites)). \
                              join(DBBinary.suites). \
                              filter(Suite.suite_name.in_(suites)). \
-                             order_by(DBSource.source, DBBinary.package)
-    else:
-        return None
+                             order_by(DBSource.source, DBBinary.package).all()
+    return rows
 
 ################################################################################
 
 
 ################################################################################
 
@@ -150,19 +155,20 @@ def print_new (upload, missing, indexed, session, file=sys.stdout):
             package = m['package']
         section = m['section']
         priority = m['priority']
             package = m['package']
         section = m['section']
         priority = m['priority']
+        included = "" if m['included'] else "NOT UPLOADED"
         if indexed:
         if indexed:
-            line = "(%s): %-20s %-20s %-20s" % (index, package, priority, section)
+            line = "(%s): %-20s %-20s %-20s %s" % (index, package, priority, section, included)
         else:
         else:
-            line = "%-20s %-20s %-20s" % (package, priority, section)
+            line = "%-20s %-20s %-20s %s" % (package, priority, section, included)
         line = line.strip()
         if not m['valid']:
             line = line + ' [!]'
         print >>file, line
         line = line.strip()
         if not m['valid']:
             line = line + ' [!]'
         print >>file, line
-    claimed = claimed_overrides(upload, missing, session)
-    if claimed and claimed.count():
-        print '\nCLAIMED OVERRIDES'
-        for c in claimed:
-            print '%s: %s' % (c.source, c.package)
+    takenover = takenover_binaries(upload, missing, session)
+    if takenover:
+        print '\n\nBINARIES TAKEN OVER\n'
+        for t in takenover:
+            print '%s: %s' % (t[0], t[1])
     notes = get_new_comments(upload.policy_queue, upload.changes.source)
     for note in notes:
         print "\nAuthor: %s\nVersion: %s\nTimestamp: %s\n\n%s" \
     notes = get_new_comments(upload.policy_queue, upload.changes.source)
     for note in notes:
         print "\nAuthor: %s\nVersion: %s\nTimestamp: %s\n\n%s" \
@@ -213,7 +219,8 @@ def edit_new (overrides, upload, session):
             type, pkg = pkg.split(':', 1)
         else:
             type = 'deb'
             type, pkg = pkg.split(':', 1)
         else:
             type = 'deb'
-        if (type, pkg) not in overrides_map:
+        o = overrides_map.get((type, pkg), None)
+        if o is None:
             utils.warn("Ignoring unknown package '%s'" % (pkg))
         else:
             if section.find('/') != -1:
             utils.warn("Ignoring unknown package '%s'" % (pkg))
         else:
             if section.find('/') != -1:
@@ -226,6 +233,7 @@ def edit_new (overrides, upload, session):
                     section=section,
                     component=component,
                     priority=priority,
                     section=section,
                     component=component,
                     priority=priority,
+                    included=o['included'],
                     ))
     return new_overrides
 
                     ))
     return new_overrides
 
@@ -342,8 +350,11 @@ def check_pkg (upload, upload_copy, session):
     suite_name = upload.target_suite.suite_name
     handler = PolicyQueueUploadHandler(upload, session)
     missing = [(m['type'], m["package"]) for m in handler.missing_overrides(hints=missing)]
     suite_name = upload.target_suite.suite_name
     handler = PolicyQueueUploadHandler(upload, session)
     missing = [(m['type'], m["package"]) for m in handler.missing_overrides(hints=missing)]
+
+    less_cmd = ("less", "-R", "-")
+    less_process = daklib.daksubprocess.Popen(less_cmd, bufsize=0, stdin=subprocess.PIPE)
     try:
     try:
-        sys.stdout = os.popen("less -R -", 'w', 0)
+        sys.stdout = less_process.stdin
         print examine_package.display_changes(suite_name, changes)
 
         source = upload.source
         print examine_package.display_changes(suite_name, changes)
 
         source = upload.source
@@ -360,6 +371,7 @@ def check_pkg (upload, upload_copy, session):
                 print examined
 
         print examine_package.output_package_relations()
                 print examined
 
         print examine_package.output_package_relations()
+        less_process.stdin.close()
     except IOError as e:
         if e.errno == errno.EPIPE:
             utils.warn("[examine_package] Caught EPIPE; skipping.")
     except IOError as e:
         if e.errno == errno.EPIPE:
             utils.warn("[examine_package] Caught EPIPE; skipping.")
@@ -368,6 +380,7 @@ def check_pkg (upload, upload_copy, session):
     except KeyboardInterrupt:
         utils.warn("[examine_package] Caught C-c; skipping.")
     finally:
     except KeyboardInterrupt:
         utils.warn("[examine_package] Caught C-c; skipping.")
     finally:
+        less_process.wait()
         sys.stdout = save_stdout
 
 ################################################################################
         sys.stdout = save_stdout
 
 ################################################################################
@@ -445,7 +458,7 @@ def run_user_inspect_command(upload, upload_copy):
             changes=changes,
             )
 
             changes=changes,
             )
 
-    subprocess.check_call(shell_command, shell=True)
+    daklib.daksubprocess.check_call(shell_command, shell=True)
 
 ################################################################################
 
 
 ################################################################################