notify.py
91 lines
| 2.8 KiB
| text/x-python
|
PythonLexer
/ scripts / notify.py
r1 | # -*- coding: utf-8 -*- | |||
# Copyright (C) 2010-2016 RhodeCode GmbH | ||||
# | ||||
# This program is free software: you can redistribute it and/or modify | ||||
# it under the terms of the GNU Affero General Public License, version 3 | ||||
# (only), as published by the Free Software Foundation. | ||||
# | ||||
# This program is distributed in the hope that it will be useful, | ||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU Affero General Public License | ||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
# | ||||
# This program is dual-licensed. If you wish to learn more about the | ||||
# RhodeCode Enterprise Edition, including its added features, Support services, | ||||
# and proprietary license terms, please see https://rhodecode.com/licenses/ | ||||
import argparse | ||||
from rhodecode_api import RhodeCodeAPI | ||||
def add_api_pr_args(parser): | ||||
r353 | parser.add_argument("--url", help="Rhodecode host url", required=True) | |||
r1 | parser.add_argument("--token", help="Rhodecode user token", required=True) | |||
parser.add_argument("--repoid", help="Repo id", required=True) | ||||
parser.add_argument("--message", help="Comment to add", required=True) | ||||
parser.add_argument("--status", help="Status to set (approved|rejected)") | ||||
parser.add_argument( | ||||
r353 | "--prid", | |||
help="(Optional) Pull request id") | ||||
parser.add_argument( | ||||
r1 | "--commit-id", | |||
r353 | help="(Optional) Expected commit ID for source repo") | |||
r1 | ||||
def get_pr_head(args): | ||||
rc = RhodeCodeAPI(args.url, args.token) | ||||
pr_info = rc.get_pull_request( | ||||
repoid=args.repoid, | ||||
pullrequestid=args.prid | ||||
) | ||||
if pr_info['error']: | ||||
return None | ||||
return pr_info['result']['source']['reference']['commit_id'] | ||||
def pr_has_same_head(args): | ||||
head_id = get_pr_head(args) | ||||
return head_id == args.commit_id | ||||
if __name__ == "__main__": | ||||
parser = argparse.ArgumentParser() | ||||
add_api_pr_args(parser) | ||||
args = parser.parse_args() | ||||
status = args.status | ||||
r353 | rc = RhodeCodeAPI(args.url, args.token) | |||
if not (args.prid or args.commit_id): | ||||
raise AttributeError('You must specify --prid or --commit-id') | ||||
if args.prid: | ||||
if args.commit_id and status: | ||||
if not pr_has_same_head(args): | ||||
# PR updated, don't set status | ||||
status = None | ||||
r1 | ||||
r353 | resp = rc.comment_pull_request( | |||
repoid=args.repoid, | ||||
pullrequestid=int(args.prid), | ||||
message=args.message, | ||||
status=status | ||||
) | ||||
elif args.commit_id: | ||||
resp = rc.comment_commit( | ||||
repoid=args.repoid, | ||||
commit_id=args.commit_id, | ||||
message=args.message, | ||||
status=status, | ||||
) | ||||
r1 | ||||
if resp['error']: | ||||
raise Exception(resp['error']) | ||||
else: | ||||
print resp | ||||