Skip to content

Instantly share code, notes, and snippets.

@grafuls
Created October 26, 2016 10:24
Show Gist options
  • Save grafuls/d0e47e1bf2759d075a2d8f4c869eb2b0 to your computer and use it in GitHub Desktop.
Save grafuls/d0e47e1bf2759d075a2d8f4c869eb2b0 to your computer and use it in GitHub Desktop.
Script to include reviewers to gerrit based on specific format
#! /env/bin/python
# https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#get-change-detail
# https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html
# #add-reviewer
# https://review.openstack.org/Documentation/cmd-set-reviewers.html
"""
user1 to review [user2, user3]
user2 to review [user1, user3]
user3 to review [user1, user2]
"""
import argparse
import json
import logging
from pygerrit.ssh import GerritSSHClient
LOGGER = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
MAIL_SUFFIX = "@email.com"
def get_query_results(client, legacy_id):
result = client.run_gerrit_command(
'query --format JSON %s' % legacy_id)
result = result.stdout.read()
result = result[:result.index('}\n{') + 1]
LOGGER.info('[get_query_results] Result: %s' % result)
return json.loads(result)
def get_reviewers(reviewers_file, owner):
with open(reviewers_file, 'r') as f:
lines = f.readlines()
reviews = {}
for line in lines:
line = line.strip()
reviews[line.split()[0]] = line[line.index('['):][1:-1].split(',')
reviewers = []
for reviewer, submitters in reviews.iteritems():
for s in submitters:
if s.strip() == owner.strip():
reviewers.append('{0}{1}'.format(reviewer, MAIL_SUFFIX))
return reviewers
def get_owner(results):
owner = results['owner']['email']
return owner.split('@')[0]
def add_reviewers(client, project, reviewers, legacy_id):
set_reviewers_params = '--project %s -a %s %s' % (
project,
' -a '.join(reviewers),
legacy_id
)
LOGGER.info('set_reviewers_params: %s' % set_reviewers_params)
result = client.run_gerrit_command(
'set-reviewers %s' % set_reviewers_params
)
LOGGER.info('[add_reviewers] Result: %s' % result.stdout)
if __name__ == "__main__":
descr = 'Add reviewers to Gerrit patch'
parser = argparse.ArgumentParser(
description=descr,
formatter_class=argparse.ArgumentDefaultsHelpFormatter
)
parser.add_argument('-r', '--reviewers-file',
dest='reviewers_file',
required=True,
help='file containing all reviews assignments'
)
parser.add_argument('-i', '--legacy-id',
dest='legacy_id',
required=True,
help='gerrit legacy numeric id'
)
options = parser.parse_args()
client = GerritSSHClient("gerrit")
results = get_query_results(client, options.legacy_id)
owner = get_owner(results)
project = results['project']
reviewers = get_reviewers(options.reviewers_file, owner)
add_reviewers(client, project, reviewers, options.legacy_id)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment