def pullreviews(repo, proto, args=None): proto.redirect() req = parsejsonpayload(proto, args) # Workaround an issue with "import _imp" in pkg_resources. with demandimport.deactivated(): from reviewboardmods.pushhooks import ReviewBoardClient client = ReviewBoardClient(repo.ui.config('reviewboard', 'url').rstrip('/'), username=req.get('bzusername'), apikey=req.get('bzapikey')) root = client.get_root() res = { 'reviewrequests': {}, } for identifier in req.get('identifiers', []): rrs = root.get_review_requests(commit_id=identifier) if rrs.total_results != 1: continue rr = rrs[0] commit_data = client.get_path( '/extensions/mozreview.extension.MozReviewExtension/' 'commit-data/%s/' % rr.id) try: is_squashed = commit_data.extra_data['p2rb.is_squashed'] except KeyError: is_squashed = None # 'True' in RB <= 2.0.11; True in 2.0.11+. We may have old # values in the database, so keep checking for 'True' until we # have a migration. if is_squashed is True or is_squashed == 'True': if 'p2rb.commits' in commit_data.extra_data: commits = commit_data.extra_data['p2rb.commits'] else: draft = rr.get_draft() if 'p2rb.commits' in commit_data.draft_extra_data: commits = commit_data.draft_extra_data['p2rb.commits'] else: commits = '[]' for relation in json.loads(commits): rid = str(relation[1]) res['reviewrequests'][str(rid)] = { 'status': rr.status, 'public': rr.public, } res['reviewrequests'][str(rr.id)] = { 'status': rr.status, 'public': rr.public, 'reviewers': [p.title for p in rr.target_people], } return json.dumps(res, sort_keys=True)
def _processpublishreview(repo, req): from rbtools.api.errors import APIError # Workaround an issue with "import _imp" in pkg_resources. with demandimport.deactivated(): from reviewboardmods.pushhooks import ReviewBoardClient client = ReviewBoardClient(repo.ui.config('reviewboard', 'url').rstrip('/'), username=req['bzusername'], apikey=req['bzapikey']) root = client.get_root() res = { 'results': [], } for rrid in req.get('rrids', []): try: rr = root.get_review_request(review_request_id=rrid) draft = rr.get_draft() draft.update(public=True) res['results'].append({'rrid': rrid, 'success': True}) except APIError as e: res['results'].append({'rrid': rrid, 'error': str(e)}) return res
def submit_reviews(url, repoid, identifier, commits, privileged_username, privileged_password, username=None, apikey=None): """Submit commits to Review Board.""" # Workaround an issue with "import _imp" in pkg_resources. with demandimport.deactivated(): from reviewboardmods.pushhooks import ReviewBoardClient client = ReviewBoardClient(url, username=privileged_username, password=privileged_password) root = client.get_root() batch_request_resource = root.get_extension( extension_name='mozreview.extension.MozReviewExtension')\ .get_batch_review_requests() series_result = batch_request_resource.create( username=username, api_key=apikey, # This assumes that we pushed to the repository/URL that Review Board is # configured to use. This assumption may not always hold. repo_id=repoid, identifier=identifier, commits=json.dumps(commits, encoding='utf-8')) nodes = {node.encode('utf-8'): str(rid) for node, rid in series_result.nodes.iteritems()} return ( str(series_result.squashed_rr), nodes, series_result.review_requests, series_result.warnings, )
def getreposfromreviewboard(repo): from reviewboardmods.pushhooks import ReviewBoardClient client = ReviewBoardClient(repo.ui.config('reviewboard', 'url').rstrip('/')) root = client.get_root() urls = set() repos = root.get_repositories(max_results=250, tool='Mercurial') try: while True: for r in repos: urls.add(r.path) repos = repos.get_next() except StopIteration: pass return urls
def submit_reviews(url, repoid, identifier, commits, privileged_username, privileged_password, username=None, apikey=None): """Submit commits to Review Board.""" # Workaround an issue with "import _imp" in pkg_resources. with demandimport.deactivated(): from reviewboardmods.pushhooks import ReviewBoardClient client = ReviewBoardClient(url, username=privileged_username, password=privileged_password) root = client.get_root() batch_request_resource = root.get_extension( extension_name='mozreview.extension.MozReviewExtension')\ .get_batch_review_requests() series_result = batch_request_resource.create( username=username, api_key=apikey, # This assumes that we pushed to the repository/URL that Review Board is # configured to use. This assumption may not always hold. repo_id=repoid, identifier=identifier, commits=json.dumps(commits, encoding='utf-8')) nodes = { node.encode('utf-8'): str(rid) for node, rid in series_result.nodes.iteritems() } return ( str(series_result.squashed_rr), nodes, series_result.review_requests, series_result.warnings, )
def getreposfromreviewboard(repo): # Workaround an issue with "import _imp" in pkg_resources. with demandimport.deactivated(): from reviewboardmods.pushhooks import ReviewBoardClient client = ReviewBoardClient(repo.ui.config('reviewboard', 'url').rstrip('/')) root = client.get_root() urls = set() repos = root.get_repositories(max_results=250, tool='Mercurial') try: while True: for r in repos: urls.add(r.path) repos = repos.get_next() except StopIteration: pass return urls
def _processpublishreview(repo, req): from rbtools.api.errors import APIError from reviewboardmods.pushhooks import ReviewBoardClient client = ReviewBoardClient(repo.ui.config('reviewboard', 'url').rstrip('/'), username=req['bzusername'], apikey=req['bzapikey']) root = client.get_root() res = { 'results': [], } for rrid in req.get('rrids', []): try: rr = root.get_review_request(review_request_id=rrid) draft = rr.get_draft() draft.update(public=True) res['results'].append({'rrid': rrid, 'success': True}) except APIError as e: res['results'].append({'rrid': rrid, 'error': str(e)}) return res