Check for valid upstream git projects

This checks out the upstream git projects (unless we use track-upstream)
and prints some information about it.

Note this checks for all upstream repositories but since those are
cleaned up regularly, this should be fine.

It fails if the there is no remote master branch.

Reindent the original code as main function.

Change-Id: Ie469905f48e4bc1a408fb9e731f95b2b735a6a02
This commit is contained in:
Andreas Jaeger 2015-10-21 20:02:19 +02:00
parent 242876dd6e
commit 106f6b80e2
2 changed files with 128 additions and 77 deletions

View File

@ -15,17 +15,60 @@
# limitations under the License.
import argparse
import contextlib
import git
import re
import shutil
import sys
import tempfile
import yaml
found_errors = 0
@contextlib.contextmanager
def tempdir():
try:
reqroot = tempfile.mkdtemp()
yield reqroot
finally:
shutil.rmtree(reqroot)
def check_repo(repo_path):
global found_errors
print("Checking git repo '%s':" % repo_path)
with tempdir() as repopath:
repo = git.Repo.clone_from(repo_path, repopath)
remotes = repo.git.branch('--remote')
branches = [r.strip() for r in remotes.splitlines() if r.strip()]
print (" Remote branches:")
for r in branches:
print(" %s" % r)
if 'origin/master' in branches:
print(" Master branch exists.")
else:
found_errors += 1
print(" Error: No master branch exists")
if repo.tags:
print(" Found the following tags:")
for tag in repo.tags:
print(" %s" % tag)
else:
print(" Found no tags.")
# Just an empty line for nicer formatting
print("")
def main():
global found_errors
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose',
dest='verbose',
default=False,
action='store_true',
)
action='store_true')
parser.add_argument(
'infile',
help='Path to gerrit/projects.yaml',
@ -41,7 +84,6 @@ VALID_SCHEMES = ['https://', 'http://', 'git://']
DESCRIPTION_REQUIRED = ['openstack', 'openstack-infra', 'openstack-dev',
'stackforge']
found_errors = 0
for p in projects:
name = p.get('project')
repo_group = name.split('/')[0]
@ -69,7 +111,8 @@ for p in projects:
# sort of job-description (e.g. "foo-devstack-bar") or
# a url ("foo.openstack.org")
if re.search(r'(?<![-.])\b%s\b' % word, description):
print "Error: %s: should be %s" % (description, should_be)
print("Error: %s: should be %s" %
(description, should_be))
found_errors += 1
if not description and repo_group in DESCRIPTION_REQUIRED:
@ -80,6 +123,8 @@ for p in projects:
# Allow git:// and https:// URLs for importing upstream repositories,
# but not git@
upstream = p.get('upstream')
if upstream and 'track-upstream' not in p.get('options', []):
check_repo(upstream)
if upstream:
for prefix in VALID_SCHEMES:
if upstream.startswith(prefix):
@ -96,8 +141,13 @@ for p in projects:
break
else:
found_errors += 1
print("Error: Unknown keyword '%s' in project %s" % (entry, name))
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)
if __name__ == '__main__':
main()

View File

@ -17,6 +17,7 @@ commands =
[testenv:projects]
deps = PyYAML
GitPython
commands =
{toxinidir}/tools/check_valid_gerrit_projects.py gerrit/projects.yaml
{toxinidir}/tools/check_projects_yaml_alphabetized.sh gerrit/projects.yaml