72 lines
2.6 KiB
Python
Executable File
72 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
import pycurl
|
|
import json
|
|
import sys
|
|
from io import BytesIO
|
|
from datetime import datetime
|
|
|
|
#############################################################
|
|
# settings:
|
|
# github repository from which pull requests are culled
|
|
base = 'akohlmey/lammps'
|
|
# github userid of pull request assignee
|
|
user = 'sjplimp'
|
|
# upstream branch into which pull requests are merged
|
|
upstream = 'integration'
|
|
# whether pull request descriptions should be printed, too.
|
|
verbose = True
|
|
#############################################################
|
|
|
|
# for writing separate python 2/3 code blocks to work
|
|
# around python's unicode vs. bytes vs. strings insanity.
|
|
if (sys.version_info > (3, 0)):
|
|
pyver = 3
|
|
else:
|
|
pyver = 2
|
|
|
|
# set up a query to the github web API to return information about all
|
|
# open pull requests for a given repository which are assigned to the
|
|
# given userid and store the response in a buffer.
|
|
buf = BytesIO()
|
|
c = pycurl.Curl()
|
|
c.setopt(c.URL,'https://api.github.com/repos/'+base+'/pulls?state=open,assignee='+user)
|
|
c.setopt(c.WRITEFUNCTION,buf.write)
|
|
c.perform()
|
|
|
|
# github responds with a JSON format text listing all pull requests.
|
|
# we convert the response into a dictionary with individual entries
|
|
# being dictionaries as well. The JSON data is in UTF-8 encoding.
|
|
result = json.loads(buf.getvalue().decode(encoding="utf-8"));
|
|
|
|
print('\n%d pending pull requests for repository %s assigned to %s\n' % (len(result),base,user))
|
|
|
|
# loop over entrees
|
|
for pull in result:
|
|
# get pull request id and repo and branch info
|
|
num = pull['number']
|
|
repo = pull['head']['repo']['clone_url']
|
|
branch = pull['head']['ref']
|
|
# print some general info
|
|
print(str('Pending pull request #%d' % num))
|
|
print('Submitted by: %s' % pull['head']['user']['login'])
|
|
print('Last update: %s' % datetime.strptime(pull['updated_at'],'%Y-%m-%dT%H:%M:%SZ').ctime())
|
|
if pyver == 2:
|
|
print('Title: %s' % pull['title'].encode('utf-8'))
|
|
else:
|
|
print('Title: %s' % pull['title'])
|
|
print('URL: https://github.com/'+base+'/pull/'+str(num))
|
|
# print command line suggestions
|
|
print('\nCommand line instructions, step 1:\n')
|
|
print('git checkout -b merge-pull-%d %s' % (num, upstream))
|
|
print('git pull %s %s' % (repo, branch))
|
|
print('\nCommand line instructions, step 2:\n')
|
|
print('git checkout '+upstream)
|
|
print('git merge --no-ff merge-pull-%d' % num)
|
|
# if requested, display pull request description
|
|
if verbose:
|
|
if pyver == 2:
|
|
print('\nDescription:\n%s' % pull['body'].encode('utf-8'))
|
|
else:
|
|
print('\nDescription:\n%s' % pull['body'])
|
|
print('------------------\n')
|