Created
October 26, 2016 10:24
-
-
Save grafuls/d0e47e1bf2759d075a2d8f4c869eb2b0 to your computer and use it in GitHub Desktop.
Script to include reviewers to gerrit based on specific format
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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