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):
messages.error('%s has no .gitreview file' % (repo,))
else:
LOG.debug('found {}'.format(filename))
def validate_gitreview(deliverable_info, workdir, messages):
"Verify that all repos include a .gitreview file."
def validate_gitreview(deliv, workdir, messages):
"All repos must include a .gitreview file for new releases."
header('Validate .gitreview')
checked = set()
for release in deliverable_info.get('releases', []):
for project in release['projects']:
if project['repo'] in checked:
for release in deliv.releases:
for project in release.projects:
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
checked.add(project['repo'])
version_exists = gitutils.commit_exists(
workdir, project['repo'], release['version'],
workdir, project.repo.name, release.version,
)
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 = {
'library': 'python-pypi',
@@ -952,12 +964,6 @@ def validate_stable_branches(deliverable_info,
'list of releases for this deliverable' % (
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':
if not isinstance(location, dict):
messages.error(
@@ -980,7 +986,6 @@ def validate_stable_branches(deliverable_info,
continue
if not gitutils.safe_clone_repo(workdir, repo, loc, messages):
continue
_require_gitreview(workdir, repo, messages)
if not gitutils.commit_exists(workdir, repo, loc):
messages.error(
('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' % (
(loc, repo, branch['name'])))
)
_require_gitreview(workdir, repo, messages)
def validate_driverfixes_branches(deliverable_info,
@@ -1369,7 +1373,7 @@ def main():
workdir,
messages,
)
validate_gitreview(deliverable_info, workdir, messages)
validate_gitreview(deliv, workdir, messages)
validate_releases(
deliverable_info,
zuul_projects,