Move preversion check into validate

Pre-versions are only OK if you're using a release model
that allows for them (like cycle-with-milestones). Now that we
have the information in the releases file, move the warning
in list-changes to a proper validation failure.

Change-Id: Ifb91bd2446b6d37dc9bb4601cad28f29c065c2e8
This commit is contained in:
Thierry Carrez 2016-11-16 15:18:23 +01:00
parent d8d1ebbe46
commit 75595d6ce4
3 changed files with 15 additions and 18 deletions

View File

@ -150,14 +150,9 @@ def main():
deliverable_info = yaml.load(f.read())
# By default assume the project does not use milestones.
uses_milestones = False
header('Release model')
if 'release-model' in deliverable_info:
model = deliverable_info['release-model']
uses_milestones = (model == 'cycle-with-milestones')
print(model)
else:
print('no release model specified')
print(deliverable_info.get('release-model',
'no release model specified'))
header('Team details')
if 'team' in deliverable_info:
@ -199,15 +194,6 @@ def main():
# assume the releases are in order and take the last one
new_release = deliverable_info['releases'][-1]
# Warn if the new release looks like a milestone release but
# the project does not use milestones.
if not uses_milestones:
for pre_indicator in ['a', 'b', 'rc']:
if pre_indicator in str(new_release['version']):
print(('WARNING: %s looks like a pre-release '
'but %s does not use milestones') %
(new_release['version'], deliverable_name))
# build a map between version numbers and the release details
by_version = {
str(r['version']): r

View File

@ -47,6 +47,10 @@ _VALID_MODELS = set([
'cycle-trailing',
'independent',
])
_USES_PREVER = set([
'cycle-with-milestones',
'cycle-trailing',
])
_VALID_TYPES = set([
'horizon-plugin',
'library',
@ -303,7 +307,8 @@ def main():
for e in versionutils.validate_version(
release['version'],
release_type=release_type):
release_type=release_type,
pre_ok=(release_model in _USES_PREVER)):
msg = ('could not validate version %r '
'for %s: %s' %
(release['version'], filename, e))

View File

@ -36,12 +36,18 @@ _VALIDATORS = {'std': (pbr.version.SemanticVersion.from_pip_string,
_VALIDATORS['fuel'] = _VALIDATORS['std']
def validate_version(versionstr, release_type='std'):
def validate_version(versionstr, release_type='std', pre_ok=True):
"""Given a version string, yield error messages if it is "bad"
Apply our SemVer rules to version strings and report all issues.
"""
if not pre_ok:
for pre_indicator in ['a', 'b', 'rc']:
if pre_indicator in versionstr:
yield('Version %s looks like a pre-release and the release '
'model does not allow for it' % versionstr)
if release_type not in _VALIDATORS:
yield 'Release Type %r not valid using \'std\' instead' % release_type
release_type = 'std'