From 58041356e49f9d55a02d250081071fe2aa713438 Mon Sep 17 00:00:00 2001 From: Olav Vitters Date: Wed, 16 Jan 2013 09:35:26 +0000 Subject: handle networkmanager version numbering --- mgagnome | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) (limited to 'mgagnome') diff --git a/mgagnome b/mgagnome index d5f6c18..1e2f6fe 100755 --- a/mgagnome +++ b/mgagnome @@ -82,6 +82,28 @@ def get_latest_version(versions, max_version=None): latest = version return latest +MAJOR_VERSIONS = { + 'NetworkManager': set(('0.9',)) + 'networkmanager': set(('0.9',)) +} + +def get_majmin(version, module=None): + nrs = version.split('.') + + if module and module in MAJOR_VERSIONS: + module_versions = [version.split(".") for version in MAJOR_VERSIONS[module]] + + nrstest = nrs[:] + + while len(nrstest) >= 2: + if nrstest in module_versions: + return (".".join(nrs[:len(nrstest)]), nrs[len(nrstest)]) + + nrstest.pop() + + return (nrs[0], nrs[1]) + + def get_safe_max_version(version): if not re_majmin.match(version): return None @@ -93,7 +115,7 @@ def get_safe_max_version(version): else: return "%d.%d" % (majmin_nr[0], majmin_nr[1] + 2) -def judge_version_increase(version_old, version_new): +def judge_version_increase(version_old, version_new, module=None): """Judge quality of version increase: Returns a tuple containing judgement and message @@ -116,7 +138,7 @@ def judge_version_increase(version_old, version_new): return (-3, "Version %s is older than current version %s!" % (version_new, version_old)) # Version is newer, but we don't want to see if it follows the GNOME versioning scheme - majmins = [re_majmin.sub(r'\1', ver) for ver in versions if re_majmin.match(ver) is not None] + majmins = [get_majmin(ver, module) for ver in versions if re_majmin.match(ver) is not None] if len(majmins) == 1: return (-1, "Version number scheme changes: %s" % (", ".join(versions))) @@ -136,16 +158,13 @@ def judge_version_increase(version_old, version_new): # 1.1.x -> 1.1.x or 1.0.x -> 1.0.x return (10, None) - # More detailed analysis needed, so figure out the numbers - majmin_nrs = [map(long, ver.split('.')) for ver in majmins] - # Check/ensure major version number is the same - if majmin_nrs[0][0] != majmin_nrs[1][0]: + if majmins[0][0] != majmins[1][0]: # 1.0.x -> 2.0.x return (1, "Major version number increase") # Minor indicates stable/unstable - devstate = (majmin_nrs[0][1] % 2 == 0, majmin_nrs[1][1] % 2 == 0) + devstate = (long(majmins[0][1]) % 2 == 0, long(majmins[1][1]) % 2 == 0) # Upgrading to unstable is weird if not devstate[1]: @@ -258,9 +277,10 @@ class SpecFile(object): re_update_version = re.compile(r'^(?P
Version:\s*)(?P.+)(?P\s*)$', re.MULTILINE + re.IGNORECASE)
     re_update_release = re.compile(r'^(?P
Release:\s*)(?P%mkrel \d+)(?P\s*)$', re.MULTILINE + re.IGNORECASE)
 
-    def __init__(self, path):
+    def __init__(self, path, module=None):
         self.path = path
         self.cwd = os.path.dirname(path)
+        self.module = module
 
     @property
     def version(self):
@@ -623,7 +643,7 @@ class Downstream(object):
 
             # Determine version from spec file
             try:
-                packages[package] = SpecFile(os.path.join(cwd, "SPECS", "%s.spec" % package)).version
+                packages[package] = SpecFile(os.path.join(cwd, "SPECS", "%s.spec" % package), module=upstream).version
             except subprocess.CalledProcessError:
                 raise ValueError("Multiple packages found and cannot determine version of %s" % package)
 
@@ -669,7 +689,7 @@ def join_streams(show_version=False, only_diff_version=False):
             if show_version or only_diff_version:
                 cwd = os.path.join(root, package)
                 try:
-                    spec_version = SpecFile(os.path.join(cwd, "SPECS", "%s.spec" % package)).version
+                    spec_version = SpecFile(os.path.join(cwd, "SPECS", "%s.spec" % package), module=module).version
                 except subprocess.CalledProcessError:
                     spec_version = 'N/A'
 
@@ -817,7 +837,8 @@ def cmd_package_new_version(options, parser):
         sys.exit(1)
 
     # SpecFile class handles the actual version+release change
-    s = SpecFile(os.path.join(cwd, "SPECS", "%s.spec" % package))
+    # XXX - module should reflect upstream name, this gives it the package name
+    s = SpecFile(os.path.join(cwd, "SPECS", "%s.spec" % package), module=package)
     print "%s => %s" % (s.version, options.version)
     if not s.update(options.version, force=options.force):
         sys.exit(1)
-- 
cgit v1.2.1