Page MenuHomec4science

pending-pulls.py
No OneTemporary

File Metadata

Created
Tue, Jul 2, 08:10

pending-pulls.py

#!/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')

Event Timeline