[dak/master] control-suite: sort list by (package-name, version)
Having multiple versions of the same package in a suite should be
possible, but we need to add the package with the lower version first to
ensure that version checks are not violated.
---
dak/control_suite.py | 21 +++++++++++++++++----
1 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/dak/control_suite.py b/dak/control_suite.py
index ed4f6b1..0f3f53a 100755
--- a/dak/control_suite.py
+++ b/dak/control_suite.py
@@ -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()
@@ -239,7 +250,7 @@ def set_suite(file, suite, session, britney=False, force=False):
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)
@@ -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
--
1.7.2.5
Reply to: