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()) deliverable_info = yaml.load(f.read())
# By default assume the project does not use milestones. # By default assume the project does not use milestones.
uses_milestones = False
header('Release model') header('Release model')
if 'release-model' in deliverable_info: print(deliverable_info.get('release-model',
model = deliverable_info['release-model'] 'no release model specified'))
uses_milestones = (model == 'cycle-with-milestones')
print(model)
else:
print('no release model specified')
header('Team details') header('Team details')
if 'team' in deliverable_info: if 'team' in deliverable_info:
@ -199,15 +194,6 @@ def main():
# assume the releases are in order and take the last one # assume the releases are in order and take the last one
new_release = deliverable_info['releases'][-1] 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 # build a map between version numbers and the release details
by_version = { by_version = {
str(r['version']): r str(r['version']): r

View File

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

View File

@ -36,12 +36,18 @@ _VALIDATORS = {'std': (pbr.version.SemanticVersion.from_pip_string,
_VALIDATORS['fuel'] = _VALIDATORS['std'] _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" """Given a version string, yield error messages if it is "bad"
Apply our SemVer rules to version strings and report all issues. 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: if release_type not in _VALIDATORS:
yield 'Release Type %r not valid using \'std\' instead' % release_type yield 'Release Type %r not valid using \'std\' instead' % release_type
release_type = 'std' release_type = 'std'