Gerrit set-review api doesn't work

2019-09-02 19:11发布

问题:

I tried to add review comments by using this "set-review" api: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#set-review

I can get a json response from this interface, but nothing is changed. I can't see any new comments from Gerrit web page.

Here is the example of my client side code:

url = '/changes/16148/revisions/1/review'
data = json.dumps({
    'message': 'test',
    'labels': {},
    'comments': {
        'tools/docpreview.py': [{
                'line': 20,
                'message': 'hehe',
                }],
        },
    'notify': 'NONE'
    })
pprint(rest.post(url, data=data))

And the response example(Private info was deleted).

This response looks like result of get-review api described here: https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#get-review

{u'_number': 16148,
...
 u'insertions': 20,
 u'kind': u'gerritcodereview#change',
 u'created': u'2014-11-05 16:23:08.849000000',
...
 u'status': u'NEW',
 u'subject': u'Add markdown preview.',
 u'updated': u'2014-11-05 22:02:32.978000000'}

回答1:

I struggled with getting this right for a while, finally, the following piece of code in Python works for me:

from requests.auth import HTTPBasicAuth
from pygerrit2.rest import GerritRestAPI

REST_AUTH = HTTPBasicAuth(MISC['auth_username'], MISC['auth_password'])
REST_CLIENT = GerritRestAPI(url=MISC['base_url'], auth=REST_AUTH)

query = "/changes/" + str(change_id) + "/revisions/" + str(cur_rev) + "/review"
REST_CLIENT.post(query, json={
      "message": MISC['message'], 
      "reviewers": [{
      "reviewer": MISC['reviewer_bot'] 
       }]
    })
# MISC is a dictionary


回答2:

You should be authenticated, shouldn't you? Therefore your requests would have to go to /a/changes/



标签: rest gerrit