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)
Пример #2
0
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)