From cc52fe459c05b2588f635d5bf90ff9eaddb1f0f1 Mon Sep 17 00:00:00 2001 From: Benjamin Drung Date: Tue, 11 Oct 2011 22:40:18 +0200 Subject: Add ${xpi:Breaks} for versioned package dependency for maximum XUL application version. LP: #839130 --- debian/changelog | 2 + src/dh_xul-ext | 16 ++++- src/moz_version.py | 71 +++++++++++++++++++--- tests/dh_xul-ext/all/install.rdf | 6 +- tests/dh_xul-ext/all_environment/install.rdf | 6 +- tests/dh_xul-ext/debian/install.rdf | 6 +- tests/dh_xul-ext/expected_result/all.substvars | 1 + .../expected_result/all_environment.substvars | 1 + tests/dh_xul-ext/expected_result/debian.substvars | 1 + tests/dh_xul-ext/expected_result/ubuntu.substvars | 1 + tests/dh_xul-ext/ubuntu/install.rdf | 6 +- 11 files changed, 94 insertions(+), 23 deletions(-) diff --git a/debian/changelog b/debian/changelog index b53a8cf..30e9385 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,8 @@ mozilla-devscripts (0.29) UNRELEASED; urgency=low * Switch from dpkg-source 1.0 to 3.0 (native). * Updated VCS location. * Relicense my stuff under the ISC license. + * Add ${xpi:Breaks} for versioned package dependency for maximum + XUL application version (LP: #839130). [ Andrea Veri ] * debian/control: diff --git a/src/dh_xul-ext b/src/dh_xul-ext index 876d43e..c7328de 100755 --- a/src/dh_xul-ext +++ b/src/dh_xul-ext @@ -21,7 +21,8 @@ import os import subprocess import sys -from moz_version import compare_versions, convert_moz_to_debian_version +from moz_version import (compare_versions, convert_moz_to_debian_version, + moz_to_next_debian_version) import RDF @@ -43,6 +44,17 @@ class XulApp(object): return self.xul_id + ": " + self.package + " (" + self.sol + " to " + \ self.eol + ")" + def get_breaks(self): + """Return a string for ${xpi:Breaks} for the XUL application.""" + breaks = [] + if self.min_version: + deb_min_version = convert_moz_to_debian_version(self.min_version) + breaks.append(self.package + " (<< " + deb_min_version + ")") + if self.max_version: + deb_max_version = moz_to_next_debian_version(self.max_version) + breaks.append(self.package + " (>= " + deb_max_version + ")") + return ", ".join(breaks) + def get_eol(self): return self.eol @@ -297,6 +309,8 @@ def generate_substvars(script_name, xul_apps, package, verbose=False): else: lines.append("xpi:Depends=" + " | ".join(packages) + "\n") lines.append("xpi:Recommends=\n") + packages = [a.get_breaks() for a in supported_apps] + lines.append("xpi:Breaks=" + ", ".join(sorted(packages)) + "\n") packages = [a.get_package() for a in supported_apps] lines.append("xpi:Enhances=" + ", ".join(sorted(packages)) + "\n") packages = get_provided_package_names(package, supported_apps) diff --git a/src/moz_version.py b/src/moz_version.py index ce21f7f..c4cebed 100644 --- a/src/moz_version.py +++ b/src/moz_version.py @@ -128,6 +128,19 @@ def extract_upstream_version(debian_version): return upstream_version +def _convert_part_to_debian(part): + """Converts a Mozilla version part (like 5pre4) to a Debian version.""" + (number_a, string_b, number_c, string_d) = part + debian_version = "" + if string_d != "": + debian_version = "~" + string_d + if number_c != 0 or string_d != "": + debian_version = str(number_c) + debian_version + if string_b != "": + debian_version = "~" + string_b + debian_version + debian_version = str(number_a) + debian_version + return debian_version + def convert_debian_to_moz_version(debian_version, verbose=False): upstream_version = extract_upstream_version(debian_version) @@ -145,16 +158,54 @@ def convert_debian_to_moz_version(debian_version, verbose=False): def convert_moz_to_debian_version(moz_version, epoch=0, verbose=False): parts = decode_version(moz_version, verbose) # tranform parts - for i in xrange(len(parts)): - (number_a, string_b, number_c, string_d) = parts[i] - part = "" - if string_d != "": - part = "~" + string_d - if number_c != 0 or string_d != "": - part = str(number_c) + part - if string_b != "": - part = "~" + string_b + part - parts[i] = str(number_a) + part + parts = [_convert_part_to_debian(p) for p in parts] + debian_version = ".".join(parts) + if epoch != 0: + debian_version = str(epoch) + ":" + debian_version + return debian_version + +def moz_to_next_debian_version(moz_version, epoch=0, verbose=False): + """Convert a given Mozilla version to the next Debian version. + + Compared to convert_moz_to_debian_version it does following: + * append 0 to a trailing letter, or + * append + to a trailing number, or + * replace a trailing * with +. + + Examples: + 9.0a => 9.0~a0 + 9.0a1 => 9.0~a1+ + 9.0 => 9.0+ + 9.0.* => 9.0.+ + """ + parts = decode_version(moz_version, verbose) + # tranform last parts + (number_a, string_b, number_c, string_d) = parts[-1] + last_part = "" + if string_d != "": + last_part = "~" + string_d + "0" + if number_c != 0 or string_d != "": + if last_part: + last_part = str(number_c) + last_part + else: + if number_c == sys.maxint: + last_part = "+" + else: + last_part = str(number_c) + "+" + if string_b != "": + if last_part: + last_part = "~" + string_b + last_part + else: + last_part = "~" + string_b + "0" + if last_part: + last_part = str(number_a) + last_part + else: + if number_a == sys.maxint: + last_part = "+" + else: + last_part = str(number_a) + "+" + + parts = [_convert_part_to_debian(p) for p in parts[:-1]] + [last_part] debian_version = ".".join(parts) if epoch != 0: debian_version = str(epoch) + ":" + debian_version diff --git a/tests/dh_xul-ext/all/install.rdf b/tests/dh_xul-ext/all/install.rdf index 773eaa0..cee21e9 100644 --- a/tests/dh_xul-ext/all/install.rdf +++ b/tests/dh_xul-ext/all/install.rdf @@ -9,7 +9,7 @@ {ec8030f7-c20a-464f-9b0e-13a3a9e97384} 3.5 - 7.0a1 + 7.0a @@ -25,7 +25,7 @@ {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} 2.0 - 2.4a1 + 2.4 @@ -33,7 +33,7 @@ {a79fe89b-6662-4ff4-8e88-09950ad4dfde} 0.1 - 100.0 + 100.* diff --git a/tests/dh_xul-ext/all_environment/install.rdf b/tests/dh_xul-ext/all_environment/install.rdf index 773eaa0..cee21e9 100644 --- a/tests/dh_xul-ext/all_environment/install.rdf +++ b/tests/dh_xul-ext/all_environment/install.rdf @@ -9,7 +9,7 @@ {ec8030f7-c20a-464f-9b0e-13a3a9e97384} 3.5 - 7.0a1 + 7.0a @@ -25,7 +25,7 @@ {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} 2.0 - 2.4a1 + 2.4 @@ -33,7 +33,7 @@ {a79fe89b-6662-4ff4-8e88-09950ad4dfde} 0.1 - 100.0 + 100.* diff --git a/tests/dh_xul-ext/debian/install.rdf b/tests/dh_xul-ext/debian/install.rdf index 773eaa0..cee21e9 100644 --- a/tests/dh_xul-ext/debian/install.rdf +++ b/tests/dh_xul-ext/debian/install.rdf @@ -9,7 +9,7 @@ {ec8030f7-c20a-464f-9b0e-13a3a9e97384} 3.5 - 7.0a1 + 7.0a @@ -25,7 +25,7 @@ {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} 2.0 - 2.4a1 + 2.4 @@ -33,7 +33,7 @@ {a79fe89b-6662-4ff4-8e88-09950ad4dfde} 0.1 - 100.0 + 100.* diff --git a/tests/dh_xul-ext/expected_result/all.substvars b/tests/dh_xul-ext/expected_result/all.substvars index 0b86163..656cf41 100644 --- a/tests/dh_xul-ext/expected_result/all.substvars +++ b/tests/dh_xul-ext/expected_result/all.substvars @@ -1,4 +1,5 @@ xpi:Depends=iceweasel (>= 3.5) | icedove (>= 3.0) | iceape (>= 2.0) | conkeror | firefox | thunderbird (>= 3.0) | seamonkey (>= 2.0) xpi:Recommends= +xpi:Breaks=conkeror (>= 100.+), firefox (>= 7.0~a0), iceape (<< 2.0), iceape (>= 2.4+), icedove (<< 3.0), icedove (>= 7.0~a1+), iceweasel (<< 3.5), iceweasel (>= 7.0~a0), seamonkey (<< 2.0), seamonkey (>= 2.4+), thunderbird (<< 3.0), thunderbird (>= 7.0~a1+) xpi:Enhances=conkeror, firefox, iceape, icedove, iceweasel, seamonkey, thunderbird xpi:Provides=conkeror-test-package, firefox-test-package, iceape-test-package, icedove-test-package, iceweasel-test-package, seamonkey-test-package, test-package, thunderbird-test-package diff --git a/tests/dh_xul-ext/expected_result/all_environment.substvars b/tests/dh_xul-ext/expected_result/all_environment.substvars index 0b86163..656cf41 100644 --- a/tests/dh_xul-ext/expected_result/all_environment.substvars +++ b/tests/dh_xul-ext/expected_result/all_environment.substvars @@ -1,4 +1,5 @@ xpi:Depends=iceweasel (>= 3.5) | icedove (>= 3.0) | iceape (>= 2.0) | conkeror | firefox | thunderbird (>= 3.0) | seamonkey (>= 2.0) xpi:Recommends= +xpi:Breaks=conkeror (>= 100.+), firefox (>= 7.0~a0), iceape (<< 2.0), iceape (>= 2.4+), icedove (<< 3.0), icedove (>= 7.0~a1+), iceweasel (<< 3.5), iceweasel (>= 7.0~a0), seamonkey (<< 2.0), seamonkey (>= 2.4+), thunderbird (<< 3.0), thunderbird (>= 7.0~a1+) xpi:Enhances=conkeror, firefox, iceape, icedove, iceweasel, seamonkey, thunderbird xpi:Provides=conkeror-test-package, firefox-test-package, iceape-test-package, icedove-test-package, iceweasel-test-package, seamonkey-test-package, test-package, thunderbird-test-package diff --git a/tests/dh_xul-ext/expected_result/debian.substvars b/tests/dh_xul-ext/expected_result/debian.substvars index 923b41b..a70bdc9 100644 --- a/tests/dh_xul-ext/expected_result/debian.substvars +++ b/tests/dh_xul-ext/expected_result/debian.substvars @@ -1,4 +1,5 @@ xpi:Depends=iceweasel (>= 3.5) | icedove (>= 3.0) | iceape (>= 2.0) | conkeror xpi:Recommends= +xpi:Breaks=conkeror (>= 100.+), iceape (<< 2.0), iceape (>= 2.4+), icedove (<< 3.0), icedove (>= 7.0~a1+), iceweasel (<< 3.5), iceweasel (>= 7.0~a0) xpi:Enhances=conkeror, iceape, icedove, iceweasel xpi:Provides=conkeror-test-package, iceape-test-package, icedove-test-package, iceweasel-test-package, test-package diff --git a/tests/dh_xul-ext/expected_result/ubuntu.substvars b/tests/dh_xul-ext/expected_result/ubuntu.substvars index 6f7e3be..285ae09 100644 --- a/tests/dh_xul-ext/expected_result/ubuntu.substvars +++ b/tests/dh_xul-ext/expected_result/ubuntu.substvars @@ -1,4 +1,5 @@ xpi:Depends=firefox | thunderbird (>= 3.0) | seamonkey (>= 2.0) xpi:Recommends= +xpi:Breaks=firefox (>= 7.0~a0), seamonkey (<< 2.0), seamonkey (>= 2.4+), thunderbird (<< 3.0), thunderbird (>= 7.0~a1+) xpi:Enhances=firefox, seamonkey, thunderbird xpi:Provides=firefox-test-package, seamonkey-test-package, test-package, thunderbird-test-package diff --git a/tests/dh_xul-ext/ubuntu/install.rdf b/tests/dh_xul-ext/ubuntu/install.rdf index 773eaa0..cee21e9 100644 --- a/tests/dh_xul-ext/ubuntu/install.rdf +++ b/tests/dh_xul-ext/ubuntu/install.rdf @@ -9,7 +9,7 @@ {ec8030f7-c20a-464f-9b0e-13a3a9e97384} 3.5 - 7.0a1 + 7.0a @@ -25,7 +25,7 @@ {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} 2.0 - 2.4a1 + 2.4 @@ -33,7 +33,7 @@ {a79fe89b-6662-4ff4-8e88-09950ad4dfde} 0.1 - 100.0 + 100.* -- cgit v1.2.3