]> git.donarmstrong.com Git - dak.git/blobdiff - dak/process_policy.py
test_gpg.py: also check signature timestamp
[dak.git] / dak / process_policy.py
index db459607588971ae19c1b80b6dc04dd85b44560a..2890c8615403b4017710e711194de46f7cda7f7b 100755 (executable)
@@ -56,6 +56,7 @@ Logger = None
 
 def do_comments(dir, srcqueue, opref, npref, line, fn, transaction):
     session = transaction.session
+    actions = []
     for comm in [ x for x in os.listdir(dir) if x.startswith(opref) ]:
         lines = open(os.path.join(dir, comm)).readlines()
         if len(lines) == 0 or lines[0] != line + "\n": continue
@@ -75,13 +76,19 @@ def do_comments(dir, srcqueue, opref, npref, line, fn, transaction):
         uploads = session.query(PolicyQueueUpload).filter_by(policy_queue=srcqueue) \
             .join(PolicyQueueUpload.changes).filter(DBChange.changesname.startswith(changes_prefix)) \
             .order_by(PolicyQueueUpload.source_id)
-        for u in uploads:
-            print "Processing changes file: %s" % u.changes.changesname
-            fn(u, srcqueue, "".join(lines[1:]), transaction)
+        reason = "".join(lines[1:])
+        actions.extend((u, reason) for u in uploads)
 
         if opref != npref:
             newcomm = npref + comm[len(opref):]
-            transaction.fs.move(os.path.join(dir, comm), os.path.join(dir, newcomm))
+            newcomm = utils.find_next_free(os.path.join(dir, newcomm))
+            transaction.fs.move(os.path.join(dir, comm), newcomm)
+
+    actions.sort()
+
+    for u, reason in actions:
+        print("Processing changes file: {0}".format(u.changes.changesname))
+        fn(u, srcqueue, reason, transaction)
 
 ################################################################################
 
@@ -162,16 +169,19 @@ def comment_accept(upload, srcqueue, comments, transaction):
         if upload.source is not None:
             for f in [ df.poolfile for df in upload.source.srcfiles ]:
                 dst = os.path.join(copydir, f.basename)
-                fs.copy(f.fullpath, dst, mode=mode)
+                if not os.path.exists(dst):
+                    fs.copy(f.fullpath, dst, mode=mode)
 
         for db_binary in upload.binaries:
             f = db_binary.poolfile
             dst = os.path.join(copydir, f.basename)
-            fs.copy(f.fullpath, dst, mode=mode)
+            if not os.path.exists(dst):
+                fs.copy(f.fullpath, dst, mode=mode)
 
         src = os.path.join(upload.policy_queue.path, upload.changes.changesname)
         dst = os.path.join(copydir, upload.changes.changesname)
-        fs.copy(src, dst, mode=mode)
+        if not os.path.exists(dst):
+            fs.copy(src, dst, mode=mode)
 
     if upload.source is not None and not Options['No-Action']:
         urgency = upload.changes.urgency
@@ -409,9 +419,9 @@ def main():
         # The comments stuff relies on being in the right directory
         os.chdir(pq.path)
 
+        do_comments(commentsdir, pq, "REJECT.", "REJECTED.", "NOTOK", comment_reject, transaction)
         do_comments(commentsdir, pq, "ACCEPT.", "ACCEPTED.", "OK", comment_accept, transaction)
         do_comments(commentsdir, pq, "ACCEPTED.", "ACCEPTED.", "OK", comment_accept, transaction)
-        do_comments(commentsdir, pq, "REJECT.", "REJECTED.", "NOTOK", comment_reject, transaction)
 
         remove_unreferenced_binaries(pq, transaction)
         remove_unreferenced_sources(pq, transaction)