1
import sys, optparse, getpass, urllib2, json
2
from base64 import b64encode
3
from datetime import datetime
7
def __init__(self, user, passwd):
8
self.url = 'https://api.github.com/repos/geoserver/geoserver'
9
self.auth = 'Basic '+b64encode('%s:%s' % (user,passwd))
11
def list_pulls(self, after=None):
15
r = urllib2.urlopen(urllib2.Request(self.pulls_url(n)))
16
obj = json.loads(r.read())
18
lambda x: x.has_key('merged_at') and x['merged_at'] is not None, obj)
20
obj = filter(lambda x:
21
datetime.strptime(x['merged_at'], '%Y-%m-%dT%H:%M:%SZ') > after, obj)
24
yield PullRequest(pull)
29
def pulls_url(self, n):
30
return '%s/pulls?state=closed&page=%d' % (self.url, n)
32
class PullRequest(object):
33
def __init__(self, obj):
37
return self.obj['html_url']
40
return self.obj['title']
43
if self.obj.has_key('user') and self.obj['user'] is not None:
44
return self.obj['user']['login']
47
if self.obj.has_key('merged_at'):
48
return self.obj['merged_at']
50
if __name__ == "__main__":
52
p = optparse.OptionParser('Usage: %prog [options] username password')
53
p.add_option('-d', '--date', dest='date', help='Date filter (YYYY-MM-DD)')
55
p.add_option('-j', '--host', dest='host', default='http://jira.codehaus.org',
56
help='JIRA host, default is codehaus')
57
p.add_option('-k', '--key', dest='key', default='GEOT',
58
help='JIRA project key, default is GEOT')
59
p.add_option('-u', '--user', dest='user', default=getpass.getuser(),
60
help='JIRA user, default is current OS user')
61
p.add_option('-p', '--passwd', dest='passwd',
63
p.add_option('-v', '--verbose', dest='verbose', action='store_true',
67
opts, args = p.parse_args()
69
p.error('Must specify a GitHub username and password')
72
date = datetime.strptime(
73
opts['date'], '%Y-%m-%d') if opts['date'] is not None else None
75
gh = GitHub(args[0], args[1])
76
for pr in gh.list_pulls(date):