Merge "Check for valid entries in gerrit/projects.yaml"

This commit is contained in:
Jenkins 2014-12-04 19:45:25 +00:00 committed by Gerrit Code Review
commit c269a67f35
3 changed files with 77 additions and 46 deletions

View File

@ -1,45 +0,0 @@
#!/usr/bin/env python
"""
Allow git:// and https:// URLs for importing upstream repositories,
but not git@
"""
import argparse
import yaml
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose',
dest='verbose',
default=False,
action='store_true',
)
parser.add_argument(
'infile',
help='path to review.projects.yaml',
)
args = parser.parse_args()
projects = yaml.load(open(args.infile, 'r'))
VALID_SCHEMES = ['https://', 'http://', 'git://']
for p in projects:
name = p.get('project')
if not name:
# not a project
continue
upstream = p.get('upstream')
if args.verbose:
print 'Checking %s: %r' % (name, upstream)
if not upstream:
continue
for prefix in VALID_SCHEMES:
if upstream.startswith(prefix):
break
else:
raise ValueError(
'Upstream URLs should use a scheme in %s, found %s' %
(VALID_SCHEMES, p['project'])
)

View File

@ -0,0 +1,76 @@
#!/usr/bin/env python
#
# Check that gerrit/projects.yaml contains valid entries.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import argparse
import sys
import yaml
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose',
dest='verbose',
default=False,
action='store_true',
)
parser.add_argument(
'infile',
help='Path to gerrit/projects.yaml',
)
args = parser.parse_args()
projects = yaml.load(open(args.infile, 'r'))
VALID_LABELS = ["acl-config", "description", "docimpact-group",
"groups", "homepage", "options", "project",
"upstream", "upstream-prefix", "use-storyboard"]
VALID_SCHEMES = ['https://', 'http://', 'git://']
found_errors = 0
for p in projects:
name = p.get('project')
if not name:
# not a project
found_errors += 1
print("Error: Entry is not a project %s" % p)
continue
if args.verbose:
print 'Checking %s' % (name)
# Check upstream URL
# Allow git:// and https:// URLs for importing upstream repositories,
# but not git@
upstream = p.get('upstream')
if not upstream:
continue
for prefix in VALID_SCHEMES:
if upstream.startswith(prefix):
break
else:
found_errors += 1
print('Error: Upstream URLs should use a scheme in %s, '
'found %s in %s' %
(VALID_SCHEMES, p['upstream'], name))
# Check for any wrong entries
for entry in p:
for label in VALID_LABELS:
if entry == label:
break
else:
found_errors += 1
print("Error: Unknown keyword '%s' in project %s" % (entry, name))
if found_errors:
print("Found %d error(s) in %s" % (found_errors, args.infile))
sys.exit(1)

View File

@ -12,7 +12,7 @@ commands = flake8
[testenv:projects]
deps = PyYAML
commands =
{toxinidir}/tools/check_upstream_url_scheme.py gerrit/projects.yaml
{toxinidir}/tools/check_valid_gerrit_projects.py gerrit/projects.yaml
{toxinidir}/tools/check_projects_yaml_alphabetized.sh gerrit/projects.yaml
[testenv:venv]