From 219e0a074702900f9c954f462ecace9b3a5c7149 Mon Sep 17 00:00:00 2001 From: Benjamin Drung Date: Thu, 17 Dec 2009 11:56:30 +0100 Subject: - Move compare_versions from moz-version into separate module - add src/moz_version.py - update src/moz-version - update src/dh_xul-ext --- src/moz_version.py | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 src/moz_version.py (limited to 'src/moz_version.py') diff --git a/src/moz_version.py b/src/moz_version.py new file mode 100644 index 0000000..832d65f --- /dev/null +++ b/src/moz_version.py @@ -0,0 +1,140 @@ +# Copyright (c) 2009 Benjamin Drung +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +# Reference: https://developer.mozilla.org/en/Toolkit_version_format + +import sys + +def decode_part(part): + """Decodes a version part (like 5pre4) to """ + subpart = [0,"",0,""] + + # Split + length = 0 + for i in xrange(len(part)): + if part[i].isdigit() or part[i] in ("-"): + length += 1 + else: + break + if length > 0: + subpart[0] = int(part[0:length]) + part = part[length:] + + # Split + length = 0 + for i in xrange(len(part)): + if not (part[i].isdigit() or part[i] in ("-")): + length += 1 + else: + break + subpart[1] = part[0:length] + part = part[length:] + + # Split + length = 0 + for i in xrange(len(part)): + if part[i].isdigit() or part[i] in ("-"): + length += 1 + else: + break + if length > 0: + subpart[2] = int(part[0:length]) + subpart[3] = part[length:] + + # if string-b is a plus sign, number-a is incremented to be compatible with + # the Firefox 1.0.x version format: 1.0+ is the same as 1.1pre + if subpart[1] == "+": + subpart[0] += 1 + subpart[1] = "pre" + + # if the version part is a single asterisk, it is interpreted as an + # infinitely-large number: 1.5.0.* is the same as 1.5.0.(infinity) + if subpart[1] == "*": + subpart[0] = sys.maxint + subpart[1] = "" + + return subpart + +def decode_version(version, verbose=False): + """Decodes a version string like 1.1pre1a""" + parts = version.split(".") + decoded_parts = map(decode_part, parts) + if verbose: + print "I: Split %s up into %s." % (version, decoded_parts) + return decoded_parts + +def compare_subpart((a, b)): + # A string-part that exists is always less-then a nonexisting string-part + if a == "": + if b == "": + return 0 + else: + return 1 + elif b == "": + if a == "": + return 0 + else: + return -1 + else: + return cmp(a, b) + +def compare_part((x, y)): + compared_subparts = filter(lambda x: x != 0, map(compare_subpart, zip(x, y))) + if compared_subparts: + return compared_subparts[0] + else: + return 0 + +def compare_versions(version1, version2, verbose=False): + a = decode_version(version1, verbose) + b = decode_version(version2, verbose) + + if len(a) < len(b): + a.extend((len(b) - len(a)) * [[0,"",0,""]]) + if len(b) < len(a): + b.extend((len(a) - len(b)) * [[0,"",0,""]]) + + result = filter(lambda x: x != 0, map(compare_part, zip(a, b))) + if result: + return result[0] + else: + return 0 + +def extract_upstream_version(debian_version): + # remove last part separated by a dash (1.0-2 -> 1.0) + parts = debian_version.split('-') + if len(parts) > 1: + del parts[-1] + upstream_version = '-'.join(parts) + + # compatibility: strip +nobinonly and +build + parts = upstream_version.split('+') + if len(parts) > 1 and parts[-1] == "nobinonly": + del parts[-1] + if len(parts) > 1 and parts[-1].startswith("build"): + del parts[-1] + upstream_version = '+'.join(parts) + + return upstream_version + +def convert_debian_to_moz_version(debian_version, verbose=False): + upstream_version = extract_upstream_version(debian_version) + moz_version = upstream_version.replace("~", "") + return moz_version -- cgit v1.2.3