]> git.decadent.org.uk Git - dak.git/blobdiff - dak/control_suite.py
Convert exception handling to Python3 syntax.
[dak.git] / dak / control_suite.py
index ed4f6b1ace28e3dcb255cbfe9a48d3c17b1409f7..57e43da6ac0b77418c8b4745d4c900ef9c4c8728 100755 (executable)
@@ -193,6 +193,17 @@ def version_checks(package, architecture, target_suite, new_version, session, fo
 
 #######################################################################################
 
+def cmp_package_version(a, b):
+    """
+    comparison function for tuples of the form (package-name, version ...)
+    """
+    cmp_package = cmp(a[0], b[0])
+    if cmp_package != 0:
+        return cmp_package
+    return apt_pkg.VersionCompare(a[1], b[1])
+
+#######################################################################################
+
 def set_suite(file, suite, session, britney=False, force=False):
     suite_id = suite.suite_id
     lines = file.readlines()
@@ -227,19 +238,8 @@ def set_suite(file, suite, session, britney=False, force=False):
         key = " ".join(split_line)
         desired[key] = ""
 
-    # Check to see which packages need removed and remove them
-    for key in current.keys():
-        if not desired.has_key(key):
-            (package, version, architecture) = key.split()
-            pkid = current[key]
-            if architecture == "source":
-                session.execute("""DELETE FROM src_associations WHERE id = :pkid""", {'pkid': pkid})
-            else:
-                session.execute("""DELETE FROM bin_associations WHERE id = :pkid""", {'pkid': pkid})
-            Logger.log(["removed", key, pkid])
-
     # Check to see which packages need added and add them
-    for key in desired.keys():
+    for key in sorted(desired.keys(), cmp=cmp_package_version):
         if not current.has_key(key):
             (package, version, architecture) = key.split()
             version_checks(package, architecture, suite.suite_name, version, session, force)
@@ -254,6 +254,17 @@ def set_suite(file, suite, session, britney=False, force=False):
                                         VALUES (:suiteid, :pkid)""", {'suiteid': suite_id, 'pkid': pkid})
             Logger.log(["added", key, pkid])
 
+    # Check to see which packages need removed and remove them
+    for key in current.keys():
+        if not desired.has_key(key):
+            (package, version, architecture) = key.split()
+            pkid = current[key]
+            if architecture == "source":
+                session.execute("""DELETE FROM src_associations WHERE id = :pkid""", {'pkid': pkid})
+            else:
+                session.execute("""DELETE FROM bin_associations WHERE id = :pkid""", {'pkid': pkid})
+            Logger.log(["removed", key, pkid])
+
     session.commit()
 
     if britney:
@@ -268,17 +279,19 @@ def process_file(file, suite, action, session, britney=False, force=False):
 
     suite_id = suite.suite_id
 
-    lines = file.readlines()
+    request = []
 
     # Our session is already in a transaction
-    for line in lines:
+    for line in file:
         split_line = line.strip().split()
         if len(split_line) != 3:
             utils.warn("'%s' does not break into 'package version architecture'." % (line[:-1]))
             continue
+        request.append(split_line)
 
-        (package, version, architecture) = split_line
+    request.sort(cmp=cmp_package_version)
 
+    for package, version, architecture in request:
         pkid = get_id(package, version, architecture, session)
         if not pkid:
             continue
@@ -383,7 +396,7 @@ def main ():
 
     try:
         file_list = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv);
-    except SystemError, e:
+    except SystemError as e:
         print "%s\n" % e
         usage(1)
     Options = cnf.SubTree("Control-Suite::Options")