use deliverable model object to validate .gitreview files

Also remove redundant checks for the file by updating the logic to
look for tags that do not exist, check out the tag, and then look in
the repository to see if the file exists.

Change-Id: I16bdac113d3eea406ad9cac3a28830a78df8e15e
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
Doug Hellmann
2018-02-20 17:46:46 -05:00
parent 5e863df520
commit 37ff868bf4

View File

@@ -353,23 +353,35 @@ def _require_gitreview(workdir, repo, messages):
) )
if not os.path.exists(filename): if not os.path.exists(filename):
messages.error('%s has no .gitreview file' % (repo,)) messages.error('%s has no .gitreview file' % (repo,))
else:
LOG.debug('found {}'.format(filename))
def validate_gitreview(deliverable_info, workdir, messages): def validate_gitreview(deliv, workdir, messages):
"Verify that all repos include a .gitreview file." "All repos must include a .gitreview file for new releases."
header('Validate .gitreview') header('Validate .gitreview')
checked = set() checked = set()
for release in deliverable_info.get('releases', []): for release in deliv.releases:
for project in release['projects']: for project in release.projects:
if project['repo'] in checked: if project.repo.name in checked:
continue
checked.add(project.repo.name)
if project.repo.is_retired:
LOG.debug('{} is retired, skipping'.format(
project.repo.name))
continue continue
checked.add(project['repo'])
version_exists = gitutils.commit_exists( version_exists = gitutils.commit_exists(
workdir, project['repo'], release['version'], workdir, project.repo.name, release.version,
) )
if not version_exists: if not version_exists:
_require_gitreview(workdir, project['repo'], messages) LOG.debug('checking {} at {} for {}'.format(
project.repo.name, project.hash, release.version))
gitutils.safe_clone_repo(
workdir, project.repo.name, project.hash, messages)
_require_gitreview(workdir, project.repo.name, messages)
else:
LOG.debug('version {} exists, skipping'.format(
release.version))
_TYPE_TO_RELEASE_TYPE = { _TYPE_TO_RELEASE_TYPE = {
'library': 'python-pypi', 'library': 'python-pypi',
@@ -952,12 +964,6 @@ def validate_stable_branches(deliverable_info,
'list of releases for this deliverable' % ( 'list of releases for this deliverable' % (
location, branch['name'])) location, branch['name']))
) )
else:
for project in known_releases[location]['projects']:
if not gitutils.safe_clone_repo(workdir, project['repo'],
project['hash'], messages):
continue
_require_gitreview(workdir, project['repo'], messages)
elif branch_mode == 'tagless': elif branch_mode == 'tagless':
if not isinstance(location, dict): if not isinstance(location, dict):
messages.error( messages.error(
@@ -980,7 +986,6 @@ def validate_stable_branches(deliverable_info,
continue continue
if not gitutils.safe_clone_repo(workdir, repo, loc, messages): if not gitutils.safe_clone_repo(workdir, repo, loc, messages):
continue continue
_require_gitreview(workdir, repo, messages)
if not gitutils.commit_exists(workdir, repo, loc): if not gitutils.commit_exists(workdir, repo, loc):
messages.error( messages.error(
('stable branches should be created from merged ' ('stable branches should be created from merged '
@@ -1065,7 +1070,6 @@ def validate_feature_branches(deliverable_info,
'but location %s for branch %s of %s does not exist' % ( 'but location %s for branch %s of %s does not exist' % (
(loc, repo, branch['name']))) (loc, repo, branch['name'])))
) )
_require_gitreview(workdir, repo, messages)
def validate_driverfixes_branches(deliverable_info, def validate_driverfixes_branches(deliverable_info,
@@ -1369,7 +1373,7 @@ def main():
workdir, workdir,
messages, messages,
) )
validate_gitreview(deliverable_info, workdir, messages) validate_gitreview(deliv, workdir, messages)
validate_releases( validate_releases(
deliverable_info, deliverable_info,
zuul_projects, zuul_projects,