diff options
author | Jon Turney <jon.turney@dronecode.org.uk> | 2016-11-02 17:06:47 +0300 |
---|---|---|
committer | Jon Turney <jon.turney@dronecode.org.uk> | 2016-11-02 17:27:48 +0300 |
commit | 062aa6f6fa6f3e4859c940243b5c15b4db16c989 (patch) | |
tree | d836431e7a6c5865ff53c0d5003c98a81803383d | |
parent | b961780b6c3d5b28ca97a3581050c993ed57bf46 (diff) |
Fix merging of stability level hints
Absent stability level hints are now explicitly noted, so they can be
handled more correctly when merging a package.
-rwxr-xr-x | calm/package.py | 18 | ||||
-rw-r--r-- | test/testdata/uploads/pkglist.expected | 6 |
2 files changed, 18 insertions, 6 deletions
diff --git a/calm/package.py b/calm/package.py index 3d566aa..7861d2d 100755 --- a/calm/package.py +++ b/calm/package.py @@ -193,6 +193,13 @@ def read_package(packages, basedir, dirpath, files, strict=False): if level in hints: override_hints[level] = hints[level] + # explicitly note any absent stability level hints + for level in ['test', 'curr', 'prev']: + if level not in override_hints: + override_hints[level] = None + + # after we have migrated them to override hints, remove stability + # level hints from legacy hints for level in ['test', 'curr', 'prev']: if level in hints: del hints[level] @@ -433,8 +440,12 @@ def validate_packages(args, packages): levels = ['test', 'curr', 'prev'] for l in levels: if l in packages[p].override_hints: - # check that version exists + # check that if a version was specified, it exists v = packages[p].override_hints[l] + + if v is None: + continue + if v not in packages[p].vermap: logging.error("package '%s' stability '%s' selects non-existent version '%s'" % (p, l, v)) error = True @@ -457,7 +468,7 @@ def validate_packages(args, packages): l = levels[0] # if current stability level has an override - if l in packages[p].override_hints: + if (l in packages[p].override_hints) and (packages[p].override_hints[l] is not None): # if we haven't reached that version yet if v != packages[p].override_hints[l]: break @@ -486,7 +497,8 @@ def validate_packages(args, packages): # stability level was overriden to a lower version for l in levels: if l in packages[p].override_hints: - packages[p].stability[l] = packages[p].override_hints[l] + if packages[p].override_hints[l] is not None: + packages[p].stability[l] = packages[p].override_hints[l] # the package must have some versions if not packages[p].stability: diff --git a/test/testdata/uploads/pkglist.expected b/test/testdata/uploads/pkglist.expected index f36b2a4..0e4c587 100644 --- a/test/testdata/uploads/pkglist.expected +++ b/test/testdata/uploads/pkglist.expected @@ -6,11 +6,11 @@ 'Like it’s you’re Markup Language™ Nokogiri’s tool―that ' 'Bézier."', 'category': 'Devel', - 'requires': 'cygwin'}}, {}, False), + 'requires': 'cygwin'}}, {'curr': None, 'prev': None, 'test': None}, False), 'testpackage-subpackage': Package('x86/release/testpackage/testpackage-subpackage', {'testpackage-subpackage-1.0-1.tar.bz2': Tar('aff488008bee3486e25b539fe6ccd1397bd3c5c0ba2ee2cf34af279554baa195af7493ee51d6f8510735c9a2ea54436d776a71e768165716762aec286abbbf83', 195, False)}, {'1.0-1': {'sdesc': '"A test subpackage"', 'ldesc': '"A test subpackage"', 'category': 'Devel', - 'external-source': 'testpackage'}}, {}, False), + 'external-source': 'testpackage'}}, {'curr': None, 'prev': None, 'test': None}, False), 'testpackage2-subpackage': Package('x86/release/testpackage2/testpackage2-subpackage', {'testpackage2-subpackage-1.0-1.tar.bz2': Tar('6de201dfed1d45412509c65deb34690dc2d09c6aafccfe491fd2f440f92842b9c755b61dc7bcdd4cc0c9f18cf46c2b3a1241e99c4c2a33fff5555e7b2f0b6348', 14, True)}, {'1.0-1': {'sdesc': '"A test subpackage 2"', 'ldesc': '"A test subpackage 2"', - 'category': 'Devel'}}, {}, False)} + 'category': 'Devel'}}, {'curr': None, 'prev': None, 'test': None}, False)} |