]> git.decadent.org.uk Git - dak.git/blobdiff - dak/process_new.py
Merge remote branch 'bdefreese/barry_update25' into merge
[dak.git] / dak / process_new.py
index 1be7c21382818832bf133ba076751f9c03c26538..6bdd301f23512345c0b485f3c2241302ed3a0a1c 100755 (executable)
@@ -603,6 +603,9 @@ def do_new(upload, session):
     changes = upload.pkg.changes
     cnf = Config()
 
+    # Check for a valid distribution
+    upload.check_distributions()
+
     # Make a copy of distribution we can happily trample on
     changes["suite"] = copy.copy(changes["distribution"])
 
@@ -620,10 +623,6 @@ def do_new(upload, session):
                         oinv, suite, ninv, override)
             del changes["suite"][suite]
             changes["suite"][override] = 1
-    # Validate suites
-    for suite in changes["suite"].keys():
-        if get_suite(suite, session) is None:
-            utils.fubar("%s has invalid suite '%s' (possibly overriden).  say wha?" % (changes, suite))
 
     # The main NEW processing loop
     done = 0
@@ -666,6 +665,7 @@ def do_new(upload, session):
             try:
                 check_daily_lock()
                 done = add_overrides (new, upload, session)
+                do_accept(upload, session)
                 Logger.log(["NEW ACCEPT: %s" % (upload.pkg.changes_file)])
             except CantGetLockError:
                 print "Hello? Operator! Give me the number for 911!"
@@ -675,11 +675,11 @@ def do_new(upload, session):
         elif answer == 'E' and not Options["Trainee"]:
             new = edit_overrides (new, upload, session)
         elif answer == 'M' and not Options["Trainee"]:
-            upload.pkg.remove_known_changes()
             aborted = upload.do_reject(manual=1,
                                        reject_message=Options["Manual-Reject"],
                                        note=get_new_comments(changes.get("source", ""), session=session))
             if not aborted:
+                upload.pkg.remove_known_changes()
                 Logger.log(["NEW REJECT: %s" % (upload.pkg.changes_file)])
                 done = 1
         elif answer == 'N':
@@ -816,36 +816,48 @@ def lock_package(package):
     finally:
         os.unlink(path)
 
-def move_file_to_queue(to_q, f, session):
-    """mark a file as being in the unchecked queue"""
-    # update the queue_file entry for the existing queue
-    qf = session.query(QueueFile).filter_by(queueid=to_q.queueid,
-                                            filename=f.filename)
-    qf.queue = to_q
+class clean_holding(object):
+    def __init__(self,pkg):
+        self.pkg = pkg
+
+    def __enter__(self):
+        pass
+
+    def __exit__(self, type, value, traceback):
+        h = Holding()
+
+        for f in self.pkg.files.keys():
+            if os.path.exists(os.path.join(h.holding_dir, f)):
+                os.unlink(os.path.join(h.holding_dir, f))
 
-    # update the changes_pending_files row
-    f.queue = to_q
 
-def changes_to_unchecked(changes, session):
-    """move a changes file to unchecked"""
-    unchecked = get_policy_queue('unchecked', session );
-    changes.in_queue = unchecked
 
-    for f in changes.pkg.files:
-        move_file_to_queue(unchecked, f)
+def changes_to_newstage(upload, session):
+    """move a changes file to newstage"""
+    new = get_policy_queue('new', session );
+    newstage = get_policy_queue('newstage', session );
 
-    # actually move files
-    changes.move_to_queue(unchecked)
+    chg = session.query(DBChange).filter_by(changesname=os.path.basename(upload.pkg.changes_file)).one()
+    chg.approved_for = newstage.policy_queue_id
 
-def _accept(upload):
+    for f in chg.files:
+        # update the changes_pending_files row
+        f.queue = newstage
+        utils.move(os.path.join(new.path, f.filename), newstage.path, perms=int(newstage.perms, 8))
+
+    utils.move(os.path.join(new.path, upload.pkg.changes_file), newstage.path, perms=int(newstage.perms, 8))
+    chg.in_queue = newstage
+    session.commit()
+
+def _accept(upload, session):
     if Options["No-Action"]:
         return
     (summary, short_summary) = upload.build_summaries()
-#    upload.accept(summary, short_summary, targetqueue)
-#    os.unlink(upload.pkg.changes_file[:-8]+".dak")
-    changes_to_unchecked(upload)
+    # upload.accept(summary, short_summary, targetqueue)
+
+    changes_to_newstage(upload, session)
 
-def do_accept(upload):
+def do_accept(upload, session):
     print "ACCEPT"
     cnf = Config()
     if not Options["No-Action"]:
@@ -859,7 +871,7 @@ def do_accept(upload):
             upload.Subst["__SUMMARY__"] = summary
         else:
             # Just a normal upload, accept it...
-            _accept(upload)
+            _accept(upload, session)
 
 def do_pkg(changes_file, session):
     new_queue = get_policy_queue('new', session );
@@ -881,44 +893,32 @@ def do_pkg(changes_file, session):
 
     files = u.pkg.files
     for deb_filename, f in files.items():
-        package = re_package.sub(r'\1', deb_filename)
-        files[deb_filename]["package"] = package
-
-        if deb_filename.endswith(".udeb"):
-            files[deb_filename]["dbtype"] = "udeb"
-        elif deb_filename.endswith(".deb"):
-            files[deb_filename]["dbtype"] = "deb"
-        else:
-            m = re_issource.match(deb_filename)
-            if not m:
-                continue
-            files[deb_filename]["package"] = m.group(1)
-            files[deb_filename]["version"] = m.group(2)
-            files[deb_filename]["type"] = m.group(3)
-
-        files[deb_filename]["type"] = get_type(f, session)
-        entry = files[deb_filename]
-
-        # Version and file overwrite checks
-        if entry["type"] == "deb":
+        if deb_filename.endswith(".udeb") or deb_filename.endswith(".deb"):
+            u.binary_file_checks(deb_filename, session)
             u.check_binary_against_db(deb_filename, session)
-        elif entry["type"] == "dsc":
+        else:
+            u.source_file_checks(deb_filename, session)
             u.check_source_against_db(deb_filename, session)
-            u.check_dsc_against_db(dsc_filename, session)
+
+        u.pkg.changes["suite"] = copy.copy(u.pkg.changes["distribution"])
 
     try:
         with lock_package(u.pkg.changes["source"]):
-            if not recheck(u, session):
-                return
-
-            # FIXME: This does need byhand checks added!
-            print "files is %s" % (u.pkg.files)
-            print "changes is %s" % (u.pkg.changes)
-            new = determine_new(u.pkg.changes, files)
-            if new:
-                do_new(u, session)
-            else:
-                do_accept(u)
+            with clean_holding(u.pkg):
+                if not recheck(u, session):
+                    return
+
+                # FIXME: This does need byhand checks added!
+                new = determine_new(u.pkg.changes, files)
+                if new:
+                    do_new(u, session)
+                else:
+                    try:
+                        check_daily_lock()
+                        do_accept(u, session)
+                    except CantGetLockError:
+                        print "Hello? Operator! Give me the number for 911!"
+                        print "Dinstall in the locked area, cant process packages, come back later"
 #             (new, byhand) = check_status(files)
 #             if new or byhand:
 #                 if new: