]> git.decadent.org.uk Git - dak.git/blobdiff - dak/process_new.py
Fix exception handling in process-new.
[dak.git] / dak / process_new.py
index dd990f1fc3c53705c392bd9c573606bcd5dd6157..11e9bf48efc9b5e968f2661ebcf4e2272e90df44 100755 (executable)
@@ -337,33 +337,29 @@ def edit_overrides (new, upload, session):
 ################################################################################
 
 def check_pkg (upload):
+    save_stdout = sys.stdout
     try:
-        less_fd = os.popen("less -R -", 'w', 0)
-        stdout_fd = sys.stdout
-        try:
-            sys.stdout = less_fd
-            changes = utils.parse_changes (upload.pkg.changes_file)
-            print examine_package.display_changes(changes['distribution'], upload.pkg.changes_file)
-            files = upload.pkg.files
-            for f in files.keys():
-                if files[f].has_key("new"):
-                    ftype = files[f]["type"]
-                    if ftype == "deb":
-                        print examine_package.check_deb(changes['distribution'], f)
-                    elif ftype == "dsc":
-                        print examine_package.check_dsc(changes['distribution'], f)
-        finally:
-            print examine_package.output_package_relations()
-            sys.stdout = stdout_fd
+        sys.stdout = os.popen("less -R -", 'w', 0)
+        changes = utils.parse_changes (upload.pkg.changes_file)
+        print examine_package.display_changes(changes['distribution'], upload.pkg.changes_file)
+        files = upload.pkg.files
+        for f in files.keys():
+            if files[f].has_key("new"):
+                ftype = files[f]["type"]
+                if ftype == "deb":
+                    print examine_package.check_deb(changes['distribution'], f)
+                elif ftype == "dsc":
+                    print examine_package.check_dsc(changes['distribution'], f)
+        print examine_package.output_package_relations()
     except IOError, e:
         if e.errno == errno.EPIPE:
             utils.warn("[examine_package] Caught EPIPE; skipping.")
-            pass
         else:
+            sys.stdout = save_stdout
             raise
     except KeyboardInterrupt:
         utils.warn("[examine_package] Caught C-c; skipping.")
-        pass
+    sys.stdout = save_stdout
 
 ################################################################################
 
@@ -424,11 +420,18 @@ def do_new(upload, session):
     # Make a copy of distribution we can happily trample on
     changes["suite"] = copy.copy(changes["distribution"])
 
+    # Try to get an included dsc
+    dsc = None
+    (status, _) = upload.load_dsc()
+    if status:
+        dsc = upload.pkg.dsc
+
     # The main NEW processing loop
     done = 0
+    new = {}
     while not done:
         # Find out what's new
-        new, byhand = determine_new(upload.pkg.changes_file, changes, files, session=session)
+        new, byhand = determine_new(upload.pkg.changes_file, changes, files, dsc=dsc, session=session, new=new)
 
         if not new:
             break
@@ -485,7 +488,7 @@ def do_new(upload, session):
                 done = 1
         elif answer == 'N':
             edit_note(get_new_comments(changes.get("source", ""), session=session),
-                      upload, session)
+                      upload, session, bool(Options["Trainee"]))
         elif answer == 'P' and not Options["Trainee"]:
             prod_maintainer(get_new_comments(changes.get("source", ""), session=session),
                             upload)
@@ -516,6 +519,8 @@ def do_new(upload, session):
 def usage (exit_code=0):
     print """Usage: dak process-new [OPTION]... [CHANGES]...
   -a, --automatic           automatic run
+  -b, --no-binaries         do not sort binary-NEW packages first
+  -c, --comments            show NEW comments
   -h, --help                show this help and exit.
   -m, --manual-reject=MSG   manual reject with `msg'
   -n, --no-action           don't do anything
@@ -665,6 +670,12 @@ def do_pkg(changes_full_path, session):
     u.logger = Logger
     origchanges = os.path.abspath(u.pkg.changes_file)
 
+    # Try to get an included dsc
+    dsc = None
+    (status, _) = u.load_dsc()
+    if status:
+        dsc = u.pkg.dsc
+
     cnf = Config()
     bcc = "X-DAK: dak process-new"
     if cnf.has_key("Dinstall::Bcc"):
@@ -673,6 +684,7 @@ def do_pkg(changes_full_path, session):
         u.Subst["__BCC__"] = bcc
 
     files = u.pkg.files
+    u.check_distributions()
     for deb_filename, f in files.items():
         if deb_filename.endswith(".udeb") or deb_filename.endswith(".deb"):
             u.binary_file_checks(deb_filename, session)
@@ -689,7 +701,7 @@ def do_pkg(changes_full_path, session):
                 if not recheck(u, session):
                     return
 
-                new, byhand = determine_new(u.pkg.changes_file, u.pkg.changes, files, session=session)
+                new, byhand = determine_new(u.pkg.changes_file, u.pkg.changes, files, dsc=dsc, session=session)
                 if byhand:
                     do_byhand(u, session)
                 elif new:
@@ -705,6 +717,23 @@ def do_pkg(changes_full_path, session):
     except AlreadyLockedError, e:
         print "Seems to be locked by %s already, skipping..." % (e)
 
+def show_new_comments(changes_files, session):
+    sources = set()
+    query = """SELECT package, version, comment, author
+               FROM new_comments
+               WHERE package IN ('"""
+
+    for changes in changes_files:
+        sources.add(os.path.basename(changes).split("_")[0])
+
+    query += "%s') ORDER BY package, version" % "', '".join(sources)
+    r = session.execute(query)
+
+    for i in r:
+        print "%s_%s\n%s\n(%s)\n\n\n" % (i[0], i[1], i[2], i[3])
+
+    session.commit()
+
 ################################################################################
 
 def end():
@@ -730,12 +759,14 @@ def main():
     session = DBConn().session()
 
     Arguments = [('a',"automatic","Process-New::Options::Automatic"),
+                 ('b',"no-binaries","Process-New::Options::No-Binaries"),
+                 ('c',"comments","Process-New::Options::Comments"),
                  ('h',"help","Process-New::Options::Help"),
                  ('m',"manual-reject","Process-New::Options::Manual-Reject", "HasArg"),
                  ('t',"trainee","Process-New::Options::Trainee"),
                  ('n',"no-action","Process-New::Options::No-Action")]
 
-    for i in ["automatic", "help", "manual-reject", "no-action", "version", "trainee"]:
+    for i in ["automatic", "no-binaries", "comments", "help", "manual-reject", "no-action", "version", "trainee"]:
         if not cnf.has_key("Process-New::Options::%s" % (i)):
             cnf["Process-New::Options::%s" % (i)] = ""
 
@@ -763,15 +794,18 @@ def main():
 
     if len(changes_paths) > 1:
         sys.stderr.write("Sorting changes...\n")
-    changes_files = sort_changes(changes_paths, session)
+    changes_files = sort_changes(changes_paths, session, Options["No-Binaries"])
 
-    for changes_file in changes_paths:
-        changes_file = utils.validate_changes_file_arg(changes_file, 0)
-        if not changes_file:
-            continue
-        print "\n" + os.path.basename(changes_file)
+    if Options["Comments"]:
+        show_new_comments(changes_files, session)
+    else:
+        for changes_file in changes_files:
+            changes_file = utils.validate_changes_file_arg(changes_file, 0)
+            if not changes_file:
+                continue
+            print "\n" + os.path.basename(changes_file)
 
-        do_pkg (changes_file, session)
+            do_pkg (changes_file, session)
 
     end()