Merge changes Ibfc261d8,I2c9001ef am: 13954964bc
Change-Id: I0727390174eaf490a9355f22a163c745640b5e41
This commit is contained in:
@@ -26,6 +26,11 @@ import json
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
try:
|
||||||
|
from urllib.error import HTTPError # PY3
|
||||||
|
except ImportError:
|
||||||
|
from urllib2 import HTTPError # PY2
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from urllib.request import (
|
from urllib.request import (
|
||||||
HTTPBasicAuthHandler, Request, build_opener) # PY3
|
HTTPBasicAuthHandler, Request, build_opener) # PY3
|
||||||
@@ -146,13 +151,19 @@ def _make_json_post_request(url_opener, url, data, method='POST'):
|
|||||||
|
|
||||||
request = Request(url, data, headers)
|
request = Request(url, data, headers)
|
||||||
request.get_method = lambda: method
|
request.get_method = lambda: method
|
||||||
response_file = url_opener.open(request)
|
|
||||||
try:
|
try:
|
||||||
|
response_file = url_opener.open(request)
|
||||||
|
except HTTPError as error:
|
||||||
|
response_file = error
|
||||||
|
|
||||||
|
with response_file:
|
||||||
res_code = response_file.getcode()
|
res_code = response_file.getcode()
|
||||||
|
# Nothing to parse if response is '204 No Content'
|
||||||
|
if res_code == 204:
|
||||||
|
return (res_code, None)
|
||||||
res_json = _decode_xssi_json(response_file.read())
|
res_json = _decode_xssi_json(response_file.read())
|
||||||
return (res_code, res_json)
|
return (res_code, res_json)
|
||||||
finally:
|
|
||||||
response_file.close()
|
|
||||||
|
|
||||||
|
|
||||||
def set_review(url_opener, gerrit_url, change_id, labels, message):
|
def set_review(url_opener, gerrit_url, change_id, labels, message):
|
||||||
@@ -231,6 +242,28 @@ def get_patch(url_opener, gerrit_url, change_id, revision_id='current'):
|
|||||||
response_file.close()
|
response_file.close()
|
||||||
|
|
||||||
|
|
||||||
|
def add_reviewers(url_opener, gerrit_url, change_id, reviewers):
|
||||||
|
"""Add reviewers."""
|
||||||
|
|
||||||
|
url = '{}/a/changes/{}/revisions/current/review'.format(
|
||||||
|
gerrit_url, change_id)
|
||||||
|
|
||||||
|
data = {}
|
||||||
|
if reviewers:
|
||||||
|
data['reviewers'] = reviewers
|
||||||
|
|
||||||
|
return _make_json_post_request(url_opener, url, data)
|
||||||
|
|
||||||
|
|
||||||
|
def delete_reviewer(url_opener, gerrit_url, change_id, name):
|
||||||
|
"""Delete reviewer."""
|
||||||
|
|
||||||
|
url = '{}/a/changes/{}/reviewers/{}/delete'.format(
|
||||||
|
gerrit_url, change_id, name)
|
||||||
|
|
||||||
|
return _make_json_post_request(url_opener, url, {})
|
||||||
|
|
||||||
|
|
||||||
def _parse_args():
|
def _parse_args():
|
||||||
"""Parse command line options."""
|
"""Parse command line options."""
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ except ImportError:
|
|||||||
from urllib2 import HTTPError # PY2
|
from urllib2 import HTTPError # PY2
|
||||||
|
|
||||||
from gerrit import (
|
from gerrit import (
|
||||||
abandon, create_url_opener_from_args, delete_topic, query_change_lists,
|
add_reviewers, delete_reviewer, abandon, create_url_opener_from_args,
|
||||||
set_hashtags, set_review, set_topic)
|
delete_topic, query_change_lists, set_hashtags, set_review, set_topic)
|
||||||
|
|
||||||
|
|
||||||
def _get_labels_from_args(args):
|
def _get_labels_from_args(args):
|
||||||
@@ -112,6 +112,10 @@ def _parse_args():
|
|||||||
help='Delete topic name')
|
help='Delete topic name')
|
||||||
parser.add_argument('--remove-topic', action='store_true',
|
parser.add_argument('--remove-topic', action='store_true',
|
||||||
help='Delete topic name', dest='delete_topic')
|
help='Delete topic name', dest='delete_topic')
|
||||||
|
parser.add_argument('--add-reviewer', action='append', default=[],
|
||||||
|
help='Add reviewer')
|
||||||
|
parser.add_argument('--delete-reviewer', action='append', default=[],
|
||||||
|
help='Delete reviewer')
|
||||||
|
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
@@ -126,6 +130,8 @@ def _has_task(args):
|
|||||||
return True
|
return True
|
||||||
if args.set_topic or args.delete_topic:
|
if args.set_topic or args.delete_topic:
|
||||||
return True
|
return True
|
||||||
|
if args.add_reviewer or args.delete_reviewer:
|
||||||
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
@@ -178,13 +184,16 @@ def main():
|
|||||||
args = _parse_args()
|
args = _parse_args()
|
||||||
if not _has_task(args):
|
if not _has_task(args):
|
||||||
print('error: Either --label, --message, --abandon, --add-hashtag, '
|
print('error: Either --label, --message, --abandon, --add-hashtag, '
|
||||||
'--remove-hashtag, --set-topic, or --delete-topic must be ',
|
'--remove-hashtag, --set-topic, --delete-topic, --add-reviewer '
|
||||||
'specified', file=sys.stderr)
|
'or --delete-reviewer must be specified', file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Convert label arguments
|
# Convert label arguments
|
||||||
labels = _get_labels_from_args(args)
|
labels = _get_labels_from_args(args)
|
||||||
|
|
||||||
|
# Convert reviewer arguments
|
||||||
|
new_reviewers = [{'reviewer': name} for name in args.add_reviewer]
|
||||||
|
|
||||||
# Load authentication credentials
|
# Load authentication credentials
|
||||||
url_opener = create_url_opener_from_args(args)
|
url_opener = create_url_opener_from_args(args)
|
||||||
|
|
||||||
@@ -220,6 +229,13 @@ def main():
|
|||||||
if args.abandon:
|
if args.abandon:
|
||||||
_do_task(change, abandon, url_opener, args.gerrit, change['id'],
|
_do_task(change, abandon, url_opener, args.gerrit, change['id'],
|
||||||
args.abandon, errors=errors)
|
args.abandon, errors=errors)
|
||||||
|
if args.add_reviewer:
|
||||||
|
_do_task(change, add_reviewers, url_opener, args.gerrit,
|
||||||
|
change['id'], new_reviewers, errors=errors)
|
||||||
|
for name in args.delete_reviewer:
|
||||||
|
_do_task(change, delete_reviewer, url_opener, args.gerrit,
|
||||||
|
change['id'], name, expected_http_code=204, errors=errors)
|
||||||
|
|
||||||
|
|
||||||
if errors['num_errors']:
|
if errors['num_errors']:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|||||||
Reference in New Issue
Block a user