From c0c6f23c2c494cefa01398f6c18e95af4c801d1a Mon Sep 17 00:00:00 2001 From: Aric Gardner Date: Wed, 12 Sep 2018 14:12:51 -0400 Subject: Create branches via ssh rather than the https Previously we created the branches over Gerrit's HTTPS interface. One or two projects from the previous release did not have their stable branches created at the correct place. Switch to using ssh for branch creation will be more reliable and easier for us to verify. Change-Id: If7f24d2b19e74513b59889bd64d25919aa048e4c Signed-off-by: Aric Gardner Signed-off-by: Trevor Bramwell --- releases/scripts/create_branch.py | 143 -------------------------------------- releases/scripts/repos.py | 31 ++++++++- 2 files changed, 29 insertions(+), 145 deletions(-) delete mode 100644 releases/scripts/create_branch.py (limited to 'releases') diff --git a/releases/scripts/create_branch.py b/releases/scripts/create_branch.py deleted file mode 100644 index fa3c92def..000000000 --- a/releases/scripts/create_branch.py +++ /dev/null @@ -1,143 +0,0 @@ -#!/usr/bin/env python2 -# SPDX-License-Identifier: Apache-2.0 -############################################################################## -# Copyright (c) 2018 The Linux Foundation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## -""" -Create Gerrit Branchs -""" - -import argparse - -try: - import ConfigParser -except ImportError: - import configparser as ConfigParser - -import logging -import os -import yaml - -from requests.compat import quote -from requests.exceptions import RequestException - -from pygerrit2.rest import GerritRestAPI -from pygerrit2.rest.auth import HTTPDigestAuthFromNetrc, HTTPBasicAuthFromNetrc - - -logging.basicConfig(level=logging.INFO) - - -def quote_branch(arguments): - """ - Quote is used here to escape the '/' in branch name. By - default '/' is listed in 'safe' characters which aren't escaped. - quote is not used in the data of the PUT request, as quoting for - arguments is handled by the request library - """ - new_args = arguments.copy() - new_args['branch'] = quote(new_args['branch'], '') - return new_args - - -def create_branch(api, arguments): - """ - Create a branch using the Gerrit REST API - """ - logger = logging.getLogger(__file__) - - branch_data = """ - { - "ref": "%(branch)s" - "revision": "%(commit)s" - }""" % arguments - - # First verify the commit exists, otherwise the branch will be - # created at HEAD - try: - request = api.get("/projects/%(project)s/commits/%(commit)s" % - arguments) - logger.debug(request) - logger.debug("Commit exists: %(commit)s", arguments) - except RequestException as err: - if hasattr(err, 'response') and err.response.status_code in [404]: - logger.warn("Commit %(commit)s for %(project)s does" - " not exist. Not creating branch.", arguments) - logger.warn(err) - else: - logger.error("Error: %s", str(err)) - # Skip trying to create the branch - return - - # Try to create the branch and let us know if it already exist. - try: - request = api.put("/projects/%(project)s/branches/%(branch)s" % - quote_branch(arguments), branch_data) - logger.info("Branch %(branch)s for %(project)s successfully created", - arguments) - except RequestException as err: - if hasattr(err, 'response') and err.response.status_code in [412, 409]: - logger.info("Branch %(branch)s already created for %(project)s", - arguments) - logger.info(err) - else: - logger.error("Error: %s", str(err)) - - -def main(): - """Given a yamlfile that follows the release syntax, create branches - in Gerrit listed under branches""" - - config = ConfigParser.ConfigParser() - config.read(os.path.join(os.path.abspath(os.path.dirname(__file__)), - 'defaults.cfg')) - config.read([os.path.expanduser('~/releases.cfg'), 'releases.cfg']) - - gerrit_url = config.get('gerrit', 'url') - - parser = argparse.ArgumentParser() - parser.add_argument('--file', '-f', - type=argparse.FileType('r'), - required=True) - parser.add_argument('--basicauth', '-b', action='store_true') - args = parser.parse_args() - - GerritAuth = HTTPDigestAuthFromNetrc - if args.basicauth: - GerritAuth = HTTPBasicAuthFromNetrc - - try: - auth = GerritAuth(url=gerrit_url) - except ValueError as err: - logging.error("%s for %s", err, gerrit_url) - quit(1) - restapi = GerritRestAPI(url=gerrit_url, auth=auth) - - project = yaml.safe_load(args.file) - - create_branches(restapi, project) - - -def create_branches(restapi, project): - """Create branches for a specific project defined in the release - file""" - - branches = [] - for branch in project['branches']: - repo, ref = next(iter(branch['location'].items())) - branches.append({ - 'project': repo, - 'branch': branch['name'], - 'commit': ref - }) - - for branch in branches: - create_branch(restapi, branch) - - -if __name__ == "__main__": - main() diff --git a/releases/scripts/repos.py b/releases/scripts/repos.py index 47ce42d88..91c4e9300 100644 --- a/releases/scripts/repos.py +++ b/releases/scripts/repos.py @@ -63,20 +63,28 @@ def main(): type=str, help="Only print" "SHAs for the specified release") + parser.add_argument('--branches', '-b', + action='store_true', + default=False, + help="Print Branch info") + args = parser.parse_args() project = yaml.safe_load(args.file) - list_repos(project, args) + if args.branches: + list_branches(project, args) + else: + list_repos(project, args) def list_repos(project, args): """List repositories in the project file""" lookup = project.get('releases', []) + if 'releases' not in project: exit(0) - repos = set() for item in lookup: repo, ref = next(iter(item['location'].items())) @@ -90,5 +98,24 @@ def list_repos(project, args): print(repo) +def list_branches(project, args): + """List branches in the project file""" + + lookup = project.get('branches', []) + + if 'branches' not in project: + exit(0) + repos = set() + for item in lookup: + repo, ref = next(iter(item['location'].items())) + if args.names: + repos.add(Repo(repo)) + elif args.release and item['name'] == args.release: + repos.add(Repo(repo, ref)) + elif not args.release: + repos.add(Repo(repo, item['name'], ref)) + for repo in repos: + print(repo) + if __name__ == "__main__": main() -- cgit 1.2.3-korg