mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +01:00
Merge #15838: scripts and tools: Fetch missing review comments in github-merge.py
942ff2054b41fe3f78f1b3d88cfd032bc95fd62f contrib: gh-merge: Use pagination to fetch all review comments (nkostoulas) Pull request description: Use GitHub API pagination to do multiple requests if required. Tested with some PRs that have a large number of comments. For issue #15816 ACKs for commit 942ff2: MarcoFalke: utACK 942ff2054b41fe3f78f1b3d88cfd032bc95fd62f laanwj: utACK 942ff2054b41fe3f78f1b3d88cfd032bc95fd62f Tree-SHA512: cf0dcdc40212a7c5cfcd1afe873e068399bc6499fd2e32207c5516595c93e5cb478178b04185ce21c3de0312621e05fda268411e59864d51046fb7a049989f42
This commit is contained in:
parent
e7d9066cac
commit
7e5260568f
@ -47,17 +47,36 @@ def git_config_get(option, default=None):
|
|||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
return default
|
return default
|
||||||
|
|
||||||
def retrieve_json(req, ghtoken):
|
def get_response(req_url, ghtoken):
|
||||||
|
req = Request(req_url)
|
||||||
|
if ghtoken is not None:
|
||||||
|
req.add_header('Authorization', 'token ' + ghtoken)
|
||||||
|
return urlopen(req)
|
||||||
|
|
||||||
|
def retrieve_json(req_url, ghtoken, use_pagination=False):
|
||||||
'''
|
'''
|
||||||
Retrieve json from github.
|
Retrieve json from github.
|
||||||
Return None if an error happens.
|
Return None if an error happens.
|
||||||
'''
|
'''
|
||||||
try:
|
try:
|
||||||
if ghtoken is not None:
|
|
||||||
req.add_header('Authorization', 'token ' + ghtoken)
|
|
||||||
result = urlopen(req)
|
|
||||||
reader = codecs.getreader('utf-8')
|
reader = codecs.getreader('utf-8')
|
||||||
obj = json.load(reader(result))
|
if not use_pagination:
|
||||||
|
return json.load(reader(get_response(req_url, ghtoken)))
|
||||||
|
|
||||||
|
obj = []
|
||||||
|
page_num = 1
|
||||||
|
while True:
|
||||||
|
req_url_page = '{}?page={}'.format(req_url, page_num)
|
||||||
|
result = get_response(req_url_page, ghtoken)
|
||||||
|
obj.extend(json.load(reader(result)))
|
||||||
|
|
||||||
|
link = result.headers.get('link', None)
|
||||||
|
if link is not None:
|
||||||
|
link_next = [l for l in link.split(',') if 'rel="next"' in l]
|
||||||
|
if len(link_next) > 0:
|
||||||
|
page_num = int(link_next[0][link_next[0].find("page=")+5:link_next[0].find(">")])
|
||||||
|
continue
|
||||||
|
break
|
||||||
return obj
|
return obj
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
error_message = e.read()
|
error_message = e.read()
|
||||||
@ -69,16 +88,16 @@ def retrieve_json(req, ghtoken):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def retrieve_pr_info(repo,pull,ghtoken):
|
def retrieve_pr_info(repo,pull,ghtoken):
|
||||||
req = Request("https://api.github.com/repos/"+repo+"/pulls/"+pull)
|
req_url = "https://api.github.com/repos/"+repo+"/pulls/"+pull
|
||||||
return retrieve_json(req,ghtoken)
|
return retrieve_json(req_url,ghtoken)
|
||||||
|
|
||||||
def retrieve_pr_comments(repo,pull,ghtoken):
|
def retrieve_pr_comments(repo,pull,ghtoken):
|
||||||
req = Request("https://api.github.com/repos/"+repo+"/issues/"+pull+"/comments")
|
req_url = "https://api.github.com/repos/"+repo+"/issues/"+pull+"/comments"
|
||||||
return retrieve_json(req,ghtoken)
|
return retrieve_json(req_url,ghtoken,use_pagination=True)
|
||||||
|
|
||||||
def retrieve_pr_reviews(repo,pull,ghtoken):
|
def retrieve_pr_reviews(repo,pull,ghtoken):
|
||||||
req = Request("https://api.github.com/repos/"+repo+"/pulls/"+pull+"/reviews")
|
req_url = "https://api.github.com/repos/"+repo+"/pulls/"+pull+"/reviews"
|
||||||
return retrieve_json(req,ghtoken)
|
return retrieve_json(req_url,ghtoken,use_pagination=True)
|
||||||
|
|
||||||
def ask_prompt(text):
|
def ask_prompt(text):
|
||||||
print(text,end=" ",file=stderr)
|
print(text,end=" ",file=stderr)
|
||||||
|
Loading…
Reference in New Issue
Block a user