From 6df986ed1e36232fd2d7a31a15dd8c6b04d33b0e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 11 Jun 2011 09:49:40 +0100 Subject: [PATCH 001/129] Added commit properties tests. --- tests/test_commits.py | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/tests/test_commits.py b/tests/test_commits.py index 38b2055..90a4cde 100644 --- a/tests/test_commits.py +++ b/tests/test_commits.py @@ -1,16 +1,39 @@ import _setup +from datetime import datetime + from nose.tools import assert_equals import utils -class Commit(utils.HttpMockTestCase): +class CommitProperties(utils.HttpMockTestCase): + """Test commit property handling""" + commit_id = '1c83cde9b5a7c396a01af1007fb7b88765b9ae45' + def test_commit(self): + commit = self.client.commits.show('ask/python-github2', self.commit_id) + assert_equals(commit.message, + 'Added cache support to manage_collaborators.') + assert_equals(commit.parents, + [{"id": '7d1c855d2f44a55e4b90b40017be697cf70cb4a0'}]) + assert_equals(commit.url, + '/ask/python-github2/commit/%s' % self.commit_id) + assert_equals(commit.author['login'], 'JNRowe') + assert_equals(commit.id, self.commit_id) + assert_equals(commit.committed_date, + datetime(2011, 6, 6, 16, 13, 50)) + assert_equals(commit.authored_date, datetime(2011, 6, 6, 16, 13, 50)) + assert_equals(commit.tree, 'f48fcc1a0b8ea97f3147dc42cf7cdb6683493e94') + assert_equals(commit.committer['login'], 'JNRowe') + assert_equals(commit.added, None) + assert_equals(commit.removed, None) + assert_equals(commit.modified[0]['filename'], 'github2/bin/manage_collaborators.py') + + def test_repr(self): - commit_id = '1c83cde9b5a7c396a01af1007fb7b88765b9ae45' - commit = self.client.commits.show('ask/python-github2', commit_id) + commit = self.client.commits.show('ask/python-github2', self.commit_id) assert_equals(repr(commit), - '' % commit_id[:8]) + '' % self.commit_id[:8]) class CommitsQueries(utils.HttpMockTestCase): From 0a3c36fdcdc3323603b84c979d47602cd8da3c03 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 11 Jun 2011 09:59:47 +0100 Subject: [PATCH 002/129] Added issue/comment properties tests. --- tests/test_issues.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/tests/test_issues.py b/tests/test_issues.py index 72988f3..377412e 100644 --- a/tests/test_issues.py +++ b/tests/test_issues.py @@ -1,16 +1,49 @@ import _setup +from datetime import datetime + from nose.tools import assert_equals import utils -class ReprTests(utils.HttpMockTestCase): +class Issue(utils.HttpMockTestCase): + def test_properties(self): + issue = self.client.issues.show('ask/python-github2', 24) + assert_equals(issue.position, 24.0) + assert_equals(issue.number, 24) + assert_equals(issue.votes, 0) + assert_equals(len(issue.body), 164) + assert_equals(issue.title, 'Pagination support for commits.') + assert_equals(issue.user, 'svetlyak40wt') + assert_equals(issue.state, 'open') + assert_equals(issue.labels, []) + assert_equals(issue.created_at, datetime(2010, 12, 8, 23, 50, 26)) + assert_equals(issue.closed_at, None) + assert_equals(issue.updated_at, datetime(2011, 1, 4, 16, 26, 7)) + assert_equals(issue.diff_url, + 'https://github.com/ask/python-github2/pull/24.diff') + assert_equals(issue.patch_url, + 'https://github.com/ask/python-github2/pull/24.patch') + assert_equals(issue.pull_request_url, + 'https://github.com/ask/python-github2/pull/24') + def test_issue_repr(self): issue = self.client.issues.show('ask/python-github2', 24) assert_equals(repr(issue), '') - + + +class Comment(utils.HttpMockTestCase): + def test_properties(self): + comments = self.client.issues.comments('ask/python-github2', 24) + comment = comments[0] + assert_equals(comment.created_at, datetime(2010, 12, 9, 22, 37, 26)) + assert_equals(comment.updated_at, datetime(2010, 12, 9, 22, 37, 26)) + assert_equals(len(comment.body), 267) + assert_equals(comment.id, 601871) + assert_equals(comment.user, 'nvie') + def test_comment_repr(self): comments = self.client.issues.comments('ask/python-github2', 24) assert_equals(repr(comments[1]), From bca4787cbbfd3cdc9695e32e5d67768b1fc52af3 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 11 Jun 2011 10:56:42 +0100 Subject: [PATCH 003/129] Added test for list_by_label Issues method. --- ...ay,label,bug,79a89664a2d4783ee9089d29f99b660e | 16 ++++++++++++++++ tests/test_issues.py | 5 +++++ 2 files changed, 21 insertions(+) create mode 100644 tests/data/github.com,api,v2,json,issues,list,JNRowe,misc-overlay,label,bug,79a89664a2d4783ee9089d29f99b660e diff --git a/tests/data/github.com,api,v2,json,issues,list,JNRowe,misc-overlay,label,bug,79a89664a2d4783ee9089d29f99b660e b/tests/data/github.com,api,v2,json,issues,list,JNRowe,misc-overlay,label,bug,79a89664a2d4783ee9089d29f99b660e new file mode 100644 index 0000000..e865e18 --- /dev/null +++ b/tests/data/github.com,api,v2,json,issues,list,JNRowe,misc-overlay,label,bug,79a89664a2d4783ee9089d29f99b660e @@ -0,0 +1,16 @@ +status: 200 +x-ratelimit-remaining: 59 +content-location: https://github.com/api/v2/json/issues/list/JNRowe/misc-overlay/label/bug +connection: keep-alive +x-next: https://github.com/api/v2/json/issues/list/JNRowe/misc-overlay/label/bug?page=2 +content-length: 15566 +server: nginx/0.7.67 +date: Wed, 08 Jun 2011 13:42:00 GMT +x-runtime: 138ms +x-ratelimit-limit: 60 +etag: "f625ba2e14adae8f3b8960c00d60e9eb" +cache-control: private, max-age=0, must-revalidate +x-last: https://github.com/api/v2/json/issues/list/JNRowe/misc-overlay/label/bug?page=2 +content-type: application/json; charset=utf-8 + +{"issues":[{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":1.0,"number":3,"votes":0,"created_at":"2010/09/14 17:51:13 -0700","comments":1,"body":"\n---\n`ditz-id`: `05d00a48cdce80119a2b26f7c6f0e25894ff8537`\n\n`ditz-event-time`: `2010-03-04T19:21:01.799951Z`","title":"app-text/gist file locations have changed in git repo.","updated_at":"2010/09/14 17:51:17 -0700","closed_at":"2010/09/14 17:51:17 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/3","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":4.0,"number":9,"votes":0,"created_at":"2010/09/14 17:52:17 -0700","comments":1,"body":"\n---\n`ditz-id`: `0fdb57d80db65f2370811df882adbc8e958e5d8a`\n\n`ditz-event-time`: `2009-12-21T17:53:02.947952Z`","title":"fossil uses internal copy of sqlite.","updated_at":"2010/09/14 17:52:21 -0700","closed_at":"2010/09/14 17:52:21 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/9","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":6.0,"number":11,"votes":0,"created_at":"2010/09/14 17:52:40 -0700","comments":1,"body":"\n---\n`ditz-id`: `137ec0032fe83918fd0570e125dc1f2991a37676`\n\n`ditz-event-time`: `2010-03-04T19:37:23.671948Z`","title":"dev-python/pycukes fails with recent distutills.eclass changes.","updated_at":"2010/09/14 17:52:44 -0700","closed_at":"2010/09/14 17:52:44 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/11","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":19.0,"number":24,"votes":0,"created_at":"2010/09/14 17:54:52 -0700","comments":1,"body":"\n---\n`ditz-id`: `2ca7641993a1f7a1a8cb7ab01d5cde6b874e118a`\n\n`ditz-event-time`: `2009-12-14T10:32:37.855964Z`","title":"app-text/apvlv-0.0.8.1 has automagic djvu dependency.","updated_at":"2010/09/14 17:54:57 -0700","closed_at":"2010/09/14 17:54:57 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/24","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":24.0,"number":29,"votes":0,"created_at":"2010/09/14 17:55:30 -0700","comments":2,"body":"Reported by Dennis Bruce.\n\n---\n`ditz-id`: `32197e2725b7a973e0a66f3ecaf0efbbfb966c1e`\n\n`ditz-event-time`: `2010-03-04T17:43:17.471958Z`","title":"dev-util/ccontrol fails in src_test.","updated_at":"2010/09/14 17:55:35 -0700","closed_at":"2010/09/14 17:55:35 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/29","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":25.0,"number":30,"votes":0,"created_at":"2010/09/14 17:55:37 -0700","comments":1,"body":"\n---\n`ditz-id`: `337caa2e1f972335878906cc1fbfd6091a96d633`\n\n`ditz-event-time`: `2010-03-05T21:27:08.459986Z`","title":"python.eclass changes emit warnings with jnrowe-pypi:module_script_wrapper().","updated_at":"2010/09/14 17:55:46 -0700","closed_at":"2010/09/14 17:55:46 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/30","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":28.0,"number":33,"votes":0,"created_at":"2010/09/14 17:55:59 -0700","comments":1,"body":"\n---\n`ditz-id`: `35cca70ded236159c5a3a18bf816c2af345bc811`\n\n`ditz-event-time`: `2010-07-05T17:16:15.503883Z`","title":"dev-libs/ctpl cupage check blocked by robots.txt.","updated_at":"2010/09/14 17:56:03 -0700","closed_at":"2010/09/14 17:56:03 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/33","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":29.0,"number":34,"votes":0,"created_at":"2010/09/14 17:56:06 -0700","comments":1,"body":"\n---\n`ditz-id`: `362778bbc4dd3a91ab4149f33868039c75ccc7d6`\n\n`ditz-event-time`: `2010-02-14T07:36:28.091756Z`","title":"dev-python/html doesn't work with Python 2.4.","updated_at":"2010/09/14 17:56:10 -0700","closed_at":"2010/09/14 17:56:10 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/34","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":33.0,"number":38,"votes":0,"created_at":"2010/09/14 17:56:28 -0700","comments":1,"body":"\n---\n`ditz-id`: `3a12af55a7e27b7a87cf0432c7285e4e32ace4fe`\n\n`ditz-event-time`: `2009-12-06T06:21:55.723974Z`","title":"Invalid man page install path in apvlv.","updated_at":"2010/09/14 17:56:38 -0700","closed_at":"2010/09/14 17:56:38 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/38","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":34.0,"number":39,"votes":0,"created_at":"2010/09/14 17:56:44 -0700","comments":1,"body":"\n---\n`ditz-id`: `3a3471c3a9218713445122c21458c5d7f1b72e30`\n\n`ditz-event-time`: `2010-03-04T17:44:37.431956Z`","title":"dev-util/gitserve fails with recent distutills.eclass changes.","updated_at":"2010/09/14 17:56:49 -0700","closed_at":"2010/09/14 17:56:49 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/39","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":35.0,"number":40,"votes":0,"created_at":"2010/09/14 17:56:51 -0700","comments":1,"body":"The download page has changed layout.\n\n---\n`ditz-id`: `408d842ddd5caef873f5bedcaf4e71cee992d058`\n\n`ditz-event-time`: `2009-12-31T03:25:36.464053Z`","title":"matwm2 cupage entry broken.","updated_at":"2010/09/14 17:56:56 -0700","closed_at":"2010/09/14 17:56:56 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/40","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":40.0,"number":45,"votes":0,"created_at":"2010/09/14 17:57:35 -0700","comments":1,"body":"- /usr/share/doc/apvlv-0.0.7.4/reg.png - /usr/share/doc/apvlv-0.0.7.4/dir.png - /usr/share/doc/apvlv-0.0.7.4/pdf.png\n\n---\n`ditz-id`: `48578b8bac650dad93271d2880de33140768b4f0`\n\n`ditz-event-time`: `2009-11-14T06:53:02.847996Z`","title":"apvlv stores datafiles in docdir.","updated_at":"2010/09/14 17:57:39 -0700","closed_at":"2010/09/14 17:57:39 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/45","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":49.0,"number":54,"votes":0,"created_at":"2010/09/14 17:59:00 -0700","comments":1,"body":"Some of the plugins reference the build system's default document path, which is overridden at install time. This isn't just cosmetic, it breaks help functionality in the interface.\n\n---\n`ditz-id`: `54418badf2a50f642b919f458dd561e559083e7b`\n\n`ditz-event-time`: `2010-06-20T12:35:08.378462Z`","title":"Invalid doc path used in geany-plugins-0.19.","updated_at":"2010/09/14 17:59:10 -0700","closed_at":"2010/09/14 17:59:10 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/54","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":81.0,"number":86,"votes":0,"created_at":"2010/09/14 18:08:09 -0700","comments":1,"body":"ebuild and cupage entry need updating.\n\n---\n`ditz-id`: `81ea1ed5020396c7114643281ad2bf554133f9d6`\n\n`ditz-event-time`: `2009-11-16T05:25:05.255933Z`","title":"x11-wm/parti has moved to Google's code hosting.","updated_at":"2010/09/14 18:08:13 -0700","closed_at":"2010/09/14 18:08:13 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/86","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":97.0,"number":102,"votes":0,"created_at":"2010/09/14 18:11:24 -0700","comments":6,"body":"\n---\n`ditz-id`: `971e2fc2ad70b118b79adfe1a3745e5c551932bf`\n\n`ditz-event-time`: `2009-11-12T04:40:21.007927Z`","title":"Packages missing cupage config entries.","updated_at":"2010/09/14 18:11:37 -0700","closed_at":"2010/09/14 18:11:37 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/102","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":113.0,"number":118,"votes":0,"created_at":"2010/09/14 18:13:58 -0700","comments":1,"body":"\n---\n`ditz-id`: `a7598bb237c7bb2c402c4ff4c6a4e59d543e998f`\n\n`ditz-event-time`: `2010-03-04T19:17:31.451916Z`","title":"dev-python/restview fails with recent distutills.eclass changes.","updated_at":"2010/09/14 18:14:02 -0700","closed_at":"2010/09/14 18:14:02 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/118","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":117.0,"number":122,"votes":0,"created_at":"2010/09/14 18:14:23 -0700","comments":1,"body":"\n---\n`ditz-id`: `afa05d6a5f6ccdebcdaebec759d408d61888e729`\n\n`ditz-event-time`: `2010-07-05T17:21:11.219887Z`","title":"www-client/opera-remote cupage check blocked by robots.txt.","updated_at":"2010/09/14 18:14:28 -0700","closed_at":"2010/09/14 18:14:28 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/122","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":122.0,"number":127,"votes":0,"created_at":"2010/09/14 18:15:29 -0700","comments":1,"body":"\n---\n`ditz-id`: `b48295c6d581976a0c95f26c2190865c493fc081`\n\n`ditz-event-time`: `2010-07-05T17:17:40.083880Z`","title":"dev-libs/luaposix cupage check blocked by robots.txt.","updated_at":"2010/09/14 18:15:39 -0700","closed_at":"2010/09/14 18:15:39 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/127","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":0.0,"number":141,"votes":0,"created_at":"2010/09/14 18:17:45 -0700","comments":3,"body":"\n---\n`ditz-id`: `c8d8078898af58f80139f986306433a4c4efd397`\n\n`ditz-event-time`: `2010-07-05T17:23:22.063887Z`","title":"media-gfx/psplash cupage check raises 403.","updated_at":"2011/02/25 22:13:20 -0800","closed_at":"2011/02/25 22:13:20 -0800","html_url":"https://github.com/JNRowe/misc-overlay/issues/141","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":150.0,"number":155,"votes":0,"created_at":"2010/09/14 18:20:01 -0700","comments":1,"body":"Uses incorrect path.\n\n---\n`ditz-id`: `d3ba89ca556458709fe431eb3ad43989722cf274`\n\n`ditz-event-time`: `2010-06-22T18:17:54.823885Z`","title":"net-misc/bleeter-0.5.0 manpage generation broken.","updated_at":"2010/09/14 18:20:12 -0700","closed_at":"2010/09/14 18:20:12 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/155","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":166.0,"number":171,"votes":0,"created_at":"2010/09/14 18:22:48 -0700","comments":1,"body":"\n---\n`ditz-id`: `f86c46636c26fd30d5d812fc207a8ea9107c7bdc`\n\n`ditz-event-time`: `2009-12-13T11:35:43.211823Z`","title":"taskwarrior overrides user CFLAGS settings.","updated_at":"2010/09/14 18:22:53 -0700","closed_at":"2010/09/14 18:22:53 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/171","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":11.0,"number":199,"votes":0,"created_at":"2010/10/07 18:17:27 -0700","comments":2,"body":"This pypi entry seems to have been deleted. Leave this bug open for a few weeks to see if it is re-added, if not look for alternatives.","title":"dev-python/termstyle cupage check raises 404.","updated_at":"2010/11/05 05:53:12 -0700","closed_at":"2010/11/05 05:53:12 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/199","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":177.0,"number":200,"votes":0,"created_at":"2010/10/08 04:06:56 -0700","comments":1,"body":"Thanks to Daniel Brew for reporting.","title":"media-gfx/sng won't build with libpng-1.4.","updated_at":"2010/10/08 04:33:06 -0700","closed_at":"2010/10/08 04:33:06 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/200","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":18.0,"number":258,"votes":0,"created_at":"2011/01/09 22:53:39 -0800","comments":2,"body":"Recent sourceforge changes have broken matcher.","title":"sci-geosciences/gpsfeed cupage check fails.","updated_at":"2011/01/10 23:47:24 -0800","closed_at":"2011/01/10 23:47:24 -0800","html_url":"https://github.com/JNRowe/misc-overlay/issues/258","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":19.0,"number":259,"votes":0,"created_at":"2011/01/09 23:02:37 -0800","comments":2,"body":"Recent sourceforge changes have broken matcher.","title":"media-gfx/sng cupage check fails.","updated_at":"2011/01/10 22:04:52 -0800","closed_at":"2011/01/10 22:04:52 -0800","html_url":"https://github.com/JNRowe/misc-overlay/issues/259","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":20.0,"number":261,"votes":0,"created_at":"2011/01/09 23:04:31 -0800","comments":2,"body":"Recent sourceforge changes have broken matcher.","title":"dev-tcltk/tcludp cupage check fails.","updated_at":"2011/01/10 22:04:52 -0800","closed_at":"2011/01/10 22:04:52 -0800","html_url":"https://github.com/JNRowe/misc-overlay/issues/261","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":6.0,"number":262,"votes":0,"created_at":"2011/01/09 23:44:53 -0800","comments":2,"body":"If `USE=!examples` the links in the documentation will be broken.\r\n\r\nThis obviously also applies to `mail-filter/maildirproc-python2`.","title":"mail-filter/maildirproc documentation should link to upstream for examples","updated_at":"2011/01/10 23:47:24 -0800","closed_at":"2011/01/10 23:47:24 -0800","html_url":"https://github.com/JNRowe/misc-overlay/issues/262","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":0.0,"number":284,"votes":0,"created_at":"2011/02/14 03:00:42 -0800","comments":2,"body":"Upstream appears to have redesigned their site, so the cupage check needs updating.","title":"dev-python/texttable cupage check raises 404.","updated_at":"2011/02/15 05:54:47 -0800","closed_at":"2011/02/15 05:54:47 -0800","html_url":"https://github.com/JNRowe/misc-overlay/issues/284","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":9.0,"number":327,"votes":0,"created_at":"2011/04/04 21:42:38 -0700","comments":1,"body":"Appears to have switched to PyPI for listings.","title":"dev-python/feedcache cupage entry broken.","updated_at":"2011/04/05 03:59:24 -0700","closed_at":"2011/04/05 03:59:24 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/327","user":"JNRowe","labels":["bug"],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":10.0,"number":328,"votes":0,"created_at":"2011/04/04 21:44:12 -0700","comments":1,"body":"Files have been repackaged and renamed.","title":"app-misc/libeatmydata cupage entry broken.","updated_at":"2011/04/05 03:59:24 -0700","closed_at":"2011/04/05 03:59:24 -0700","html_url":"https://github.com/JNRowe/misc-overlay/issues/328","user":"JNRowe","labels":["bug"],"state":"closed"}]} \ No newline at end of file diff --git a/tests/test_issues.py b/tests/test_issues.py index 72988f3..166e592 100644 --- a/tests/test_issues.py +++ b/tests/test_issues.py @@ -38,3 +38,8 @@ def test_issue_labels(self): labels = self.client.issues.list_labels('JNRowe/misc-overlay') assert_equals(len(labels), 3) assert_equals(labels[0], 'feature') + + def test_list_by_label(self): + issues = self.client.issues.list_by_label('JNRowe/misc-overlay', 'bug') + assert_equals(len(issues), 30) + assert_equals(issues[-1].number, 328) From cfa7a543bcee2ab63619fea99bd40ffa8084eb3e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 11 Jun 2011 10:58:09 +0100 Subject: [PATCH 004/129] Added more repository querying tests. --- ...languages,941f2fae40c32a86b82f8e51a623cacd | 14 +++++++++++ ...,branches,2be8c8f036124b61fbddeecbbdf28e9c | 14 +++++++++++ ...aborators,855cea60d613a363106762311e6f53ea | 14 +++++++++++ ...hub2,tags,e7b38a20b45dffd2a22d34b5b51f41da | 14 +++++++++++ ...,watchers,8f4f641783ac93b3f5d7507bc65cf925 | 14 +++++++++++ tests/test_repositories.py | 25 +++++++++++++++++++ 6 files changed, 95 insertions(+) create mode 100644 tests/data/github.com,api,v2,json,repos,show,JNRowe,misc-overlay,languages,941f2fae40c32a86b82f8e51a623cacd create mode 100644 tests/data/github.com,api,v2,json,repos,show,ask,python-github2,branches,2be8c8f036124b61fbddeecbbdf28e9c create mode 100644 tests/data/github.com,api,v2,json,repos,show,ask,python-github2,collaborators,855cea60d613a363106762311e6f53ea create mode 100644 tests/data/github.com,api,v2,json,repos,show,ask,python-github2,tags,e7b38a20b45dffd2a22d34b5b51f41da create mode 100644 tests/data/github.com,api,v2,json,repos,show,ask,python-github2,watchers,8f4f641783ac93b3f5d7507bc65cf925 diff --git a/tests/data/github.com,api,v2,json,repos,show,JNRowe,misc-overlay,languages,941f2fae40c32a86b82f8e51a623cacd b/tests/data/github.com,api,v2,json,repos,show,JNRowe,misc-overlay,languages,941f2fae40c32a86b82f8e51a623cacd new file mode 100644 index 0000000..15bd799 --- /dev/null +++ b/tests/data/github.com,api,v2,json,repos,show,JNRowe,misc-overlay,languages,941f2fae40c32a86b82f8e51a623cacd @@ -0,0 +1,14 @@ +status: 200 +x-ratelimit-remaining: 59 +content-location: https://github.com/api/v2/json/repos/show/JNRowe/misc-overlay/languages +x-runtime: 93ms +content-length: 40 +server: nginx/0.7.67 +connection: keep-alive +x-ratelimit-limit: 60 +etag: "584c4c914a780c9338d00d146803076b" +cache-control: private, max-age=0, must-revalidate +date: Wed, 08 Jun 2011 13:38:58 GMT +content-type: application/json; charset=utf-8 + +{"languages":{"VimL":82,"Python":11194}} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,branches,2be8c8f036124b61fbddeecbbdf28e9c b/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,branches,2be8c8f036124b61fbddeecbbdf28e9c new file mode 100644 index 0000000..ab694a6 --- /dev/null +++ b/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,branches,2be8c8f036124b61fbddeecbbdf28e9c @@ -0,0 +1,14 @@ +status: 200 +x-ratelimit-remaining: 57 +content-location: https://github.com/api/v2/json/repos/show/ask/python-github2/branches +x-runtime: 8ms +content-length: 66 +server: nginx/0.7.67 +connection: keep-alive +x-ratelimit-limit: 60 +etag: "9f005bc97eb5ab622f01f1810790a947" +cache-control: private, max-age=0, must-revalidate +date: Wed, 08 Jun 2011 13:39:24 GMT +content-type: application/json; charset=utf-8 + +{"branches":{"master":"1c83cde9b5a7c396a01af1007fb7b88765b9ae45"}} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,collaborators,855cea60d613a363106762311e6f53ea b/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,collaborators,855cea60d613a363106762311e6f53ea new file mode 100644 index 0000000..26c614b --- /dev/null +++ b/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,collaborators,855cea60d613a363106762311e6f53ea @@ -0,0 +1,14 @@ +status: 200 +x-ratelimit-remaining: 57 +content-location: https://github.com/api/v2/json/repos/show/ask/python-github2/collaborators?access_token=xxx +x-runtime: 15ms +content-length: 50 +server: nginx/0.7.67 +connection: keep-alive +x-ratelimit-limit: 60 +etag: "03a973e8cc6d6cc0a8f05f2ef767a175" +cache-control: private, max-age=0, must-revalidate +date: Wed, 08 Jun 2011 13:38:17 GMT +content-type: application/json; charset=utf-8 + +{"collaborators":["ask","jdunck","JNRowe","nvie"]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,tags,e7b38a20b45dffd2a22d34b5b51f41da b/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,tags,e7b38a20b45dffd2a22d34b5b51f41da new file mode 100644 index 0000000..617036e --- /dev/null +++ b/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,tags,e7b38a20b45dffd2a22d34b5b51f41da @@ -0,0 +1,14 @@ +status: 200 +x-ratelimit-remaining: 58 +content-location: https://github.com/api/v2/json/repos/show/ask/python-github2/tags +x-runtime: 7ms +content-length: 372 +server: nginx/0.7.67 +connection: keep-alive +x-ratelimit-limit: 60 +etag: "25b6801155cc07a688ae97ce708404aa" +cache-control: private, max-age=0, must-revalidate +date: Wed, 08 Jun 2011 13:39:16 GMT +content-type: application/json; charset=utf-8 + +{"tags":{"0.4.0":"6337009b8cefecaff3d5b73883d3da541cc25432","v0.2.0":"9c573faef38b14603c8bdca39c0b7a0140502da9","v0.3.0":"573da9892ddbe85272b7367bf2936d1a3d5d3868","v0.1.2":"03afc58f59b0023a0a9c880387b0487b9010ca98","0.4.1":"96b0a41dd249c521323700bc11a0a721a7c9e642","v0.3.1":"f4c0a1f94770dd087fe636ed98f3443db317ab8c","v0.1.3":"210b2ac7f9368e372d17b7c932e3ad08c23530d4"}} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,watchers,8f4f641783ac93b3f5d7507bc65cf925 b/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,watchers,8f4f641783ac93b3f5d7507bc65cf925 new file mode 100644 index 0000000..cd08980 --- /dev/null +++ b/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,watchers,8f4f641783ac93b3f5d7507bc65cf925 @@ -0,0 +1,14 @@ +status: 200 +x-ratelimit-remaining: 56 +content-location: https://github.com/api/v2/json/repos/show/ask/python-github2/watchers +x-runtime: 54ms +content-length: 1625 +server: nginx/0.7.67 +connection: keep-alive +x-ratelimit-limit: 60 +etag: "b358d3db0f531bd5a4942821a7b2c207" +cache-control: private, max-age=0, must-revalidate +date: Wed, 08 Jun 2011 13:39:31 GMT +content-type: application/json; charset=utf-8 + +{"watchers":["ask","bartTC","gregnewman","sneeu","playpauseandstop","bradjasper","tav","joestump","montylounge","justquick","annoma","mrevilme","matagus","stefanfoulis","paulproteus","mattdennewitz","mrolafsson","mlaprise","notesandvolts","idangazit","defunkt","ericholscher","travisjeffery","mnaberez","mikexstudios","robertpfeiffer","diox","mmalone","rconradharris","codysoyland","fperez","koenbollen","mager","eokyere","leegao","nvie","storborg","thoas","Taomio","junckritter","eklitzke","claudiob","yyliuliang","hemanth","dinoboff","hoffmann","Kuze","sixthgear","wasabi1809","CMB","dcolish","tomdyson","miyamuko","stevejalim","grauwoelfchen","pydanny","mgrouchy","kennethreitz","mrtazz","durden","tkaemming","rnelson","jbochi","cloudartisan","jdunck","mattoufoutu","MtvnGames","salsakran","jrabbit","ojii","shabda","JNRowe","zsiciarz","rnagle","imp","rdegges","travlr","johl","gregory80","markuso","meantheory","idorosen","svetlyak40wt","adamv","dforsyth","bleepbloop","ChristopherMacGown","dreynolds","TaurusOlson","rstrobl","johndagostino","droot","pierre-roux","sanjayprabhu","pquerna","iki","mt3","RaiMan","pinoystartup","adamdoupe","RafeKettler","glensc","wermut","switchyard","sammyt","patrys","blackspiraldev","fkling","rokstrnisa","myusuf3","xen-git","bassdread","pmuilu","pombredanne","sigurdga","surajram","loganlinn","k7d","throughnothing","Amper","nikescar","deeGraYve","broderboy","aculich","AntonioMeireles","pikhovkin","atkinson","sc68cal","ralphbean","goosemo","ergelo","gazoombo","zikey","hub-cap","jamesadney","EnTeQuAk","albertz","ryansb","misfire","lxneng","jean-philippe","deniszgonjanin","Irazmus"]} \ No newline at end of file diff --git a/tests/test_repositories.py b/tests/test_repositories.py index 497a5c2..a30179b 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -69,6 +69,31 @@ def test_contributors(self): assert_equals(len(contributors), 27) assert_equals(contributors[1].name, 'Ask Solem Hoel') + def test_list_collaborators(self): + collaborators = self.client.repos.list_collaborators('ask/python-github2') + assert_equals(len(collaborators), 4) + assert_equals(collaborators[2], 'JNRowe') + + def test_languages(self): + languages = self.client.repos.languages('JNRowe/misc-overlay') + assert_equals(len(languages), 2) + assert_equals(languages['Python'], 11194) + + def test_tags(self): + tags = self.client.repos.tags('ask/python-github2') + assert_equals(len(tags), 7) + assert_equals(tags['0.4.1'], '96b0a41dd249c521323700bc11a0a721a7c9e642') + + def test_branches(self): + branches = self.client.repos.branches('ask/python-github2') + assert_equals(len(branches), 1) + assert_equals(branches['master'], '1c83cde9b5a7c396a01af1007fb7b88765b9ae45') + + def test_watchers(self): + watchers = self.client.repos.watchers('ask/python-github2') + assert_equals(len(watchers), 143) + assert_equals(watchers[0], 'ask') + class AuthenticatedRepoQueries(utils.HttpMockAuthenticatedTestCase): def test_pushable(self): From 09ff9ff5a61f0a074b978df03df99a5239aa160c Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sun, 12 Jun 2011 12:24:56 +0100 Subject: [PATCH 005/129] Added organisation properties tests. --- tests/test_organizations.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/test_organizations.py b/tests/test_organizations.py index 120c9c0..0842dcc 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -1,11 +1,33 @@ import _setup +from datetime import datetime + from nose.tools import (assert_equals, assert_true) import utils class OrganizationProperties(utils.HttpMockTestCase): + def test_properties(self): + organization = self.client.organizations.show('github') + assert_equals(organization.id, 9919) + assert_equals(organization.name, 'GitHub') + assert_equals(organization.blog, 'https://github.com/about') + assert_equals(organization.location, 'San Francisco, CA') + assert_equals(organization.gravatar_id, + '61024896f291303615bcd4f7a0dcfb74') + assert_equals(organization.login, 'github') + assert_equals(organization.email, 'support@github.com') + assert_equals(organization.company, None) + assert_equals(organization.created_at, + datetime(2008, 5, 10, 21, 37, 31)) + assert_equals(organization.following_count, 0) + assert_equals(organization.followers_count, 571) + assert_equals(organization.public_gist_count, 0) + assert_equals(organization.public_repo_count, 26) + assert_equals(organization.permission, None) + assert_equals(organization.plan, None) + def test_is_authenticated(self): organization = self.client.organizations.show('github') assert_true(organization.is_authenticated() is False) From 79d4d03a070f1bc0ae3e4a4cdd5ac71a7c6ec083 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sun, 12 Jun 2011 12:26:16 +0100 Subject: [PATCH 006/129] Added pull request properties tests. --- tests/test_pull_requests.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/test_pull_requests.py b/tests/test_pull_requests.py index 522b799..8138b14 100644 --- a/tests/test_pull_requests.py +++ b/tests/test_pull_requests.py @@ -1,11 +1,47 @@ import _setup +from datetime import datetime + from nose.tools import assert_equals import utils class PullRequest(utils.HttpMockTestCase): + def test_properties(self): + pull_request = self.client.pull_requests.show('ask/python-github2', 39) + assert_equals(pull_request.state, 'open') + assert_equals(pull_request.base['sha'], + '6a79f43f174acd3953ced69263c06d311a6bda56') + assert_equals(pull_request.head['sha'], + 'a31cfb70343d3ac9d6330e6328008c0bc690a5a1') + assert_equals(pull_request.issue_user['login'], 'JNRowe') + assert_equals(pull_request.user['login'], 'JNRowe') + assert_equals(pull_request.title, 'Datetime timezone handling.') + assert_equals(len(pull_request.body), 1442) + assert_equals(pull_request.position, 39.0) + assert_equals(pull_request.number, 39.0) + assert_equals(pull_request.votes, 0) + assert_equals(pull_request.comments, 3) + assert_equals(pull_request.diff_url, + 'https://github.com/ask/python-github2/pull/39.diff') + assert_equals(pull_request.patch_url, + 'https://github.com/ask/python-github2/pull/39.patch') + assert_equals(pull_request.labels, []) + assert_equals(pull_request.html_url, + 'https://github.com/ask/python-github2/pull/39') + assert_equals(pull_request.issue_created_at, + datetime(2011, 4, 18, 15, 25, 47)) + assert_equals(pull_request.issue_updated_at, + datetime(2011, 5, 29, 15, 37, 8)) + assert_equals(pull_request.created_at, + datetime(2011, 4, 30, 12, 37, 40)) + assert_equals(pull_request.updated_at, + datetime(2011, 6, 7, 13, 56, 50)) + assert_equals(pull_request.closed_at, None) + assert_equals(len(pull_request.discussion), 13) + assert_equals(pull_request.mergeable, False) + def test_repr(self): pull_request = self.client.pull_requests.show('ask/python-github2', 39) assert_equals(repr(pull_request), From ab38850a656afce606a326639c4717c943f19a1e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 25 Aug 2011 08:01:13 +0100 Subject: [PATCH 007/129] Updated offline test data. --- ...,gh-pages,d0ce7ae70e44f7f396a93485a24b3423 | 17 ++++++++++------- ...thon.html,8622bc5e052f03439528cc9b7bf3fea2 | 17 ++++++++++------- ...,Makefile,75d9a1e41e76c3b924420d48b56dc756 | 17 ++++++++++------- ...ay,master,bfb4f990e48c87dab73d988a81318d69 | 17 ++++++++++------- ...765b9ae45,a4f58221c8131c4e0975cd806f13d76c | 13 ++++++++----- ...ithub2,24,fd493a9ada4c1de1cd592293f9c2049e | 13 +++++++------ ...c-overlay,b81a30109b72cf3356114dcc6e2e29ca | 13 +++++++------ ...b2,closed,3662da90eba27809e7bff7600392ec94 | 17 +++++++++-------- ...hub2,open,fe32d5f6ebc81579886964c4c353403e | 15 ++++++++------- ...,timezone,ca6c06a1218893c7591a54352d1dc532 | 15 +++++++++++++++ ...,timezone,e8e32dc210586a68a9d7e0a88b74214f | 14 -------------- ...ithub2,24,5b0c4463c84fc26a94bc1bfaa191fed5 | 11 ++++++----- ...ns,github,d8f16b26260e5cb408a092d5071996ca | 15 ++++++++------- ...c_members,01d1fb446743540669e4773bf8cf53c3 | 15 ++++++++------- ...ositories,f3e3e76ac876947b47b43a16fa0e44e5 | 15 ++++++++------- ...ithub2,39,599fd11f8dd1b224e0c640d3f70f34c8 | 13 +++++++------ ...hub2,open,80fdb1a6835888c7811257428c93eef4 | 15 ++++++++------- ...h,surfraw,ef28b342b173c62c8b892fffb6509c84 | 13 +++++++------ ...ow,JNRowe,46d0b95561c6d2a42dda0406e785c3e5 | 15 ++++++++------- ...c-overlay,0d310ea1b3942e443c6e5cae4f3db39f | 15 ++++++++------- ...tributors,ff5597c19e0d450ad432c56295b19cf8 | 15 ++++++++------- ...ed,JNRowe,7c562435f1efb67be5b048aeb79b3f6c | 15 ++++++++------- ...gmail.com,c8f8e10dbb3704bcbda62ab4de5a69e6 | 15 ++++++++------- ...token=xxx,5670385849f9826634ee63e74bcac43e | 14 -------------- ...w,defunkt,eb59ee564b4598ac4a39c71474b539fc | 14 ++++++++++++++ ...es%2BRowe,95221a552352bf0535e2445659dc9ed5 | 15 ++++++++------- ...w,defunkt,379cb3d60bbce3d9b30e6e6aae66840c | 15 ++++++++------- ...followers,aba15090598242283ff9d4a8b5969f52 | 17 +++++++++-------- ...following,dc4e4027f60d0737177e4d793ff8a5de | 17 +++++++++-------- ...w,mojombo,640a810b9b927be6912b70d53d6b0eb1 | 13 +++++++------ ...,defunkt,c18f5f6c951d12528f9f3c2af3e1e623} | 12 ++++++------ tests/test_commits.py | 10 +++++----- tests/test_issues.py | 19 ++++++++++--------- tests/test_organizations.py | 4 ++-- tests/test_pull_requests.py | 4 ++-- tests/test_repositories.py | 10 +++++----- tests/test_user.py | 8 ++++---- 37 files changed, 275 insertions(+), 237 deletions(-) create mode 100644 tests/data/github.com,api,v2,json,issues,search,ask,python-github2,closed,timezone,ca6c06a1218893c7591a54352d1dc532 delete mode 100644 tests/data/github.com,api,v2,json,issues,search,ask,python-github2,open,timezone,e8e32dc210586a68a9d7e0a88b74214f delete mode 100644 tests/data/github.com,api,v2,json,user,follow,defunkt,access_token=xxx,5670385849f9826634ee63e74bcac43e create mode 100644 tests/data/github.com,api,v2,json,user,follow,defunkt,eb59ee564b4598ac4a39c71474b539fc rename tests/data/{github.com,api,v2,json,user,unfollow,defunkt,access_token=xxx,ec72b726c0324f7a53830c7e38ac6444 => github.com,api,v2,json,user,unfollow,defunkt,c18f5f6c951d12528f9f3c2af3e1e623} (62%) diff --git a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,d0ce7ae70e44f7f396a93485a24b3423 b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,d0ce7ae70e44f7f396a93485a24b3423 index 7d9f455..56b04cb 100644 --- a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,d0ce7ae70e44f7f396a93485a24b3423 +++ b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,d0ce7ae70e44f7f396a93485a24b3423 @@ -1,14 +1,17 @@ status: 200 -content-length: 19508 +x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/commits/list/JNRowe/misc-overlay/gh-pages -set-cookie: _gh_sess=BAh7BzoRbG9jYWxlX2d1ZXNzMCIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--719def2ab2d99283383e374327fcdbb716c45c12; +-content-encoding: gzip +set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly -x-runtime: 74ms -server: nginx/0.7.67 connection: keep-alive -etag: "f853c8c431fcb88f7d265f942abcb2a1" +content-length: 19508 +server: nginx/1.0.4 +x-runtime: 90ms +x-ratelimit-limit: 60 +etag: "39dd7030e2a0f6ca6c81ecbaec0945b8" cache-control: private, max-age=0, must-revalidate -date: Sun, 22 May 2011 20:51:32 GMT +date: Thu, 25 Aug 2011 06:47:19 GMT content-type: application/json; charset=utf-8 -{"commits":[{"parents":[{"id":"dc510f30d64636acec23adb685f75216b2a5c536"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/482f657443df4b701137a3025ae08476cddd2b7d","id":"482f657443df4b701137a3025ae08476cddd2b7d","committed_date":"2011-05-22T00:24:02-07:00","authored_date":"2011-05-22T00:24:02-07:00","message":"Regenerated to master@37233b357d1a3648434ffda8f569ce96b3bcbf53.","tree":"1001c361f15bd70b4cb1d8675d46cbe2f869d922","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"c900486c92de886e204de0de9ab7ebb025300796"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/dc510f30d64636acec23adb685f75216b2a5c536","id":"dc510f30d64636acec23adb685f75216b2a5c536","committed_date":"2011-05-20T11:24:57-07:00","authored_date":"2011-05-20T11:24:57-07:00","message":"Regenerated to master@77174d5106157dd497a38152ff694616a6569e67.","tree":"120a08b10c9c39457c89a489e3c61cdf6150eb73","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"42f6555b92064d9517c4c01786dd2d1a726267ba"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/c900486c92de886e204de0de9ab7ebb025300796","id":"c900486c92de886e204de0de9ab7ebb025300796","committed_date":"2011-05-18T06:19:40-07:00","authored_date":"2011-05-18T06:19:40-07:00","message":"Regenerated to master@ddcad38eea125d5e0748b5c9a3c39d05269bd584.","tree":"7176d813fcd92e06e7cf63bbc4a489da0f0d6a96","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d54b3e1f44ffc0f1bbd3f7797957ff8908c3e7f4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/42f6555b92064d9517c4c01786dd2d1a726267ba","id":"42f6555b92064d9517c4c01786dd2d1a726267ba","committed_date":"2011-05-18T06:19:33-07:00","authored_date":"2011-05-18T06:19:33-07:00","message":"Regenerated to master@6e36ba0f2163cbd918fae302944b2cf5f4cf0ec2.","tree":"a764431dd319a830a6ebcfae3899b914f9f27a3a","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"22d7a0ea8bd62a4ed6740568e401be59a024e909"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d54b3e1f44ffc0f1bbd3f7797957ff8908c3e7f4","id":"d54b3e1f44ffc0f1bbd3f7797957ff8908c3e7f4","committed_date":"2011-05-18T06:19:26-07:00","authored_date":"2011-05-18T06:19:26-07:00","message":"Regenerated to master@07bfd80949820c9215e48ebb5e11d2fd48923e5a.","tree":"471163e95ce3c23d2b732bd001d56bca759c2420","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"883e534ed48b3f672d6377d7804d55bb6dd8619b"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/22d7a0ea8bd62a4ed6740568e401be59a024e909","id":"22d7a0ea8bd62a4ed6740568e401be59a024e909","committed_date":"2011-05-18T06:19:19-07:00","authored_date":"2011-05-18T06:19:19-07:00","message":"Regenerated to master@944386cde5c100e699d0c2cb0ce403bf7e9cb8e7.","tree":"17dc717577ffc2c6f021efd65ec08ff3042b3e15","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8f1416b80d2d8b1400561c62caa3a8c419d565c8"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/883e534ed48b3f672d6377d7804d55bb6dd8619b","id":"883e534ed48b3f672d6377d7804d55bb6dd8619b","committed_date":"2011-05-18T06:19:12-07:00","authored_date":"2011-05-18T06:19:12-07:00","message":"Regenerated to master@dc40235add8b9cecd18b8d62a932ead301351075.","tree":"a070f9ccff562fd99bfdc30dcab3636e5787c493","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"bc629a169cf2c39391f07d4a8280d72926a5cf37"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/8f1416b80d2d8b1400561c62caa3a8c419d565c8","id":"8f1416b80d2d8b1400561c62caa3a8c419d565c8","committed_date":"2011-05-18T06:19:03-07:00","authored_date":"2011-05-18T06:19:03-07:00","message":"Regenerated to master@472da1f32f55d219286b106c97fa25dab1c33758.","tree":"4634dd6b341f04f5f030ab7a6f8ec04780b03ddc","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"663d32bc6d0644762cc5c80b29ee407efaeaaa14"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/bc629a169cf2c39391f07d4a8280d72926a5cf37","id":"bc629a169cf2c39391f07d4a8280d72926a5cf37","committed_date":"2011-05-18T06:18:55-07:00","authored_date":"2011-05-18T06:18:55-07:00","message":"Regenerated to master@79c0fb209d27eded8947eb4ffa5c74db4379abfe.","tree":"94957a98dc1f3898806ad9a6639dc2f634372120","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6ad4ec38eb73bd783fd068e5fbbcde532e07c2a1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/663d32bc6d0644762cc5c80b29ee407efaeaaa14","id":"663d32bc6d0644762cc5c80b29ee407efaeaaa14","committed_date":"2011-05-18T06:18:48-07:00","authored_date":"2011-05-18T06:18:48-07:00","message":"Regenerated to master@0dac8c2a2410325d5095cf5c290fae441843eec6.","tree":"c722d5bc095b3c6db4ebdcb8411d23ae0aa8c753","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"26adf3dcc7b90cdfab3eeff91240d2736e0f6aa0"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6ad4ec38eb73bd783fd068e5fbbcde532e07c2a1","id":"6ad4ec38eb73bd783fd068e5fbbcde532e07c2a1","committed_date":"2011-05-18T06:18:41-07:00","authored_date":"2011-05-18T06:18:41-07:00","message":"Regenerated to master@de547eab8229243de4906826a622b9305c5b972d.","tree":"553e39c28587b664b0ee28b7426cfa82f3800d17","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ec2ab762a5ff82e176593ee9ed41c1d7ef3908a3"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/26adf3dcc7b90cdfab3eeff91240d2736e0f6aa0","id":"26adf3dcc7b90cdfab3eeff91240d2736e0f6aa0","committed_date":"2011-05-18T06:18:34-07:00","authored_date":"2011-05-18T06:18:34-07:00","message":"Regenerated to master@c5a0736ee365ff994ba415a42622c26016e98201.","tree":"d8d7fc2e2da5cdb910e1c501c872656f25368012","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"481f71c738fbf5e85d0f91a6641af5fe2be58b51"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ec2ab762a5ff82e176593ee9ed41c1d7ef3908a3","id":"ec2ab762a5ff82e176593ee9ed41c1d7ef3908a3","committed_date":"2011-05-18T06:17:38-07:00","authored_date":"2011-05-18T06:17:38-07:00","message":"Regenerated to master@01b36090e191bfa74da5199d322c6028b15f0c86.","tree":"919c8aad024b7877ef1165026372be223d31f40d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f0b4cf728581a2810191e04f95969460dce9846c"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/481f71c738fbf5e85d0f91a6641af5fe2be58b51","id":"481f71c738fbf5e85d0f91a6641af5fe2be58b51","committed_date":"2011-05-18T05:49:29-07:00","authored_date":"2011-05-18T05:49:29-07:00","message":"Regenerated to master@9bd07338404171f18dcbb99b6bf351fbb6c3a8f1.","tree":"719716dfa3d81d214ce3b968c6a8f8b67511b7f8","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"30a0291143512c66f3ad2811c008262e3f9c14c5"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f0b4cf728581a2810191e04f95969460dce9846c","id":"f0b4cf728581a2810191e04f95969460dce9846c","committed_date":"2011-05-18T05:49:21-07:00","authored_date":"2011-05-18T05:49:21-07:00","message":"Regenerated to master@4654ab67b1767f066e38cfb55910095bbd797b2e.","tree":"671d07f1dcd6f4cb9b3ed7ec0c0a64c15cff924f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"901eae55af985825b5052e52892170f895f35d26"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/30a0291143512c66f3ad2811c008262e3f9c14c5","id":"30a0291143512c66f3ad2811c008262e3f9c14c5","committed_date":"2011-05-18T05:49:09-07:00","authored_date":"2011-05-18T05:49:09-07:00","message":"Regenerated to master@7fb4cf687ade6bfaffd22fc5fc06a77c2b706719.","tree":"3bc5da3e1815beaf6aaa0eee080b0f31c3464282","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f5afc160a71e9f2197de1665a0a50d72395f97c1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/901eae55af985825b5052e52892170f895f35d26","id":"901eae55af985825b5052e52892170f895f35d26","committed_date":"2011-05-18T05:48:23-07:00","authored_date":"2011-05-18T05:48:23-07:00","message":"Regenerated to master@6a328b3b4b1171de211dd2db765b1b403dea8e3a.","tree":"d6e0d83186ae524b7a3f6192601b726537adbb12","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"3e0c3a8997a3943db26f9b29551a07ac2dd273e7"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f5afc160a71e9f2197de1665a0a50d72395f97c1","id":"f5afc160a71e9f2197de1665a0a50d72395f97c1","committed_date":"2011-05-18T05:48:11-07:00","authored_date":"2011-05-18T05:48:11-07:00","message":"Regenerated to master@af39c23bbd4abab5b663c66d2cd1a81f3128c4f0.","tree":"d17e07f72894905ac6dd27052222cbeeb2c0b89d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8763c79257d40461b24427ba90cc9f49c353bce7"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/3e0c3a8997a3943db26f9b29551a07ac2dd273e7","id":"3e0c3a8997a3943db26f9b29551a07ac2dd273e7","committed_date":"2011-05-18T05:47:59-07:00","authored_date":"2011-05-18T05:47:59-07:00","message":"Regenerated to master@3fe9cb3de79b132e461c397176138abff39c6a28.","tree":"a440bb9b08d4cd7eb6a4a8b6c61cfb7311e8478d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f5f5e47c236cd5846a8b466b64fbc495946297e4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/8763c79257d40461b24427ba90cc9f49c353bce7","id":"8763c79257d40461b24427ba90cc9f49c353bce7","committed_date":"2011-05-18T05:47:12-07:00","authored_date":"2011-05-18T05:47:12-07:00","message":"Regenerated to master@6c8484ef6186c06093553f44c830597eff01b59e.","tree":"16361af013b2f41803fdcd20907c479c9052df30","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"38a34ed6c0f72157438e576a2cabd855dba2f98f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f5f5e47c236cd5846a8b466b64fbc495946297e4","id":"f5f5e47c236cd5846a8b466b64fbc495946297e4","committed_date":"2011-05-17T15:05:40-07:00","authored_date":"2011-05-17T15:05:40-07:00","message":"Regenerated to master@2db3879ca018193235c8967562ce9f4853202943.","tree":"89666ab4f20f6bdd272025aa5dc10d2432bd29a0","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"29d1172e655664ebd8f8df783f39972bb78a5740"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/38a34ed6c0f72157438e576a2cabd855dba2f98f","id":"38a34ed6c0f72157438e576a2cabd855dba2f98f","committed_date":"2011-05-17T15:04:22-07:00","authored_date":"2011-05-17T15:04:22-07:00","message":"Regenerated to master@6b86595f9a5f049b52d359b3c9c56895851ef021.","tree":"020f7ad66cb5a84900f89ee2dff620c83f022c76","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"e982c08b1c4d96cd9b734c677f1f023dd4380685"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/29d1172e655664ebd8f8df783f39972bb78a5740","id":"29d1172e655664ebd8f8df783f39972bb78a5740","committed_date":"2011-05-17T15:04:14-07:00","authored_date":"2011-05-17T15:04:14-07:00","message":"Regenerated to master@abb405c5b3cec29acf471cc5170f03b834106a6d.","tree":"a117c14f4a64eccf95c7d310e6059d3dd0b11bcb","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"7319a81f15c5a99203c01f7438959ca021334179"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/e982c08b1c4d96cd9b734c677f1f023dd4380685","id":"e982c08b1c4d96cd9b734c677f1f023dd4380685","committed_date":"2011-05-17T06:11:23-07:00","authored_date":"2011-05-17T06:11:23-07:00","message":"Regenerated to master@f72c51b7f65ada1bd377298c0e462fed499afcee.","tree":"a0139a1fd72f0062fafe128784a352e633df8f56","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9691bcc215a8fe204661044c625d97c55f1f8653"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7319a81f15c5a99203c01f7438959ca021334179","id":"7319a81f15c5a99203c01f7438959ca021334179","committed_date":"2011-05-17T06:11:16-07:00","authored_date":"2011-05-17T06:11:16-07:00","message":"Regenerated to master@48b55622c5c478bb5e6ffa0426c37f16029e6637.","tree":"8950bf04f5a650e1b354c234e8bab6529efbb683","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"e5b1a93b37350421766cda46b90cabdd2171d197"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/9691bcc215a8fe204661044c625d97c55f1f8653","id":"9691bcc215a8fe204661044c625d97c55f1f8653","committed_date":"2011-05-17T06:11:06-07:00","authored_date":"2011-05-17T06:11:06-07:00","message":"Regenerated to master@0e5d390672e7713ce9d6882820477fa26a2403a8.","tree":"1fc1562e7607848761d3af82fdf8cc3f25664c09","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"373157918971c6f5e313491ef6006c67fd50d497"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/e5b1a93b37350421766cda46b90cabdd2171d197","id":"e5b1a93b37350421766cda46b90cabdd2171d197","committed_date":"2011-05-17T06:10:59-07:00","authored_date":"2011-05-17T06:10:59-07:00","message":"Regenerated to master@aadb8c461bcff5f98d2629791a6526319ebedebf.","tree":"990626dece365eaa5894e07972eb72ee584133ff","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ac185a94dd7f5190ac317ee16042244ff0e24783"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/373157918971c6f5e313491ef6006c67fd50d497","id":"373157918971c6f5e313491ef6006c67fd50d497","committed_date":"2011-05-17T06:10:47-07:00","authored_date":"2011-05-17T06:10:47-07:00","message":"Regenerated to master@938698435b6feaeb5798b0b8265dec3c86a79f21.","tree":"0f91836cab86969d1e17ff2c4d1756788bac1bdf","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"39dfbb9ff704c4d0c86b48deccdf35c013b45871"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ac185a94dd7f5190ac317ee16042244ff0e24783","id":"ac185a94dd7f5190ac317ee16042244ff0e24783","committed_date":"2011-05-17T06:10:38-07:00","authored_date":"2011-05-17T06:10:38-07:00","message":"Regenerated to master@1a81af79e9448cc17cb962e6e554d2f95627e48a.","tree":"170fa4eb3372c8fae99c757c9e881b16d9f42b4f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"cb4e460851da323c1821b83b3ee9431e7961bb90"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/39dfbb9ff704c4d0c86b48deccdf35c013b45871","id":"39dfbb9ff704c4d0c86b48deccdf35c013b45871","committed_date":"2011-05-17T06:10:23-07:00","authored_date":"2011-05-17T06:10:23-07:00","message":"Regenerated to master@a42f9cc6206d3ab898d7e3f128d9435bccec36f3.","tree":"27d6c775e3514cb0047bdf37e1e0d4d62a49b86e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ac10f735a5ff397403cdb5336ee7361eba00a2ee"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/cb4e460851da323c1821b83b3ee9431e7961bb90","id":"cb4e460851da323c1821b83b3ee9431e7961bb90","committed_date":"2011-05-17T06:10:14-07:00","authored_date":"2011-05-17T06:10:14-07:00","message":"Regenerated to master@f305a8e19072faa41332ff771eef352d99b720dd.","tree":"4016b7b079894de95c66bc3d8e7afe2e594daccd","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"c7cb7d1931711ced912190193d53e26cac72d0b8"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ac10f735a5ff397403cdb5336ee7361eba00a2ee","id":"ac10f735a5ff397403cdb5336ee7361eba00a2ee","committed_date":"2011-05-17T06:10:05-07:00","authored_date":"2011-05-17T06:10:05-07:00","message":"Regenerated to master@0f13d2e4f32191aa0f2c5429666f0afb31934aee.","tree":"e316a4711d80f71e10a4ee2a4540908ace2b2944","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f3b0693d68e84ccfd0974b0d6e1ab4c8e983d809"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/c7cb7d1931711ced912190193d53e26cac72d0b8","id":"c7cb7d1931711ced912190193d53e26cac72d0b8","committed_date":"2011-05-17T06:09:57-07:00","authored_date":"2011-05-17T06:09:57-07:00","message":"Regenerated to master@44e4062f93c5d19d41f9d2158a382991f71b1142.","tree":"7791fcaf2992e7f762caf65bb8b7fc6756ca6a4f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"495b96a92c6d673c462011284cca1e8c273eeb0c"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f3b0693d68e84ccfd0974b0d6e1ab4c8e983d809","id":"f3b0693d68e84ccfd0974b0d6e1ab4c8e983d809","committed_date":"2011-05-17T06:09:36-07:00","authored_date":"2011-05-17T06:09:36-07:00","message":"Regenerated to master@f96f3d6df6e5c7be94957be247ddc0c569e99ed1.","tree":"b8e0182e827097942590d66e39bab525ec4c7cbf","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"e4740d92686cf0bd2f1b745a1fbcff7d6f67f282"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/495b96a92c6d673c462011284cca1e8c273eeb0c","id":"495b96a92c6d673c462011284cca1e8c273eeb0c","committed_date":"2011-05-17T06:09:26-07:00","authored_date":"2011-05-17T06:09:26-07:00","message":"Regenerated to master@7c4ab2b4bcc82b1a6e80c8aa6b66128eecbbd59a.","tree":"9b5aeceb9c96dd4483f3cfa6e9d89c2a4b48947c","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}}]} \ No newline at end of file +{"commits":[{"parents":[{"id":"0a98287afb6659dccb1e24d62244c94f945c757d"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/025148bdaa6fb6bdac9c3522d481fadf1c0a456f","id":"025148bdaa6fb6bdac9c3522d481fadf1c0a456f","committed_date":"2011-08-24T16:52:47-07:00","authored_date":"2011-08-24T16:52:47-07:00","message":"Regenerated to master@89a8193a669ad3ea96e4d0aeb00a12a366df5733.","tree":"6c70f9ace4bdcb5607a3bf59cd92bcd096d4e481","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"58986b8a454d299a02a80d6f739a8439d9715bf6"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/0a98287afb6659dccb1e24d62244c94f945c757d","id":"0a98287afb6659dccb1e24d62244c94f945c757d","committed_date":"2011-08-24T16:52:39-07:00","authored_date":"2011-08-24T16:52:39-07:00","message":"Regenerated to master@f192c08d43d64f6b7aec405963223d583ef8a040.","tree":"2a9be0b4c654cb10c17e69142f2c93a687679bf4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"079dbbe7bb20f5e22c2bf25c8b403810268949a1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/58986b8a454d299a02a80d6f739a8439d9715bf6","id":"58986b8a454d299a02a80d6f739a8439d9715bf6","committed_date":"2011-08-24T16:52:32-07:00","authored_date":"2011-08-24T16:52:32-07:00","message":"Regenerated to master@88b910c15ec1da485a24a4806c7021bfee218472.","tree":"6c70f9ace4bdcb5607a3bf59cd92bcd096d4e481","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"af8bd58ce3bd2d6e99f153acdb1fc7cf05983868"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/079dbbe7bb20f5e22c2bf25c8b403810268949a1","id":"079dbbe7bb20f5e22c2bf25c8b403810268949a1","committed_date":"2011-08-24T16:52:24-07:00","authored_date":"2011-08-24T16:52:24-07:00","message":"Regenerated to master@9d87ea27ba57d33d4f81e798b9dfee501f92418a.","tree":"17ca2418dde910a810a2079d7257d0218fcfa3c3","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"3b7c29bc9fe0c530f3ba78ee3bee8270f59578d9"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/af8bd58ce3bd2d6e99f153acdb1fc7cf05983868","id":"af8bd58ce3bd2d6e99f153acdb1fc7cf05983868","committed_date":"2011-08-23T13:19:27-07:00","authored_date":"2011-08-23T13:19:27-07:00","message":"Regenerated to master@56c2ffa6f33bb6d19a424735e2be56d4b94a64ba.","tree":"1d5784c3762e929008d0124f3fe64baf7ee00e0e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"57c7bd5ffc5a88310014d84edb0f03c5f1763b42"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/3b7c29bc9fe0c530f3ba78ee3bee8270f59578d9","id":"3b7c29bc9fe0c530f3ba78ee3bee8270f59578d9","committed_date":"2011-08-23T13:19:19-07:00","authored_date":"2011-08-23T13:19:19-07:00","message":"Regenerated to master@da7a75fd6c1fc4e3f7a54e946f5a99d7517a5a2d.","tree":"f7e528a6ae9301e14ae2cd632b4413aa4b8d6ae8","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"12a50df4c4b101c04ec0c1b0f478be28434696a1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/57c7bd5ffc5a88310014d84edb0f03c5f1763b42","id":"57c7bd5ffc5a88310014d84edb0f03c5f1763b42","committed_date":"2011-08-23T13:19:11-07:00","authored_date":"2011-08-23T13:19:11-07:00","message":"Regenerated to master@e1656e0222fedbbe7fc9995975d598629dc03d09.","tree":"656503e84cd1b0270934be1f382637fb65917b51","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"0cff89aa8ffb4ad17a0ddecfb21cd47dd92dd51b"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/12a50df4c4b101c04ec0c1b0f478be28434696a1","id":"12a50df4c4b101c04ec0c1b0f478be28434696a1","committed_date":"2011-08-23T13:19:04-07:00","authored_date":"2011-08-23T13:19:04-07:00","message":"Regenerated to master@2f90ca3bbada2b5cd0bd29f1d6464eabcf8e0f16.","tree":"8b968a6af9e041abe0e19c38ef80d521ae7c2309","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"2ede8b05e71baff32374225c9f3575194ebd44e6"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/0cff89aa8ffb4ad17a0ddecfb21cd47dd92dd51b","id":"0cff89aa8ffb4ad17a0ddecfb21cd47dd92dd51b","committed_date":"2011-08-23T13:18:56-07:00","authored_date":"2011-08-23T13:18:56-07:00","message":"Regenerated to master@b0bf53ab02e9094419eb44103959375e6e636fa3.","tree":"6c7aeffe9c7252cab3070713df3a3e2b31e56926","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8014a2be87434a8216a45fc7ec8c64a7ecfc6e3b"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/2ede8b05e71baff32374225c9f3575194ebd44e6","id":"2ede8b05e71baff32374225c9f3575194ebd44e6","committed_date":"2011-08-23T13:18:47-07:00","authored_date":"2011-08-23T13:18:47-07:00","message":"Regenerated to master@1c55b62c24ed3e1375c4aced8e7107cb5827ccc3.","tree":"885e5359e6efd5a7854f00a467a5850e4c1cebab","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6b053125f7d622ceec82b985cb9871307442b27a"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/8014a2be87434a8216a45fc7ec8c64a7ecfc6e3b","id":"8014a2be87434a8216a45fc7ec8c64a7ecfc6e3b","committed_date":"2011-08-19T12:35:56-07:00","authored_date":"2011-08-19T12:35:56-07:00","message":"Regenerated to master@7ac8c6196d6cd3aa5065afa3ee8e98e57491e3be.","tree":"9936a48eb2fdc5d460026287b0fe2c3bd0acf6b1","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ad427cb2d0abcb61c3fa5ea7358f8140e8ba6c8d"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6b053125f7d622ceec82b985cb9871307442b27a","id":"6b053125f7d622ceec82b985cb9871307442b27a","committed_date":"2011-08-19T12:35:49-07:00","authored_date":"2011-08-19T12:35:49-07:00","message":"Regenerated to master@be3e2ccbf0fa5a0fece6f1302bae3e0315744cef.","tree":"459fce756ba135f4c62d73b00a84e0957079bf8e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"784ca6695918ceadefe57552c349326e61af46ff"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ad427cb2d0abcb61c3fa5ea7358f8140e8ba6c8d","id":"ad427cb2d0abcb61c3fa5ea7358f8140e8ba6c8d","committed_date":"2011-08-19T12:35:41-07:00","authored_date":"2011-08-19T12:35:41-07:00","message":"Regenerated to master@23bf78b74bbd599715d54e7f34c844b2b5c0fe7c.","tree":"1b19f17a3280ade55a1c1ac314afe151fb48b866","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d55b6e7f638b713322417f01ad4156307cf2e439"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/784ca6695918ceadefe57552c349326e61af46ff","id":"784ca6695918ceadefe57552c349326e61af46ff","committed_date":"2011-08-19T12:35:33-07:00","authored_date":"2011-08-19T12:35:33-07:00","message":"Regenerated to master@8a710aaaeb7b82a01a815506f1697015cb89aad4.","tree":"0dba32a98aa1be0a1f442b19cff6716b3c4034f2","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"91153a3dddd41eb52a7e55b211ba81ba7f3c6b4f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d55b6e7f638b713322417f01ad4156307cf2e439","id":"d55b6e7f638b713322417f01ad4156307cf2e439","committed_date":"2011-08-19T12:35:26-07:00","authored_date":"2011-08-19T12:35:26-07:00","message":"Regenerated to master@928830b0f2fb1708247096caa0f1a72953875ffa.","tree":"d5cbf9139337b682cfbd6c29197c37bbdf444aa3","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d8a0f3e2e8fa535b66c87fe0de984fe80098f99e"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/91153a3dddd41eb52a7e55b211ba81ba7f3c6b4f","id":"91153a3dddd41eb52a7e55b211ba81ba7f3c6b4f","committed_date":"2011-08-19T12:35:18-07:00","authored_date":"2011-08-19T12:35:18-07:00","message":"Regenerated to master@773007162c8597e8c3e738e4a856229d2ae87259.","tree":"c036284978961e0f3c97f4d5b5c23b198b4783d4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"598dcf108432672009ed6acae24c4f238eec0a07"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d8a0f3e2e8fa535b66c87fe0de984fe80098f99e","id":"d8a0f3e2e8fa535b66c87fe0de984fe80098f99e","committed_date":"2011-08-19T12:35:11-07:00","authored_date":"2011-08-19T12:35:11-07:00","message":"Regenerated to master@75889df6dc91f167cb370e0878dc51929e87d8cb.","tree":"b8bbad457d65c05545d7711d38d7413184c1ee4f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d4b3f4f6aa519d08d4f37474dd6f7ff0900682ed"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/598dcf108432672009ed6acae24c4f238eec0a07","id":"598dcf108432672009ed6acae24c4f238eec0a07","committed_date":"2011-08-19T12:35:03-07:00","authored_date":"2011-08-19T12:35:03-07:00","message":"Regenerated to master@16cb35e13c89606f8e1cab4843d37459314adb8d.","tree":"d8f7b6bfaef75becad304ad1a7d1ed42a1fffce7","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"38485affd5caa72fb8bcf5859b4cfb2d00940aff"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d4b3f4f6aa519d08d4f37474dd6f7ff0900682ed","id":"d4b3f4f6aa519d08d4f37474dd6f7ff0900682ed","committed_date":"2011-08-19T12:34:48-07:00","authored_date":"2011-08-19T12:34:48-07:00","message":"Regenerated to master@92b1180ef9bea3bf383375680d2673ad4d172885.","tree":"53d4a394a858e932c9ae09f00d84bec7a0ea54b2","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ba496a6dbce08b29f4022fe7239ed5ce5d28a0f1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/38485affd5caa72fb8bcf5859b4cfb2d00940aff","id":"38485affd5caa72fb8bcf5859b4cfb2d00940aff","committed_date":"2011-08-19T12:34:40-07:00","authored_date":"2011-08-19T12:34:40-07:00","message":"Regenerated to master@9e4bfcedd81742b417b77672436322ea68c5a250.","tree":"f360eb1580f3cb0eccea8aef1f24124d8386654a","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"639c26b3bca543bc6b0614c6a515b91b66e3c97a"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ba496a6dbce08b29f4022fe7239ed5ce5d28a0f1","id":"ba496a6dbce08b29f4022fe7239ed5ce5d28a0f1","committed_date":"2011-08-19T12:34:32-07:00","authored_date":"2011-08-19T12:34:32-07:00","message":"Regenerated to master@02d98678efb443df5fd182644dfe07362ade1f57.","tree":"be30084dd3fcfe945313ce170251ebf43c2d88c2","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9f523e62120f9e5ccf3b55760ecf1bf1005ae453"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/639c26b3bca543bc6b0614c6a515b91b66e3c97a","id":"639c26b3bca543bc6b0614c6a515b91b66e3c97a","committed_date":"2011-08-19T12:34:23-07:00","authored_date":"2011-08-19T12:34:23-07:00","message":"Regenerated to master@53af340852055e21c9fd7ab95bfd02413a529ade.","tree":"ca9f5cb320b0ecf9089263826bb02cbc62ba9b94","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"607dd0092327152b65ecda9963a8dff173ca4aa8"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/9f523e62120f9e5ccf3b55760ecf1bf1005ae453","id":"9f523e62120f9e5ccf3b55760ecf1bf1005ae453","committed_date":"2011-08-19T12:34:16-07:00","authored_date":"2011-08-19T12:34:16-07:00","message":"Regenerated to master@1cc2ddacda2f10e66c4e03d1ce57899ad6ec4d94.","tree":"5f400c344b33caced42ac9030beb278dd1839864","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"de67c8990c15397f58bed3abe161eca428631a17"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/607dd0092327152b65ecda9963a8dff173ca4aa8","id":"607dd0092327152b65ecda9963a8dff173ca4aa8","committed_date":"2011-08-19T12:34:08-07:00","authored_date":"2011-08-19T12:34:08-07:00","message":"Regenerated to master@113dbf403732cb0444d1d37502765fc985127173.","tree":"fae4168d424646b499d5d91c7927557aecc54911","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"94c89874b44d1ebbde6391280385fafec672c1c1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/de67c8990c15397f58bed3abe161eca428631a17","id":"de67c8990c15397f58bed3abe161eca428631a17","committed_date":"2011-08-19T12:34:00-07:00","authored_date":"2011-08-19T12:34:00-07:00","message":"Regenerated to master@01fbfddc984dffa94f97acc068a747ce5d1d6242.","tree":"fa42288107ec5d2210823e803c8bf3fcfe25ed9c","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6141eeb28597258a8d4d09fe8930b43faca17174"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/94c89874b44d1ebbde6391280385fafec672c1c1","id":"94c89874b44d1ebbde6391280385fafec672c1c1","committed_date":"2011-08-19T12:33:52-07:00","authored_date":"2011-08-19T12:33:52-07:00","message":"Regenerated to master@bbf0339749b25336a4d6907f69b2557ba4f65adf.","tree":"f21c7bb062828ac6ed8829d408e05476eaef1538","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"76adb634ca9c4282cfdc6fde888a01b2eefe2b7c"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6141eeb28597258a8d4d09fe8930b43faca17174","id":"6141eeb28597258a8d4d09fe8930b43faca17174","committed_date":"2011-08-18T13:09:15-07:00","authored_date":"2011-08-18T13:09:15-07:00","message":"Regenerated to master@38619c8162e40a86d2edf81acd488a4ae71b8225.","tree":"857cab31f23ccf7e68d528fb4b2d5119b0d69eab","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"49dda674f0bf768fbeaaeccc865db824c2299866"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/76adb634ca9c4282cfdc6fde888a01b2eefe2b7c","id":"76adb634ca9c4282cfdc6fde888a01b2eefe2b7c","committed_date":"2011-08-18T13:08:58-07:00","authored_date":"2011-08-18T13:08:58-07:00","message":"Regenerated to master@151b0f7b09dc0ed9ee1fdc0a6ac5a6ab50bfee44.","tree":"c4676c96343948e653b7570d48f9539e80642b03","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"477929046f2952a4d52d54703c6c9e45777ee07e"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/49dda674f0bf768fbeaaeccc865db824c2299866","id":"49dda674f0bf768fbeaaeccc865db824c2299866","committed_date":"2011-08-18T13:08:44-07:00","authored_date":"2011-08-18T13:08:44-07:00","message":"Regenerated to master@62f854f04fa00f8eef9e125486f9841117beac3a.","tree":"4eb4676b7db1a4b616040c82c989cd5051c6d3f4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"b9a2a28b630932493d86c23843a6e00e8d8ee1a8"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/477929046f2952a4d52d54703c6c9e45777ee07e","id":"477929046f2952a4d52d54703c6c9e45777ee07e","committed_date":"2011-08-18T13:08:28-07:00","authored_date":"2011-08-18T13:08:28-07:00","message":"Regenerated to master@99cc3c9af871eed65227fc7eff4803016f335b4a.","tree":"2aab1d103f2f6e381e7ffb867759bc3d818565d4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"b542c7d9611a09ef4460b92ca0af79e767d873f5"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/b9a2a28b630932493d86c23843a6e00e8d8ee1a8","id":"b9a2a28b630932493d86c23843a6e00e8d8ee1a8","committed_date":"2011-08-18T13:08:13-07:00","authored_date":"2011-08-18T13:08:13-07:00","message":"Regenerated to master@5df5f3c4fa6a75ffd263770e0f0151aa88db69bd.","tree":"28a7fce63f8ddd3fde928fe5dd1cd211a55f65aa","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d0e4182e3402bcd3566813552afba7b05b333b26"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/b542c7d9611a09ef4460b92ca0af79e767d873f5","id":"b542c7d9611a09ef4460b92ca0af79e767d873f5","committed_date":"2011-08-18T13:08:01-07:00","authored_date":"2011-08-18T13:08:01-07:00","message":"Regenerated to master@6af177d7fad34ad2b2454d972eecd9165bc1aab1.","tree":"9be8a02e3032eb5712d1de02fe7b4de8266a08af","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"be5cf5ae473749bf9224276d0042fa482218d43f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d0e4182e3402bcd3566813552afba7b05b333b26","id":"d0e4182e3402bcd3566813552afba7b05b333b26","committed_date":"2011-08-18T13:07:53-07:00","authored_date":"2011-08-18T13:07:53-07:00","message":"Regenerated to master@d7405761dd5f6bc5ec5fb44915d921f52fdae535.","tree":"7ef67ab69af9746592f8d5cd43a9f35721223dfc","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"a28246baeacb186293335316b6ba73b1956493b1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/be5cf5ae473749bf9224276d0042fa482218d43f","id":"be5cf5ae473749bf9224276d0042fa482218d43f","committed_date":"2011-08-18T13:07:45-07:00","authored_date":"2011-08-18T13:07:45-07:00","message":"Regenerated to master@8ca70949a7bbd6b3dab125a1aa334e3682b10ce9.","tree":"1eebd7cb1afd4500e845bd356a46febd7ba08dd4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ec1607f0668354d20a389961bd39492f23077367"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/a28246baeacb186293335316b6ba73b1956493b1","id":"a28246baeacb186293335316b6ba73b1956493b1","committed_date":"2011-08-18T13:07:38-07:00","authored_date":"2011-08-18T13:07:38-07:00","message":"Regenerated to master@7054ad152fe698b8a9e7255f2b89c56f4438706b.","tree":"377c85d6fa2cf52d809ceff2c583ceeb63517357","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,packages,dev-python.html,8622bc5e052f03439528cc9b7bf3fea2 b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,packages,dev-python.html,8622bc5e052f03439528cc9b7bf3fea2 index 03bed3e..3493ec2 100644 --- a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,packages,dev-python.html,8622bc5e052f03439528cc9b7bf3fea2 +++ b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,packages,dev-python.html,8622bc5e052f03439528cc9b7bf3fea2 @@ -1,14 +1,17 @@ status: 200 -content-length: 19508 +x-ratelimit-remaining: 58 content-location: https://github.com/api/v2/json/commits/list/JNRowe/misc-overlay/gh-pages/packages/dev-python.html -set-cookie: _gh_sess=BAh7BzoRbG9jYWxlX2d1ZXNzMCIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--719def2ab2d99283383e374327fcdbb716c45c12; +-content-encoding: gzip +set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly -x-runtime: 90ms -server: nginx/0.7.67 connection: keep-alive -etag: "f853c8c431fcb88f7d265f942abcb2a1" +content-length: 19508 +server: nginx/1.0.4 +x-runtime: 114ms +x-ratelimit-limit: 60 +etag: "39dd7030e2a0f6ca6c81ecbaec0945b8" cache-control: private, max-age=0, must-revalidate -date: Sun, 22 May 2011 20:54:07 GMT +date: Thu, 25 Aug 2011 06:48:02 GMT content-type: application/json; charset=utf-8 -{"commits":[{"parents":[{"id":"dc510f30d64636acec23adb685f75216b2a5c536"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/482f657443df4b701137a3025ae08476cddd2b7d","id":"482f657443df4b701137a3025ae08476cddd2b7d","committed_date":"2011-05-22T00:24:02-07:00","authored_date":"2011-05-22T00:24:02-07:00","message":"Regenerated to master@37233b357d1a3648434ffda8f569ce96b3bcbf53.","tree":"1001c361f15bd70b4cb1d8675d46cbe2f869d922","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"c900486c92de886e204de0de9ab7ebb025300796"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/dc510f30d64636acec23adb685f75216b2a5c536","id":"dc510f30d64636acec23adb685f75216b2a5c536","committed_date":"2011-05-20T11:24:57-07:00","authored_date":"2011-05-20T11:24:57-07:00","message":"Regenerated to master@77174d5106157dd497a38152ff694616a6569e67.","tree":"120a08b10c9c39457c89a489e3c61cdf6150eb73","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d54b3e1f44ffc0f1bbd3f7797957ff8908c3e7f4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/42f6555b92064d9517c4c01786dd2d1a726267ba","id":"42f6555b92064d9517c4c01786dd2d1a726267ba","committed_date":"2011-05-18T06:19:33-07:00","authored_date":"2011-05-18T06:19:33-07:00","message":"Regenerated to master@6e36ba0f2163cbd918fae302944b2cf5f4cf0ec2.","tree":"a764431dd319a830a6ebcfae3899b914f9f27a3a","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"22d7a0ea8bd62a4ed6740568e401be59a024e909"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d54b3e1f44ffc0f1bbd3f7797957ff8908c3e7f4","id":"d54b3e1f44ffc0f1bbd3f7797957ff8908c3e7f4","committed_date":"2011-05-18T06:19:26-07:00","authored_date":"2011-05-18T06:19:26-07:00","message":"Regenerated to master@07bfd80949820c9215e48ebb5e11d2fd48923e5a.","tree":"471163e95ce3c23d2b732bd001d56bca759c2420","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"883e534ed48b3f672d6377d7804d55bb6dd8619b"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/22d7a0ea8bd62a4ed6740568e401be59a024e909","id":"22d7a0ea8bd62a4ed6740568e401be59a024e909","committed_date":"2011-05-18T06:19:19-07:00","authored_date":"2011-05-18T06:19:19-07:00","message":"Regenerated to master@944386cde5c100e699d0c2cb0ce403bf7e9cb8e7.","tree":"17dc717577ffc2c6f021efd65ec08ff3042b3e15","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6ad4ec38eb73bd783fd068e5fbbcde532e07c2a1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/663d32bc6d0644762cc5c80b29ee407efaeaaa14","id":"663d32bc6d0644762cc5c80b29ee407efaeaaa14","committed_date":"2011-05-18T06:18:48-07:00","authored_date":"2011-05-18T06:18:48-07:00","message":"Regenerated to master@0dac8c2a2410325d5095cf5c290fae441843eec6.","tree":"c722d5bc095b3c6db4ebdcb8411d23ae0aa8c753","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"26adf3dcc7b90cdfab3eeff91240d2736e0f6aa0"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6ad4ec38eb73bd783fd068e5fbbcde532e07c2a1","id":"6ad4ec38eb73bd783fd068e5fbbcde532e07c2a1","committed_date":"2011-05-18T06:18:41-07:00","authored_date":"2011-05-18T06:18:41-07:00","message":"Regenerated to master@de547eab8229243de4906826a622b9305c5b972d.","tree":"553e39c28587b664b0ee28b7426cfa82f3800d17","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ec2ab762a5ff82e176593ee9ed41c1d7ef3908a3"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/26adf3dcc7b90cdfab3eeff91240d2736e0f6aa0","id":"26adf3dcc7b90cdfab3eeff91240d2736e0f6aa0","committed_date":"2011-05-18T06:18:34-07:00","authored_date":"2011-05-18T06:18:34-07:00","message":"Regenerated to master@c5a0736ee365ff994ba415a42622c26016e98201.","tree":"d8d7fc2e2da5cdb910e1c501c872656f25368012","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"481f71c738fbf5e85d0f91a6641af5fe2be58b51"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ec2ab762a5ff82e176593ee9ed41c1d7ef3908a3","id":"ec2ab762a5ff82e176593ee9ed41c1d7ef3908a3","committed_date":"2011-05-18T06:17:38-07:00","authored_date":"2011-05-18T06:17:38-07:00","message":"Regenerated to master@01b36090e191bfa74da5199d322c6028b15f0c86.","tree":"919c8aad024b7877ef1165026372be223d31f40d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f0b4cf728581a2810191e04f95969460dce9846c"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/481f71c738fbf5e85d0f91a6641af5fe2be58b51","id":"481f71c738fbf5e85d0f91a6641af5fe2be58b51","committed_date":"2011-05-18T05:49:29-07:00","authored_date":"2011-05-18T05:49:29-07:00","message":"Regenerated to master@9bd07338404171f18dcbb99b6bf351fbb6c3a8f1.","tree":"719716dfa3d81d214ce3b968c6a8f8b67511b7f8","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"901eae55af985825b5052e52892170f895f35d26"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/30a0291143512c66f3ad2811c008262e3f9c14c5","id":"30a0291143512c66f3ad2811c008262e3f9c14c5","committed_date":"2011-05-18T05:49:09-07:00","authored_date":"2011-05-18T05:49:09-07:00","message":"Regenerated to master@7fb4cf687ade6bfaffd22fc5fc06a77c2b706719.","tree":"3bc5da3e1815beaf6aaa0eee080b0f31c3464282","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f5afc160a71e9f2197de1665a0a50d72395f97c1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/901eae55af985825b5052e52892170f895f35d26","id":"901eae55af985825b5052e52892170f895f35d26","committed_date":"2011-05-18T05:48:23-07:00","authored_date":"2011-05-18T05:48:23-07:00","message":"Regenerated to master@6a328b3b4b1171de211dd2db765b1b403dea8e3a.","tree":"d6e0d83186ae524b7a3f6192601b726537adbb12","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"3e0c3a8997a3943db26f9b29551a07ac2dd273e7"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f5afc160a71e9f2197de1665a0a50d72395f97c1","id":"f5afc160a71e9f2197de1665a0a50d72395f97c1","committed_date":"2011-05-18T05:48:11-07:00","authored_date":"2011-05-18T05:48:11-07:00","message":"Regenerated to master@af39c23bbd4abab5b663c66d2cd1a81f3128c4f0.","tree":"d17e07f72894905ac6dd27052222cbeeb2c0b89d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8763c79257d40461b24427ba90cc9f49c353bce7"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/3e0c3a8997a3943db26f9b29551a07ac2dd273e7","id":"3e0c3a8997a3943db26f9b29551a07ac2dd273e7","committed_date":"2011-05-18T05:47:59-07:00","authored_date":"2011-05-18T05:47:59-07:00","message":"Regenerated to master@3fe9cb3de79b132e461c397176138abff39c6a28.","tree":"a440bb9b08d4cd7eb6a4a8b6c61cfb7311e8478d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f5f5e47c236cd5846a8b466b64fbc495946297e4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/8763c79257d40461b24427ba90cc9f49c353bce7","id":"8763c79257d40461b24427ba90cc9f49c353bce7","committed_date":"2011-05-18T05:47:12-07:00","authored_date":"2011-05-18T05:47:12-07:00","message":"Regenerated to master@6c8484ef6186c06093553f44c830597eff01b59e.","tree":"16361af013b2f41803fdcd20907c479c9052df30","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"e982c08b1c4d96cd9b734c677f1f023dd4380685"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/29d1172e655664ebd8f8df783f39972bb78a5740","id":"29d1172e655664ebd8f8df783f39972bb78a5740","committed_date":"2011-05-17T15:04:14-07:00","authored_date":"2011-05-17T15:04:14-07:00","message":"Regenerated to master@abb405c5b3cec29acf471cc5170f03b834106a6d.","tree":"a117c14f4a64eccf95c7d310e6059d3dd0b11bcb","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"7319a81f15c5a99203c01f7438959ca021334179"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/e982c08b1c4d96cd9b734c677f1f023dd4380685","id":"e982c08b1c4d96cd9b734c677f1f023dd4380685","committed_date":"2011-05-17T06:11:23-07:00","authored_date":"2011-05-17T06:11:23-07:00","message":"Regenerated to master@f72c51b7f65ada1bd377298c0e462fed499afcee.","tree":"a0139a1fd72f0062fafe128784a352e633df8f56","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9691bcc215a8fe204661044c625d97c55f1f8653"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7319a81f15c5a99203c01f7438959ca021334179","id":"7319a81f15c5a99203c01f7438959ca021334179","committed_date":"2011-05-17T06:11:16-07:00","authored_date":"2011-05-17T06:11:16-07:00","message":"Regenerated to master@48b55622c5c478bb5e6ffa0426c37f16029e6637.","tree":"8950bf04f5a650e1b354c234e8bab6529efbb683","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"39dfbb9ff704c4d0c86b48deccdf35c013b45871"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ac185a94dd7f5190ac317ee16042244ff0e24783","id":"ac185a94dd7f5190ac317ee16042244ff0e24783","committed_date":"2011-05-17T06:10:38-07:00","authored_date":"2011-05-17T06:10:38-07:00","message":"Regenerated to master@1a81af79e9448cc17cb962e6e554d2f95627e48a.","tree":"170fa4eb3372c8fae99c757c9e881b16d9f42b4f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ac10f735a5ff397403cdb5336ee7361eba00a2ee"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/cb4e460851da323c1821b83b3ee9431e7961bb90","id":"cb4e460851da323c1821b83b3ee9431e7961bb90","committed_date":"2011-05-17T06:10:14-07:00","authored_date":"2011-05-17T06:10:14-07:00","message":"Regenerated to master@f305a8e19072faa41332ff771eef352d99b720dd.","tree":"4016b7b079894de95c66bc3d8e7afe2e594daccd","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f3b0693d68e84ccfd0974b0d6e1ab4c8e983d809"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/c7cb7d1931711ced912190193d53e26cac72d0b8","id":"c7cb7d1931711ced912190193d53e26cac72d0b8","committed_date":"2011-05-17T06:09:57-07:00","authored_date":"2011-05-17T06:09:57-07:00","message":"Regenerated to master@44e4062f93c5d19d41f9d2158a382991f71b1142.","tree":"7791fcaf2992e7f762caf65bb8b7fc6756ca6a4f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"495b96a92c6d673c462011284cca1e8c273eeb0c"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f3b0693d68e84ccfd0974b0d6e1ab4c8e983d809","id":"f3b0693d68e84ccfd0974b0d6e1ab4c8e983d809","committed_date":"2011-05-17T06:09:36-07:00","authored_date":"2011-05-17T06:09:36-07:00","message":"Regenerated to master@f96f3d6df6e5c7be94957be247ddc0c569e99ed1.","tree":"b8e0182e827097942590d66e39bab525ec4c7cbf","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"e4740d92686cf0bd2f1b745a1fbcff7d6f67f282"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/495b96a92c6d673c462011284cca1e8c273eeb0c","id":"495b96a92c6d673c462011284cca1e8c273eeb0c","committed_date":"2011-05-17T06:09:26-07:00","authored_date":"2011-05-17T06:09:26-07:00","message":"Regenerated to master@7c4ab2b4bcc82b1a6e80c8aa6b66128eecbbd59a.","tree":"9b5aeceb9c96dd4483f3cfa6e9d89c2a4b48947c","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8832aeb528b781e4ee15517b72fb8c12c953b3ca"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7e1731965a19c2c70b1a10b42cf01b9007291b40","id":"7e1731965a19c2c70b1a10b42cf01b9007291b40","committed_date":"2011-05-17T06:08:39-07:00","authored_date":"2011-05-17T06:08:39-07:00","message":"Regenerated to master@a487ce90671d5ef3244d742d7fbe5ddb450802c0.","tree":"eff57796660ae68d5223ef4faba4d37ad37b9e74","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6c0ecbe11add1596cf0420f07f8e5b1ceb396df3"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/207d15e62a7ddb2d540da908b85437e87978a1e1","id":"207d15e62a7ddb2d540da908b85437e87978a1e1","committed_date":"2011-05-16T12:54:56-07:00","authored_date":"2011-05-16T12:54:56-07:00","message":"Regenerated to master@6b4a857ed3a0326fe543d5a41f49c942bae93420.","tree":"83534523596feaf881abfcc7eef1af92aba2e624","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d464c1dbe8de864da90423bca39f09d8a469782b"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6c0ecbe11add1596cf0420f07f8e5b1ceb396df3","id":"6c0ecbe11add1596cf0420f07f8e5b1ceb396df3","committed_date":"2011-05-16T12:49:24-07:00","authored_date":"2011-05-16T12:49:24-07:00","message":"Regenerated to master@67da4a90939757514ef5b8907b1cc30da088372e.","tree":"9f1fc9939b7cb42eee18adb48303b9b550ed7a9f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"c3676fcd73c1811abe26290dd4cd2da808468567"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/3cb5e43810e2c96551a501172ac2c7afe1c635a2","id":"3cb5e43810e2c96551a501172ac2c7afe1c635a2","committed_date":"2011-05-14T06:07:04-07:00","authored_date":"2011-05-14T06:07:04-07:00","message":"Regenerated to master@d0ca7960c54b7c9a3ffd98e9ed5b430de4f1cf8f.","tree":"70fc54533649a0243cc2eee24e10f2889b984154","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d5711d508b6abdf75db245e4a019d5e231c45b66"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d19310d2a984e62f9d384c1af162d628f2d328e2","id":"d19310d2a984e62f9d384c1af162d628f2d328e2","committed_date":"2011-05-14T06:06:18-07:00","authored_date":"2011-05-14T06:06:18-07:00","message":"Regenerated to master@832382c82969074291673c3e4aba05fdcef11515.","tree":"953ca90550e721f055c2a08aab45757805079817","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"7380a4c52a9c3442fa2e975e04479499bf96216f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d5711d508b6abdf75db245e4a019d5e231c45b66","id":"d5711d508b6abdf75db245e4a019d5e231c45b66","committed_date":"2011-05-14T04:26:35-07:00","authored_date":"2011-05-14T04:26:35-07:00","message":"Regenerated to master@8b8ca395b5c01fec3335480aab6eec667a680248.","tree":"1bffb4fe8b6ee8e2ab8aaad5481323023c9972ee","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9837e052d55f730afea7dfbec5ff649b81eb9552"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/99ca4e94afa0a0cdbde5172e16230305c90ae7dc","id":"99ca4e94afa0a0cdbde5172e16230305c90ae7dc","committed_date":"2011-05-14T04:25:57-07:00","authored_date":"2011-05-14T04:25:57-07:00","message":"Regenerated to master@41ef19778b0b975cf7942ae88deec19ee3a7245e.","tree":"32295f76ecec241b4ca6521342dac97a52949804","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6a011c235d25a97fee032317fda4afafac3c06b0"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/fc439c18008715db78150e3df88b57d77d3372f1","id":"fc439c18008715db78150e3df88b57d77d3372f1","committed_date":"2011-05-13T12:34:28-07:00","authored_date":"2011-05-13T12:34:28-07:00","message":"Regenerated to master@1413f01349c6187c6ed25896d1d90f9164783784.","tree":"bf901c86ac99a79697dd0b7689e6744c95fb3dd3","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"b42902c7d26c539d52afcdf8ea6e8e1193bcdf5d"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6a011c235d25a97fee032317fda4afafac3c06b0","id":"6a011c235d25a97fee032317fda4afafac3c06b0","committed_date":"2011-05-13T02:36:40-07:00","authored_date":"2011-05-13T02:36:40-07:00","message":"Regenerated to master@b276cdf6dc077f988fbf422ae150c518a0cf5c66.","tree":"d622cbf0065e5f8a2376b3e97ae4e30a8d11765f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ad818893ed1df55fa9fd2176fedea03c857e8fb3"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/b42902c7d26c539d52afcdf8ea6e8e1193bcdf5d","id":"b42902c7d26c539d52afcdf8ea6e8e1193bcdf5d","committed_date":"2011-05-12T08:50:32-07:00","authored_date":"2011-05-12T08:50:32-07:00","message":"Regenerated to master@2f09d163876dcc7832509844a7e6160598c8ed75.","tree":"ad8128fb4ba0d9ca26000b7153f4705d0c8abe58","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d91631eaf1d6351060123b79489df9663f60aa8e"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ad818893ed1df55fa9fd2176fedea03c857e8fb3","id":"ad818893ed1df55fa9fd2176fedea03c857e8fb3","committed_date":"2011-05-12T07:21:30-07:00","authored_date":"2011-05-12T07:21:30-07:00","message":"Regenerated to master@709bad1bf4e70b735b1c1284f11db4b89d8a6936.","tree":"e36c66980818c31f574f74cb55f38baafdf5f706","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d67fc99da1a396f8bbe918900af741c2ab6eb219"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d91631eaf1d6351060123b79489df9663f60aa8e","id":"d91631eaf1d6351060123b79489df9663f60aa8e","committed_date":"2011-05-12T07:21:16-07:00","authored_date":"2011-05-12T07:21:16-07:00","message":"Regenerated to master@0934e9be7d28a79de1ebd8374cf146d6cca61e87.","tree":"99c251d931dbe690b41b4c062ec09960b5aa5743","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}}]} \ No newline at end of file +{"commits":[{"parents":[{"id":"0a98287afb6659dccb1e24d62244c94f945c757d"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/025148bdaa6fb6bdac9c3522d481fadf1c0a456f","id":"025148bdaa6fb6bdac9c3522d481fadf1c0a456f","committed_date":"2011-08-24T16:52:47-07:00","authored_date":"2011-08-24T16:52:47-07:00","message":"Regenerated to master@89a8193a669ad3ea96e4d0aeb00a12a366df5733.","tree":"6c70f9ace4bdcb5607a3bf59cd92bcd096d4e481","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"58986b8a454d299a02a80d6f739a8439d9715bf6"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/0a98287afb6659dccb1e24d62244c94f945c757d","id":"0a98287afb6659dccb1e24d62244c94f945c757d","committed_date":"2011-08-24T16:52:39-07:00","authored_date":"2011-08-24T16:52:39-07:00","message":"Regenerated to master@f192c08d43d64f6b7aec405963223d583ef8a040.","tree":"2a9be0b4c654cb10c17e69142f2c93a687679bf4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"079dbbe7bb20f5e22c2bf25c8b403810268949a1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/58986b8a454d299a02a80d6f739a8439d9715bf6","id":"58986b8a454d299a02a80d6f739a8439d9715bf6","committed_date":"2011-08-24T16:52:32-07:00","authored_date":"2011-08-24T16:52:32-07:00","message":"Regenerated to master@88b910c15ec1da485a24a4806c7021bfee218472.","tree":"6c70f9ace4bdcb5607a3bf59cd92bcd096d4e481","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"af8bd58ce3bd2d6e99f153acdb1fc7cf05983868"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/079dbbe7bb20f5e22c2bf25c8b403810268949a1","id":"079dbbe7bb20f5e22c2bf25c8b403810268949a1","committed_date":"2011-08-24T16:52:24-07:00","authored_date":"2011-08-24T16:52:24-07:00","message":"Regenerated to master@9d87ea27ba57d33d4f81e798b9dfee501f92418a.","tree":"17ca2418dde910a810a2079d7257d0218fcfa3c3","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"3b7c29bc9fe0c530f3ba78ee3bee8270f59578d9"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/af8bd58ce3bd2d6e99f153acdb1fc7cf05983868","id":"af8bd58ce3bd2d6e99f153acdb1fc7cf05983868","committed_date":"2011-08-23T13:19:27-07:00","authored_date":"2011-08-23T13:19:27-07:00","message":"Regenerated to master@56c2ffa6f33bb6d19a424735e2be56d4b94a64ba.","tree":"1d5784c3762e929008d0124f3fe64baf7ee00e0e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"57c7bd5ffc5a88310014d84edb0f03c5f1763b42"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/3b7c29bc9fe0c530f3ba78ee3bee8270f59578d9","id":"3b7c29bc9fe0c530f3ba78ee3bee8270f59578d9","committed_date":"2011-08-23T13:19:19-07:00","authored_date":"2011-08-23T13:19:19-07:00","message":"Regenerated to master@da7a75fd6c1fc4e3f7a54e946f5a99d7517a5a2d.","tree":"f7e528a6ae9301e14ae2cd632b4413aa4b8d6ae8","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"12a50df4c4b101c04ec0c1b0f478be28434696a1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/57c7bd5ffc5a88310014d84edb0f03c5f1763b42","id":"57c7bd5ffc5a88310014d84edb0f03c5f1763b42","committed_date":"2011-08-23T13:19:11-07:00","authored_date":"2011-08-23T13:19:11-07:00","message":"Regenerated to master@e1656e0222fedbbe7fc9995975d598629dc03d09.","tree":"656503e84cd1b0270934be1f382637fb65917b51","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"0cff89aa8ffb4ad17a0ddecfb21cd47dd92dd51b"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/12a50df4c4b101c04ec0c1b0f478be28434696a1","id":"12a50df4c4b101c04ec0c1b0f478be28434696a1","committed_date":"2011-08-23T13:19:04-07:00","authored_date":"2011-08-23T13:19:04-07:00","message":"Regenerated to master@2f90ca3bbada2b5cd0bd29f1d6464eabcf8e0f16.","tree":"8b968a6af9e041abe0e19c38ef80d521ae7c2309","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"2ede8b05e71baff32374225c9f3575194ebd44e6"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/0cff89aa8ffb4ad17a0ddecfb21cd47dd92dd51b","id":"0cff89aa8ffb4ad17a0ddecfb21cd47dd92dd51b","committed_date":"2011-08-23T13:18:56-07:00","authored_date":"2011-08-23T13:18:56-07:00","message":"Regenerated to master@b0bf53ab02e9094419eb44103959375e6e636fa3.","tree":"6c7aeffe9c7252cab3070713df3a3e2b31e56926","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"784ca6695918ceadefe57552c349326e61af46ff"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ad427cb2d0abcb61c3fa5ea7358f8140e8ba6c8d","id":"ad427cb2d0abcb61c3fa5ea7358f8140e8ba6c8d","committed_date":"2011-08-19T12:35:41-07:00","authored_date":"2011-08-19T12:35:41-07:00","message":"Regenerated to master@23bf78b74bbd599715d54e7f34c844b2b5c0fe7c.","tree":"1b19f17a3280ade55a1c1ac314afe151fb48b866","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d55b6e7f638b713322417f01ad4156307cf2e439"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/784ca6695918ceadefe57552c349326e61af46ff","id":"784ca6695918ceadefe57552c349326e61af46ff","committed_date":"2011-08-19T12:35:33-07:00","authored_date":"2011-08-19T12:35:33-07:00","message":"Regenerated to master@8a710aaaeb7b82a01a815506f1697015cb89aad4.","tree":"0dba32a98aa1be0a1f442b19cff6716b3c4034f2","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d8a0f3e2e8fa535b66c87fe0de984fe80098f99e"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/91153a3dddd41eb52a7e55b211ba81ba7f3c6b4f","id":"91153a3dddd41eb52a7e55b211ba81ba7f3c6b4f","committed_date":"2011-08-19T12:35:18-07:00","authored_date":"2011-08-19T12:35:18-07:00","message":"Regenerated to master@773007162c8597e8c3e738e4a856229d2ae87259.","tree":"c036284978961e0f3c97f4d5b5c23b198b4783d4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"598dcf108432672009ed6acae24c4f238eec0a07"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d8a0f3e2e8fa535b66c87fe0de984fe80098f99e","id":"d8a0f3e2e8fa535b66c87fe0de984fe80098f99e","committed_date":"2011-08-19T12:35:11-07:00","authored_date":"2011-08-19T12:35:11-07:00","message":"Regenerated to master@75889df6dc91f167cb370e0878dc51929e87d8cb.","tree":"b8bbad457d65c05545d7711d38d7413184c1ee4f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"639c26b3bca543bc6b0614c6a515b91b66e3c97a"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ba496a6dbce08b29f4022fe7239ed5ce5d28a0f1","id":"ba496a6dbce08b29f4022fe7239ed5ce5d28a0f1","committed_date":"2011-08-19T12:34:32-07:00","authored_date":"2011-08-19T12:34:32-07:00","message":"Regenerated to master@02d98678efb443df5fd182644dfe07362ade1f57.","tree":"be30084dd3fcfe945313ce170251ebf43c2d88c2","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9f523e62120f9e5ccf3b55760ecf1bf1005ae453"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/639c26b3bca543bc6b0614c6a515b91b66e3c97a","id":"639c26b3bca543bc6b0614c6a515b91b66e3c97a","committed_date":"2011-08-19T12:34:23-07:00","authored_date":"2011-08-19T12:34:23-07:00","message":"Regenerated to master@53af340852055e21c9fd7ab95bfd02413a529ade.","tree":"ca9f5cb320b0ecf9089263826bb02cbc62ba9b94","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"de67c8990c15397f58bed3abe161eca428631a17"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/607dd0092327152b65ecda9963a8dff173ca4aa8","id":"607dd0092327152b65ecda9963a8dff173ca4aa8","committed_date":"2011-08-19T12:34:08-07:00","authored_date":"2011-08-19T12:34:08-07:00","message":"Regenerated to master@113dbf403732cb0444d1d37502765fc985127173.","tree":"fae4168d424646b499d5d91c7927557aecc54911","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"94c89874b44d1ebbde6391280385fafec672c1c1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/de67c8990c15397f58bed3abe161eca428631a17","id":"de67c8990c15397f58bed3abe161eca428631a17","committed_date":"2011-08-19T12:34:00-07:00","authored_date":"2011-08-19T12:34:00-07:00","message":"Regenerated to master@01fbfddc984dffa94f97acc068a747ce5d1d6242.","tree":"fa42288107ec5d2210823e803c8bf3fcfe25ed9c","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"49dda674f0bf768fbeaaeccc865db824c2299866"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/76adb634ca9c4282cfdc6fde888a01b2eefe2b7c","id":"76adb634ca9c4282cfdc6fde888a01b2eefe2b7c","committed_date":"2011-08-18T13:08:58-07:00","authored_date":"2011-08-18T13:08:58-07:00","message":"Regenerated to master@151b0f7b09dc0ed9ee1fdc0a6ac5a6ab50bfee44.","tree":"c4676c96343948e653b7570d48f9539e80642b03","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"b542c7d9611a09ef4460b92ca0af79e767d873f5"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/b9a2a28b630932493d86c23843a6e00e8d8ee1a8","id":"b9a2a28b630932493d86c23843a6e00e8d8ee1a8","committed_date":"2011-08-18T13:08:13-07:00","authored_date":"2011-08-18T13:08:13-07:00","message":"Regenerated to master@5df5f3c4fa6a75ffd263770e0f0151aa88db69bd.","tree":"28a7fce63f8ddd3fde928fe5dd1cd211a55f65aa","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ec1607f0668354d20a389961bd39492f23077367"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/a28246baeacb186293335316b6ba73b1956493b1","id":"a28246baeacb186293335316b6ba73b1956493b1","committed_date":"2011-08-18T13:07:38-07:00","authored_date":"2011-08-18T13:07:38-07:00","message":"Regenerated to master@7054ad152fe698b8a9e7255f2b89c56f4438706b.","tree":"377c85d6fa2cf52d809ceff2c583ceeb63517357","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"272f0bb8b317decf1ffb03fd7101786b274d0a98"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/79b8cb8482c22a1740b71ff519abc96a2280b9cf","id":"79b8cb8482c22a1740b71ff519abc96a2280b9cf","committed_date":"2011-08-18T13:07:14-07:00","authored_date":"2011-08-18T13:07:14-07:00","message":"Regenerated to master@098c2e4bf47f68f0a36b095141d8514d1d589b39.","tree":"e8e7f9cf2d23fc6e48e20629e5edc6f828d6f8d9","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"a5f93825dacf7dcdefd754599cd9ee1463c40dfd"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/10f305f30bf9ff11f2e7c68b54f46155c887a5a1","id":"10f305f30bf9ff11f2e7c68b54f46155c887a5a1","committed_date":"2011-08-18T13:06:27-07:00","authored_date":"2011-08-18T13:06:27-07:00","message":"Regenerated to master@be19793759e71ac355f0ce2d60875f90e1355e19.","tree":"62c404fef8c24360795b74a6cbf17a20bcbf9704","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"2bfdfae0156708575fd656ece737435ffb0bb948"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/170cb19167779bdee5dc06cde2f4f6f2f2c7a5bd","id":"170cb19167779bdee5dc06cde2f4f6f2f2c7a5bd","committed_date":"2011-08-18T13:05:56-07:00","authored_date":"2011-08-18T13:05:56-07:00","message":"Regenerated to master@5ed9bf737383c4338b81974fe9f347c71afbe298.","tree":"9b6fb94063fd8c0a247b55c84cf1122c9108e8af","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9919d4b9eb1d2718e70a331bb63c77a8cbc3d95b"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/0b112a67e44aa2777d53f3911a8eb900fea27706","id":"0b112a67e44aa2777d53f3911a8eb900fea27706","committed_date":"2011-08-18T13:05:25-07:00","authored_date":"2011-08-18T13:05:25-07:00","message":"Regenerated to master@be6ac09388ea7b360bc4a71a91f2633ce931276b.","tree":"0573c9fffcc251a0dac03a7802542a02712f43b4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"4452d8f121a85a2810409cd87965ec8d4e1ed728"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/9919d4b9eb1d2718e70a331bb63c77a8cbc3d95b","id":"9919d4b9eb1d2718e70a331bb63c77a8cbc3d95b","committed_date":"2011-08-18T13:05:17-07:00","authored_date":"2011-08-18T13:05:17-07:00","message":"Regenerated to master@9021f373b0ad17def7eb7de03954cc68710945a5.","tree":"a79410b99ec16f8de250815b8a29d466ccd898ff","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"3aa8429a97a40c44c789006008568db35b9a4a18"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ec44714039cf1687d3e78671129ed9fddfbea1c3","id":"ec44714039cf1687d3e78671129ed9fddfbea1c3","committed_date":"2011-08-18T13:05:01-07:00","authored_date":"2011-08-18T13:05:01-07:00","message":"Regenerated to master@7c6cb75cb7a1712c5dcc3e6198815983bd904025.","tree":"a3487b1b439fc6e669e3ec4c095ec2fa21f49db1","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"bdb3ca90891ab29ad93442449d32a2ea66c3f097"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/3aa8429a97a40c44c789006008568db35b9a4a18","id":"3aa8429a97a40c44c789006008568db35b9a4a18","committed_date":"2011-08-16T15:32:29-07:00","authored_date":"2011-08-16T15:32:29-07:00","message":"Regenerated to master@be19793759e71ac355f0ce2d60875f90e1355e19.","tree":"4406db2633866b87e64d2ef3741c87c53a4cef05","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"e029937f9ca2f98cb1d2fa73f3ad55635c9f4ab5"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/587166b8a1bcf2fa060f51a0d46e9f09bb3fdae1","id":"587166b8a1bcf2fa060f51a0d46e9f09bb3fdae1","committed_date":"2011-08-16T15:31:58-07:00","authored_date":"2011-08-16T15:31:58-07:00","message":"Regenerated to master@5ed9bf737383c4338b81974fe9f347c71afbe298.","tree":"a957560e977674b11bc437081b5564fd610179fe","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"b2c1c3b0d2de6263683068fa857ea62f24021d71"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f17e016dc993b09bd258dfee95d302cb4d364aa0","id":"f17e016dc993b09bd258dfee95d302cb4d364aa0","committed_date":"2011-08-11T07:30:55-07:00","authored_date":"2011-08-11T07:30:55-07:00","message":"Regenerated to master@be6ac09388ea7b360bc4a71a91f2633ce931276b.","tree":"f095e295083b4ff29543d9e40585d4051ec9fd5d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"5162c4bc66efd03fc1b4191390e8d7778287978c"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/b2c1c3b0d2de6263683068fa857ea62f24021d71","id":"b2c1c3b0d2de6263683068fa857ea62f24021d71","committed_date":"2011-08-11T07:30:47-07:00","authored_date":"2011-08-11T07:30:47-07:00","message":"Regenerated to master@9021f373b0ad17def7eb7de03954cc68710945a5.","tree":"0bc07339aa56abb528d954fe3924bdc3029fdd04","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"205fe69e3426c84256c58211f5ea7b1c38127d9f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f5bfc136f50fc1fef3c86c72b6ba0f99a5492c0e","id":"f5bfc136f50fc1fef3c86c72b6ba0f99a5492c0e","committed_date":"2011-08-11T07:30:21-07:00","authored_date":"2011-08-11T07:30:21-07:00","message":"Regenerated to master@4a1bbcfa9d946db7c719e95af4d4911d96fe1551.","tree":"e0539f4cfd8272e0726c5f5c353bd8f4e7be1bae","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"041fae6b20b4a40e94109f633fa0ca8cda004029"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/205fe69e3426c84256c58211f5ea7b1c38127d9f","id":"205fe69e3426c84256c58211f5ea7b1c38127d9f","committed_date":"2011-08-11T07:30:03-07:00","authored_date":"2011-08-11T07:30:03-07:00","message":"Regenerated to master@6379e79a11f0dbdc8ad98201e8de03634811a03b.","tree":"0db5d904b66d909c11f9d12923f50ad02fec3b59","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"80bf5ca3cd41d53aeb20df02b5b9cbb6f0cc9318"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/229133b961d3580f26a7d7fee3ce13dd0183c168","id":"229133b961d3580f26a7d7fee3ce13dd0183c168","committed_date":"2011-08-11T07:29:39-07:00","authored_date":"2011-08-11T07:29:39-07:00","message":"Regenerated to master@9d279e279dfd06b3d5a85ebc65bac701ab027a2a.","tree":"70f8faacfc27ea2d4d25817956c1acdedbae4140","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"83ec12cd8d99f7799b78d5d6183c18965dd8c8a0"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/80bf5ca3cd41d53aeb20df02b5b9cbb6f0cc9318","id":"80bf5ca3cd41d53aeb20df02b5b9cbb6f0cc9318","committed_date":"2011-08-11T07:29:31-07:00","authored_date":"2011-08-11T07:29:31-07:00","message":"Regenerated to master@86b044f91d9a16b221acfdc2f79593fd857e256f.","tree":"0901c65d8ea594e8272e098798c4a3e241da0b85","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6d9c66cf0def5fa6cb5b1b45f9308077e9354ac9"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/83ec12cd8d99f7799b78d5d6183c18965dd8c8a0","id":"83ec12cd8d99f7799b78d5d6183c18965dd8c8a0","committed_date":"2011-08-11T07:29:22-07:00","authored_date":"2011-08-11T07:29:22-07:00","message":"Regenerated to master@9653614dc45f297c0d913b5804f153696dc8083f.","tree":"70f8faacfc27ea2d4d25817956c1acdedbae4140","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,Makefile,75d9a1e41e76c3b924420d48b56dc756 b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,Makefile,75d9a1e41e76c3b924420d48b56dc756 index 57d90d1..eb2d090 100644 --- a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,Makefile,75d9a1e41e76c3b924420d48b56dc756 +++ b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,Makefile,75d9a1e41e76c3b924420d48b56dc756 @@ -1,14 +1,17 @@ status: 200 -content-length: 17134 +x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/commits/list/JNRowe/misc-overlay/master/Makefile -set-cookie: _gh_sess=BAh7BzoRbG9jYWxlX2d1ZXNzMCIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--719def2ab2d99283383e374327fcdbb716c45c12; +-content-encoding: gzip +set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly -x-runtime: 372ms -server: nginx/0.7.67 connection: keep-alive -etag: "306a5ce3acb78b41e3e36ad181c44754" +content-length: 19364 +server: nginx/1.0.4 +x-runtime: 368ms +x-ratelimit-limit: 60 +etag: "9b36e2e64adcddc23c36dbefbfaf7adf" cache-control: private, max-age=0, must-revalidate -date: Sun, 22 May 2011 20:53:40 GMT +date: Thu, 25 Aug 2011 06:48:47 GMT content-type: application/json; charset=utf-8 -{"commits":[{"parents":[{"id":"8f24d1b91d885b3ce52dd8e7cc5e18b369c5867e"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/41bcd985139189763256a8c82b8f0fcbe150eb03","id":"41bcd985139189763256a8c82b8f0fcbe150eb03","committed_date":"2011-04-29T21:17:59-07:00","authored_date":"2011-04-29T21:17:59-07:00","message":"Revert \"Write org-mode compatible removal reminders.\"\n\nThis reverts commit 4343c1c3ee6a353ed51ea863a8b213a05d5f5b80.\n\nConflicts:\n\n\tMakefile\n\tsupport/gen_removal.py","tree":"4ed8c0153f80d68fa68e434e6e12d8e2eec76281","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"4343c1c3ee6a353ed51ea863a8b213a05d5f5b80"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/90ecd07cc7f08d43f441d44c020bc91a49f0b9c6","id":"90ecd07cc7f08d43f441d44c020bc91a49f0b9c6","committed_date":"2011-03-07T00:36:47-08:00","authored_date":"2011-03-07T00:02:09-08:00","message":"Switched to org-mode syntax for stabilisation reminders.","tree":"92c0eaeb7b29036393c05c3ee3142d879067e865","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f9be28146dce6fd69e36d7dd72b8ecf5bc9bbd1f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/4343c1c3ee6a353ed51ea863a8b213a05d5f5b80","id":"4343c1c3ee6a353ed51ea863a8b213a05d5f5b80","committed_date":"2011-03-07T00:36:25-08:00","authored_date":"2011-03-07T00:01:41-08:00","message":"Write org-mode compatible removal reminders.\n\nNo longer using remind for this task.","tree":"f7f12bd835b4ae09e6bfc82bf04f8115e628aa85","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"639727a4d533288fdadcd68b8bde2dc84c26812c"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7fe50fe7294204120a23c4199d575313d89cc1dd","id":"7fe50fe7294204120a23c4199d575313d89cc1dd","committed_date":"2011-02-10T14:17:41-08:00","authored_date":"2011-02-10T14:17:41-08:00","message":"Small formatting and indentation fix.","tree":"02ad5b7e568f63ee9fe7d4244755451035bda02b","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9e60846c4692cccb38361f5eb93347ed1ad782bc"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/639727a4d533288fdadcd68b8bde2dc84c26812c","id":"639727a4d533288fdadcd68b8bde2dc84c26812c","committed_date":"2011-02-10T14:17:16-08:00","authored_date":"2011-02-10T14:17:16-08:00","message":"Don't fail Manifest generation with unset SIGN_KEY.","tree":"17251ab93e3d9d7f1a204c9387495a4658418257","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"0d519f8110843158a21d14c01d852b2ceef9f21f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/9e60846c4692cccb38361f5eb93347ed1ad782bc","id":"9e60846c4692cccb38361f5eb93347ed1ad782bc","committed_date":"2011-02-10T14:15:32-08:00","authored_date":"2011-02-10T14:15:32-08:00","message":"Don't regenerate categories list for packages.","tree":"19153dc4562525730e67753b3c3dd3149b5376b6","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"50ab7577069d92f97634aff0a491a8a6fba11d71"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/fa7796f65f38ad5e6587f1e6a85fd03f53d14023","id":"fa7796f65f38ad5e6587f1e6a85fd03f53d14023","committed_date":"2011-02-04T03:12:25-08:00","authored_date":"2011-02-04T03:12:25-08:00","message":"Generate doc/thanks.rst from README.rst.\n\nReally shouldn't be manually maintaining lists.","tree":"25c92e68f1083444c6d7db6dbe597bea027aef8d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"2f3b0f35fdf24af9246f237843240915a18e9aa3"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f55f382d4f395d0d0e807c77495776224c0e1a23","id":"f55f382d4f395d0d0e807c77495776224c0e1a23","committed_date":"2011-02-02T09:31:51-08:00","authored_date":"2011-02-02T09:19:13-08:00","message":"Fixed categories generation, should overwrite and not append.","tree":"7228d33c816d69d5e9a5cbc63c421366e3304319","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"a99c6a599adbce66f69437515182ec205ebe1123"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/053c83cd2413d36b25413279eb1065c89e3e048d","id":"053c83cd2413d36b25413279eb1065c89e3e048d","committed_date":"2011-02-01T05:35:07-08:00","authored_date":"2011-02-01T05:35:07-08:00","message":"Moved news signing comment out of rule, it shouldn't be displayed.","tree":"860eadb5d60fe8f30553b72da214fd46601c6b05","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"074eedb9c02842a0196b4b9ad3ee386bc6182a84"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/a99c6a599adbce66f69437515182ec205ebe1123","id":"a99c6a599adbce66f69437515182ec205ebe1123","committed_date":"2011-02-01T05:29:13-08:00","authored_date":"2011-02-01T05:29:13-08:00","message":"Added rule to re-generate HTML documentation.","tree":"9e9d6df5fa81a759adcd6b8fc2197baa8fa75938","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"cb2234e17ebf226097321873cbb52d3ab924cf52"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/e76c3c8c8bce857ae0084b413e0c6e9b73c613dd","id":"e76c3c8c8bce857ae0084b413e0c6e9b73c613dd","committed_date":"2011-01-29T23:49:11-08:00","authored_date":"2011-01-29T23:49:11-08:00","message":"Validate reST syntax with check rule.","tree":"90fede79cf4777fc9f0deb7a47f7696d5c0afbbd","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"764c5aa41de29e22ff23c45c7278234ca1802795"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/cb2234e17ebf226097321873cbb52d3ab924cf52","id":"cb2234e17ebf226097321873cbb52d3ab924cf52","committed_date":"2011-01-29T23:46:05-08:00","authored_date":"2011-01-29T23:46:05-08:00","message":"No need to loop for profiles/categories generation.","tree":"92ed35edc1c4ca1072204a3b60087c3c2f4b5523","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"19838ee7086f5517bb5722986bca825e803d6304"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/764c5aa41de29e22ff23c45c7278234ca1802795","id":"764c5aa41de29e22ff23c45c7278234ca1802795","committed_date":"2011-01-29T23:45:40-08:00","authored_date":"2011-01-29T23:45:40-08:00","message":"Delete stale signatures, if SIGN_KEY is not set.","tree":"7f3546c7fbbda89b5e73c76b12c2b2d69e63530a","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"7dbadeef727224b9d72bf9373bbc15fba4ccb7ed"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f81e2b6b85169e487ec462864ea0d27ca25fefdd","id":"f81e2b6b85169e487ec462864ea0d27ca25fefdd","committed_date":"2011-01-12T05:38:07-08:00","authored_date":"2011-01-12T05:38:06-08:00","message":"Updated cupage-check rule to check for watch file existence.","tree":"56e1a14e263c3fac5f199abcb9966300f7cf106e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d1f839991b272875e0c5589bfdb3dd75668a72f2"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7dbadeef727224b9d72bf9373bbc15fba4ccb7ed","id":"7dbadeef727224b9d72bf9373bbc15fba4ccb7ed","committed_date":"2011-01-12T05:37:43-08:00","authored_date":"2011-01-12T05:37:43-08:00","message":"Generate cupage.conf from watch files.","tree":"c0e404e5a8ebf36bcef6c580622c2b645820533c","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"af5f536666b22b864d1012b7b02258cf745d89ae"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/4f01f61e35439c1458a01e389f1c8dbe3496e3bf","id":"4f01f61e35439c1458a01e389f1c8dbe3496e3bf","committed_date":"2010-12-06T03:39:29-08:00","authored_date":"2010-12-06T03:39:29-08:00","message":"Manifests depend on ChangeLogs and metadata.xml.","tree":"b999161e481624d61f446d7fa4fdc32db6def3c3","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6b58cfa8600da5ad54b382067ad7c6e270845ea0"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/af5f536666b22b864d1012b7b02258cf745d89ae","id":"af5f536666b22b864d1012b7b02258cf745d89ae","committed_date":"2010-12-06T03:37:30-08:00","authored_date":"2010-12-06T03:37:30-08:00","message":"Read repository name from profiles/repo_name.","tree":"99244aa4b9404b64af0dea365cc54ad809cf9b35","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"60ba3e0f33576cebbfcea06307dabd7394164541"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6adf9d861925c5f66c0c1883e6c70c423bd409d4","id":"6adf9d861925c5f66c0c1883e6c70c423bd409d4","committed_date":"2010-12-06T03:26:08-08:00","authored_date":"2010-12-06T03:26:08-08:00","message":"Switched to egencache for use.local.desc generation.","tree":"a29b65e2faaf6481fb2d5a6388e890b3524836e1","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"31792887bcee17be39401fa59f681c243a2a2519"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/290fec4694bddde6ca54584cfd26c04b69e3dd6e","id":"290fec4694bddde6ca54584cfd26c04b69e3dd6e","committed_date":"2010-11-01T09:20:53-07:00","authored_date":"2010-11-01T09:20:53-07:00","message":"Fixed generation of news file signatures.","tree":"34c9f3041b226619376375f3e4b4444372ca0642","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"cc66dc063bd13810a3f8fb093a1080052e426f82"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/128ac9109ac751a569588ae056dffa336e21a1d2","id":"128ac9109ac751a569588ae056dffa336e21a1d2","committed_date":"2010-08-24T21:49:06-07:00","authored_date":"2010-08-24T21:49:06-07:00","message":"Regenerate removal.remind if gen_removal.py changes.","tree":"cf67a412f9596e7712f55cfe91eea755c0f61a88","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"826fee37fa53cf2073d27424913291d2bdb11b78"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7434a9050a915925004bf7b4467026525d55bfe7","id":"7434a9050a915925004bf7b4467026525d55bfe7","committed_date":"2010-06-17T23:46:20-07:00","authored_date":"2010-06-17T23:30:53-07:00","message":"Added layman XML validation checks.","tree":"999127b0d3eaf319bcc6b927c44c51bf5706193d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6d38719b62decff9bbae5596a26fbfb5188cc629"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ffce8932c08076b1025bdc4c9fb77ac14ba7894c","id":"ffce8932c08076b1025bdc4c9fb77ac14ba7894c","committed_date":"2010-04-19T02:07:06-07:00","authored_date":"2010-04-19T02:07:06-07:00","message":"Use --strict with rst2html conversions.","tree":"7b4938d419aceee60d2d010b5554af168c17e897","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"42118bbee7a86a310da541bc13e629c9e91bb709"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6ea418cd008b59f8176477fbff773ac1bc5fbaad","id":"6ea418cd008b59f8176477fbff773ac1bc5fbaad","committed_date":"2010-03-30T08:25:12-07:00","authored_date":"2010-03-30T08:22:33-07:00","message":"Added tool to generate package removal reminders.\n\nThe display of removal reminders is called with the default make target. The\npackage.mask file is updated to use gen_removal.py compliant syntax.","tree":"c7eefd7905c26b8c952cbd2dd2a4e0c74aaf6e15","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8f7c8303f62595e425a352218116f5ae35e809c2"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/42118bbee7a86a310da541bc13e629c9e91bb709","id":"42118bbee7a86a310da541bc13e629c9e91bb709","committed_date":"2010-03-30T05:59:00-07:00","authored_date":"2010-03-30T05:59:00-07:00","message":"Warn if PORTAGE_GPG_KEY is not set.","tree":"87ee1dafb47c4eb1aed0a4760d282ccae9aee7cb","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f1efe654295570a296d5b657e6e163db7279ee06"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/8f7c8303f62595e425a352218116f5ae35e809c2","id":"8f7c8303f62595e425a352218116f5ae35e809c2","committed_date":"2010-03-30T05:55:42-07:00","authored_date":"2010-03-30T05:55:42-07:00","message":"Added rule to sign news files.","tree":"c1232c5b6ace06f681f16319fdb67dc5de3f4977","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"e973103cd372c22f7b5cc9d6b7d4ead3b43babe4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f2ce27bd70042cd6266070a3a2d439f1c187c56a","id":"f2ce27bd70042cd6266070a3a2d439f1c187c56a","committed_date":"2009-11-11T22:11:39-08:00","authored_date":"2009-11-11T21:18:41-08:00","message":"Added rule to check for cupage.conf entries.","tree":"93765109726896a83fe424b0ca8c9c39ebea61ca","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"edb40795241f945055e368c27295248124bfcec5"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/22071b1b529d3abfefd6b4aeb573789aea2ad531","id":"22071b1b529d3abfefd6b4aeb573789aea2ad531","committed_date":"2009-10-06T05:35:30-07:00","authored_date":"2009-10-06T05:35:30-07:00","message":"List stablisation reminders in default make target.","tree":"15d8e6e263955e8f597b597243294fe1fb9fb6f2","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"58aadc74c7f6f1e9f7b89e86924cc005096696da"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/acda9182a87201afb828ae7f00da6657507f0556","id":"acda9182a87201afb828ae7f00da6657507f0556","committed_date":"2009-10-06T05:31:55-07:00","authored_date":"2009-10-06T05:27:51-07:00","message":"Added reminder file for stabilisation.","tree":"1dbcebdaaaade95b4f3ae67d5eee38c4c4b65321","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d00f6fece38fa7e2effe0865856ac20e4e3698c4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/9ddef3d603782269a91dfa1fb36a4a1e5b6a956b","id":"9ddef3d603782269a91dfa1fb36a4a1e5b6a956b","committed_date":"2009-09-21T19:49:02-07:00","authored_date":"2009-09-21T19:46:16-07:00","message":"[583: Fixed] Added script to generate profiles/use.local.desc files.","tree":"8997af31834c449576b5e3c734349a6b9428c0a0","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8315eb308b260edce84ff2546d3ed5237888b2e4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/08432266614581afb2a93fa9a69a3b6f9411b076","id":"08432266614581afb2a93fa9a69a3b6f9411b076","committed_date":"2009-05-26T14:59:48-07:00","authored_date":"2009-05-26T14:59:18-07:00","message":"Fixed quoting in gnupg key check.","tree":"96d960aca7a65a6f327b09d5304c33bbc5dba9d0","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"aaee60ccf8cd8f50e8445e40a51ab90df9269178"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/e2702ebdddb7ef5291fcba44d62a1f0f12e6223f","id":"e2702ebdddb7ef5291fcba44d62a1f0f12e6223f","committed_date":"2009-05-24T00:14:26-07:00","authored_date":"2009-05-24T00:14:26-07:00","message":"Added Makefile with simple repo maintenance rules.","tree":"52e9206f8f4c7801ba59b5d81945ab54922761de","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}}]} \ No newline at end of file +{"commits":[{"parents":[{"id":"eab53d5966b5473386cbb888b1497b2f7c63e496"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/fc12b924d34dc38c8ce76d27a866221faa88cb72","id":"fc12b924d34dc38c8ce76d27a866221faa88cb72","committed_date":"2011-06-17T00:39:08-07:00","authored_date":"2011-06-17T00:37:47-07:00","message":"Added initial cake conversion.","tree":"54d3bce5ce074a12a033ee0a22a70cf87a391817","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"fdb9c0e5ec6c0a93ab3c692622146c41fc51b495"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/eab53d5966b5473386cbb888b1497b2f7c63e496","id":"eab53d5966b5473386cbb888b1497b2f7c63e496","committed_date":"2011-06-16T23:15:09-07:00","authored_date":"2011-06-16T23:15:09-07:00","message":"Fixed Manifest generation rule for make 3.82.","tree":"c13c9fd0e7311ed50b4ec325571ac2510338226a","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"3458f20fa446e143dbbd676b8088e0ded4dcaa64"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/a4d178e71444c5ba4f0d2c172e0840346335ace0","id":"a4d178e71444c5ba4f0d2c172e0840346335ace0","committed_date":"2011-06-02T13:16:55-07:00","authored_date":"2011-06-02T13:16:55-07:00","message":"Revert \"Revert \"Write org-mode compatible removal reminders.\"\"\n\nThis reverts commit 41bcd985139189763256a8c82b8f0fcbe150eb03.","tree":"38a0f798931cdcb4d41807fef61cc873fb30231b","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6563182337987d694a94afd5a7e5d99bde44d68d"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/14723140d18fdbb0a7e577d441bee09bcb578f28","id":"14723140d18fdbb0a7e577d441bee09bcb578f28","committed_date":"2011-06-02T12:42:28-07:00","authored_date":"2011-06-02T12:42:28-07:00","message":"Fixed sorting in profiles/categories generation.","tree":"3a9ebf3081d1aeacc8b22d4a4c0728d4ea6e3215","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8f24d1b91d885b3ce52dd8e7cc5e18b369c5867e"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/41bcd985139189763256a8c82b8f0fcbe150eb03","id":"41bcd985139189763256a8c82b8f0fcbe150eb03","committed_date":"2011-04-29T21:17:59-07:00","authored_date":"2011-04-29T21:17:59-07:00","message":"Revert \"Write org-mode compatible removal reminders.\"\n\nThis reverts commit 4343c1c3ee6a353ed51ea863a8b213a05d5f5b80.\n\nConflicts:\n\n\tMakefile\n\tsupport/gen_removal.py","tree":"4ed8c0153f80d68fa68e434e6e12d8e2eec76281","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"4343c1c3ee6a353ed51ea863a8b213a05d5f5b80"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/90ecd07cc7f08d43f441d44c020bc91a49f0b9c6","id":"90ecd07cc7f08d43f441d44c020bc91a49f0b9c6","committed_date":"2011-03-07T00:36:47-08:00","authored_date":"2011-03-07T00:02:09-08:00","message":"Switched to org-mode syntax for stabilisation reminders.","tree":"92c0eaeb7b29036393c05c3ee3142d879067e865","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f9be28146dce6fd69e36d7dd72b8ecf5bc9bbd1f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/4343c1c3ee6a353ed51ea863a8b213a05d5f5b80","id":"4343c1c3ee6a353ed51ea863a8b213a05d5f5b80","committed_date":"2011-03-07T00:36:25-08:00","authored_date":"2011-03-07T00:01:41-08:00","message":"Write org-mode compatible removal reminders.\n\nNo longer using remind for this task.","tree":"f7f12bd835b4ae09e6bfc82bf04f8115e628aa85","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"639727a4d533288fdadcd68b8bde2dc84c26812c"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7fe50fe7294204120a23c4199d575313d89cc1dd","id":"7fe50fe7294204120a23c4199d575313d89cc1dd","committed_date":"2011-02-10T14:17:41-08:00","authored_date":"2011-02-10T14:17:41-08:00","message":"Small formatting and indentation fix.","tree":"02ad5b7e568f63ee9fe7d4244755451035bda02b","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9e60846c4692cccb38361f5eb93347ed1ad782bc"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/639727a4d533288fdadcd68b8bde2dc84c26812c","id":"639727a4d533288fdadcd68b8bde2dc84c26812c","committed_date":"2011-02-10T14:17:16-08:00","authored_date":"2011-02-10T14:17:16-08:00","message":"Don't fail Manifest generation with unset SIGN_KEY.","tree":"17251ab93e3d9d7f1a204c9387495a4658418257","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"0d519f8110843158a21d14c01d852b2ceef9f21f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/9e60846c4692cccb38361f5eb93347ed1ad782bc","id":"9e60846c4692cccb38361f5eb93347ed1ad782bc","committed_date":"2011-02-10T14:15:32-08:00","authored_date":"2011-02-10T14:15:32-08:00","message":"Don't regenerate categories list for packages.","tree":"19153dc4562525730e67753b3c3dd3149b5376b6","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"50ab7577069d92f97634aff0a491a8a6fba11d71"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/fa7796f65f38ad5e6587f1e6a85fd03f53d14023","id":"fa7796f65f38ad5e6587f1e6a85fd03f53d14023","committed_date":"2011-02-04T03:12:25-08:00","authored_date":"2011-02-04T03:12:25-08:00","message":"Generate doc/thanks.rst from README.rst.\n\nReally shouldn't be manually maintaining lists.","tree":"25c92e68f1083444c6d7db6dbe597bea027aef8d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"2f3b0f35fdf24af9246f237843240915a18e9aa3"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f55f382d4f395d0d0e807c77495776224c0e1a23","id":"f55f382d4f395d0d0e807c77495776224c0e1a23","committed_date":"2011-02-02T09:31:51-08:00","authored_date":"2011-02-02T09:19:13-08:00","message":"Fixed categories generation, should overwrite and not append.","tree":"7228d33c816d69d5e9a5cbc63c421366e3304319","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"a99c6a599adbce66f69437515182ec205ebe1123"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/053c83cd2413d36b25413279eb1065c89e3e048d","id":"053c83cd2413d36b25413279eb1065c89e3e048d","committed_date":"2011-02-01T05:35:07-08:00","authored_date":"2011-02-01T05:35:07-08:00","message":"Moved news signing comment out of rule, it shouldn't be displayed.","tree":"860eadb5d60fe8f30553b72da214fd46601c6b05","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"074eedb9c02842a0196b4b9ad3ee386bc6182a84"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/a99c6a599adbce66f69437515182ec205ebe1123","id":"a99c6a599adbce66f69437515182ec205ebe1123","committed_date":"2011-02-01T05:29:13-08:00","authored_date":"2011-02-01T05:29:13-08:00","message":"Added rule to re-generate HTML documentation.","tree":"9e9d6df5fa81a759adcd6b8fc2197baa8fa75938","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"cb2234e17ebf226097321873cbb52d3ab924cf52"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/e76c3c8c8bce857ae0084b413e0c6e9b73c613dd","id":"e76c3c8c8bce857ae0084b413e0c6e9b73c613dd","committed_date":"2011-01-29T23:49:11-08:00","authored_date":"2011-01-29T23:49:11-08:00","message":"Validate reST syntax with check rule.","tree":"90fede79cf4777fc9f0deb7a47f7696d5c0afbbd","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"764c5aa41de29e22ff23c45c7278234ca1802795"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/cb2234e17ebf226097321873cbb52d3ab924cf52","id":"cb2234e17ebf226097321873cbb52d3ab924cf52","committed_date":"2011-01-29T23:46:05-08:00","authored_date":"2011-01-29T23:46:05-08:00","message":"No need to loop for profiles/categories generation.","tree":"92ed35edc1c4ca1072204a3b60087c3c2f4b5523","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"19838ee7086f5517bb5722986bca825e803d6304"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/764c5aa41de29e22ff23c45c7278234ca1802795","id":"764c5aa41de29e22ff23c45c7278234ca1802795","committed_date":"2011-01-29T23:45:40-08:00","authored_date":"2011-01-29T23:45:40-08:00","message":"Delete stale signatures, if SIGN_KEY is not set.","tree":"7f3546c7fbbda89b5e73c76b12c2b2d69e63530a","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"7dbadeef727224b9d72bf9373bbc15fba4ccb7ed"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f81e2b6b85169e487ec462864ea0d27ca25fefdd","id":"f81e2b6b85169e487ec462864ea0d27ca25fefdd","committed_date":"2011-01-12T05:38:07-08:00","authored_date":"2011-01-12T05:38:06-08:00","message":"Updated cupage-check rule to check for watch file existence.","tree":"56e1a14e263c3fac5f199abcb9966300f7cf106e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d1f839991b272875e0c5589bfdb3dd75668a72f2"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7dbadeef727224b9d72bf9373bbc15fba4ccb7ed","id":"7dbadeef727224b9d72bf9373bbc15fba4ccb7ed","committed_date":"2011-01-12T05:37:43-08:00","authored_date":"2011-01-12T05:37:43-08:00","message":"Generate cupage.conf from watch files.","tree":"c0e404e5a8ebf36bcef6c580622c2b645820533c","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"af5f536666b22b864d1012b7b02258cf745d89ae"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/4f01f61e35439c1458a01e389f1c8dbe3496e3bf","id":"4f01f61e35439c1458a01e389f1c8dbe3496e3bf","committed_date":"2010-12-06T03:39:29-08:00","authored_date":"2010-12-06T03:39:29-08:00","message":"Manifests depend on ChangeLogs and metadata.xml.","tree":"b999161e481624d61f446d7fa4fdc32db6def3c3","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6b58cfa8600da5ad54b382067ad7c6e270845ea0"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/af5f536666b22b864d1012b7b02258cf745d89ae","id":"af5f536666b22b864d1012b7b02258cf745d89ae","committed_date":"2010-12-06T03:37:30-08:00","authored_date":"2010-12-06T03:37:30-08:00","message":"Read repository name from profiles/repo_name.","tree":"99244aa4b9404b64af0dea365cc54ad809cf9b35","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"60ba3e0f33576cebbfcea06307dabd7394164541"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6adf9d861925c5f66c0c1883e6c70c423bd409d4","id":"6adf9d861925c5f66c0c1883e6c70c423bd409d4","committed_date":"2010-12-06T03:26:08-08:00","authored_date":"2010-12-06T03:26:08-08:00","message":"Switched to egencache for use.local.desc generation.","tree":"a29b65e2faaf6481fb2d5a6388e890b3524836e1","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"31792887bcee17be39401fa59f681c243a2a2519"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/290fec4694bddde6ca54584cfd26c04b69e3dd6e","id":"290fec4694bddde6ca54584cfd26c04b69e3dd6e","committed_date":"2010-11-01T09:20:53-07:00","authored_date":"2010-11-01T09:20:53-07:00","message":"Fixed generation of news file signatures.","tree":"34c9f3041b226619376375f3e4b4444372ca0642","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"cc66dc063bd13810a3f8fb093a1080052e426f82"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/128ac9109ac751a569588ae056dffa336e21a1d2","id":"128ac9109ac751a569588ae056dffa336e21a1d2","committed_date":"2010-08-24T21:49:06-07:00","authored_date":"2010-08-24T21:49:06-07:00","message":"Regenerate removal.remind if gen_removal.py changes.","tree":"cf67a412f9596e7712f55cfe91eea755c0f61a88","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"826fee37fa53cf2073d27424913291d2bdb11b78"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7434a9050a915925004bf7b4467026525d55bfe7","id":"7434a9050a915925004bf7b4467026525d55bfe7","committed_date":"2010-06-17T23:46:20-07:00","authored_date":"2010-06-17T23:30:53-07:00","message":"Added layman XML validation checks.","tree":"999127b0d3eaf319bcc6b927c44c51bf5706193d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6d38719b62decff9bbae5596a26fbfb5188cc629"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ffce8932c08076b1025bdc4c9fb77ac14ba7894c","id":"ffce8932c08076b1025bdc4c9fb77ac14ba7894c","committed_date":"2010-04-19T02:07:06-07:00","authored_date":"2010-04-19T02:07:06-07:00","message":"Use --strict with rst2html conversions.","tree":"7b4938d419aceee60d2d010b5554af168c17e897","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"42118bbee7a86a310da541bc13e629c9e91bb709"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6ea418cd008b59f8176477fbff773ac1bc5fbaad","id":"6ea418cd008b59f8176477fbff773ac1bc5fbaad","committed_date":"2010-03-30T08:25:12-07:00","authored_date":"2010-03-30T08:22:33-07:00","message":"Added tool to generate package removal reminders.\n\nThe display of removal reminders is called with the default make target. The\npackage.mask file is updated to use gen_removal.py compliant syntax.","tree":"c7eefd7905c26b8c952cbd2dd2a4e0c74aaf6e15","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8f7c8303f62595e425a352218116f5ae35e809c2"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/42118bbee7a86a310da541bc13e629c9e91bb709","id":"42118bbee7a86a310da541bc13e629c9e91bb709","committed_date":"2010-03-30T05:59:00-07:00","authored_date":"2010-03-30T05:59:00-07:00","message":"Warn if PORTAGE_GPG_KEY is not set.","tree":"87ee1dafb47c4eb1aed0a4760d282ccae9aee7cb","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f1efe654295570a296d5b657e6e163db7279ee06"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/8f7c8303f62595e425a352218116f5ae35e809c2","id":"8f7c8303f62595e425a352218116f5ae35e809c2","committed_date":"2010-03-30T05:55:42-07:00","authored_date":"2010-03-30T05:55:42-07:00","message":"Added rule to sign news files.","tree":"c1232c5b6ace06f681f16319fdb67dc5de3f4977","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"e973103cd372c22f7b5cc9d6b7d4ead3b43babe4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f2ce27bd70042cd6266070a3a2d439f1c187c56a","id":"f2ce27bd70042cd6266070a3a2d439f1c187c56a","committed_date":"2009-11-11T22:11:39-08:00","authored_date":"2009-11-11T21:18:41-08:00","message":"Added rule to check for cupage.conf entries.","tree":"93765109726896a83fe424b0ca8c9c39ebea61ca","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"edb40795241f945055e368c27295248124bfcec5"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/22071b1b529d3abfefd6b4aeb573789aea2ad531","id":"22071b1b529d3abfefd6b4aeb573789aea2ad531","committed_date":"2009-10-06T05:35:30-07:00","authored_date":"2009-10-06T05:35:30-07:00","message":"List stablisation reminders in default make target.","tree":"15d8e6e263955e8f597b597243294fe1fb9fb6f2","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"58aadc74c7f6f1e9f7b89e86924cc005096696da"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/acda9182a87201afb828ae7f00da6657507f0556","id":"acda9182a87201afb828ae7f00da6657507f0556","committed_date":"2009-10-06T05:31:55-07:00","authored_date":"2009-10-06T05:27:51-07:00","message":"Added reminder file for stabilisation.","tree":"1dbcebdaaaade95b4f3ae67d5eee38c4c4b65321","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d00f6fece38fa7e2effe0865856ac20e4e3698c4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/9ddef3d603782269a91dfa1fb36a4a1e5b6a956b","id":"9ddef3d603782269a91dfa1fb36a4a1e5b6a956b","committed_date":"2009-09-21T19:49:02-07:00","authored_date":"2009-09-21T19:46:16-07:00","message":"[583: Fixed] Added script to generate profiles/use.local.desc files.","tree":"8997af31834c449576b5e3c734349a6b9428c0a0","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8315eb308b260edce84ff2546d3ed5237888b2e4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/08432266614581afb2a93fa9a69a3b6f9411b076","id":"08432266614581afb2a93fa9a69a3b6f9411b076","committed_date":"2009-05-26T14:59:48-07:00","authored_date":"2009-05-26T14:59:18-07:00","message":"Fixed quoting in gnupg key check.","tree":"96d960aca7a65a6f327b09d5304c33bbc5dba9d0","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"aaee60ccf8cd8f50e8445e40a51ab90df9269178"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/e2702ebdddb7ef5291fcba44d62a1f0f12e6223f","id":"e2702ebdddb7ef5291fcba44d62a1f0f12e6223f","committed_date":"2009-05-24T00:14:26-07:00","authored_date":"2009-05-24T00:14:26-07:00","message":"Added Makefile with simple repo maintenance rules.","tree":"52e9206f8f4c7801ba59b5d81945ab54922761de","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,bfb4f990e48c87dab73d988a81318d69 b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,bfb4f990e48c87dab73d988a81318d69 index 4975802..33b6332 100644 --- a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,bfb4f990e48c87dab73d988a81318d69 +++ b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,bfb4f990e48c87dab73d988a81318d69 @@ -1,14 +1,17 @@ status: 200 -content-length: 22233 +x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/commits/list/JNRowe/misc-overlay/master -set-cookie: _gh_sess=BAh7BzoRbG9jYWxlX2d1ZXNzMCIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--719def2ab2d99283383e374327fcdbb716c45c12; +-content-encoding: gzip +set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly -x-runtime: 149ms -server: nginx/0.7.67 connection: keep-alive -etag: "0f46540a52ac460fe1eba437c8ebd2d4" +content-length: 23425 +server: nginx/1.0.4 +x-runtime: 113ms +x-ratelimit-limit: 60 +etag: "c97cc3a646b424d1c6222c9540761a96" cache-control: private, max-age=0, must-revalidate -date: Sun, 22 May 2011 20:47:57 GMT +date: Mon, 15 Aug 2011 20:00:19 GMT content-type: application/json; charset=utf-8 -{"commits":[{"parents":[{"id":"4faa329f56b4c0470db03eaa42b318a83ca889c4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/37233b357d1a3648434ffda8f569ce96b3bcbf53","id":"37233b357d1a3648434ffda8f569ce96b3bcbf53","committed_date":"2011-05-22T00:23:30-07:00","authored_date":"2011-05-22T00:22:41-07:00","message":"socksipy-1.01 keyworded ~x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"8adbb3bc1878b5a1307a39a4d23ca776a4f3adeb","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"809ed8d37fd3736e88ceb222174cea50540b9156"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/4faa329f56b4c0470db03eaa42b318a83ca889c4","id":"4faa329f56b4c0470db03eaa42b318a83ca889c4","committed_date":"2011-05-20T11:32:11-07:00","authored_date":"2011-05-20T11:31:49-07:00","message":"Added missing watch file for nwdiag.\n\n(Portage version: 2.1.9.42/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"a289368450d5de2aa1e91a47a8eff493b68b0031","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f5f94a5d296b13f9a6c9110ad174051900a16e83"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/809ed8d37fd3736e88ceb222174cea50540b9156","id":"809ed8d37fd3736e88ceb222174cea50540b9156","committed_date":"2011-05-20T11:30:58-07:00","authored_date":"2011-05-20T11:28:38-07:00","message":"Initial socksipy ebuild.\n\nRequired for testing python-github2, and will be a USE=socks dep in new\nreleases.\n\n(Portage version: 2.1.9.42/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"64914a9ef2b148ce4e1c4f978c09a26b0fce1a44","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9bd07338404171f18dcbb99b6bf351fbb6c3a8f1"},{"id":"ddcad38eea125d5e0748b5c9a3c39d05269bd584"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f5f94a5d296b13f9a6c9110ad174051900a16e83","id":"f5f94a5d296b13f9a6c9110ad174051900a16e83","committed_date":"2011-05-18T06:16:59-07:00","authored_date":"2011-05-18T06:16:59-07:00","message":"Merge branch 'maint/x86_keywording'\n\n* maint/x86_keywording:\n pw-0.1.4 keyworded x86.\n plac-0.8.1 keyworded x86.\n pdbpp-0.7 keyworded x86.\n github2-0.3.1 keyworded x86.\n nwdiag-0.2.3 keyworded ~x86.\n cake-0.2 keyworded ~x86.\n jsonpipe-0.0.7 keyworded ~x86.\n vanity-1.0 keyworded ~x86.\n sure-0.4.0 keyworded ~x86.\n stencil-0.1 keyworded ~x86.\n calabash-0.0.3 keyworded ~x86.","tree":"12bf21b11693ffcb64a9df56d1e8446e45e9e648","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6e36ba0f2163cbd918fae302944b2cf5f4cf0ec2"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ddcad38eea125d5e0748b5c9a3c39d05269bd584","id":"ddcad38eea125d5e0748b5c9a3c39d05269bd584","committed_date":"2011-05-18T06:16:23-07:00","authored_date":"2011-05-18T06:16:14-07:00","message":"pw-0.1.4 keyworded x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"12bf21b11693ffcb64a9df56d1e8446e45e9e648","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"07bfd80949820c9215e48ebb5e11d2fd48923e5a"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6e36ba0f2163cbd918fae302944b2cf5f4cf0ec2","id":"6e36ba0f2163cbd918fae302944b2cf5f4cf0ec2","committed_date":"2011-05-18T06:15:45-07:00","authored_date":"2011-05-18T06:15:16-07:00","message":"plac-0.8.1 keyworded x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"19eafacfe02a2dd65a51c91ac503d22a6bc83631","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"944386cde5c100e699d0c2cb0ce403bf7e9cb8e7"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/07bfd80949820c9215e48ebb5e11d2fd48923e5a","id":"07bfd80949820c9215e48ebb5e11d2fd48923e5a","committed_date":"2011-05-18T06:14:12-07:00","authored_date":"2011-05-18T06:14:02-07:00","message":"pdbpp-0.7 keyworded x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"efb47845dde6468625ba06605c2dcc7bac9f2b8b","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"dc40235add8b9cecd18b8d62a932ead301351075"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/944386cde5c100e699d0c2cb0ce403bf7e9cb8e7","id":"944386cde5c100e699d0c2cb0ce403bf7e9cb8e7","committed_date":"2011-05-18T06:12:52-07:00","authored_date":"2011-05-18T06:12:45-07:00","message":"github2-0.3.1 keyworded x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"ae1c66f72254b9833f7d19393d82fee02dc37c76","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"472da1f32f55d219286b106c97fa25dab1c33758"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/dc40235add8b9cecd18b8d62a932ead301351075","id":"dc40235add8b9cecd18b8d62a932ead301351075","committed_date":"2011-05-18T06:10:57-07:00","authored_date":"2011-05-18T06:10:46-07:00","message":"nwdiag-0.2.3 keyworded ~x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"3d566ba9cfecd799b4d4fa858b3d95ac6aa873a4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"79c0fb209d27eded8947eb4ffa5c74db4379abfe"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/472da1f32f55d219286b106c97fa25dab1c33758","id":"472da1f32f55d219286b106c97fa25dab1c33758","committed_date":"2011-05-18T06:10:08-07:00","authored_date":"2011-05-18T06:09:58-07:00","message":"cake-0.2 keyworded ~x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"1f4ddf23029be3cfbccce1f41bfa3199a91af175","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"0dac8c2a2410325d5095cf5c290fae441843eec6"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/79c0fb209d27eded8947eb4ffa5c74db4379abfe","id":"79c0fb209d27eded8947eb4ffa5c74db4379abfe","committed_date":"2011-05-18T06:08:37-07:00","authored_date":"2011-05-18T06:08:17-07:00","message":"jsonpipe-0.0.7 keyworded ~x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"ec644f779e6a9abc0d726ffff01668999691097f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"de547eab8229243de4906826a622b9305c5b972d"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/0dac8c2a2410325d5095cf5c290fae441843eec6","id":"0dac8c2a2410325d5095cf5c290fae441843eec6","committed_date":"2011-05-18T06:06:14-07:00","authored_date":"2011-05-18T06:06:05-07:00","message":"vanity-1.0 keyworded ~x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"faa00aaea5faebbdc0d90086c3980b3f2a71b3f4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"c5a0736ee365ff994ba415a42622c26016e98201"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/de547eab8229243de4906826a622b9305c5b972d","id":"de547eab8229243de4906826a622b9305c5b972d","committed_date":"2011-05-18T06:04:14-07:00","authored_date":"2011-05-18T06:03:54-07:00","message":"sure-0.4.0 keyworded ~x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"a125da9dffea83d1e4311f4a99876f810c3bcbe4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"01b36090e191bfa74da5199d322c6028b15f0c86"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/c5a0736ee365ff994ba415a42622c26016e98201","id":"c5a0736ee365ff994ba415a42622c26016e98201","committed_date":"2011-05-18T06:02:48-07:00","authored_date":"2011-05-18T06:02:17-07:00","message":"stencil-0.1 keyworded ~x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"ea6febd89f9e82963562156fd9b25b80b866f61e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9bd07338404171f18dcbb99b6bf351fbb6c3a8f1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/01b36090e191bfa74da5199d322c6028b15f0c86","id":"01b36090e191bfa74da5199d322c6028b15f0c86","committed_date":"2011-05-18T06:00:45-07:00","authored_date":"2011-05-18T05:59:53-07:00","message":"calabash-0.0.3 keyworded ~x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"08d452208de4b47c16242c65653cd54a5b89fb4f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"3fe9cb3de79b132e461c397176138abff39c6a28"},{"id":"4654ab67b1767f066e38cfb55910095bbd797b2e"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/9bd07338404171f18dcbb99b6bf351fbb6c3a8f1","id":"9bd07338404171f18dcbb99b6bf351fbb6c3a8f1","committed_date":"2011-05-18T05:42:54-07:00","authored_date":"2011-05-18T05:42:54-07:00","message":"Merge branch 'maint/amd64_keywording'\n\n* maint/amd64_keywording:\n pw-0.1.4 keyworded amd64.\n plac-0.8.1 keyworded amd64.\n pdbpp-0.7 keyworded amd64.\n github2-0.3.1 keyworded amd64.\n\nConflicts:\n\tsupport/stabilisation.remind","tree":"8741a00f0bc0c6342ea4cc7ae21fdac93a769854","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6c8484ef6186c06093553f44c830597eff01b59e"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/3fe9cb3de79b132e461c397176138abff39c6a28","id":"3fe9cb3de79b132e461c397176138abff39c6a28","committed_date":"2011-05-18T05:42:18-07:00","authored_date":"2011-05-18T05:41:41-07:00","message":"Removed stale twython ebuild.\n\n(Portage version: 2.1.9.42/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"dca1153895f7bc40acb730a35dcf8699b908e7a7","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"2db3879ca018193235c8967562ce9f4853202943"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6c8484ef6186c06093553f44c830597eff01b59e","id":"6c8484ef6186c06093553f44c830597eff01b59e","committed_date":"2011-05-18T05:41:06-07:00","authored_date":"2011-05-18T05:41:03-07:00","message":"Pushed twython stabilisation back 90 days.\n\nStill waiting on upstream to stabilise dev-python/oauth2.","tree":"787fde8bb8cc31ebe8b19dab8aee7c2d95514ac1","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"7fb4cf687ade6bfaffd22fc5fc06a77c2b706719"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/4654ab67b1767f066e38cfb55910095bbd797b2e","id":"4654ab67b1767f066e38cfb55910095bbd797b2e","committed_date":"2011-05-18T05:38:42-07:00","authored_date":"2011-05-18T05:38:32-07:00","message":"pw-0.1.4 keyworded amd64.\n\n(Portage version: 2.1.9.42/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"8fbac38110dbb73bb7204ca9797c4fa7acf44463","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6a328b3b4b1171de211dd2db765b1b403dea8e3a"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7fb4cf687ade6bfaffd22fc5fc06a77c2b706719","id":"7fb4cf687ade6bfaffd22fc5fc06a77c2b706719","committed_date":"2011-05-18T05:38:13-07:00","authored_date":"2011-05-18T05:38:00-07:00","message":"plac-0.8.1 keyworded amd64.\n\n(Portage version: 2.1.9.42/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"975b3b667d27dd1734fa4992cc2244a2eac036a9","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"af39c23bbd4abab5b663c66d2cd1a81f3128c4f0"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6a328b3b4b1171de211dd2db765b1b403dea8e3a","id":"6a328b3b4b1171de211dd2db765b1b403dea8e3a","committed_date":"2011-05-18T05:37:39-07:00","authored_date":"2011-05-18T05:37:25-07:00","message":"pdbpp-0.7 keyworded amd64.\n\n(Portage version: 2.1.9.42/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"a161646c769641fe645121ad479676b6c10b29f4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"2db3879ca018193235c8967562ce9f4853202943"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/af39c23bbd4abab5b663c66d2cd1a81f3128c4f0","id":"af39c23bbd4abab5b663c66d2cd1a81f3128c4f0","committed_date":"2011-05-18T05:36:38-07:00","authored_date":"2011-05-18T05:36:08-07:00","message":"github2-0.3.1 keyworded amd64.\n\n(Portage version: 2.1.9.42/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"6db921005c57b50d9f2ade0b9bc754316b1e78fc","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6b86595f9a5f049b52d359b3c9c56895851ef021"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/2db3879ca018193235c8967562ce9f4853202943","id":"2db3879ca018193235c8967562ce9f4853202943","committed_date":"2011-05-17T15:05:16-07:00","authored_date":"2011-05-17T14:59:00-07:00","message":"Masked vicious for removal.\n\nThe maintenance burden of shadowing an upstream ebuild is too high, for too\nlittle gain. Sorry, if you have trouble migrating.","tree":"2d5fef6cf947cf7921bf8b32e5b17ae20b4ac682","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"abb405c5b3cec29acf471cc5170f03b834106a6d"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6b86595f9a5f049b52d359b3c9c56895851ef021","id":"6b86595f9a5f049b52d359b3c9c56895851ef021","committed_date":"2011-05-17T14:52:27-07:00","authored_date":"2011-05-17T14:52:01-07:00","message":"media-gfx/seqdiag-0.3.3 version bump.\n\nCloses #370.\n\n(Portage version: 2.1.9.42/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"0b7df5f5e26c2d367c2ffb5e4f83eaf138c58f7b","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"546c70884c3692f17eafa53f29ed7925ab9dcf3f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/abb405c5b3cec29acf471cc5170f03b834106a6d","id":"abb405c5b3cec29acf471cc5170f03b834106a6d","committed_date":"2011-05-17T14:48:49-07:00","authored_date":"2011-05-17T14:48:12-07:00","message":"dev-python/pyscss-1.0.8 version bump.\n\nCloses #369.\n\n(Portage version: 2.1.9.42/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"3691f00deee4b003db09cfec6f2abbb42e8010e7","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"a42f9cc6206d3ab898d7e3f128d9435bccec36f3"},{"id":"f72c51b7f65ada1bd377298c0e462fed499afcee"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/546c70884c3692f17eafa53f29ed7925ab9dcf3f","id":"546c70884c3692f17eafa53f29ed7925ab9dcf3f","committed_date":"2011-05-17T05:42:35-07:00","authored_date":"2011-05-17T05:42:35-07:00","message":"Merge branch 'maint/x86_keywording'\n\n* maint/x86_keywording:\n python-osmgpsmap-0.7.3 keyworded x86.\n dexml-0.4.0 keyworded x86.\n cupage-0.5.5 keyworded x86.\n osm-gps-map-0.7.3 keyworded x86.\n Term-Animation-0.2.6 keyworded x86.\n lettuce-0.1.25 keyworded x86.","tree":"8df1051a7b7a1e0c0576043aa3fe34f4e91f49e6","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"48b55622c5c478bb5e6ffa0426c37f16029e6637"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f72c51b7f65ada1bd377298c0e462fed499afcee","id":"f72c51b7f65ada1bd377298c0e462fed499afcee","committed_date":"2011-05-17T05:42:26-07:00","authored_date":"2011-05-17T05:42:17-07:00","message":"python-osmgpsmap-0.7.3 keyworded x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"8df1051a7b7a1e0c0576043aa3fe34f4e91f49e6","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"0e5d390672e7713ce9d6882820477fa26a2403a8"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/48b55622c5c478bb5e6ffa0426c37f16029e6637","id":"48b55622c5c478bb5e6ffa0426c37f16029e6637","committed_date":"2011-05-17T05:41:49-07:00","authored_date":"2011-05-17T05:41:41-07:00","message":"dexml-0.4.0 keyworded x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"fb4428443fc8cacde6c3a3aa5509503ffd63bf06","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"aadb8c461bcff5f98d2629791a6526319ebedebf"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/0e5d390672e7713ce9d6882820477fa26a2403a8","id":"0e5d390672e7713ce9d6882820477fa26a2403a8","committed_date":"2011-05-17T05:41:16-07:00","authored_date":"2011-05-17T05:39:50-07:00","message":"cupage-0.5.5 keyworded x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"4535e52b40718ba2adf17926605b504d28676d84","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"938698435b6feaeb5798b0b8265dec3c86a79f21"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/aadb8c461bcff5f98d2629791a6526319ebedebf","id":"aadb8c461bcff5f98d2629791a6526319ebedebf","committed_date":"2011-05-17T05:38:50-07:00","authored_date":"2011-05-17T05:38:43-07:00","message":"osm-gps-map-0.7.3 keyworded x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"630850a2b4d6af7886aa4979d261f9f4b5bd9e44","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"1a81af79e9448cc17cb962e6e554d2f95627e48a"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/938698435b6feaeb5798b0b8265dec3c86a79f21","id":"938698435b6feaeb5798b0b8265dec3c86a79f21","committed_date":"2011-05-17T05:37:28-07:00","authored_date":"2011-05-17T05:37:17-07:00","message":"Term-Animation-0.2.6 keyworded x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"86b67e7be739710b4a0dcd3c116e6789f617649c","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"a42f9cc6206d3ab898d7e3f128d9435bccec36f3"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/1a81af79e9448cc17cb962e6e554d2f95627e48a","id":"1a81af79e9448cc17cb962e6e554d2f95627e48a","committed_date":"2011-05-17T05:36:49-07:00","authored_date":"2011-05-17T05:35:41-07:00","message":"lettuce-0.1.25 keyworded x86.\n\n(Portage version: 2.1.9.42/git/Linux x86, signed Manifest commit with key C0174749)","tree":"febaaf0a9ef70fe4393f783c0ced6ecdf758d28f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f305a8e19072faa41332ff771eef352d99b720dd"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/a42f9cc6206d3ab898d7e3f128d9435bccec36f3","id":"a42f9cc6206d3ab898d7e3f128d9435bccec36f3","committed_date":"2011-05-17T04:36:30-07:00","authored_date":"2011-05-17T04:35:37-07:00","message":"Pushed Net-Twitter-Lite stabilisation back 90 days.\n\nStill waiting on upstream to stabilise dev-perl/JSON-Any.","tree":"0bf98e75b14cbba85cd9d33723816d85a12630ff","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"0f13d2e4f32191aa0f2c5429666f0afb31934aee"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f305a8e19072faa41332ff771eef352d99b720dd","id":"f305a8e19072faa41332ff771eef352d99b720dd","committed_date":"2011-05-17T04:36:30-07:00","authored_date":"2011-05-17T04:35:04-07:00","message":"Pushed pycparser stabilisation back 90 days.\n\nStill waiting on upstream to stabilise dev-python/ply.","tree":"9699c4e28bcca4e7c9e60b0f6dfc19e6c49f5e43","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"44e4062f93c5d19d41f9d2158a382991f71b1142"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/0f13d2e4f32191aa0f2c5429666f0afb31934aee","id":"0f13d2e4f32191aa0f2c5429666f0afb31934aee","committed_date":"2011-05-17T04:36:22-07:00","authored_date":"2011-05-17T04:34:03-07:00","message":"Removed stale Net-Twitter-Lite ebuild.\n\n(Portage version: 2.1.9.42/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"9fd3fc814c8a76bde8e525caa1dd3271d4312209","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}}]} \ No newline at end of file +{"commits":[{"parents":[{"id":"85247d6de9d2d35dfd7eea3c23c894ea9aa263e4"},{"id":"be6ac09388ea7b360bc4a71a91f2633ce931276b"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/4de0834d58b37ef3020c49df43c95649217a2def","id":"4de0834d58b37ef3020c49df43c95649217a2def","committed_date":"2011-08-11T07:11:14-07:00","authored_date":"2011-08-11T07:11:14-07:00","message":"Merge branch 'maint/x86_keywording'\n\n* maint/x86_keywording:\n cloud_sptheme-1.2 keyworded x96.\n cloud_sptheme-1.2 keyworded amd64.","tree":"02813cd1ea16d6284abf816169957441648c551e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9021f373b0ad17def7eb7de03954cc68710945a5"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/be6ac09388ea7b360bc4a71a91f2633ce931276b","id":"be6ac09388ea7b360bc4a71a91f2633ce931276b","committed_date":"2011-08-11T07:11:03-07:00","authored_date":"2011-08-11T07:10:48-07:00","message":"cloud_sptheme-1.2 keyworded x96.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"02813cd1ea16d6284abf816169957441648c551e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"85247d6de9d2d35dfd7eea3c23c894ea9aa263e4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/9021f373b0ad17def7eb7de03954cc68710945a5","id":"9021f373b0ad17def7eb7de03954cc68710945a5","committed_date":"2011-08-11T03:51:40-07:00","authored_date":"2011-08-11T03:51:26-07:00","message":"cloud_sptheme-1.2 keyworded amd64.\n\n(Portage version: 2.1.10.3/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"eb5b14b29cc928de40f066a49bd6b572f8673b34","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"3c173e4dc67fff74aab98e3a5ca98bb1f1401456"},{"id":"7c6cb75cb7a1712c5dcc3e6198815983bd904025"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/85247d6de9d2d35dfd7eea3c23c894ea9aa263e4","id":"85247d6de9d2d35dfd7eea3c23c894ea9aa263e4","committed_date":"2011-08-10T09:16:59-07:00","authored_date":"2011-08-10T09:16:59-07:00","message":"Merge branch 'maint/amd64_keywording'\n\n* maint/amd64_keywording:\n metrics-0.1_alpha3 keyworded amd64.\n pycallgraph-0.5.1 keyworded amd64.","tree":"66341bf3f80b46fc332d6c50ed25a4c4ce6fb491","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"4a1bbcfa9d946db7c719e95af4d4911d96fe1551"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7c6cb75cb7a1712c5dcc3e6198815983bd904025","id":"7c6cb75cb7a1712c5dcc3e6198815983bd904025","committed_date":"2011-08-10T09:16:51-07:00","authored_date":"2011-08-10T09:16:41-07:00","message":"metrics-0.1_alpha3 keyworded amd64.\n\n(Portage version: 2.1.10.3/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"66341bf3f80b46fc332d6c50ed25a4c4ce6fb491","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"3c173e4dc67fff74aab98e3a5ca98bb1f1401456"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/4a1bbcfa9d946db7c719e95af4d4911d96fe1551","id":"4a1bbcfa9d946db7c719e95af4d4911d96fe1551","committed_date":"2011-08-10T09:16:19-07:00","authored_date":"2011-08-10T09:16:05-07:00","message":"pycallgraph-0.5.1 keyworded amd64.\n\n(Portage version: 2.1.10.3/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"98d909db4b977f42033ed14966302b11e755b201","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9d279e279dfd06b3d5a85ebc65bac701ab027a2a"},{"id":"6379e79a11f0dbdc8ad98201e8de03634811a03b"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/3c173e4dc67fff74aab98e3a5ca98bb1f1401456","id":"3c173e4dc67fff74aab98e3a5ca98bb1f1401456","committed_date":"2011-08-08T13:45:57-07:00","authored_date":"2011-08-08T13:45:57-07:00","message":"Merge branch 'maint/x86_keywording'\n\n* maint/x86_keywording:\n pycallgraph-0.5.1 keyworded ~x86.\n metrics-0.1_alpha3 keyworded ~x86.\n html2rest-0.2.1 keyworded ~x86.","tree":"a60bcfc6ecce9a85108a5c05f478f5bcc471c19d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"34efdfb28d809350a41498222a87ae8630622e87"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/6379e79a11f0dbdc8ad98201e8de03634811a03b","id":"6379e79a11f0dbdc8ad98201e8de03634811a03b","committed_date":"2011-08-08T13:45:49-07:00","authored_date":"2011-08-08T13:44:37-07:00","message":"pycallgraph-0.5.1 keyworded ~x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"a60bcfc6ecce9a85108a5c05f478f5bcc471c19d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d3f3838a08eb022594420137525c871c44220495"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/34efdfb28d809350a41498222a87ae8630622e87","id":"34efdfb28d809350a41498222a87ae8630622e87","committed_date":"2011-08-08T13:45:46-07:00","authored_date":"2011-08-08T13:43:51-07:00","message":"metrics-0.1_alpha3 keyworded ~x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"d8d8fbf768a040b27af02a0840eda061a60bc19e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9653614dc45f297c0d913b5804f153696dc8083f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d3f3838a08eb022594420137525c871c44220495","id":"d3f3838a08eb022594420137525c871c44220495","committed_date":"2011-08-08T13:45:42-07:00","authored_date":"2011-08-08T13:42:30-07:00","message":"html2rest-0.2.1 keyworded ~x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"f1135c9e215876e697023ee7f1d52ca584affe08","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"86b044f91d9a16b221acfdc2f79593fd857e256f"},{"id":"9653614dc45f297c0d913b5804f153696dc8083f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/9d279e279dfd06b3d5a85ebc65bac701ab027a2a","id":"9d279e279dfd06b3d5a85ebc65bac701ab027a2a","committed_date":"2011-08-08T13:41:47-07:00","authored_date":"2011-08-08T13:41:47-07:00","message":"Merge branch 'maint/x86_keywording'\n\n* maint/x86_keywording:\n tox-1.1 keyworded x86.\n sure-0.6 keyworded x86.\n sphinxcontrib-httpdomain-0.1.5 keyworded x86.\n sphinxcontrib-googlechart-0.1.4 keyworded x86.\n sphinxcontrib-ansi-0.6 keyworded x86.\n seqdiag-0.3.7 keyworded x86.\n pgmagick-0.4 keyworded x86.\n nwdiag-0.2.7 keyworded x86.\n notmuch-0.6 keyworded x86.\n html-1.16 keyworded x86.\n gitdb-0.5.4 keyworded x86.\n blockdiag-0.8.4 keyworded x86.\n webcolors-1.3.1 keyworded x86.\n actdiag-0.1.7 keyworded x86.\n Pushed rstctl stabilisation back 90 days.","tree":"013bb4b3d14d6033fec487e25fd4edc5fa33dd66","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"36072788c7714fc804b71477bef5756e5b503686"},{"id":"7f535736c7cc92032fc3e000eb49e033a500ad85"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/86b044f91d9a16b221acfdc2f79593fd857e256f","id":"86b044f91d9a16b221acfdc2f79593fd857e256f","committed_date":"2011-08-08T13:41:44-07:00","authored_date":"2011-08-08T13:41:44-07:00","message":"Merge branch 'maint/amd64_keywording'\n\n* maint/amd64_keywording:\n tox-1.1 keyworded amd64.\n sure-0.6 keyworded amd64.\n sphinxcontrib-httpdomain-0.1.5 keyworded amd64.\n sphinxcontrib-googlechart-0.1.4 keyworded amd64.\n sphinxcontrib-ansi-0.6 keyworded amd64.\n seqdiag-0.3.7 keyworded amd64.\n pgmagick-0.4 keyworded amd64.\n nwdiag-0.2.7 keyworded amd64.\n notmuch-0.6 keyworded amd64.\n html-0.16 keyworded amd64.\n gitdb-0.5.4 keyworded amd64.\n blockdiag-0.8.4 keyworded amd64.\n webcolors-1.3.1 keyworded amd64.\n actdiag-0.1.7 keyworded amd64.\n Pushed rstctl stabilisation back 90 days.","tree":"065e156553982ed5c8c5430b11c53494b897a717","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"b697694822e52e371d7ed39bedfc240e4e11dcf2"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/9653614dc45f297c0d913b5804f153696dc8083f","id":"9653614dc45f297c0d913b5804f153696dc8083f","committed_date":"2011-08-08T13:41:35-07:00","authored_date":"2011-08-08T13:38:32-07:00","message":"tox-1.1 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"013bb4b3d14d6033fec487e25fd4edc5fa33dd66","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"76e3af7354c0de85771f17af004d3e0c428e50a2"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/b697694822e52e371d7ed39bedfc240e4e11dcf2","id":"b697694822e52e371d7ed39bedfc240e4e11dcf2","committed_date":"2011-08-08T13:41:34-07:00","authored_date":"2011-08-08T13:37:56-07:00","message":"sure-0.6 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"bc64b8a5e0b40226119edac879d336c1e5fdf2c5","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f0a9c03882fa92001869f2eb930d807408738c0d"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/76e3af7354c0de85771f17af004d3e0c428e50a2","id":"76e3af7354c0de85771f17af004d3e0c428e50a2","committed_date":"2011-08-08T13:41:33-07:00","authored_date":"2011-08-08T13:37:33-07:00","message":"sphinxcontrib-httpdomain-0.1.5 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"abf592f48a7e2ad9f22ea78618a3e0ab456d589b","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d1cdabe1cc4aa53bc334607665249c8bea03fda8"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f0a9c03882fa92001869f2eb930d807408738c0d","id":"f0a9c03882fa92001869f2eb930d807408738c0d","committed_date":"2011-08-08T13:41:32-07:00","authored_date":"2011-08-08T13:37:02-07:00","message":"sphinxcontrib-googlechart-0.1.4 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"2379ef9ba93db2f719ebec1796c983522aacab37","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"e1e608d71309c02a572631108a95ca75ce9513e7"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/d1cdabe1cc4aa53bc334607665249c8bea03fda8","id":"d1cdabe1cc4aa53bc334607665249c8bea03fda8","committed_date":"2011-08-08T13:41:29-07:00","authored_date":"2011-08-08T13:35:37-07:00","message":"sphinxcontrib-ansi-0.6 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"028250871750a79b598197fb13f34618f191383f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f5cd151be2a612875d311db2ffed04dfd760827f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/e1e608d71309c02a572631108a95ca75ce9513e7","id":"e1e608d71309c02a572631108a95ca75ce9513e7","committed_date":"2011-08-08T13:40:28-07:00","authored_date":"2011-08-08T13:34:16-07:00","message":"seqdiag-0.3.7 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"5f2eac33e42893dcf62770ce597072d90d03703a","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"62ffa4958619aced3a04bd7edda935cacfe46ad4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/f5cd151be2a612875d311db2ffed04dfd760827f","id":"f5cd151be2a612875d311db2ffed04dfd760827f","committed_date":"2011-08-08T13:39:43-07:00","authored_date":"2011-08-08T13:33:47-07:00","message":"pgmagick-0.4 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"993a303618ce8cba057088100008ed10a01e59d2","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"bc77a39dbc61e30ac712114fad1f25d8cd9efafa"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/62ffa4958619aced3a04bd7edda935cacfe46ad4","id":"62ffa4958619aced3a04bd7edda935cacfe46ad4","committed_date":"2011-08-08T13:39:39-07:00","authored_date":"2011-08-08T13:33:10-07:00","message":"nwdiag-0.2.7 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"e45dfd3427dd1f73f77bb620d6766bb243dd90da","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"97fb801046805bec82398c8dcbb1cc901a162631"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/bc77a39dbc61e30ac712114fad1f25d8cd9efafa","id":"bc77a39dbc61e30ac712114fad1f25d8cd9efafa","committed_date":"2011-08-08T13:39:37-07:00","authored_date":"2011-08-08T13:32:40-07:00","message":"notmuch-0.6 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"5e02cd9526189e3ddda11d0e5f469ee8e5cccd9f","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"b53f10f90d35338a52a77ed261914e7c5231e710"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/97fb801046805bec82398c8dcbb1cc901a162631","id":"97fb801046805bec82398c8dcbb1cc901a162631","committed_date":"2011-08-08T13:39:35-07:00","authored_date":"2011-08-08T13:32:04-07:00","message":"html-1.16 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"4d6158007976a55807667c7e9bf4079a711b12b4","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"c60fefb7c493b68fec49f6532fb482d94ad82afb"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/b53f10f90d35338a52a77ed261914e7c5231e710","id":"b53f10f90d35338a52a77ed261914e7c5231e710","committed_date":"2011-08-08T13:39:32-07:00","authored_date":"2011-08-08T13:31:32-07:00","message":"gitdb-0.5.4 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"405d3a20a2e678a04795661f4468f72adf44bdb1","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8fbdffdbb4c7fa41480005a64ea4050848eaf957"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/c60fefb7c493b68fec49f6532fb482d94ad82afb","id":"c60fefb7c493b68fec49f6532fb482d94ad82afb","committed_date":"2011-08-08T13:39:29-07:00","authored_date":"2011-08-08T13:31:04-07:00","message":"blockdiag-0.8.4 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"216174a1d38635ce910eb4b09c56d3d6eafb1804","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"7ca5fd4143d3ba24ca7167a0151233bc6bbe360f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/8fbdffdbb4c7fa41480005a64ea4050848eaf957","id":"8fbdffdbb4c7fa41480005a64ea4050848eaf957","committed_date":"2011-08-08T13:39:26-07:00","authored_date":"2011-08-08T13:30:36-07:00","message":"webcolors-1.3.1 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"7338cc0a184ff2d1b28ab848935d0289afeaac41","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ec56adae8d604fb30e169b058f0ebb227bf1b157"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7ca5fd4143d3ba24ca7167a0151233bc6bbe360f","id":"7ca5fd4143d3ba24ca7167a0151233bc6bbe360f","committed_date":"2011-08-08T13:39:23-07:00","authored_date":"2011-08-08T13:30:08-07:00","message":"actdiag-0.1.7 keyworded x86.\n\n(Portage version: 2.1.10.3/git/Linux x86, signed Manifest commit with key C0174749)","tree":"06b3f9742f2c531a931bf69ff04d7b0426f2b8bc","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"1ad6dacf95f19da9cccd511443a5212e1e870672"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/ec56adae8d604fb30e169b058f0ebb227bf1b157","id":"ec56adae8d604fb30e169b058f0ebb227bf1b157","committed_date":"2011-08-08T13:29:22-07:00","authored_date":"2011-08-08T13:29:22-07:00","message":"Pushed rstctl stabilisation back 90 days.\n\nStill waiting on upstream to stabilise pastescript.","tree":"d456b0bf965aaf1f849612e301f7b3ab767a8402","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"9dcf33553857afa0dd32b4222ca805c0add7249a"},{"id":"7f535736c7cc92032fc3e000eb49e033a500ad85"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/1ad6dacf95f19da9cccd511443a5212e1e870672","id":"1ad6dacf95f19da9cccd511443a5212e1e870672","committed_date":"2011-08-08T13:28:39-07:00","authored_date":"2011-08-08T13:28:39-07:00","message":"Merge branch 'maint/amd64_keywording' into maint/x86_keywording\n\n* maint/amd64_keywording:\n tox-1.1 keyworded amd64.\n sure-0.6 keyworded amd64.\n sphinxcontrib-httpdomain-0.1.5 keyworded amd64.\n sphinxcontrib-googlechart-0.1.4 keyworded amd64.\n sphinxcontrib-ansi-0.6 keyworded amd64.\n seqdiag-0.3.7 keyworded amd64.\n pgmagick-0.4 keyworded amd64.\n nwdiag-0.2.7 keyworded amd64.\n notmuch-0.6 keyworded amd64.\n html-0.16 keyworded amd64.\n gitdb-0.5.4 keyworded amd64.\n blockdiag-0.8.4 keyworded amd64.\n webcolors-1.3.1 keyworded amd64.\n actdiag-0.1.7 keyworded amd64.\n Pushed rstctl stabilisation back 90 days.\n html2rest-0.2.1 keyworded amd64.\n Pushed ditz stabilisation back 90 days.","tree":"065e156553982ed5c8c5430b11c53494b897a717","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"dd9340879777d4642ff7e025e6d2569599e7272f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/7f535736c7cc92032fc3e000eb49e033a500ad85","id":"7f535736c7cc92032fc3e000eb49e033a500ad85","committed_date":"2011-08-08T13:22:29-07:00","authored_date":"2011-08-08T13:21:53-07:00","message":"tox-1.1 keyworded amd64.\n\n(Portage version: 2.1.10.3/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"065e156553982ed5c8c5430b11c53494b897a717","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"96db5d30ddc886429618c8ea002243c4d4146659"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/dd9340879777d4642ff7e025e6d2569599e7272f","id":"dd9340879777d4642ff7e025e6d2569599e7272f","committed_date":"2011-08-08T13:22:29-07:00","authored_date":"2011-08-08T13:21:24-07:00","message":"sure-0.6 keyworded amd64.\n\n(Portage version: 2.1.10.3/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"979b63e1deee4731ba6290c7a89b7bb5f7f1d21a","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"4fbb3e8b7109e217e417a19a9ede20c3eb4ebe73"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/96db5d30ddc886429618c8ea002243c4d4146659","id":"96db5d30ddc886429618c8ea002243c4d4146659","committed_date":"2011-08-08T13:22:29-07:00","authored_date":"2011-08-08T13:20:53-07:00","message":"sphinxcontrib-httpdomain-0.1.5 keyworded amd64.\n\n(Portage version: 2.1.10.3/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"4ed313a70faad4a0888956c47a25d0e178c676e2","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"2e57f31917ca081838d4ef7406107bd9c843b8fa"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/4fbb3e8b7109e217e417a19a9ede20c3eb4ebe73","id":"4fbb3e8b7109e217e417a19a9ede20c3eb4ebe73","committed_date":"2011-08-08T13:22:28-07:00","authored_date":"2011-08-08T13:20:23-07:00","message":"sphinxcontrib-googlechart-0.1.4 keyworded amd64.\n\n(Portage version: 2.1.10.3/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"8548f7bf7cf76d705dd117e7194480664a9b5c1a","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"27ff4013a0d780b739c2ca5240c9c644c7e04ab9"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/2e57f31917ca081838d4ef7406107bd9c843b8fa","id":"2e57f31917ca081838d4ef7406107bd9c843b8fa","committed_date":"2011-08-08T13:22:28-07:00","authored_date":"2011-08-08T13:19:38-07:00","message":"sphinxcontrib-ansi-0.6 keyworded amd64.\n\n(Portage version: 2.1.10.3/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"906a81b9ab4106b58b5d1db0bf28e39fc92e26b0","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"a16eecb18e2499bf0376080bbfd55272dfcc4ab1"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/27ff4013a0d780b739c2ca5240c9c644c7e04ab9","id":"27ff4013a0d780b739c2ca5240c9c644c7e04ab9","committed_date":"2011-08-08T13:22:28-07:00","authored_date":"2011-08-08T13:19:03-07:00","message":"seqdiag-0.3.7 keyworded amd64.\n\n(Portage version: 2.1.10.3/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"e11362ea5928230d4ba856a7cceab97cc1bdd378","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"cdad2422fb73adeb752220c5d489673f8a91b8ba"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/misc-overlay/commit/a16eecb18e2499bf0376080bbfd55272dfcc4ab1","id":"a16eecb18e2499bf0376080bbfd55272dfcc4ab1","committed_date":"2011-08-08T13:22:28-07:00","authored_date":"2011-08-08T13:18:36-07:00","message":"pgmagick-0.4 keyworded amd64.\n\n(Portage version: 2.1.10.3/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"ff6404094d6f6cf7308654430df25e02d94c7dae","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,commits,show,ask,python-github2,1c83cde9b5a7c396a01af1007fb7b88765b9ae45,a4f58221c8131c4e0975cd806f13d76c b/tests/data/github.com,api,v2,json,commits,show,ask,python-github2,1c83cde9b5a7c396a01af1007fb7b88765b9ae45,a4f58221c8131c4e0975cd806f13d76c index a1a5c48..6340de4 100644 --- a/tests/data/github.com,api,v2,json,commits,show,ask,python-github2,1c83cde9b5a7c396a01af1007fb7b88765b9ae45,a4f58221c8131c4e0975cd806f13d76c +++ b/tests/data/github.com,api,v2,json,commits,show,ask,python-github2,1c83cde9b5a7c396a01af1007fb7b88765b9ae45,a4f58221c8131c4e0975cd806f13d76c @@ -1,14 +1,17 @@ status: 200 -content-length: 1578 +x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/commits/show/ask/python-github2/1c83cde9b5a7c396a01af1007fb7b88765b9ae45 +-content-encoding: gzip set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly -x-runtime: 38ms -server: nginx/0.7.67 connection: keep-alive -etag: "567523fc76cd6ee4352ee33b178781af" +content-length: 1578 +server: nginx/1.0.4 +x-runtime: 32ms +x-ratelimit-limit: 60 +etag: "848c200dc06e8b9b766294e99f795601" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:43:09 GMT +date: Mon, 15 Aug 2011 19:59:15 GMT content-type: application/json; charset=utf-8 {"commit":{"modified":[{"diff":"--- a/github2/bin/manage_collaborators.py\n+++ b/github2/bin/manage_collaborators.py\n@@ -25,6 +25,8 @@ def parse_commandline():\n '\\nTry %prog --help for details.')\n parser.add_option('-d', '--debug', action='store_true',\n help='Enables debugging mode')\n+ parser.add_option('-c', '--cache', default=None,\n+ help='Location for network cache [default: None]')\n parser.add_option('-l', '--login',\n help='Username to login with')\n parser.add_option('-a', '--account',\n@@ -59,7 +61,7 @@ def main():\n \n github = github2.client.Github(username=options.login,\n api_token=options.apitoken,\n- debug=options.debug)\n+ debug=options.debug, cache=options.cache)\n \n if len(args) == 1:\n for repos in github.repos.list(options.account):","filename":"github2/bin/manage_collaborators.py"}],"parents":[{"id":"7d1c855d2f44a55e4b90b40017be697cf70cb4a0"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/ask/python-github2/commit/1c83cde9b5a7c396a01af1007fb7b88765b9ae45","id":"1c83cde9b5a7c396a01af1007fb7b88765b9ae45","committed_date":"2011-06-06T16:13:50-07:00","authored_date":"2011-06-06T16:13:50-07:00","message":"Added cache support to manage_collaborators.","tree":"f48fcc1a0b8ea97f3147dc42cf7cdb6683493e94","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}}} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,issues,comments,ask,python-github2,24,fd493a9ada4c1de1cd592293f9c2049e b/tests/data/github.com,api,v2,json,issues,comments,ask,python-github2,24,fd493a9ada4c1de1cd592293f9c2049e index c16be20..4b819b2 100644 --- a/tests/data/github.com,api,v2,json,issues,comments,ask,python-github2,24,fd493a9ada4c1de1cd592293f9c2049e +++ b/tests/data/github.com,api,v2,json,issues,comments,ask,python-github2,24,fd493a9ada4c1de1cd592293f9c2049e @@ -1,14 +1,15 @@ status: 200 -x-ratelimit-remaining: 57 +x-ratelimit-remaining: 58 content-location: https://github.com/api/v2/json/issues/comments/ask/python-github2/24 -x-runtime: 17ms -content-length: 9146 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 9146 +server: nginx/1.0.4 +x-runtime: 29ms x-ratelimit-limit: 60 -etag: "cf41a767767e5b6a2c8af3b6eb6e36df" +etag: "e72eb1f693f00e16b71da10917f2893b" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:42:33 GMT +date: Thu, 25 Aug 2011 06:54:09 GMT content-type: application/json; charset=utf-8 {"comments":[{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","created_at":"2010/12/09 22:37:26 -0800","body":"Great addition! Could you please implement the paging stuff for all API routes that support paging? Having paging for route A, but not for route B might be confusing and nobody exactly knows which API routes have been covered already.\r\n\r\nThanks in advance,\r\nVincent\r\n","updated_at":"2010/12/09 22:37:26 -0800","id":601871,"user":"nvie"},{"gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","created_at":"2010/12/09 23:48:23 -0800","body":"Sure, but I have another idea.\r\n\r\nList methods could return not a list but an iterable object just like Django ORM's QuerySet, which supports slicing. And this iterable object will hide internal github's paging implementation from the end user of the python-github2.\r\n\r\nFor example, they could iterate over all commits using:\r\n\r\n for commit in gh.commits.list('django/django'):\r\n process(commit)\r\n\r\nAnd github2 will make as many requests to the GitHub as required.\r\n\r\nOr user coul only fetch first 100 commits:\r\n\r\n for commit in gh.commits.list('django/django')[:100]:\r\n process(commit)\r\n\r\nAnd github2 will do no more than 3 requests to the GitHub behind the scene?\r\n\r\nI see only one con against this approach. It is backward incompartible with the previous code and to convert old code which uses github2 to work with new library, you have to use limits and perhaps lists:\r\n\r\nIf previously you wrote `commits = hg.commits.list('django/django')` and receive no more than 30 items in the list, then now you will have to write `commits = gh.commits.list('django/django')[:LIMIT]` or, if you really need a list here: `commits = list(gh.commits.list('django/django')[:LIMIT])`.\r\n\r\nI suggest this implementation because without that, many developers who using github2, will have to implement same logic in their own code. For example, here is my curren implementation of the generator:\r\n\r\n def get_commits(*params):\r\n \"\"\" Generator which fetches commits from\r\n given repository until LIMIT\r\n will be reached.\r\n \"\"\"\r\n page = 1 \r\n limit = config.LIMIT\r\n\r\n commits = gh.commits.list(page = page, *params)\r\n while commits:\r\n for commit in commits:\r\n yield commit\r\n limit -= 1\r\n if limit == 0:\r\n raise StopIteration\r\n page += 1\r\n commits = gh.commits.list(page = page, *params)\r\n\r\nBy the way, such generator could be generalized to use with any listable github's object if it will support the page argument in it's list method. And this will allow us to keep backward compatibility. But this approach is a compromise :( ","updated_at":"2010/12/09 23:48:23 -0800","id":601937,"user":"svetlyak40wt"},{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","created_at":"2010/12/13 01:15:05 -0800","body":"I think the addition of an iterator hiding the details of paging is a great fit for this library. The backward incompatibility is a bit tricky, so I'm not too fond of changing the list method. Instead, we could solve this by providing an `iter()` method instead of `list()`? Then `list()` can keep its current semantics and people can use an iterator in the case they prefer that.\r\n\r\nBy the way: in your code sample you call `gh.commits.list('django/django')[:LIMIT]`, but AFAIK iterators aren't subscriptable. (Subscript semantics on iterators is really hard, since they involve state.) Using islice could do the trick like this, however:\r\n\r\n islice(gh.commits.list('django/django'), None, LIMIT)\r\n","updated_at":"2010/12/13 01:15:05 -0800","id":607643,"user":"nvie"},{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","created_at":"2010/12/13 01:28:05 -0800","body":"We could even let the `iter()` method return the islice'd iterator:\r\n\r\n def iter(self, start=None, stop=None):\r\n ...\r\n return islice(commits, start, stop)\r\n\r\nThat way, you can simply call:\r\n\r\n # iter over all commits\r\n for c in gh.commits.iter():\r\n ...\r\n \r\n # iter over a subset\r\n for c in gh.commits.iter(25, 100):\r\n ...\r\n","updated_at":"2010/12/13 01:28:05 -0800","id":607666,"user":"nvie"},{"gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","created_at":"2010/12/13 03:37:50 -0800","body":"Of cause, you can't apply [:LIMIT] to an iterator, but you can do this with any _iterable_ object. This will look like this for end user:\r\n\r\n for c in gh.commits.iter('django/django')[:50]:\r\n ...\r\n\r\nI'll try to write the implementation within few days, and will send you another pull request.","updated_at":"2010/12/13 03:37:50 -0800","id":607829,"user":"svetlyak40wt"},{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","created_at":"2010/12/13 07:27:50 -0800","body":"Yeah, what I meant is that (lazy) iterables are not subscriptable (at least not up until Python 2.6), so the above code yields a syntax error. See this:\r\n\r\n >>> def count(): \r\n ... i = 0 \r\n ... while True: \r\n ... yield i \r\n ... i += 1 \r\n ... \r\n >>> for i in count()[:50]: \r\n ... print i \r\n ... \r\n Traceback (most recent call last): \r\n File \"\", line 1, in \r\n TypeError: 'generator' object is unsubscriptable \r\n >>>\r\n\r\nHowever, if you wrap it in an islice wrapper, you can subscript these kinds of infinite lists:\r\n\r\n >>> from itertools import islice\r\n >>> for i in islice(count(), None, 7):\r\n ... print i\r\n ...\r\n 0\r\n 1\r\n 2\r\n 3\r\n 4\r\n 5\r\n 6\r\n\r\nAn alternative is to resolve the iterator's elements, which looses the laziness (and therefore doesn't work with infinite lists).\r\n\r\n for c in list(gh.commits.iter())[:50]:\r\n ....\r\n\r\nThis would effectively fetch *ALL* commit objects in GitHub in one big list and then slice the first 50 out of that result.","updated_at":"2010/12/13 07:27:50 -0800","id":608217,"user":"nvie"},{"gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","created_at":"2010/12/13 08:19:17 -0800","body":"Generators like this one are not subscribtable, but this does not mean, that I can't return in immediate object from `iter` method which will support slicing and iteration. Wait for the patch, ok? :)","updated_at":"2010/12/13 08:19:17 -0800","id":608365,"user":"svetlyak40wt"},{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","created_at":"2010/12/21 14:21:14 -0800","body":"Hey Alexander, how's your patch progressing?","updated_at":"2010/12/21 14:21:14 -0800","id":628461,"user":"nvie"},{"gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","created_at":"2010/12/21 14:30:26 -0800","body":"Hi. Sorry for delay. It is hard to do this in stable manner, because there is no any documentation from the GitHub and I found no way to tell GitHub the page size.\r\n\r\nBy default, page size is 35 items. I need to know that this value will never changed or (better) to specify it myself. Without this, I can't to implement a reliable slicing.\r\n\r\nIf you want, I could try to implement it and hardcode that page's size is 35 items, but it could be broken someday.","updated_at":"2010/12/21 14:30:26 -0800","id":628486,"user":"svetlyak40wt"},{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","created_at":"2010/12/22 12:40:18 -0800","body":"You can safely use the static page size, [technoweenie](https://github.com/technoweenie) himself [promised me](http://twitter.com/technoweenie/status/17676244548059136) it won't change for the v2 API.","updated_at":"2010/12/22 12:40:18 -0800","id":630757,"user":"nvie"},{"gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","created_at":"2011/01/04 16:26:06 -0800","body":"Ok, I wrote this helper, to solve this task: https://github.com/svetlyak40wt/pagerator\r\nIt is generalized and could be used anywhere else, to iterate over any paged results.\r\n\r\nFor our case, gh.commits.iter() method should return be:\r\n\r\n def iter(self, project, branch=\"master\", file=None):\r\n return pagerator.IterableQuery(\r\n lambda page: self.get_values(\r\n \"list\", project, branch, file,\r\n filter=\"commits\", datatype=Commit,\r\n post_data=dict(page=page+1)\r\n ), \r\n 35 # page_size hardcoded in the GitHub\r\n )\r\n\r\nBut I can't test it right now, because I receive \"api route not recognized\" error from the GitHub, even for list method which worked previously. Do you know how to fix it?","updated_at":"2011/01/04 16:26:06 -0800","id":653676,"user":"svetlyak40wt"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,issues,labels,JNRowe,misc-overlay,b81a30109b72cf3356114dcc6e2e29ca b/tests/data/github.com,api,v2,json,issues,labels,JNRowe,misc-overlay,b81a30109b72cf3356114dcc6e2e29ca index 84de95f..5c09af0 100644 --- a/tests/data/github.com,api,v2,json,issues,labels,JNRowe,misc-overlay,b81a30109b72cf3356114dcc6e2e29ca +++ b/tests/data/github.com,api,v2,json,issues,labels,JNRowe,misc-overlay,b81a30109b72cf3356114dcc6e2e29ca @@ -1,14 +1,15 @@ status: 200 x-ratelimit-remaining: 58 content-location: https://github.com/api/v2/json/issues/labels/JNRowe/misc-overlay -x-runtime: 10ms -content-length: 35 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 44 +server: nginx/1.0.4 +x-runtime: 7ms x-ratelimit-limit: 60 -etag: "a97c4b6aaa3d373f86315a8577170b10" +etag: "966c6e8f6191c75088f7aeb71f8e458a" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:42:11 GMT +date: Thu, 25 Aug 2011 06:49:36 GMT content-type: application/json; charset=utf-8 -{"labels":["feature","bug","task"]} \ No newline at end of file +{"labels":["feature","bug","task","test_2"]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,issues,list,ask,python-github2,closed,3662da90eba27809e7bff7600392ec94 b/tests/data/github.com,api,v2,json,issues,list,ask,python-github2,closed,3662da90eba27809e7bff7600392ec94 index eec6517..e8a53e5 100644 --- a/tests/data/github.com,api,v2,json,issues,list,ask,python-github2,closed,3662da90eba27809e7bff7600392ec94 +++ b/tests/data/github.com,api,v2,json,issues,list,ask,python-github2,closed,3662da90eba27809e7bff7600392ec94 @@ -1,14 +1,15 @@ -status: 304 -x-ratelimit-remaining: 57 +status: 200 +x-ratelimit-remaining: 58 content-location: https://github.com/api/v2/json/issues/list/ask/python-github2/closed +-content-encoding: gzip connection: keep-alive -content-length: 46568 -server: nginx/0.7.67 -x-runtime: 233ms +content-length: 52973 +server: nginx/1.0.4 +x-runtime: 342ms x-ratelimit-limit: 60 -etag: "99198abdc7b302c3eb2571030f4bee4c" +etag: "4a2070617d134387326d466eb9068195" cache-control: private, max-age=0, must-revalidate -date: Tue, 31 May 2011 13:57:50 GMT +date: Thu, 25 Aug 2011 06:51:25 GMT content-type: application/json; charset=utf-8 -{"issues":[{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":52.0,"number":52,"votes":0,"created_at":"2011/05/28 02:03:37 -0700","comments":0,"body":"\nSee [this bug](https://github.com/ask/python-github2/issues/51#issuecomment-1253464)","title":"Document purpose, and use, of ``debug`` attributes.","updated_at":"2011/05/28 06:40:00 -0700","closed_at":"2011/05/28 06:40:00 -0700","html_url":"https://github.com/ask/python-github2/issues/52","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"fab591eb34c76cbd0716024ce22d4906","position":51.0,"number":51,"votes":0,"created_at":"2011/05/28 01:09:46 -0700","comments":12,"body":"```pycon \r\n>>> github.repos.watch(\"schacon/grit\")\r\nTraceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/repositories.py\", line 69, in watch\r\n return self.make_request(\"watch\", project)\r\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/core.py\", line 58, in make_request\r\n response = self.request.get(self.domain, command, *args)\r\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 70, in get\r\n return self.make_request(\"/\".join(path_components))\r\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 89, in make_request\r\n result = self.raw_request(url, extra_post_data, method=method)\r\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 113, in raw_request\r\n response.status, content))\r\nRuntimeError: unexpected response from github.com 401: '{\"error\":\"invalid repository to watch\"}'\r\n\r\n```\r\n\r\nI can't seem to watch that repository. I used the OAuth key to get the github object. ","title":"Watching repositories doesn't work","updated_at":"2011/05/28 20:30:12 -0700","closed_at":"2011/05/28 20:30:11 -0700","html_url":"https://github.com/ask/python-github2/issues/51","user":"myusuf3","labels":[],"state":"closed"},{"gravatar_id":"2f3f68f62f5fc642f0b716b355071176","position":50.0,"number":50,"votes":0,"created_at":"2011/05/23 18:05:57 -0700","comments":2,"body":"","title":"Fixing the init of the proxy code.","updated_at":"2011/05/23 21:09:45 -0700","diff_url":"https://github.com/ask/python-github2/pull/50.diff","patch_url":"https://github.com/ask/python-github2/pull/50.patch","pull_request_url":"https://github.com/ask/python-github2/pull/50","closed_at":"2011/05/23 20:43:20 -0700","html_url":"https://github.com/ask/python-github2/issues/50","user":"hub-cap","labels":[],"state":"closed"},{"gravatar_id":"fab591eb34c76cbd0716024ce22d4906","position":49.0,"number":49,"votes":0,"created_at":"2011/05/20 11:46:19 -0700","comments":8,"body":"I am was wondering if you could better document the Mocks being used for testing. I wouldn't mind writing up the test cases, if you could comment the testing code that is currently present. Increase the robustness of the project. \n\nThoughts? Even a link to the background knowledge needed to understand what you are doing. I am tried creating a couple of tests in my branch but unable to get anything but errors. \n\nMaybe a wiki describing setup and what needs to be done. ","title":"Testing Documentation/Wiki","updated_at":"2011/05/22 14:25:06 -0700","closed_at":"2011/05/22 14:25:06 -0700","html_url":"https://github.com/ask/python-github2/issues/49","user":"myusuf3","labels":[],"state":"closed"},{"gravatar_id":"2f3f68f62f5fc642f0b716b355071176","position":48.0,"number":48,"votes":0,"created_at":"2011/05/19 08:40:47 -0700","comments":3,"body":"* Added basic proxy support documentation","title":"Add proxy documentation","updated_at":"2011/05/19 15:12:47 -0700","diff_url":"https://github.com/ask/python-github2/pull/48.diff","patch_url":"https://github.com/ask/python-github2/pull/48.patch","pull_request_url":"https://github.com/ask/python-github2/pull/48","closed_at":"2011/05/19 15:09:09 -0700","html_url":"https://github.com/ask/python-github2/issues/48","user":"hub-cap","labels":[],"state":"closed"},{"gravatar_id":"2f3f68f62f5fc642f0b716b355071176","position":47.0,"number":47,"votes":0,"created_at":"2011/05/18 18:40:20 -0700","comments":1,"body":"Made the socks stuff optional. I wasnt able to test the extras_require portion of the setup.py (im not terribly well versed in setuptools) but i tested manually by uninstalling/reinstalling the socks lib and watching the error raised.","title":"Updated Add Proxy Support - now optional","updated_at":"2011/05/18 19:04:30 -0700","diff_url":"https://github.com/ask/python-github2/pull/47.diff","patch_url":"https://github.com/ask/python-github2/pull/47.patch","pull_request_url":"https://github.com/ask/python-github2/pull/47","closed_at":"2011/05/18 19:04:29 -0700","html_url":"https://github.com/ask/python-github2/issues/47","user":"hub-cap","labels":[],"state":"closed"},{"gravatar_id":"2f3f68f62f5fc642f0b716b355071176","position":46.0,"number":46,"votes":0,"created_at":"2011/05/18 09:37:00 -0700","comments":12,"body":"Adding HTTP proxy settings to the client, as well as to the request to allow github2 to be used behind a HTTP proxy","title":"Adding HTTP Proxy support to the Request and Client","updated_at":"2011/05/23 18:06:30 -0700","diff_url":"https://github.com/ask/python-github2/pull/46.diff","patch_url":"https://github.com/ask/python-github2/pull/46.patch","pull_request_url":"https://github.com/ask/python-github2/pull/46","closed_at":"2011/05/19 07:59:05 -0700","html_url":"https://github.com/ask/python-github2/issues/46","user":"hub-cap","labels":[],"state":"closed"},{"gravatar_id":"2f3f68f62f5fc642f0b716b355071176","position":45.0,"number":45,"votes":0,"created_at":"2011/05/18 08:47:38 -0700","comments":1,"body":"Adding HTTP proxy settings to the client, as well as to the request to allow github2 to be used behind a HTTP proxy","title":"Adding HTTP Proxy support to the Request and Client","updated_at":"2011/05/18 09:07:34 -0700","diff_url":"https://github.com/ask/python-github2/pull/45.diff","patch_url":"https://github.com/ask/python-github2/pull/45.patch","pull_request_url":"https://github.com/ask/python-github2/pull/45","closed_at":"2011/05/18 09:07:33 -0700","html_url":"https://github.com/ask/python-github2/issues/45","user":"hub-cap","labels":[],"state":"closed"},{"gravatar_id":"fab591eb34c76cbd0716024ce22d4906","position":44.0,"number":44,"votes":0,"created_at":"2011/05/14 20:43:34 -0700","comments":13,"body":"When getting the commits for repositories that have '.' it can't seem to find the repository.\n\n``` pycon\n>>> commits += github.commits.list('kennethreitz/osxpython.org')\nTraceback (most recent call last):\n File \"\", line 1, in \n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/commits.py\", line 37, in list\n filter=\"commits\", datatype=Commit)\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/core.py\", line 75, in get_values\n values = self.make_request(*args, **kwargs)\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/core.py\", line 58, in make_request\n response = self.request.get(self.domain, command, *args)\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 70, in get\n return self.make_request(\"/\".join(path_components))\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 89, in make_request\n result = self.raw_request(url, extra_post_data, method=method)\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 113, in raw_request\n response.status, content))\nRuntimeError: unexpected response from github.com 404: '{\"error\":\"Not Found\"}'\n```","title":"repositories with '.' are not found","updated_at":"2011/05/26 23:46:28 -0700","closed_at":"2011/05/26 18:03:57 -0700","html_url":"https://github.com/ask/python-github2/issues/44","user":"myusuf3","labels":[],"state":"closed"},{"gravatar_id":"2028496e3344d92d8b3af64eb0d9e19e","position":43.0,"number":43,"votes":0,"created_at":"2011/05/09 20:51:03 -0700","comments":8,"body":"The docs are already using Sphinx. It'd be much more convenient if they were hosted.\r\n\r\nhttp://Readthedocs.org is free and sphinx powered, getting them up there should be easy.\r\n\r\nFun even.","title":"Read the Docs","updated_at":"2011/05/11 07:02:48 -0700","closed_at":"2011/05/11 06:44:44 -0700","html_url":"https://github.com/ask/python-github2/issues/43","user":"GraylinKim","labels":[],"state":"closed"},{"gravatar_id":"b7699be15e710c4be309f9d537fb252b","position":42.0,"number":42,"votes":0,"created_at":"2011/05/09 08:24:36 -0700","comments":12,"body":"This is my just running 2to3 over the library, and fixing one or two things with json. Don't know if you want or need it. I'm using it for some blogofile stuff, which just bumped to python 3 for all main development, and wanted to keep using your work with my site.","title":"Python3","updated_at":"2011/05/23 00:55:08 -0700","diff_url":"https://github.com/ask/python-github2/pull/42.diff","patch_url":"https://github.com/ask/python-github2/pull/42.patch","pull_request_url":"https://github.com/ask/python-github2/pull/42","closed_at":"2011/05/19 15:19:30 -0700","html_url":"https://github.com/ask/python-github2/issues/42","user":"goosemo","labels":[],"state":"closed"},{"gravatar_id":"fab591eb34c76cbd0716024ce22d4906","position":41.0,"number":41,"votes":0,"created_at":"2011/04/24 09:35:15 -0700","comments":3,"body":"","title":"Easy way to call tests from cli","updated_at":"2011/04/27 09:45:11 -0700","diff_url":"https://github.com/ask/python-github2/pull/41.diff","patch_url":"https://github.com/ask/python-github2/pull/41.patch","pull_request_url":"https://github.com/ask/python-github2/pull/41","closed_at":"2011/04/27 09:45:11 -0700","html_url":"https://github.com/ask/python-github2/issues/41","user":"myusuf3","labels":[],"state":"closed"},{"gravatar_id":"464f76c5577389c5ca29e3d7cca133d5","position":40.0,"number":40,"votes":0,"created_at":"2011/04/22 12:26:50 -0700","comments":3,"body":"https://github.com/broderboy/python-github2/commit/48d85d517b4e51652217b71b264c866caa5ca874\r\n\r\nI'm not sure why git put that as a full file change\r\nline changed: prune doc/.build\r\n\r\nThanks\r\n\r\nOriginal Error: \r\nrunning install\r\nrunning bdist_egg\r\nrunning egg_info\r\nwriting requirements to github2.egg-info\\requires.txt\r\nwriting github2.egg-info\\PKG-INFO\r\nwriting top-level names to github2.egg-info\\top_level.txt\r\nwriting dependency_links to github2.egg-info\\dependency_links.txt\r\nwriting requirements to github2.egg-info\\requires.txt\r\nwriting github2.egg-info\\PKG-INFO\r\nwriting top-level names to github2.egg-info\\top_level.txt\r\nwriting dependency_links to github2.egg-info\\dependency_links.txt\r\nreading manifest file 'github2.egg-info\\SOURCES.txt'\r\nreading manifest template 'MANIFEST.in'\r\nTraceback (most recent call last):\r\n File \".\\setup.py\", line 46, in \r\n \"Topic :: Software Development :: Libraries\",\r\n File \"C:\\Python26\\lib\\distutils\\core.py\", line 152, in setup\r\n dist.run_commands()\r\n File \"C:\\Python26\\lib\\distutils\\dist.py\", line 975, in run_commands\r\n self.run_command(cmd)\r\n File \"C:\\Python26\\lib\\distutils\\dist.py\", line 995, in run_command\r\n cmd_obj.run()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\install.py\", line 73, in run\r\n self.do_egg_install()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\install.py\", line 93, in do_egg_install\r\n self.run_command('bdist_egg')\r\n File \"C:\\Python26\\lib\\distutils\\cmd.py\", line 333, in run_command\r\n self.distribution.run_command(command)\r\n File \"C:\\Python26\\lib\\distutils\\dist.py\", line 995, in run_command\r\n cmd_obj.run()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\bdist_egg.py\", line 167, in run\r\n self.run_command(\"egg_info\")\r\n File \"C:\\Python26\\lib\\distutils\\cmd.py\", line 333, in run_command\r\n self.distribution.run_command(command)\r\n File \"C:\\Python26\\lib\\distutils\\dist.py\", line 995, in run_command\r\n cmd_obj.run()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\egg_info.py\", line 179, in run\r\n self.find_sources()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\egg_info.py\", line 254, in find_sources\r\n mm.run()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\egg_info.py\", line 310, in run\r\n self.read_template()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\sdist.py\", line 204, in read_template\r\n _sdist.read_template(self)\r\n File \"C:\\Python26\\lib\\distutils\\command\\sdist.py\", line 336, in read_template\r\n self.filelist.process_template_line(line)\r\n File \"C:\\Python26\\lib\\distutils\\filelist.py\", line 129, in process_template_line\r\n (action, patterns, dir, dir_pattern) = self._parse_template_line(line)\r\n File \"C:\\Python26\\lib\\distutils\\filelist.py\", line 112, in _parse_template_line\r\n dir_pattern = convert_path(words[1])\r\n File \"C:\\Python26\\lib\\distutils\\util.py\", line 201, in convert_path\r\n raise ValueError, \"path '%s' cannot end with '/'\" % pathname\r\nValueError: path 'doc/.build/' cannot end with '/'","title":"Modified MANIFEST.in. It wasn't installing on Windows","updated_at":"2011/04/23 07:18:49 -0700","diff_url":"https://github.com/ask/python-github2/pull/40.diff","patch_url":"https://github.com/ask/python-github2/pull/40.patch","pull_request_url":"https://github.com/ask/python-github2/pull/40","closed_at":"2011/04/23 04:53:48 -0700","html_url":"https://github.com/ask/python-github2/issues/40","user":"broderboy","labels":[],"state":"closed"},{"gravatar_id":"fab591eb34c76cbd0716024ce22d4906","position":38.0,"number":38,"votes":0,"created_at":"2011/04/17 17:11:51 -0700","comments":9,"body":"e.g when I am using the call \r\n\r\nGithub(access_token=oauthtoken) -- it seems to work fine for all calls expect, the following call \r\n\r\nproject being repo.project\r\n\r\ncommits += self.client.commits.list(str(project))\r\n\r\n\r\nI get the follow exception\r\n\r\nunexpected response from github.com 401: '{\"error\":\"Couldn\\'t authenticate you\"}'\r\n\r\nI managed to work around this issue by creating the self.client using the following instantiation \r\n\r\nGithub(self.oauthtoken)\r\n\r\nIt probably not being pass down the OAuth token on the particular call. \r\n","title":"OAuth token isn't being passed down","updated_at":"2011/05/11 09:48:20 -0700","closed_at":"2011/05/11 09:48:20 -0700","html_url":"https://github.com/ask/python-github2/issues/38","user":"myusuf3","labels":[],"state":"closed"},{"gravatar_id":"2c8089a78bf15883302e9ac5b4367895","position":37.0,"number":37,"votes":0,"created_at":"2011/04/14 17:19:33 -0700","comments":2,"body":"The current [Commits API](http://develop.github.com/p/commits.html) specifies a user_id in the pathspec:\n\n`commits/list/:user_id/:repository/:branch`\n`commits/list/:user_id/:repository/:branch/*path`\n\nThis parameter was not present in the `list` or `show` methods of the `Commits` class, consequently requesting commits was not possible (as far as I could tell)\n\n","title":"added user_id to commits path spec","updated_at":"2011/04/15 05:13:56 -0700","diff_url":"https://github.com/ask/python-github2/pull/37.diff","patch_url":"https://github.com/ask/python-github2/pull/37.patch","pull_request_url":"https://github.com/ask/python-github2/pull/37","closed_at":"2011/04/15 05:13:56 -0700","html_url":"https://github.com/ask/python-github2/issues/37","user":"loganlinn","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":36.0,"number":36,"votes":0,"created_at":"2011/04/12 03:47:52 -0700","comments":2,"body":"@ask and interested others,\r\n\r\nYou said to treat the repo like home, but I just wanted to run this past you in case you have objections.\r\n\r\nThe changes are quite invasive. It strips out the examples from `README.rst`(it is a bit cluttered IMO), reformats many docstrings for use with Sphinx's [autodoc](http://sphinx.pocoo.org/tutorial.html#autodoc), fiddles with the cool `Attribute` docstring generator, etc.\r\n\r\nOpinions? If part of it is okay, say which part and I'll remove/rework the rest. If you hate it all just say so, it won't hurt my feelings I promise ;)\r\n\r\nThanks,\r\n\r\nJames","title":"Using Sphinx doc for documentation","updated_at":"2011/04/13 13:06:16 -0700","diff_url":"https://github.com/ask/python-github2/pull/36.diff","patch_url":"https://github.com/ask/python-github2/pull/36.patch","pull_request_url":"https://github.com/ask/python-github2/pull/36","closed_at":"2011/04/13 13:01:44 -0700","html_url":"https://github.com/ask/python-github2/issues/36","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"1ee6b40a1acbcc00eb32e306e0e94037","position":35.0,"number":35,"votes":0,"created_at":"2011/04/10 18:02:50 -0700","comments":1,"body":"I added a function to get all blobs as a dictionary between the path & sha for a given tree. ","title":"Get All Blobs","updated_at":"2011/04/11 02:38:53 -0700","diff_url":"https://github.com/ask/python-github2/pull/35.diff","patch_url":"https://github.com/ask/python-github2/pull/35.patch","pull_request_url":"https://github.com/ask/python-github2/pull/35","closed_at":"2011/04/11 02:38:53 -0700","html_url":"https://github.com/ask/python-github2/issues/35","user":"surajram","labels":[],"state":"closed"},{"gravatar_id":"3aa27c0add742f542848af3b8a9e980c","position":34.0,"number":34,"votes":0,"created_at":"2011/03/26 10:57:22 -0700","comments":4,"body":"e.g. github.repos.list() specifies following behaviour: \"If no user is given, repositoris for the currently logged in user are returned.\"\r\n\r\nHowever this works only if using username for authentication but with OAuth2 access token following error is thrown:\r\n\r\nRuntimeError: unexpected response from github.com 401: '{\"error\":\"api route not recognized\"}'\r\n\r\nWorkaround for this is to request current username using following pattern:\r\n\r\nuser = github.users.show(\"\")\r\n\r\nand then use returned username as an parameter for list(). \r\n\r\nI guess we need to populate the internal username in a constructor via show API when username is not given or is there better solution?\r\n\r\n\r\n\r\n\r\n\r\n","title":"Getting \"currently logged in user data\" when using access_token","updated_at":"2011/05/10 06:57:46 -0700","diff_url":"https://github.com/ask/python-github2/pull/34.diff","patch_url":"https://github.com/ask/python-github2/pull/34.patch","pull_request_url":"https://github.com/ask/python-github2/pull/34","closed_at":"2011/05/10 06:57:46 -0700","html_url":"https://github.com/ask/python-github2/issues/34","user":"pmuilu","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":33.0,"number":33,"votes":0,"created_at":"2011/03/03 09:26:59 -0800","comments":7,"body":"A few months ago when playing with `python-github2` I switched to using `httplib2` for network requests. I hadn't really planned on opening a pull request, but I've been using it as my full time branch so I've changed my mind :).\r\n\r\nThe benefits of `httplib2` are the (imo) simplification of the request handling, built-in caching support with effortless `ETag` handling and free HTTP compression support should GitHub enable it at some point..\r\n\r\nI'm just curious how you guys feel about it. Maybe there are some changes to be made to make it pullable, maybe you just don't like the idea of another external dependency or .\r\n\r\nThanks,\r\n\r\nJames","title":"RFC: httplib2 usage","updated_at":"2011/04/11 02:41:30 -0700","diff_url":"https://github.com/ask/python-github2/pull/33.diff","patch_url":"https://github.com/ask/python-github2/pull/33.patch","pull_request_url":"https://github.com/ask/python-github2/pull/33","closed_at":"2011/04/11 02:41:30 -0700","html_url":"https://github.com/ask/python-github2/issues/33","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"1dc7387cedba30b9a3d12792084b4b4a","position":32.0,"number":32,"votes":0,"created_at":"2011/02/19 07:18:36 -0800","comments":1,"body":"Added two operations in the issues module: list labels and search issues by label.","title":"List labels and Search Issues by Label","updated_at":"2011/04/09 10:25:23 -0700","diff_url":"https://github.com/ask/python-github2/pull/32.diff","patch_url":"https://github.com/ask/python-github2/pull/32.patch","pull_request_url":"https://github.com/ask/python-github2/pull/32","closed_at":"2011/04/09 10:25:23 -0700","html_url":"https://github.com/ask/python-github2/issues/32","user":"bartdag","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":31.0,"number":31,"votes":0,"created_at":"2011/02/16 06:44:12 -0800","comments":1,"body":"Adding or removing labels has recently broken, this small change to force `POST` fixes it.\r\n\r\nThanks,\r\n\r\nJames","title":"Fix issue label addition/removal.","updated_at":"2011/04/09 10:36:11 -0700","diff_url":"https://github.com/ask/python-github2/pull/31.diff","patch_url":"https://github.com/ask/python-github2/pull/31.patch","pull_request_url":"https://github.com/ask/python-github2/pull/31","closed_at":"2011/04/09 10:36:11 -0700","html_url":"https://github.com/ask/python-github2/issues/31","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"377e59815b7b7d6dfc23c808f0d07f05","position":30.0,"number":30,"votes":1,"created_at":"2011/02/15 12:30:09 -0800","comments":1,"body":"From:\r\n\r\nhttp://develop.github.com/p/repo.html\r\n\r\nrepos.delete returns a dictionary with a delete_token key. This key then needs to be POST'd back to the same URL. The repos.delete method as it is does nothing with this key and does not accept a post_data dictionary as a keyword argument.","title":"repos.delete not functional","updated_at":"2011/04/13 13:01:43 -0700","closed_at":"2011/04/13 13:01:43 -0700","html_url":"https://github.com/ask/python-github2/issues/30","user":"sxalexander","labels":[],"state":"closed"},{"gravatar_id":"d7ed4dc5ad80ffecb3aed70fc7190e52","position":29.0,"number":29,"votes":0,"created_at":"2011/01/25 07:13:12 -0800","comments":1,"body":"Steps to reproduce:\n\nfrom github2.client import Github\nclient = Github(username='', api_token='', requests_per_second=1)\npull_req = client.request.get('pulls', 'username/repo_name', '')\n\nThis works fine for most pull requests. However, if a commit associated with the pull request has 'line notes', it seems to fail.\nAs an example, you can try this on one of my pull requests:\n\npull_req = client.request.get('pulls', 'larsbutler/roundabout', '1')","title":"\"Github Server Error\" when trying to get pull requests which include line notes","updated_at":"2011/01/25 08:16:09 -0800","closed_at":"2011/01/25 08:16:09 -0800","html_url":"https://github.com/ask/python-github2/issues/29","user":"larsbutler","labels":[],"state":"closed"},{"gravatar_id":"4174216c1dc0f223ce608d5a3b66a585","position":28.0,"number":28,"votes":0,"created_at":"2010/12/30 10:28:59 -0800","comments":8,"body":"This implements the github API pull requests functionality. ","title":"Pull requests","updated_at":"2011/05/29 08:27:58 -0700","diff_url":"https://github.com/ask/python-github2/pull/28.diff","patch_url":"https://github.com/ask/python-github2/pull/28.patch","pull_request_url":"https://github.com/ask/python-github2/pull/28","closed_at":"2011/05/29 08:27:23 -0700","html_url":"https://github.com/ask/python-github2/issues/28","user":"ChristopherMacGown","labels":[],"state":"closed"},{"gravatar_id":"cf04727870245c17f455fb05b25f9f8e","position":27.0,"number":27,"votes":0,"created_at":"2010/12/21 12:37:06 -0800","comments":0,"body":"The URL wasn't escaped properly when labels included a space \"This is a label\" during the add_label request.","title":"Failed to add a label with a space to an issue ","updated_at":"2011/04/09 09:47:50 -0700","diff_url":"https://github.com/ask/python-github2/pull/27.diff","patch_url":"https://github.com/ask/python-github2/pull/27.patch","pull_request_url":"https://github.com/ask/python-github2/pull/27","closed_at":"2011/04/09 09:47:50 -0700","html_url":"https://github.com/ask/python-github2/issues/27","user":"jweinberg","labels":[],"state":"closed"},{"gravatar_id":"4174216c1dc0f223ce608d5a3b66a585","position":26.0,"number":26,"votes":0,"created_at":"2010/12/16 13:59:45 -0800","comments":1,"body":"","title":"Patch to add organizations and teams.","updated_at":"2010/12/30 10:30:53 -0800","diff_url":"https://github.com/ask/python-github2/pull/26.diff","patch_url":"https://github.com/ask/python-github2/pull/26.patch","pull_request_url":"https://github.com/ask/python-github2/pull/26","closed_at":"2010/12/30 10:30:53 -0800","html_url":"https://github.com/ask/python-github2/issues/26","user":"ChristopherMacGown","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":25.0,"number":25,"votes":0,"created_at":"2010/12/10 23:18:57 -0800","comments":1,"body":"As [nvie](http://github.com/nvie) rightly pointed out in [my other pull request](https://github.com/ask/python-github2/pull/14#issuecomment-601878), I hadn't added any documentation for my changes... here that is.\r\n\r\nI've also fixed issue searches for multiple words. I only spotted the problem as a result of adding the entry to `README.rst`, so I should probably learn something from that ;)\r\n\r\nFinally, there is some slight reformatting of the documentation. *Most* of the text was wrapped at ~80 characters and code samples indented 4 spaces, the [final commit](https://github.com/JNRowe/python-github2/commit/ff9132f9054bcc3827c94fd927c30cf257d84954) just makes that consistent across the rest of the documentation. I realise that may be controversial, but wrapped or not wrapped it should at least be consistent.\r\n\r\nThanks,\r\n\r\nJames","title":"Fix for issue searching and documentation updates.","updated_at":"2010/12/12 23:27:36 -0800","diff_url":"https://github.com/ask/python-github2/pull/25.diff","patch_url":"https://github.com/ask/python-github2/pull/25.patch","pull_request_url":"https://github.com/ask/python-github2/pull/25","closed_at":"2010/12/12 23:27:36 -0800","html_url":"https://github.com/ask/python-github2/issues/25","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","position":23.0,"number":23,"votes":0,"created_at":"2010/12/08 00:17:49 -0800","comments":4,"body":"See the docs at http://develop.github.com/p/orgs.html","title":"Add support for the new Organizations API","updated_at":"2011/05/10 06:53:12 -0700","closed_at":"2011/05/10 06:12:12 -0700","html_url":"https://github.com/ask/python-github2/issues/23","user":"nvie","labels":[],"state":"closed"},{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","position":22.0,"number":22,"votes":0,"created_at":"2010/12/06 21:28:03 -0800","comments":0,"body":"Hi Ask,\r\n\r\nI added support for authenticating using Github's OAuth service. When you do this, you get an access_token, which you can now use instead of the username/api_token combination. You pass it in to the Github constructor like this:\r\n\r\n github = Github(access_token=\"...\")\r\n\r\nIt puts the access_token on the GET request, like described in the third bullet under [Web Application Flow](https://gist.github.com/419219).\r\n\r\nIts use is documented in the README file.\r\n\r\nCheers,\r\nVincent\r\n","title":"Added support for Github's OAuth-based URL requests","updated_at":"2010/12/08 00:16:25 -0800","diff_url":"https://github.com/ask/python-github2/pull/22.diff","patch_url":"https://github.com/ask/python-github2/pull/22.patch","pull_request_url":"https://github.com/ask/python-github2/pull/22","closed_at":"2010/12/08 00:16:25 -0800","html_url":"https://github.com/ask/python-github2/issues/22","user":"nvie","labels":[],"state":"closed"},{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","position":21.0,"number":21,"votes":0,"created_at":"2010/12/06 13:10:09 -0800","comments":1,"body":"Hi Ask,\r\n\r\nToday, I commited several patches. First of all, I added support for authenticating using `Github(access_token=\"...\")` GET requests instead of `Github(username=\"foo\", api_token=\"...\")` POST requests. This is the way Github API v2 URLs need to be called when using their (experimental) OAuth model.\r\n\r\nFurthermore, while I was testing this, the Github API seems to have changed the format of all dates to be nice UTC dates with timezone info. This makes the special conversion hoops and tricks unnecessary, so I removed them. For safety, I kept the \"flexible date conversion function lookup\" construct around, but maybe this could be removed as a whole. I'll leave this judgement up to you.\r\n\r\nHave a blast!\r\n\r\nCheers,\r\nVincent\r\n","title":"Add support for OAuth URLs, and a fix for date format","updated_at":"2010/12/06 21:28:42 -0800","diff_url":"https://github.com/ask/python-github2/pull/21.diff","patch_url":"https://github.com/ask/python-github2/pull/21.patch","pull_request_url":"https://github.com/ask/python-github2/pull/21","closed_at":"2010/12/06 21:28:42 -0800","html_url":"https://github.com/ask/python-github2/issues/21","user":"nvie","labels":[],"state":"closed"},{"gravatar_id":"9de3f3969367fffe2051c2b405b79810","position":20.0,"number":20,"votes":0,"created_at":"2010/11/25 16:07:26 -0800","comments":1,"body":"http://develop.github.com/p/repo.html:\r\n\r\n\"To get a list of repos you can push to that are not your own, GET\r\n\r\nrepos/pushable\"\r\n\r\nI was surprised not to find this, so I added it.","title":"Added github.repos.pushable() as described in the API documentation.","updated_at":"2010/11/26 13:37:12 -0800","diff_url":"https://github.com/ask/python-github2/pull/20.diff","patch_url":"https://github.com/ask/python-github2/pull/20.patch","pull_request_url":"https://github.com/ask/python-github2/pull/20","closed_at":"2010/11/26 13:37:12 -0800","html_url":"https://github.com/ask/python-github2/issues/20","user":"johl","labels":[],"state":"closed"},{"gravatar_id":"f3794e603ef53b0513ab45b6565ee457","position":19.0,"number":19,"votes":0,"created_at":"2010/11/19 21:23:56 -0800","comments":5,"body":"I realized I didn't include fractions of a second in my earlier api-limits change. This one does. \r\n\r\nThis pull includes my commits from repo-project as well.","title":"Api limits","updated_at":"2010/11/26 13:25:25 -0800","diff_url":"https://github.com/ask/python-github2/pull/19.diff","patch_url":"https://github.com/ask/python-github2/pull/19.patch","pull_request_url":"https://github.com/ask/python-github2/pull/19","closed_at":"2010/11/26 13:25:25 -0800","html_url":"https://github.com/ask/python-github2/issues/19","user":"jdunck","labels":[],"state":"closed"},{"gravatar_id":"f3794e603ef53b0513ab45b6565ee457","position":18.0,"number":18,"votes":0,"created_at":"2010/11/19 21:00:10 -0800","comments":0,"body":"Hey Ask, I added a Repo.project property - in my client code, I'm fairly often having to pass the project string to methods, and writing owner+'/'+name is getting boring. :-)","title":"Repo project","updated_at":"2010/11/20 12:08:27 -0800","diff_url":"https://github.com/ask/python-github2/pull/18.diff","patch_url":"https://github.com/ask/python-github2/pull/18.patch","pull_request_url":"https://github.com/ask/python-github2/pull/18","closed_at":"2010/11/20 12:08:27 -0800","html_url":"https://github.com/ask/python-github2/issues/18","user":"jdunck","labels":[],"state":"closed"},{"gravatar_id":"ad448ae5b261e252ddaeeccf5c69a4ba","position":17.0,"number":17,"votes":1,"created_at":"2010/11/12 04:14:24 -0800","comments":1,"body":"This is very useful and provided by the underlying api and I would like to use it for my cmd line tool - https://github.com/kashifrazzaqui/github-issues\r\n\r\nIf you will please add this.\r\nThanks.","title":"List does not allow filteration by label","updated_at":"2011/04/09 10:51:59 -0700","closed_at":"2011/04/09 10:51:59 -0700","html_url":"https://github.com/ask/python-github2/issues/17","user":"kashifrazzaqui","labels":[],"state":"closed"},{"gravatar_id":"67e05420d4dd3492097aeb77f44f7867","position":16.0,"number":16,"votes":0,"created_at":"2010/11/04 17:26:33 -0700","comments":0,"body":"Fixes https://github.com/ask/python-github2/issues#issue/15\r\n\r\nThis was caused by github switching to HTTPS. Is in production at http://djangopackages.com","title":"Changed over to HTTPS","updated_at":"2010/11/24 06:10:48 -0800","diff_url":"https://github.com/ask/python-github2/pull/16.diff","patch_url":"https://github.com/ask/python-github2/pull/16.patch","pull_request_url":"https://github.com/ask/python-github2/pull/16","closed_at":"2010/11/24 06:10:48 -0800","html_url":"https://github.com/ask/python-github2/issues/16","user":"pydanny","labels":[],"state":"closed"},{"gravatar_id":"67e05420d4dd3492097aeb77f44f7867","position":15.0,"number":15,"votes":0,"created_at":"2010/11/04 16:56:50 -0700","comments":1,"body":"The API seems to work when I do curl. But it breaks via python-github2. \r\n\r\n >>> gh.commits.list(\"mojombo/grit\", \"master\")\r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/commits.py\", line 31, in list\r\n filter=\"commits\", datatype=Commit)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/core.py\", line 60, in get_values\r\n values = self.make_request(*args, **kwargs)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/core.py\", line 43, in make_request\r\n response = self.request.get(self.domain, command, *args)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/request.py\", line 53, in get\r\n return self.make_request(\"/\".join(path_components))\r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/request.py\", line 63, in make_request\r\n return self.raw_request(url, extra_post_data, method=method)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/request.py\", line 91, in raw_request\r\n json = simplejson.loads(response_text)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/lib/python2.6/site-packages/simplejson/__init__.py\", line 384, in loads\r\n return _default_decoder.decode(s)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/lib/python2.6/site-packages/simplejson/decoder.py\", line 402, in decode\r\n obj, end = self.raw_decode(s, idx=_w(s, 0).end())\r\n File \"/Users/pydanny/projects/djangopackages/envdp/lib/python2.6/site-packages/simplejson/decoder.py\", line 420, in raw_decode\r\n raise JSONDecodeError(\"No JSON object could be decoded\", s, idx)\r\n JSONDecodeError: No JSON object could be decoded: line 1 column 0 (char 0)","title":"commits API is broken","updated_at":"2010/11/04 17:27:00 -0700","closed_at":"2010/11/04 17:27:00 -0700","html_url":"https://github.com/ask/python-github2/issues/15","user":"pydanny","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":14.0,"number":14,"votes":0,"created_at":"2010/11/02 13:17:42 -0700","comments":2,"body":"Hi, \r\n\r\nJust a couple of small commits to fix minor problems I've found, and add support for some missing issues features. If you prefer to receive changes in a different way, please just say and I'll rework these(and any future ones) to fit.\r\n\r\nI'll take this opportunity to say thanks for releasing this package, I've found it very useful when playing with the github API.\r\n\r\nThanks,\r\n\r\nJames.\r\n","title":"Small fixes and more support for issues","updated_at":"2010/12/09 22:41:52 -0800","diff_url":"https://github.com/ask/python-github2/pull/14.diff","patch_url":"https://github.com/ask/python-github2/pull/14.patch","pull_request_url":"https://github.com/ask/python-github2/pull/14","closed_at":"2010/12/10 06:32:31 -0800","html_url":"https://github.com/ask/python-github2/issues/14","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"b4f902096ea2ccfce71443d1d8fee5b3","position":13.0,"number":13,"votes":0,"created_at":"2010/10/20 09:38:43 -0700","comments":0,"body":"I added some more fields that are in the API but not on github2 Repositories:\r\n\r\n- created_at\r\n- pushed_at\r\n- has_wiki\r\n- has_issues\r\n- has_downloads","title":"More information on Repository","updated_at":"2010/10/29 03:23:50 -0700","diff_url":"https://github.com/ask/python-github2/pull/13.diff","patch_url":"https://github.com/ask/python-github2/pull/13.patch","pull_request_url":"https://github.com/ask/python-github2/pull/13","closed_at":"2010/10/29 03:23:50 -0700","html_url":"https://github.com/ask/python-github2/issues/13","user":"ojii","labels":[],"state":"closed"},{"gravatar_id":"4053d6caab18829c4e8d393b6afa8ad8","position":12.0,"number":12,"votes":0,"created_at":"2010/10/15 15:45:16 -0700","comments":1,"body":".. this directory is also used by the `pastedeploy` package\r\nhttp://twitter.com/ActiveState/status/27484677815\r\nPut it in site-packages/github2/tests instead.\r\n\r\n ~/Library/Python/2.7/bin \r\n ~/Library/Python/2.7/bin/github_manage_collaborators \r\n ~/Library/Python/2.7/lib \r\n ~/Library/Python/2.7/lib/python \r\n ~/Library/Python/2.7/lib/python/site-packages \r\n ~/Library/Python/2.7/lib/python/site-packages/github2 \r\n ~/Library/Python/2.7/lib/python/site-packages/github2-0.1.3-py2.7.egg-info \r\n ~/Library/Python/2.7/lib/python/site-packages/github2-0.1.3-py2.7.egg-info/PKG-INFO \r\n ~/Library/Python/2.7/lib/python/site-packages/github2-0.1.3-py2.7.egg-info/SOURCES.txt \r\n ~/Library/Python/2.7/lib/python/site-packages/github2-0.1.3-py2.7.egg-info/dependency_links.txt \r\n ~/Library/Python/2.7/lib/python/site-packages/github2-0.1.3-py2.7.egg-info/top_level.txt \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/__init__.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/client.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/commits.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/core.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/issues.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/repositories.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/request.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/users.py \r\n ~/Library/Python/2.7/lib/python/site-packages/tests \r\n ~/Library/Python/2.7/lib/python/site-packages/tests/__init__.py \r\n ~/Library/Python/2.7/lib/python/site-packages/tests/unit.py ","title":"Avoiding polluting site-packages/tests/ directory","updated_at":"2010/12/09 22:39:34 -0800","closed_at":"2010/12/09 22:39:34 -0800","html_url":"https://github.com/ask/python-github2/issues/12","user":"srid","labels":[],"state":"closed"},{"gravatar_id":"9bfcdf9a72021d081a4cebf69a49ada8","position":11.0,"number":11,"votes":0,"created_at":"2010/10/15 04:42:12 -0700","comments":1,"body":"Python's timedelta did not have a 'total_seconds' method before python 2.7. This patches calculates seconds as documented at http://docs.python.org/library/datetime.html#datetime.timedelta.total_seconds.\n\nThis makes github2 compatible with python2.6 at least.\n\nPatch here: http://gist.github.com/628061","title":"Incompatibility for python 2.6: timedelta total_seconds","updated_at":"2011/04/13 13:06:54 -0700","closed_at":"2011/04/13 13:06:54 -0700","html_url":"https://github.com/ask/python-github2/issues/11","user":"arthur-debert","labels":[],"state":"closed"},{"gravatar_id":"f3794e603ef53b0513ab45b6565ee457","position":10.0,"number":10,"votes":0,"created_at":"2010/09/20 21:32:49 -0700","comments":1,"body":"I added a param to the Github class which enforces rate limits by sleeping the thread if requests are occurring too fast.\r\n\r\nIt's backwards compatible because delays only happen if requests_per_second is passed in. Includes a test, some docstrings, and an updated README.\r\n","title":"Api limits","updated_at":"2010/09/20 22:55:16 -0700","diff_url":"https://github.com/ask/python-github2/pull/10.diff","patch_url":"https://github.com/ask/python-github2/pull/10.patch","pull_request_url":"https://github.com/ask/python-github2/pull/10","closed_at":"2010/09/21 05:55:06 -0700","html_url":"https://github.com/ask/python-github2/issues/10","user":"jdunck","labels":[],"state":"closed"},{"gravatar_id":"5b45540ae377ec54a071f313b7193a27","position":9.0,"number":9,"votes":0,"created_at":"2010/07/28 12:56:51 -0700","comments":2,"body":" Traceback (most recent call last):\r\n File \"migrate_to_github.py\", line 74, in \r\n gh = Github()\r\n TypeError: __init__() takes at least 3 arguments (1 given)\r\n","title":"Doesn't support unauthenticated session","updated_at":"2011/04/18 07:04:50 -0700","closed_at":"2011/04/18 07:04:50 -0700","html_url":"https://github.com/ask/python-github2/issues/9","user":"dabrahams","labels":[],"state":"closed"},{"gravatar_id":"71c4e8223f5bddfbcce0607d387d2125","position":8.0,"number":8,"votes":1,"created_at":"2010/06/20 06:13:37 -0700","comments":1,"body":"There is a cool new way to do Github authentication: http://github.com/blog/656-github-oauth2-support","title":"support for the new OAuth2 authentication","updated_at":"2011/04/26 06:31:50 -0700","closed_at":"2011/04/26 06:31:50 -0700","html_url":"https://github.com/ask/python-github2/issues/8","user":"tarpas","labels":[],"state":"closed"},{"gravatar_id":"7ea0cc75793eb2b1ada4abc953a41592","position":7.0,"number":7,"votes":0,"created_at":"2010/05/26 17:08:41 -0700","comments":3,"body":"Python 2.6 includes simplejson (renaming to just json), removing the need for the external dep. To work on 2.5 and 2.6, use try:import:\r\nhttp://github.com/adamv/python-github2/commit/5b2f09d89420aac0d071522b3fbed9b026af6def\r\n","title":"Use json instead of simplejson on Python 2.6","updated_at":"2011/04/09 10:46:22 -0700","closed_at":"2011/04/09 10:46:22 -0700","html_url":"https://github.com/ask/python-github2/issues/7","user":"adamv","labels":[],"state":"closed"},{"gravatar_id":"7ea0cc75793eb2b1ada4abc953a41592","position":6.0,"number":6,"votes":0,"created_at":"2010/05/25 21:59:37 -0700","comments":2,"body":"An object's __repr__ in Python 2.x is required to be ASCII. Various objects in this API return unicode values, as unicode is returned from titles, etc. from the web calls, and those are used in __repr__.\r\n\r\nIn my particular case, I got an error printing Issues that happened to contain non-ASCII characters.\r\n\r\nI'll probably add a commit to this bug tomorrow/later.","title":"__repr__ should return ASCII on Python 2.x","updated_at":"2010/12/08 19:46:28 -0800","closed_at":"2010/12/08 19:46:28 -0800","html_url":"https://github.com/ask/python-github2/issues/6","user":"adamv","labels":[],"state":"closed"},{"gravatar_id":"2e47ce8a038f8eaf3fe80c069e380814","position":4.0,"number":4,"votes":0,"created_at":"2010/04/17 17:24:29 -0700","comments":1,"body":"This package isn't on PyPi near as I can tell.\r\n\r\n* http://pypi.python.org/pypi/github2 \r\n* http://pypi.python.org/pypi/python-github2\r\n\r\nResponse from easy_install:\r\nNo local packages or download links found for python-github2","title":"Not installable via easy_install","updated_at":"2010/04/19 02:26:01 -0700","closed_at":"2010/04/19 02:26:01 -0700","html_url":"https://github.com/ask/python-github2/issues/4","user":"joestump","labels":[],"state":"closed"},{"gravatar_id":"d819f7576d53088db65789b9732141b3","position":3.0,"number":3,"votes":0,"created_at":"2009/11/12 21:16:20 -0800","comments":2,"body":"In your README, your import path says\r\n\r\n >>> from github.client import Github\r\n\r\nbut it should really be\r\n\r\n >>> from github2.client import Github","title":"README has improper imports","updated_at":"2009/11/13 03:32:29 -0800","closed_at":"2009/11/13 03:32:29 -0800","html_url":"https://github.com/ask/python-github2/issues/3","user":"justinlilly","labels":[],"state":"closed"},{"gravatar_id":"d819f7576d53088db65789b9732141b3","position":2.0,"number":2,"votes":0,"created_at":"2009/11/12 21:15:17 -0800","comments":1,"body":"When searching repos for django, I get an error caused by the emdash in the description of http://github.com/brosner/django \r\n\r\n Traceback: \r\n >>> github.repos.search('django')\r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"/Users/jlilly/src/githubgraphs/env/lib/python2.5/site-packages/github2/repositories.py\", line 21, in search\r\n return self.make_request(\"search\", query, filter=\"repositories\")\r\n File \"/Users/jlilly/src/githubgraphs/env/lib/python2.5/site-packages/github2/core.py\", line 42, in make_request\r\n response = self.request.get(self.domain, command, *args)\r\n File \"/Users/jlilly/src/githubgraphs/env/lib/python2.5/site-packages/github2/request.py\", line 46, in get\r\n return self.make_request(\"/\".join(path_components))\r\n File \"/Users/jlilly/src/githubgraphs/env/lib/python2.5/site-packages/github2/request.py\", line 55, in make_request\r\n return self.raw_request(url, extra_post_data)\r\n File \"/Users/jlilly/src/githubgraphs/env/lib/python2.5/site-packages/github2/request.py\", line 71, in raw_request\r\n response_text = response.read().encode(\"utf-8\")\r\n UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 7065: ordinal not in range(128)\r\n","title":"Unicode handling error","updated_at":"2009/11/13 03:32:29 -0800","closed_at":"2009/11/13 03:32:29 -0800","html_url":"https://github.com/ask/python-github2/issues/2","user":"justinlilly","labels":[],"state":"closed"}]} \ No newline at end of file +{"issues":[{"gravatar_id":"2b3629571060965b03e885ba93c078fc","position":1.0,"number":59,"votes":0,"created_at":"2011/07/29 19:04:58 -0700","comments":2,"body":"I want to use raw_request to complete the OAuth flow, but it doesn't respond correctly unless the Accept header is correct.","title":"Fix the Accept header.","updated_at":"2011/08/15 13:03:53 -0700","diff_url":"https://github.com/ask/python-github2/pull/59.diff","patch_url":"https://github.com/ask/python-github2/pull/59.patch","pull_request_url":"https://github.com/ask/python-github2/pull/59","closed_at":"2011/08/15 13:03:53 -0700","html_url":"https://github.com/ask/python-github2/issues/59","user":"wadey","labels":[],"state":"closed"},{"gravatar_id":"68546566350063c9017dfeae5000f6b1","position":1.0,"number":57,"votes":0,"created_at":"2011/07/12 02:48:53 -0700","comments":6,"body":"I spent a good amount of time trying to figure out the proper way to call the PullRequests.create method. I'm raising a TypeError because if the user doesn't specify a title, a NoneType error will be raised later. \r\n\r\nMaybe it would be a good idea to also write an example of the call with the format for the project name. For now I've just tried to make it more obvious which project the 'project' parameter refers to.","title":"pull-requests - raise TypeError and better docs","updated_at":"2011/07/12 09:52:23 -0700","diff_url":"https://github.com/ask/python-github2/pull/57.diff","patch_url":"https://github.com/ask/python-github2/pull/57.patch","pull_request_url":"https://github.com/ask/python-github2/pull/57","closed_at":"2011/07/12 08:32:30 -0700","html_url":"https://github.com/ask/python-github2/issues/57","user":"mapleoin","labels":[],"state":"closed"},{"gravatar_id":"2d13e27bf46a6160e0bf3d455aa7fd68","position":1.0,"number":56,"votes":0,"created_at":"2011/07/09 16:50:28 -0700","comments":5,"body":"The quickstart example in the documentation fails with \r\n\r\n>>> len(github.repos.watchers(\"ask/python-github2\"))\r\nSSLHandshakeError: [Errno 1] _ssl.c:480: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed\r\n\r\nand I cannot find any information on what to do in either the error message nor the documentation.","title":"SSL certificate verify failed","updated_at":"2011/07/10 15:34:54 -0700","diff_url":"https://github.com/ask/python-github2/pull/56.diff","patch_url":"https://github.com/ask/python-github2/pull/56.patch","pull_request_url":"https://github.com/ask/python-github2/pull/56","closed_at":"2011/07/10 15:34:23 -0700","html_url":"https://github.com/ask/python-github2/issues/56","user":"ukoethe","labels":[],"state":"closed"},{"gravatar_id":"9124210529f6eb59754932c413dd3c69","position":1.0,"number":54,"votes":0,"created_at":"2011/06/29 16:05:17 -0700","comments":1,"body":"","title":"added possibility to list all repositories of certain organization","updated_at":"2011/06/30 09:43:40 -0700","diff_url":"https://github.com/ask/python-github2/pull/54.diff","patch_url":"https://github.com/ask/python-github2/pull/54.patch","pull_request_url":"https://github.com/ask/python-github2/pull/54","closed_at":"2011/06/30 09:43:40 -0700","html_url":"https://github.com/ask/python-github2/issues/54","user":"garbas","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":53.0,"number":53,"votes":0,"created_at":"2011/05/28 22:15:49 -0700","comments":2,"body":"It would make more sense, and be easy to filter wanted data, if debug info was handled with the `logging` module. Side effect being the output will change significantly, but does it matter for debugging output anyway?","title":"Use logging for debug information.","updated_at":"2011/06/20 09:43:44 -0700","closed_at":"2011/06/20 09:43:44 -0700","html_url":"https://github.com/ask/python-github2/issues/53","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":52.0,"number":52,"votes":0,"created_at":"2011/05/28 02:03:37 -0700","comments":0,"body":"\nSee [this bug](https://github.com/ask/python-github2/issues/51#issuecomment-1253464)","title":"Document purpose, and use, of ``debug`` attributes.","updated_at":"2011/05/28 06:40:00 -0700","closed_at":"2011/05/28 06:40:00 -0700","html_url":"https://github.com/ask/python-github2/issues/52","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"fab591eb34c76cbd0716024ce22d4906","position":51.0,"number":51,"votes":0,"created_at":"2011/05/28 01:09:46 -0700","comments":14,"body":"```pycon \r\n>>> github.repos.watch(\"schacon/grit\")\r\nTraceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/repositories.py\", line 69, in watch\r\n return self.make_request(\"watch\", project)\r\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/core.py\", line 58, in make_request\r\n response = self.request.get(self.domain, command, *args)\r\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 70, in get\r\n return self.make_request(\"/\".join(path_components))\r\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 89, in make_request\r\n result = self.raw_request(url, extra_post_data, method=method)\r\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 113, in raw_request\r\n response.status, content))\r\nRuntimeError: unexpected response from github.com 401: '{\"error\":\"invalid repository to watch\"}'\r\n\r\n```\r\n\r\nI can't seem to watch that repository. I used the OAuth key to get the github object. ","title":"Watching repositories doesn't work","updated_at":"2011/06/02 07:57:47 -0700","closed_at":"2011/05/28 20:30:11 -0700","html_url":"https://github.com/ask/python-github2/issues/51","user":"myusuf3","labels":[],"state":"closed"},{"gravatar_id":"2f3f68f62f5fc642f0b716b355071176","position":50.0,"number":50,"votes":0,"created_at":"2011/05/23 18:05:57 -0700","comments":2,"body":"","title":"Fixing the init of the proxy code.","updated_at":"2011/05/23 21:09:45 -0700","diff_url":"https://github.com/ask/python-github2/pull/50.diff","patch_url":"https://github.com/ask/python-github2/pull/50.patch","pull_request_url":"https://github.com/ask/python-github2/pull/50","closed_at":"2011/05/23 20:43:20 -0700","html_url":"https://github.com/ask/python-github2/issues/50","user":"hub-cap","labels":[],"state":"closed"},{"gravatar_id":"fab591eb34c76cbd0716024ce22d4906","position":49.0,"number":49,"votes":0,"created_at":"2011/05/20 11:46:19 -0700","comments":8,"body":"I am was wondering if you could better document the Mocks being used for testing. I wouldn't mind writing up the test cases, if you could comment the testing code that is currently present. Increase the robustness of the project. \n\nThoughts? Even a link to the background knowledge needed to understand what you are doing. I am tried creating a couple of tests in my branch but unable to get anything but errors. \n\nMaybe a wiki describing setup and what needs to be done. ","title":"Testing Documentation/Wiki","updated_at":"2011/05/22 14:25:06 -0700","closed_at":"2011/05/22 14:25:06 -0700","html_url":"https://github.com/ask/python-github2/issues/49","user":"myusuf3","labels":[],"state":"closed"},{"gravatar_id":"2f3f68f62f5fc642f0b716b355071176","position":48.0,"number":48,"votes":0,"created_at":"2011/05/19 08:40:47 -0700","comments":3,"body":"* Added basic proxy support documentation","title":"Add proxy documentation","updated_at":"2011/05/19 15:12:47 -0700","diff_url":"https://github.com/ask/python-github2/pull/48.diff","patch_url":"https://github.com/ask/python-github2/pull/48.patch","pull_request_url":"https://github.com/ask/python-github2/pull/48","closed_at":"2011/05/19 15:09:09 -0700","html_url":"https://github.com/ask/python-github2/issues/48","user":"hub-cap","labels":[],"state":"closed"},{"gravatar_id":"2f3f68f62f5fc642f0b716b355071176","position":47.0,"number":47,"votes":0,"created_at":"2011/05/18 18:40:20 -0700","comments":1,"body":"Made the socks stuff optional. I wasnt able to test the extras_require portion of the setup.py (im not terribly well versed in setuptools) but i tested manually by uninstalling/reinstalling the socks lib and watching the error raised.","title":"Updated Add Proxy Support - now optional","updated_at":"2011/05/18 19:04:30 -0700","diff_url":"https://github.com/ask/python-github2/pull/47.diff","patch_url":"https://github.com/ask/python-github2/pull/47.patch","pull_request_url":"https://github.com/ask/python-github2/pull/47","closed_at":"2011/05/18 19:04:29 -0700","html_url":"https://github.com/ask/python-github2/issues/47","user":"hub-cap","labels":[],"state":"closed"},{"gravatar_id":"2f3f68f62f5fc642f0b716b355071176","position":46.0,"number":46,"votes":0,"created_at":"2011/05/18 09:37:00 -0700","comments":12,"body":"Adding HTTP proxy settings to the client, as well as to the request to allow github2 to be used behind a HTTP proxy","title":"Adding HTTP Proxy support to the Request and Client","updated_at":"2011/05/23 18:06:30 -0700","diff_url":"https://github.com/ask/python-github2/pull/46.diff","patch_url":"https://github.com/ask/python-github2/pull/46.patch","pull_request_url":"https://github.com/ask/python-github2/pull/46","closed_at":"2011/05/19 07:59:05 -0700","html_url":"https://github.com/ask/python-github2/issues/46","user":"hub-cap","labels":[],"state":"closed"},{"gravatar_id":"2f3f68f62f5fc642f0b716b355071176","position":45.0,"number":45,"votes":0,"created_at":"2011/05/18 08:47:38 -0700","comments":1,"body":"Adding HTTP proxy settings to the client, as well as to the request to allow github2 to be used behind a HTTP proxy","title":"Adding HTTP Proxy support to the Request and Client","updated_at":"2011/05/18 09:07:34 -0700","diff_url":"https://github.com/ask/python-github2/pull/45.diff","patch_url":"https://github.com/ask/python-github2/pull/45.patch","pull_request_url":"https://github.com/ask/python-github2/pull/45","closed_at":"2011/05/18 09:07:33 -0700","html_url":"https://github.com/ask/python-github2/issues/45","user":"hub-cap","labels":[],"state":"closed"},{"gravatar_id":"fab591eb34c76cbd0716024ce22d4906","position":44.0,"number":44,"votes":0,"created_at":"2011/05/14 20:43:34 -0700","comments":13,"body":"When getting the commits for repositories that have '.' it can't seem to find the repository.\n\n``` pycon\n>>> commits += github.commits.list('kennethreitz/osxpython.org')\nTraceback (most recent call last):\n File \"\", line 1, in \n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/commits.py\", line 37, in list\n filter=\"commits\", datatype=Commit)\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/core.py\", line 75, in get_values\n values = self.make_request(*args, **kwargs)\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/core.py\", line 58, in make_request\n response = self.request.get(self.domain, command, *args)\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 70, in get\n return self.make_request(\"/\".join(path_components))\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 89, in make_request\n result = self.raw_request(url, extra_post_data, method=method)\n File \"/srv/python-environments/prologger/lib/python2.6/site-packages/github2/request.py\", line 113, in raw_request\n response.status, content))\nRuntimeError: unexpected response from github.com 404: '{\"error\":\"Not Found\"}'\n```","title":"repositories with '.' are not found","updated_at":"2011/05/26 23:46:28 -0700","closed_at":"2011/05/26 18:03:57 -0700","html_url":"https://github.com/ask/python-github2/issues/44","user":"myusuf3","labels":[],"state":"closed"},{"gravatar_id":"2028496e3344d92d8b3af64eb0d9e19e","position":43.0,"number":43,"votes":0,"created_at":"2011/05/09 20:51:03 -0700","comments":8,"body":"The docs are already using Sphinx. It'd be much more convenient if they were hosted.\r\n\r\nhttp://Readthedocs.org is free and sphinx powered, getting them up there should be easy.\r\n\r\nFun even.","title":"Read the Docs","updated_at":"2011/05/11 07:02:48 -0700","closed_at":"2011/05/11 06:44:44 -0700","html_url":"https://github.com/ask/python-github2/issues/43","user":"GraylinKim","labels":[],"state":"closed"},{"gravatar_id":"b7699be15e710c4be309f9d537fb252b","position":42.0,"number":42,"votes":0,"created_at":"2011/05/09 08:24:36 -0700","comments":12,"body":"This is my just running 2to3 over the library, and fixing one or two things with json. Don't know if you want or need it. I'm using it for some blogofile stuff, which just bumped to python 3 for all main development, and wanted to keep using your work with my site.","title":"Python3","updated_at":"2011/05/23 00:55:08 -0700","diff_url":"https://github.com/ask/python-github2/pull/42.diff","patch_url":"https://github.com/ask/python-github2/pull/42.patch","pull_request_url":"https://github.com/ask/python-github2/pull/42","closed_at":"2011/05/19 15:19:30 -0700","html_url":"https://github.com/ask/python-github2/issues/42","user":"goosemo","labels":[],"state":"closed"},{"gravatar_id":"fab591eb34c76cbd0716024ce22d4906","position":41.0,"number":41,"votes":0,"created_at":"2011/04/24 09:35:15 -0700","comments":3,"body":"","title":"Easy way to call tests from cli","updated_at":"2011/04/27 09:45:11 -0700","diff_url":"https://github.com/ask/python-github2/pull/41.diff","patch_url":"https://github.com/ask/python-github2/pull/41.patch","pull_request_url":"https://github.com/ask/python-github2/pull/41","closed_at":"2011/04/27 09:45:11 -0700","html_url":"https://github.com/ask/python-github2/issues/41","user":"myusuf3","labels":[],"state":"closed"},{"gravatar_id":"464f76c5577389c5ca29e3d7cca133d5","position":40.0,"number":40,"votes":0,"created_at":"2011/04/22 12:26:50 -0700","comments":3,"body":"https://github.com/broderboy/python-github2/commit/48d85d517b4e51652217b71b264c866caa5ca874\r\n\r\nI'm not sure why git put that as a full file change\r\nline changed: prune doc/.build\r\n\r\nThanks\r\n\r\nOriginal Error: \r\nrunning install\r\nrunning bdist_egg\r\nrunning egg_info\r\nwriting requirements to github2.egg-info\\requires.txt\r\nwriting github2.egg-info\\PKG-INFO\r\nwriting top-level names to github2.egg-info\\top_level.txt\r\nwriting dependency_links to github2.egg-info\\dependency_links.txt\r\nwriting requirements to github2.egg-info\\requires.txt\r\nwriting github2.egg-info\\PKG-INFO\r\nwriting top-level names to github2.egg-info\\top_level.txt\r\nwriting dependency_links to github2.egg-info\\dependency_links.txt\r\nreading manifest file 'github2.egg-info\\SOURCES.txt'\r\nreading manifest template 'MANIFEST.in'\r\nTraceback (most recent call last):\r\n File \".\\setup.py\", line 46, in \r\n \"Topic :: Software Development :: Libraries\",\r\n File \"C:\\Python26\\lib\\distutils\\core.py\", line 152, in setup\r\n dist.run_commands()\r\n File \"C:\\Python26\\lib\\distutils\\dist.py\", line 975, in run_commands\r\n self.run_command(cmd)\r\n File \"C:\\Python26\\lib\\distutils\\dist.py\", line 995, in run_command\r\n cmd_obj.run()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\install.py\", line 73, in run\r\n self.do_egg_install()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\install.py\", line 93, in do_egg_install\r\n self.run_command('bdist_egg')\r\n File \"C:\\Python26\\lib\\distutils\\cmd.py\", line 333, in run_command\r\n self.distribution.run_command(command)\r\n File \"C:\\Python26\\lib\\distutils\\dist.py\", line 995, in run_command\r\n cmd_obj.run()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\bdist_egg.py\", line 167, in run\r\n self.run_command(\"egg_info\")\r\n File \"C:\\Python26\\lib\\distutils\\cmd.py\", line 333, in run_command\r\n self.distribution.run_command(command)\r\n File \"C:\\Python26\\lib\\distutils\\dist.py\", line 995, in run_command\r\n cmd_obj.run()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\egg_info.py\", line 179, in run\r\n self.find_sources()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\egg_info.py\", line 254, in find_sources\r\n mm.run()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\egg_info.py\", line 310, in run\r\n self.read_template()\r\n File \"C:\\Python26\\lib\\site-packages\\distribute-0.6.10-py2.6.egg\\setuptools\\command\\sdist.py\", line 204, in read_template\r\n _sdist.read_template(self)\r\n File \"C:\\Python26\\lib\\distutils\\command\\sdist.py\", line 336, in read_template\r\n self.filelist.process_template_line(line)\r\n File \"C:\\Python26\\lib\\distutils\\filelist.py\", line 129, in process_template_line\r\n (action, patterns, dir, dir_pattern) = self._parse_template_line(line)\r\n File \"C:\\Python26\\lib\\distutils\\filelist.py\", line 112, in _parse_template_line\r\n dir_pattern = convert_path(words[1])\r\n File \"C:\\Python26\\lib\\distutils\\util.py\", line 201, in convert_path\r\n raise ValueError, \"path '%s' cannot end with '/'\" % pathname\r\nValueError: path 'doc/.build/' cannot end with '/'","title":"Modified MANIFEST.in. It wasn't installing on Windows","updated_at":"2011/04/23 07:18:49 -0700","diff_url":"https://github.com/ask/python-github2/pull/40.diff","patch_url":"https://github.com/ask/python-github2/pull/40.patch","pull_request_url":"https://github.com/ask/python-github2/pull/40","closed_at":"2011/04/23 04:53:48 -0700","html_url":"https://github.com/ask/python-github2/issues/40","user":"broderboy","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":39.0,"number":39,"votes":0,"created_at":"2011/04/18 08:25:47 -0700","comments":4,"body":"\nFeeble brainstorming session...\n\nI've just been bitten quite badly by the lack of timezone handling, the cause is the use of naive datetime objects in the 'GitHub' timezone(`America/Los_Angeles`). While processing some tasks that span the PST/PDT changeover the ordering of events is broken.\n\nOptions are:\n\n1. Leave alone and try to process the datetime objects externally, somewhat easy but not a good solution as it requires duplication in each project that requires accurate date handling\n2. Start producing non-naive datetime objects, breaks any caller who is not prepared for it.\n3. Introduce a setting to toggle naive object availability, defaulting to naive objects to maintain backwards compatibility\n\n[python-dateutil](http://labix.org/python-dateutil) makes handling option 1 quite easy, and also simplifies the handling of option 3 at the cost of another external dependency. Option 2 is just pure evil, or pure stupidity depending on point of view.\n\nOption 3 results in a parsing using something like the following entirely untested code:\n\n datetime_ = parser.parse(github_date)\n if NAIVE:\n datetime_.replace(tzinfo=None)\n return datetime_\n\nAnd similarly producing GitHub compatible date strings would require handling of naive formats with equally untested code such as:\n\n if NAIVE:\n datetime_ = datetime_.replace(tz.gettz(\"America/Los_Angeles\"))\n return datetime_.strftime(\"%Y/%m/%d %H:%M:%S %z\")","title":"Datetime timezone handling.","updated_at":"2011/06/23 02:33:57 -0700","diff_url":"https://github.com/ask/python-github2/pull/39.diff","patch_url":"https://github.com/ask/python-github2/pull/39.patch","pull_request_url":"https://github.com/ask/python-github2/pull/39","closed_at":"2011/06/23 02:33:57 -0700","html_url":"https://github.com/ask/python-github2/issues/39","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"fab591eb34c76cbd0716024ce22d4906","position":38.0,"number":38,"votes":0,"created_at":"2011/04/17 17:11:51 -0700","comments":9,"body":"e.g when I am using the call \r\n\r\nGithub(access_token=oauthtoken) -- it seems to work fine for all calls expect, the following call \r\n\r\nproject being repo.project\r\n\r\ncommits += self.client.commits.list(str(project))\r\n\r\n\r\nI get the follow exception\r\n\r\nunexpected response from github.com 401: '{\"error\":\"Couldn\\'t authenticate you\"}'\r\n\r\nI managed to work around this issue by creating the self.client using the following instantiation \r\n\r\nGithub(self.oauthtoken)\r\n\r\nIt probably not being pass down the OAuth token on the particular call. \r\n","title":"OAuth token isn't being passed down","updated_at":"2011/05/11 09:48:20 -0700","closed_at":"2011/05/11 09:48:20 -0700","html_url":"https://github.com/ask/python-github2/issues/38","user":"myusuf3","labels":[],"state":"closed"},{"gravatar_id":"2c8089a78bf15883302e9ac5b4367895","position":37.0,"number":37,"votes":0,"created_at":"2011/04/14 17:19:33 -0700","comments":2,"body":"The current [Commits API](http://develop.github.com/p/commits.html) specifies a user_id in the pathspec:\n\n`commits/list/:user_id/:repository/:branch`\n`commits/list/:user_id/:repository/:branch/*path`\n\nThis parameter was not present in the `list` or `show` methods of the `Commits` class, consequently requesting commits was not possible (as far as I could tell)\n\n","title":"added user_id to commits path spec","updated_at":"2011/04/15 05:13:56 -0700","diff_url":"https://github.com/ask/python-github2/pull/37.diff","patch_url":"https://github.com/ask/python-github2/pull/37.patch","pull_request_url":"https://github.com/ask/python-github2/pull/37","closed_at":"2011/04/15 05:13:56 -0700","html_url":"https://github.com/ask/python-github2/issues/37","user":"loganlinn","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":36.0,"number":36,"votes":0,"created_at":"2011/04/12 03:47:52 -0700","comments":2,"body":"@ask and interested others,\r\n\r\nYou said to treat the repo like home, but I just wanted to run this past you in case you have objections.\r\n\r\nThe changes are quite invasive. It strips out the examples from `README.rst`(it is a bit cluttered IMO), reformats many docstrings for use with Sphinx's [autodoc](http://sphinx.pocoo.org/tutorial.html#autodoc), fiddles with the cool `Attribute` docstring generator, etc.\r\n\r\nOpinions? If part of it is okay, say which part and I'll remove/rework the rest. If you hate it all just say so, it won't hurt my feelings I promise ;)\r\n\r\nThanks,\r\n\r\nJames","title":"Using Sphinx doc for documentation","updated_at":"2011/04/13 13:06:16 -0700","diff_url":"https://github.com/ask/python-github2/pull/36.diff","patch_url":"https://github.com/ask/python-github2/pull/36.patch","pull_request_url":"https://github.com/ask/python-github2/pull/36","closed_at":"2011/04/13 13:01:44 -0700","html_url":"https://github.com/ask/python-github2/issues/36","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"1ee6b40a1acbcc00eb32e306e0e94037","position":35.0,"number":35,"votes":0,"created_at":"2011/04/10 18:02:50 -0700","comments":1,"body":"I added a function to get all blobs as a dictionary between the path & sha for a given tree. ","title":"Get All Blobs","updated_at":"2011/04/11 02:38:53 -0700","diff_url":"https://github.com/ask/python-github2/pull/35.diff","patch_url":"https://github.com/ask/python-github2/pull/35.patch","pull_request_url":"https://github.com/ask/python-github2/pull/35","closed_at":"2011/04/11 02:38:53 -0700","html_url":"https://github.com/ask/python-github2/issues/35","user":"surajram","labels":[],"state":"closed"},{"gravatar_id":"3aa27c0add742f542848af3b8a9e980c","position":34.0,"number":34,"votes":0,"created_at":"2011/03/26 10:57:22 -0700","comments":4,"body":"e.g. github.repos.list() specifies following behaviour: \"If no user is given, repositoris for the currently logged in user are returned.\"\r\n\r\nHowever this works only if using username for authentication but with OAuth2 access token following error is thrown:\r\n\r\nRuntimeError: unexpected response from github.com 401: '{\"error\":\"api route not recognized\"}'\r\n\r\nWorkaround for this is to request current username using following pattern:\r\n\r\nuser = github.users.show(\"\")\r\n\r\nand then use returned username as an parameter for list(). \r\n\r\nI guess we need to populate the internal username in a constructor via show API when username is not given or is there better solution?\r\n\r\n\r\n\r\n\r\n\r\n","title":"Getting \"currently logged in user data\" when using access_token","updated_at":"2011/05/10 06:57:46 -0700","diff_url":"https://github.com/ask/python-github2/pull/34.diff","patch_url":"https://github.com/ask/python-github2/pull/34.patch","pull_request_url":"https://github.com/ask/python-github2/pull/34","closed_at":"2011/05/10 06:57:46 -0700","html_url":"https://github.com/ask/python-github2/issues/34","user":"pmuilu","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":33.0,"number":33,"votes":0,"created_at":"2011/03/03 09:26:59 -0800","comments":7,"body":"A few months ago when playing with `python-github2` I switched to using `httplib2` for network requests. I hadn't really planned on opening a pull request, but I've been using it as my full time branch so I've changed my mind :).\r\n\r\nThe benefits of `httplib2` are the (imo) simplification of the request handling, built-in caching support with effortless `ETag` handling and free HTTP compression support should GitHub enable it at some point..\r\n\r\nI'm just curious how you guys feel about it. Maybe there are some changes to be made to make it pullable, maybe you just don't like the idea of another external dependency or .\r\n\r\nThanks,\r\n\r\nJames","title":"RFC: httplib2 usage","updated_at":"2011/04/11 02:41:30 -0700","diff_url":"https://github.com/ask/python-github2/pull/33.diff","patch_url":"https://github.com/ask/python-github2/pull/33.patch","pull_request_url":"https://github.com/ask/python-github2/pull/33","closed_at":"2011/04/11 02:41:30 -0700","html_url":"https://github.com/ask/python-github2/issues/33","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"1dc7387cedba30b9a3d12792084b4b4a","position":32.0,"number":32,"votes":0,"created_at":"2011/02/19 07:18:36 -0800","comments":1,"body":"Added two operations in the issues module: list labels and search issues by label.","title":"List labels and Search Issues by Label","updated_at":"2011/04/09 10:25:23 -0700","diff_url":"https://github.com/ask/python-github2/pull/32.diff","patch_url":"https://github.com/ask/python-github2/pull/32.patch","pull_request_url":"https://github.com/ask/python-github2/pull/32","closed_at":"2011/04/09 10:25:23 -0700","html_url":"https://github.com/ask/python-github2/issues/32","user":"bartdag","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":31.0,"number":31,"votes":0,"created_at":"2011/02/16 06:44:12 -0800","comments":1,"body":"Adding or removing labels has recently broken, this small change to force `POST` fixes it.\r\n\r\nThanks,\r\n\r\nJames","title":"Fix issue label addition/removal.","updated_at":"2011/04/09 10:36:11 -0700","diff_url":"https://github.com/ask/python-github2/pull/31.diff","patch_url":"https://github.com/ask/python-github2/pull/31.patch","pull_request_url":"https://github.com/ask/python-github2/pull/31","closed_at":"2011/04/09 10:36:11 -0700","html_url":"https://github.com/ask/python-github2/issues/31","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"377e59815b7b7d6dfc23c808f0d07f05","position":30.0,"number":30,"votes":1,"created_at":"2011/02/15 12:30:09 -0800","comments":1,"body":"From:\r\n\r\nhttp://develop.github.com/p/repo.html\r\n\r\nrepos.delete returns a dictionary with a delete_token key. This key then needs to be POST'd back to the same URL. The repos.delete method as it is does nothing with this key and does not accept a post_data dictionary as a keyword argument.","title":"repos.delete not functional","updated_at":"2011/04/13 13:01:43 -0700","closed_at":"2011/04/13 13:01:43 -0700","html_url":"https://github.com/ask/python-github2/issues/30","user":"sxalexander","labels":[],"state":"closed"},{"gravatar_id":"d7ed4dc5ad80ffecb3aed70fc7190e52","position":29.0,"number":29,"votes":0,"created_at":"2011/01/25 07:13:12 -0800","comments":1,"body":"Steps to reproduce:\n\nfrom github2.client import Github\nclient = Github(username='', api_token='', requests_per_second=1)\npull_req = client.request.get('pulls', 'username/repo_name', '')\n\nThis works fine for most pull requests. However, if a commit associated with the pull request has 'line notes', it seems to fail.\nAs an example, you can try this on one of my pull requests:\n\npull_req = client.request.get('pulls', 'larsbutler/roundabout', '1')","title":"\"Github Server Error\" when trying to get pull requests which include line notes","updated_at":"2011/01/25 08:16:09 -0800","closed_at":"2011/01/25 08:16:09 -0800","html_url":"https://github.com/ask/python-github2/issues/29","user":"larsbutler","labels":[],"state":"closed"},{"gravatar_id":"4174216c1dc0f223ce608d5a3b66a585","position":28.0,"number":28,"votes":0,"created_at":"2010/12/30 10:28:59 -0800","comments":8,"body":"This implements the github API pull requests functionality. ","title":"Pull requests","updated_at":"2011/05/29 08:27:58 -0700","diff_url":"https://github.com/ask/python-github2/pull/28.diff","patch_url":"https://github.com/ask/python-github2/pull/28.patch","pull_request_url":"https://github.com/ask/python-github2/pull/28","closed_at":"2011/05/29 08:27:23 -0700","html_url":"https://github.com/ask/python-github2/issues/28","user":"ChristopherMacGown","labels":[],"state":"closed"},{"gravatar_id":"cf04727870245c17f455fb05b25f9f8e","position":27.0,"number":27,"votes":0,"created_at":"2010/12/21 12:37:06 -0800","comments":0,"body":"The URL wasn't escaped properly when labels included a space \"This is a label\" during the add_label request.","title":"Failed to add a label with a space to an issue ","updated_at":"2011/04/09 09:47:50 -0700","diff_url":"https://github.com/ask/python-github2/pull/27.diff","patch_url":"https://github.com/ask/python-github2/pull/27.patch","pull_request_url":"https://github.com/ask/python-github2/pull/27","closed_at":"2011/04/09 09:47:50 -0700","html_url":"https://github.com/ask/python-github2/issues/27","user":"jweinberg","labels":[],"state":"closed"},{"gravatar_id":"4174216c1dc0f223ce608d5a3b66a585","position":26.0,"number":26,"votes":0,"created_at":"2010/12/16 13:59:45 -0800","comments":1,"body":"","title":"Patch to add organizations and teams.","updated_at":"2010/12/30 10:30:53 -0800","diff_url":"https://github.com/ask/python-github2/pull/26.diff","patch_url":"https://github.com/ask/python-github2/pull/26.patch","pull_request_url":"https://github.com/ask/python-github2/pull/26","closed_at":"2010/12/30 10:30:53 -0800","html_url":"https://github.com/ask/python-github2/issues/26","user":"ChristopherMacGown","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":25.0,"number":25,"votes":0,"created_at":"2010/12/10 23:18:57 -0800","comments":1,"body":"As [nvie](http://github.com/nvie) rightly pointed out in [my other pull request](https://github.com/ask/python-github2/pull/14#issuecomment-601878), I hadn't added any documentation for my changes... here that is.\r\n\r\nI've also fixed issue searches for multiple words. I only spotted the problem as a result of adding the entry to `README.rst`, so I should probably learn something from that ;)\r\n\r\nFinally, there is some slight reformatting of the documentation. *Most* of the text was wrapped at ~80 characters and code samples indented 4 spaces, the [final commit](https://github.com/JNRowe/python-github2/commit/ff9132f9054bcc3827c94fd927c30cf257d84954) just makes that consistent across the rest of the documentation. I realise that may be controversial, but wrapped or not wrapped it should at least be consistent.\r\n\r\nThanks,\r\n\r\nJames","title":"Fix for issue searching and documentation updates.","updated_at":"2010/12/12 23:27:36 -0800","diff_url":"https://github.com/ask/python-github2/pull/25.diff","patch_url":"https://github.com/ask/python-github2/pull/25.patch","pull_request_url":"https://github.com/ask/python-github2/pull/25","closed_at":"2010/12/12 23:27:36 -0800","html_url":"https://github.com/ask/python-github2/issues/25","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","position":23.0,"number":23,"votes":0,"created_at":"2010/12/08 00:17:49 -0800","comments":4,"body":"See the docs at http://develop.github.com/p/orgs.html","title":"Add support for the new Organizations API","updated_at":"2011/05/10 06:53:12 -0700","closed_at":"2011/05/10 06:12:12 -0700","html_url":"https://github.com/ask/python-github2/issues/23","user":"nvie","labels":[],"state":"closed"},{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","position":22.0,"number":22,"votes":0,"created_at":"2010/12/06 21:28:03 -0800","comments":0,"body":"Hi Ask,\r\n\r\nI added support for authenticating using Github's OAuth service. When you do this, you get an access_token, which you can now use instead of the username/api_token combination. You pass it in to the Github constructor like this:\r\n\r\n github = Github(access_token=\"...\")\r\n\r\nIt puts the access_token on the GET request, like described in the third bullet under [Web Application Flow](https://gist.github.com/419219).\r\n\r\nIts use is documented in the README file.\r\n\r\nCheers,\r\nVincent\r\n","title":"Added support for Github's OAuth-based URL requests","updated_at":"2010/12/08 00:16:25 -0800","diff_url":"https://github.com/ask/python-github2/pull/22.diff","patch_url":"https://github.com/ask/python-github2/pull/22.patch","pull_request_url":"https://github.com/ask/python-github2/pull/22","closed_at":"2010/12/08 00:16:25 -0800","html_url":"https://github.com/ask/python-github2/issues/22","user":"nvie","labels":[],"state":"closed"},{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","position":21.0,"number":21,"votes":0,"created_at":"2010/12/06 13:10:09 -0800","comments":1,"body":"Hi Ask,\r\n\r\nToday, I commited several patches. First of all, I added support for authenticating using `Github(access_token=\"...\")` GET requests instead of `Github(username=\"foo\", api_token=\"...\")` POST requests. This is the way Github API v2 URLs need to be called when using their (experimental) OAuth model.\r\n\r\nFurthermore, while I was testing this, the Github API seems to have changed the format of all dates to be nice UTC dates with timezone info. This makes the special conversion hoops and tricks unnecessary, so I removed them. For safety, I kept the \"flexible date conversion function lookup\" construct around, but maybe this could be removed as a whole. I'll leave this judgement up to you.\r\n\r\nHave a blast!\r\n\r\nCheers,\r\nVincent\r\n","title":"Add support for OAuth URLs, and a fix for date format","updated_at":"2010/12/06 21:28:42 -0800","diff_url":"https://github.com/ask/python-github2/pull/21.diff","patch_url":"https://github.com/ask/python-github2/pull/21.patch","pull_request_url":"https://github.com/ask/python-github2/pull/21","closed_at":"2010/12/06 21:28:42 -0800","html_url":"https://github.com/ask/python-github2/issues/21","user":"nvie","labels":[],"state":"closed"},{"gravatar_id":"9de3f3969367fffe2051c2b405b79810","position":20.0,"number":20,"votes":0,"created_at":"2010/11/25 16:07:26 -0800","comments":1,"body":"http://develop.github.com/p/repo.html:\r\n\r\n\"To get a list of repos you can push to that are not your own, GET\r\n\r\nrepos/pushable\"\r\n\r\nI was surprised not to find this, so I added it.","title":"Added github.repos.pushable() as described in the API documentation.","updated_at":"2010/11/26 13:37:12 -0800","diff_url":"https://github.com/ask/python-github2/pull/20.diff","patch_url":"https://github.com/ask/python-github2/pull/20.patch","pull_request_url":"https://github.com/ask/python-github2/pull/20","closed_at":"2010/11/26 13:37:12 -0800","html_url":"https://github.com/ask/python-github2/issues/20","user":"johl","labels":[],"state":"closed"},{"gravatar_id":"f3794e603ef53b0513ab45b6565ee457","position":19.0,"number":19,"votes":0,"created_at":"2010/11/19 21:23:56 -0800","comments":5,"body":"I realized I didn't include fractions of a second in my earlier api-limits change. This one does. \r\n\r\nThis pull includes my commits from repo-project as well.","title":"Api limits","updated_at":"2010/11/26 13:25:25 -0800","diff_url":"https://github.com/ask/python-github2/pull/19.diff","patch_url":"https://github.com/ask/python-github2/pull/19.patch","pull_request_url":"https://github.com/ask/python-github2/pull/19","closed_at":"2010/11/26 13:25:25 -0800","html_url":"https://github.com/ask/python-github2/issues/19","user":"jdunck","labels":[],"state":"closed"},{"gravatar_id":"f3794e603ef53b0513ab45b6565ee457","position":18.0,"number":18,"votes":0,"created_at":"2010/11/19 21:00:10 -0800","comments":0,"body":"Hey Ask, I added a Repo.project property - in my client code, I'm fairly often having to pass the project string to methods, and writing owner+'/'+name is getting boring. :-)","title":"Repo project","updated_at":"2010/11/20 12:08:27 -0800","diff_url":"https://github.com/ask/python-github2/pull/18.diff","patch_url":"https://github.com/ask/python-github2/pull/18.patch","pull_request_url":"https://github.com/ask/python-github2/pull/18","closed_at":"2010/11/20 12:08:27 -0800","html_url":"https://github.com/ask/python-github2/issues/18","user":"jdunck","labels":[],"state":"closed"},{"gravatar_id":"ad448ae5b261e252ddaeeccf5c69a4ba","position":17.0,"number":17,"votes":1,"created_at":"2010/11/12 04:14:24 -0800","comments":1,"body":"This is very useful and provided by the underlying api and I would like to use it for my cmd line tool - https://github.com/kashifrazzaqui/github-issues\r\n\r\nIf you will please add this.\r\nThanks.","title":"List does not allow filteration by label","updated_at":"2011/04/09 10:51:59 -0700","closed_at":"2011/04/09 10:51:59 -0700","html_url":"https://github.com/ask/python-github2/issues/17","user":"kashifrazzaqui","labels":[],"state":"closed"},{"gravatar_id":"67e05420d4dd3492097aeb77f44f7867","position":16.0,"number":16,"votes":0,"created_at":"2010/11/04 17:26:33 -0700","comments":0,"body":"Fixes https://github.com/ask/python-github2/issues#issue/15\r\n\r\nThis was caused by github switching to HTTPS. Is in production at http://djangopackages.com","title":"Changed over to HTTPS","updated_at":"2010/11/24 06:10:48 -0800","diff_url":"https://github.com/ask/python-github2/pull/16.diff","patch_url":"https://github.com/ask/python-github2/pull/16.patch","pull_request_url":"https://github.com/ask/python-github2/pull/16","closed_at":"2010/11/24 06:10:48 -0800","html_url":"https://github.com/ask/python-github2/issues/16","user":"pydanny","labels":[],"state":"closed"},{"gravatar_id":"67e05420d4dd3492097aeb77f44f7867","position":15.0,"number":15,"votes":0,"created_at":"2010/11/04 16:56:50 -0700","comments":1,"body":"The API seems to work when I do curl. But it breaks via python-github2. \r\n\r\n >>> gh.commits.list(\"mojombo/grit\", \"master\")\r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/commits.py\", line 31, in list\r\n filter=\"commits\", datatype=Commit)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/core.py\", line 60, in get_values\r\n values = self.make_request(*args, **kwargs)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/core.py\", line 43, in make_request\r\n response = self.request.get(self.domain, command, *args)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/request.py\", line 53, in get\r\n return self.make_request(\"/\".join(path_components))\r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/request.py\", line 63, in make_request\r\n return self.raw_request(url, extra_post_data, method=method)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/src/python-github2/github2/request.py\", line 91, in raw_request\r\n json = simplejson.loads(response_text)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/lib/python2.6/site-packages/simplejson/__init__.py\", line 384, in loads\r\n return _default_decoder.decode(s)\r\n File \"/Users/pydanny/projects/djangopackages/envdp/lib/python2.6/site-packages/simplejson/decoder.py\", line 402, in decode\r\n obj, end = self.raw_decode(s, idx=_w(s, 0).end())\r\n File \"/Users/pydanny/projects/djangopackages/envdp/lib/python2.6/site-packages/simplejson/decoder.py\", line 420, in raw_decode\r\n raise JSONDecodeError(\"No JSON object could be decoded\", s, idx)\r\n JSONDecodeError: No JSON object could be decoded: line 1 column 0 (char 0)","title":"commits API is broken","updated_at":"2010/11/04 17:27:00 -0700","closed_at":"2010/11/04 17:27:00 -0700","html_url":"https://github.com/ask/python-github2/issues/15","user":"pydanny","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":14.0,"number":14,"votes":0,"created_at":"2010/11/02 13:17:42 -0700","comments":2,"body":"Hi, \r\n\r\nJust a couple of small commits to fix minor problems I've found, and add support for some missing issues features. If you prefer to receive changes in a different way, please just say and I'll rework these(and any future ones) to fit.\r\n\r\nI'll take this opportunity to say thanks for releasing this package, I've found it very useful when playing with the github API.\r\n\r\nThanks,\r\n\r\nJames.\r\n","title":"Small fixes and more support for issues","updated_at":"2010/12/09 22:41:52 -0800","diff_url":"https://github.com/ask/python-github2/pull/14.diff","patch_url":"https://github.com/ask/python-github2/pull/14.patch","pull_request_url":"https://github.com/ask/python-github2/pull/14","closed_at":"2010/12/10 06:32:31 -0800","html_url":"https://github.com/ask/python-github2/issues/14","user":"JNRowe","labels":[],"state":"closed"},{"gravatar_id":"b4f902096ea2ccfce71443d1d8fee5b3","position":13.0,"number":13,"votes":0,"created_at":"2010/10/20 09:38:43 -0700","comments":0,"body":"I added some more fields that are in the API but not on github2 Repositories:\r\n\r\n- created_at\r\n- pushed_at\r\n- has_wiki\r\n- has_issues\r\n- has_downloads","title":"More information on Repository","updated_at":"2010/10/29 03:23:50 -0700","diff_url":"https://github.com/ask/python-github2/pull/13.diff","patch_url":"https://github.com/ask/python-github2/pull/13.patch","pull_request_url":"https://github.com/ask/python-github2/pull/13","closed_at":"2010/10/29 03:23:50 -0700","html_url":"https://github.com/ask/python-github2/issues/13","user":"ojii","labels":[],"state":"closed"},{"gravatar_id":"4053d6caab18829c4e8d393b6afa8ad8","position":12.0,"number":12,"votes":0,"created_at":"2010/10/15 15:45:16 -0700","comments":1,"body":".. this directory is also used by the `pastedeploy` package\r\nhttp://twitter.com/ActiveState/status/27484677815\r\nPut it in site-packages/github2/tests instead.\r\n\r\n ~/Library/Python/2.7/bin \r\n ~/Library/Python/2.7/bin/github_manage_collaborators \r\n ~/Library/Python/2.7/lib \r\n ~/Library/Python/2.7/lib/python \r\n ~/Library/Python/2.7/lib/python/site-packages \r\n ~/Library/Python/2.7/lib/python/site-packages/github2 \r\n ~/Library/Python/2.7/lib/python/site-packages/github2-0.1.3-py2.7.egg-info \r\n ~/Library/Python/2.7/lib/python/site-packages/github2-0.1.3-py2.7.egg-info/PKG-INFO \r\n ~/Library/Python/2.7/lib/python/site-packages/github2-0.1.3-py2.7.egg-info/SOURCES.txt \r\n ~/Library/Python/2.7/lib/python/site-packages/github2-0.1.3-py2.7.egg-info/dependency_links.txt \r\n ~/Library/Python/2.7/lib/python/site-packages/github2-0.1.3-py2.7.egg-info/top_level.txt \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/__init__.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/client.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/commits.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/core.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/issues.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/repositories.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/request.py \r\n ~/Library/Python/2.7/lib/python/site-packages/github2/users.py \r\n ~/Library/Python/2.7/lib/python/site-packages/tests \r\n ~/Library/Python/2.7/lib/python/site-packages/tests/__init__.py \r\n ~/Library/Python/2.7/lib/python/site-packages/tests/unit.py ","title":"Avoiding polluting site-packages/tests/ directory","updated_at":"2010/12/09 22:39:34 -0800","closed_at":"2010/12/09 22:39:34 -0800","html_url":"https://github.com/ask/python-github2/issues/12","user":"srid","labels":[],"state":"closed"},{"gravatar_id":"9bfcdf9a72021d081a4cebf69a49ada8","position":11.0,"number":11,"votes":0,"created_at":"2010/10/15 04:42:12 -0700","comments":1,"body":"Python's timedelta did not have a 'total_seconds' method before python 2.7. This patches calculates seconds as documented at http://docs.python.org/library/datetime.html#datetime.timedelta.total_seconds.\n\nThis makes github2 compatible with python2.6 at least.\n\nPatch here: http://gist.github.com/628061","title":"Incompatibility for python 2.6: timedelta total_seconds","updated_at":"2011/04/13 13:06:54 -0700","closed_at":"2011/04/13 13:06:54 -0700","html_url":"https://github.com/ask/python-github2/issues/11","user":"arthur-debert","labels":[],"state":"closed"},{"gravatar_id":"f3794e603ef53b0513ab45b6565ee457","position":10.0,"number":10,"votes":0,"created_at":"2010/09/20 21:32:49 -0700","comments":1,"body":"I added a param to the Github class which enforces rate limits by sleeping the thread if requests are occurring too fast.\r\n\r\nIt's backwards compatible because delays only happen if requests_per_second is passed in. Includes a test, some docstrings, and an updated README.\r\n","title":"Api limits","updated_at":"2010/09/20 22:55:16 -0700","diff_url":"https://github.com/ask/python-github2/pull/10.diff","patch_url":"https://github.com/ask/python-github2/pull/10.patch","pull_request_url":"https://github.com/ask/python-github2/pull/10","closed_at":"2010/09/21 05:55:06 -0700","html_url":"https://github.com/ask/python-github2/issues/10","user":"jdunck","labels":[],"state":"closed"},{"gravatar_id":"5b45540ae377ec54a071f313b7193a27","position":9.0,"number":9,"votes":0,"created_at":"2010/07/28 12:56:51 -0700","comments":2,"body":" Traceback (most recent call last):\r\n File \"migrate_to_github.py\", line 74, in \r\n gh = Github()\r\n TypeError: __init__() takes at least 3 arguments (1 given)\r\n","title":"Doesn't support unauthenticated session","updated_at":"2011/04/18 07:04:50 -0700","closed_at":"2011/04/18 07:04:50 -0700","html_url":"https://github.com/ask/python-github2/issues/9","user":"dabrahams","labels":[],"state":"closed"},{"gravatar_id":"71c4e8223f5bddfbcce0607d387d2125","position":8.0,"number":8,"votes":1,"created_at":"2010/06/20 06:13:37 -0700","comments":1,"body":"There is a cool new way to do Github authentication: http://github.com/blog/656-github-oauth2-support","title":"support for the new OAuth2 authentication","updated_at":"2011/04/26 06:31:50 -0700","closed_at":"2011/04/26 06:31:50 -0700","html_url":"https://github.com/ask/python-github2/issues/8","user":"tarpas","labels":[],"state":"closed"},{"gravatar_id":"7ea0cc75793eb2b1ada4abc953a41592","position":7.0,"number":7,"votes":0,"created_at":"2010/05/26 17:08:41 -0700","comments":3,"body":"Python 2.6 includes simplejson (renaming to just json), removing the need for the external dep. To work on 2.5 and 2.6, use try:import:\r\nhttp://github.com/adamv/python-github2/commit/5b2f09d89420aac0d071522b3fbed9b026af6def\r\n","title":"Use json instead of simplejson on Python 2.6","updated_at":"2011/04/09 10:46:22 -0700","closed_at":"2011/04/09 10:46:22 -0700","html_url":"https://github.com/ask/python-github2/issues/7","user":"adamv","labels":[],"state":"closed"},{"gravatar_id":"7ea0cc75793eb2b1ada4abc953a41592","position":6.0,"number":6,"votes":0,"created_at":"2010/05/25 21:59:37 -0700","comments":2,"body":"An object's __repr__ in Python 2.x is required to be ASCII. Various objects in this API return unicode values, as unicode is returned from titles, etc. from the web calls, and those are used in __repr__.\r\n\r\nIn my particular case, I got an error printing Issues that happened to contain non-ASCII characters.\r\n\r\nI'll probably add a commit to this bug tomorrow/later.","title":"__repr__ should return ASCII on Python 2.x","updated_at":"2010/12/08 19:46:28 -0800","closed_at":"2010/12/08 19:46:28 -0800","html_url":"https://github.com/ask/python-github2/issues/6","user":"adamv","labels":[],"state":"closed"},{"gravatar_id":"2e47ce8a038f8eaf3fe80c069e380814","position":4.0,"number":4,"votes":0,"created_at":"2010/04/17 17:24:29 -0700","comments":1,"body":"This package isn't on PyPi near as I can tell.\r\n\r\n* http://pypi.python.org/pypi/github2 \r\n* http://pypi.python.org/pypi/python-github2\r\n\r\nResponse from easy_install:\r\nNo local packages or download links found for python-github2","title":"Not installable via easy_install","updated_at":"2010/04/19 02:26:01 -0700","closed_at":"2010/04/19 02:26:01 -0700","html_url":"https://github.com/ask/python-github2/issues/4","user":"joestump","labels":[],"state":"closed"},{"gravatar_id":"d819f7576d53088db65789b9732141b3","position":3.0,"number":3,"votes":0,"created_at":"2009/11/12 21:16:20 -0800","comments":2,"body":"In your README, your import path says\r\n\r\n >>> from github.client import Github\r\n\r\nbut it should really be\r\n\r\n >>> from github2.client import Github","title":"README has improper imports","updated_at":"2009/11/13 03:32:29 -0800","closed_at":"2009/11/13 03:32:29 -0800","html_url":"https://github.com/ask/python-github2/issues/3","user":"justinlilly","labels":[],"state":"closed"},{"gravatar_id":"d819f7576d53088db65789b9732141b3","position":2.0,"number":2,"votes":0,"created_at":"2009/11/12 21:15:17 -0800","comments":1,"body":"When searching repos for django, I get an error caused by the emdash in the description of http://github.com/brosner/django \r\n\r\n Traceback: \r\n >>> github.repos.search('django')\r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"/Users/jlilly/src/githubgraphs/env/lib/python2.5/site-packages/github2/repositories.py\", line 21, in search\r\n return self.make_request(\"search\", query, filter=\"repositories\")\r\n File \"/Users/jlilly/src/githubgraphs/env/lib/python2.5/site-packages/github2/core.py\", line 42, in make_request\r\n response = self.request.get(self.domain, command, *args)\r\n File \"/Users/jlilly/src/githubgraphs/env/lib/python2.5/site-packages/github2/request.py\", line 46, in get\r\n return self.make_request(\"/\".join(path_components))\r\n File \"/Users/jlilly/src/githubgraphs/env/lib/python2.5/site-packages/github2/request.py\", line 55, in make_request\r\n return self.raw_request(url, extra_post_data)\r\n File \"/Users/jlilly/src/githubgraphs/env/lib/python2.5/site-packages/github2/request.py\", line 71, in raw_request\r\n response_text = response.read().encode(\"utf-8\")\r\n UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 7065: ordinal not in range(128)\r\n","title":"Unicode handling error","updated_at":"2009/11/13 03:32:29 -0800","closed_at":"2009/11/13 03:32:29 -0800","html_url":"https://github.com/ask/python-github2/issues/2","user":"justinlilly","labels":[],"state":"closed"},{"gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","position":1.0,"number":1,"votes":0,"created_at":"2009/04/18 13:04:09 -0700","comments":1,"body":"This to support getting raw blob/tree data as specified in http://develop.github.com/p/object.html.","title":"option to make_request so it doesn't parse the response as json.","updated_at":"2011/06/20 09:37:30 -0700","closed_at":"2011/06/20 09:37:30 -0700","html_url":"https://github.com/ask/python-github2/issues/1","user":"ask","labels":[],"state":"closed"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,issues,list,ask,python-github2,open,fe32d5f6ebc81579886964c4c353403e b/tests/data/github.com,api,v2,json,issues,list,ask,python-github2,open,fe32d5f6ebc81579886964c4c353403e index 61ad1b6..0220f62 100644 --- a/tests/data/github.com,api,v2,json,issues,list,ask,python-github2,open,fe32d5f6ebc81579886964c4c353403e +++ b/tests/data/github.com,api,v2,json,issues,list,ask,python-github2,open,fe32d5f6ebc81579886964c4c353403e @@ -1,14 +1,15 @@ status: 200 -x-ratelimit-remaining: 57 +x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/issues/list/ask/python-github2/open -x-runtime: 36ms -content-length: 4100 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 3875 +server: nginx/1.0.4 +x-runtime: 42ms x-ratelimit-limit: 60 -etag: "d4fc8ccc95a538f78b061f48e21b40e2" +etag: "d04e0fd72601ec3f5a1d0440189bd216" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:41:36 GMT +date: Thu, 25 Aug 2011 06:50:48 GMT content-type: application/json; charset=utf-8 -{"issues":[{"gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","position":1.0,"number":1,"votes":0,"created_at":"2009/04/18 13:04:09 -0700","comments":0,"body":"This to support getting raw blob/tree data as specified in http://develop.github.com/p/object.html.","title":"option to make_request so it doesn't parse the response as json.","updated_at":"2009/04/18 13:04:09 -0700","html_url":"https://github.com/ask/python-github2/issues/1","user":"ask","labels":[],"state":"open"},{"gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","position":5.0,"number":5,"votes":1,"created_at":"2010/05/18 06:10:36 -0700","comments":1,"body":"Goes without saying...","title":"This project needs tests!","updated_at":"2010/06/20 05:47:06 -0700","html_url":"https://github.com/ask/python-github2/issues/5","user":"ask","labels":[],"state":"open"},{"gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","position":24.0,"number":24,"votes":0,"created_at":"2010/12/08 23:50:26 -0800","comments":11,"body":"Hi, I added an optional 'page' argument to receive not only last 35 commits, but all others too. Think, such approach could be useful for other list operations too.","title":"Pagination support for commits.","updated_at":"2011/01/04 16:26:07 -0800","diff_url":"https://github.com/ask/python-github2/pull/24.diff","patch_url":"https://github.com/ask/python-github2/pull/24.patch","pull_request_url":"https://github.com/ask/python-github2/pull/24","html_url":"https://github.com/ask/python-github2/issues/24","user":"svetlyak40wt","labels":[],"state":"open"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":39.0,"number":39,"votes":0,"created_at":"2011/04/18 08:25:47 -0700","comments":3,"body":"\nFeeble brainstorming session...\n\nI've just been bitten quite badly by the lack of timezone handling, the cause is the use of naive datetime objects in the 'GitHub' timezone(`America/Los_Angeles`). While processing some tasks that span the PST/PDT changeover the ordering of events is broken.\n\nOptions are:\n\n1. Leave alone and try to process the datetime objects externally, somewhat easy but not a good solution as it requires duplication in each project that requires accurate date handling\n2. Start producing non-naive datetime objects, breaks any caller who is not prepared for it.\n3. Introduce a setting to toggle naive object availability, defaulting to naive objects to maintain backwards compatibility\n\n[python-dateutil](http://labix.org/python-dateutil) makes handling option 1 quite easy, and also simplifies the handling of option 3 at the cost of another external dependency. Option 2 is just pure evil, or pure stupidity depending on point of view.\n\nOption 3 results in a parsing using something like the following entirely untested code:\n\n datetime_ = parser.parse(github_date)\n if NAIVE:\n datetime_.replace(tzinfo=None)\n return datetime_\n\nAnd similarly producing GitHub compatible date strings would require handling of naive formats with equally untested code such as:\n\n if NAIVE:\n datetime_ = datetime_.replace(tz.gettz(\"America/Los_Angeles\"))\n return datetime_.strftime(\"%Y/%m/%d %H:%M:%S %z\")","title":"Datetime timezone handling.","updated_at":"2011/05/29 08:37:08 -0700","diff_url":"https://github.com/ask/python-github2/pull/39.diff","patch_url":"https://github.com/ask/python-github2/pull/39.patch","pull_request_url":"https://github.com/ask/python-github2/pull/39","html_url":"https://github.com/ask/python-github2/issues/39","user":"JNRowe","labels":[],"state":"open"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":53.0,"number":53,"votes":0,"created_at":"2011/05/28 22:15:49 -0700","comments":1,"body":"It would make more sense, and be easy to filter wanted data, if debug info was handled with the `logging` module. Side effect being the output will change significantly, but does it matter for debugging output anyway?","title":"Use logging for debug information.","updated_at":"2011/06/06 16:17:26 -0700","html_url":"https://github.com/ask/python-github2/issues/53","user":"JNRowe","labels":[],"state":"open"}]} \ No newline at end of file +{"issues":[{"gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","position":5.0,"number":5,"votes":1,"created_at":"2010/05/18 06:10:36 -0700","comments":1,"body":"Goes without saying...","title":"This project needs tests!","updated_at":"2010/06/20 05:47:06 -0700","html_url":"https://github.com/ask/python-github2/issues/5","user":"ask","labels":[],"state":"open"},{"gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","position":24.0,"number":24,"votes":0,"created_at":"2010/12/08 23:50:26 -0800","comments":11,"body":"Hi, I added an optional 'page' argument to receive not only last 35 commits, but all others too. Think, such approach could be useful for other list operations too.","title":"Pagination support for commits.","updated_at":"2011/01/04 16:26:07 -0800","diff_url":"https://github.com/ask/python-github2/pull/24.diff","patch_url":"https://github.com/ask/python-github2/pull/24.patch","pull_request_url":"https://github.com/ask/python-github2/pull/24","html_url":"https://github.com/ask/python-github2/issues/24","user":"svetlyak40wt","labels":[],"state":"open"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":1.0,"number":55,"votes":0,"created_at":"2011/06/30 09:41:09 -0700","comments":0,"body":"\nSee \"Listing Organization Memberships\" section in\nhttp://develop.github.com/p/orgs.html.","title":"Organisation repository listings should support owned/public filters.","updated_at":"2011/06/30 09:41:09 -0700","html_url":"https://github.com/ask/python-github2/issues/55","user":"JNRowe","labels":[],"state":"open"},{"gravatar_id":"390ea42c23c2c383f973abdafa24bb07","position":1.0,"number":58,"votes":0,"created_at":"2011/07/25 11:52:30 -0700","comments":3,"body":"Hi there,\r\n\r\nI was just trying to test this :\r\nhttp://packages.python.org/github2/quickstart.html\r\n\r\nAnd I got that :\r\n\r\n```bash\r\nTraceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"build/bdist.macosx-10.7-intel/egg/github2/repositories.py\", line 206, in watchers\r\n File \"build/bdist.macosx-10.7-intel/egg/github2/core.py\", line 147, in make_request\r\n File \"build/bdist.macosx-10.7-intel/egg/github2/request.py\", line 96, in get\r\n File \"build/bdist.macosx-10.7-intel/egg/github2/request.py\", line 124, in make_request\r\n File \"build/bdist.macosx-10.7-intel/egg/github2/request.py\", line 142, in raw_request\r\n File \"/Library/Python/2.7/site-packages/httplib2/__init__.py\", line 1436, in request\r\n (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)\r\n File \"/Library/Python/2.7/site-packages/httplib2/__init__.py\", line 1188, in _request\r\n (response, content) = self._conn_request(conn, request_uri, method, body, headers)\r\n File \"/Library/Python/2.7/site-packages/httplib2/__init__.py\", line 1123, in _conn_request\r\n conn.connect()\r\n File \"/Library/Python/2.7/site-packages/httplib2/__init__.py\", line 890, in connect\r\n self.disable_ssl_certificate_validation, self.ca_certs)\r\n File \"/Library/Python/2.7/site-packages/httplib2/__init__.py\", line 76, in _ssl_wrap_socket\r\n cert_reqs=cert_reqs, ca_certs=ca_certs)\r\n File \"/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py\", line 344, in wrap_socket\r\n ciphers=ciphers)\r\n File \"/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py\", line 119, in __init__\r\n ciphers)\r\nssl.SSLError: [Errno 185090050] _ssl.c:336: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib\r\n```\r\n\r\nAny hints would be nice as the errors are totally cryptic.","title":"Python httplib2 cause error with certificate routine","updated_at":"2011/08/13 05:59:36 -0700","html_url":"https://github.com/ask/python-github2/issues/58","user":"gabrielstuff","labels":[],"state":"open"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,issues,search,ask,python-github2,closed,timezone,ca6c06a1218893c7591a54352d1dc532 b/tests/data/github.com,api,v2,json,issues,search,ask,python-github2,closed,timezone,ca6c06a1218893c7591a54352d1dc532 new file mode 100644 index 0000000..7083a70 --- /dev/null +++ b/tests/data/github.com,api,v2,json,issues,search,ask,python-github2,closed,timezone,ca6c06a1218893c7591a54352d1dc532 @@ -0,0 +1,15 @@ +status: 200 +x-ratelimit-remaining: 59 +content-location: https://github.com/api/v2/json/issues/search/ask/python-github2/closed/timezone +-content-encoding: gzip +connection: keep-alive +content-length: 3425 +server: nginx/1.0.4 +x-runtime: 115ms +x-ratelimit-limit: 60 +etag: "bfda19659b7735d883284fd23fd703ea" +cache-control: private, max-age=0, must-revalidate +date: Thu, 25 Aug 2011 06:53:44 GMT +content-type: application/json; charset=utf-8 + +{"issues":[{"gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","position":21.0,"number":21,"votes":0,"created_at":"2010/12/06 13:10:09 -0800","comments":1,"body":"Hi Ask,\r\n\r\nToday, I commited several patches. First of all, I added support for authenticating using `Github(access_token=\"...\")` GET requests instead of `Github(username=\"foo\", api_token=\"...\")` POST requests. This is the way Github API v2 URLs need to be called when using their (experimental) OAuth model.\r\n\r\nFurthermore, while I was testing this, the Github API seems to have changed the format of all dates to be nice UTC dates with timezone info. This makes the special conversion hoops and tricks unnecessary, so I removed them. For safety, I kept the \"flexible date conversion function lookup\" construct around, but maybe this could be removed as a whole. I'll leave this judgement up to you.\r\n\r\nHave a blast!\r\n\r\nCheers,\r\nVincent\r\n","title":"Add support for OAuth URLs, and a fix for date format","updated_at":"2010/12/06 21:28:42 -0800","diff_url":"https://github.com/ask/python-github2/pull/21.diff","patch_url":"https://github.com/ask/python-github2/pull/21.patch","pull_request_url":"https://github.com/ask/python-github2/pull/21","closed_at":"2010/12/06 21:28:42 -0800","html_url":"https://github.com/ask/python-github2/issues/21","user":"nvie","labels":[],"state":"closed"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":39.0,"number":39,"votes":0,"created_at":"2011/04/18 08:25:47 -0700","comments":4,"body":"\nFeeble brainstorming session...\n\nI've just been bitten quite badly by the lack of timezone handling, the cause is the use of naive datetime objects in the 'GitHub' timezone(`America/Los_Angeles`). While processing some tasks that span the PST/PDT changeover the ordering of events is broken.\n\nOptions are:\n\n1. Leave alone and try to process the datetime objects externally, somewhat easy but not a good solution as it requires duplication in each project that requires accurate date handling\n2. Start producing non-naive datetime objects, breaks any caller who is not prepared for it.\n3. Introduce a setting to toggle naive object availability, defaulting to naive objects to maintain backwards compatibility\n\n[python-dateutil](http://labix.org/python-dateutil) makes handling option 1 quite easy, and also simplifies the handling of option 3 at the cost of another external dependency. Option 2 is just pure evil, or pure stupidity depending on point of view.\n\nOption 3 results in a parsing using something like the following entirely untested code:\n\n datetime_ = parser.parse(github_date)\n if NAIVE:\n datetime_.replace(tzinfo=None)\n return datetime_\n\nAnd similarly producing GitHub compatible date strings would require handling of naive formats with equally untested code such as:\n\n if NAIVE:\n datetime_ = datetime_.replace(tz.gettz(\"America/Los_Angeles\"))\n return datetime_.strftime(\"%Y/%m/%d %H:%M:%S %z\")","title":"Datetime timezone handling.","updated_at":"2011/06/23 02:33:57 -0700","diff_url":"https://github.com/ask/python-github2/pull/39.diff","patch_url":"https://github.com/ask/python-github2/pull/39.patch","pull_request_url":"https://github.com/ask/python-github2/pull/39","closed_at":"2011/06/23 02:33:57 -0700","html_url":"https://github.com/ask/python-github2/issues/39","user":"JNRowe","labels":[],"state":"closed"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,issues,search,ask,python-github2,open,timezone,e8e32dc210586a68a9d7e0a88b74214f b/tests/data/github.com,api,v2,json,issues,search,ask,python-github2,open,timezone,e8e32dc210586a68a9d7e0a88b74214f deleted file mode 100644 index eb6514d..0000000 --- a/tests/data/github.com,api,v2,json,issues,search,ask,python-github2,open,timezone,e8e32dc210586a68a9d7e0a88b74214f +++ /dev/null @@ -1,14 +0,0 @@ -status: 200 -x-ratelimit-remaining: 58 -content-location: https://github.com/api/v2/json/issues/search/ask/python-github2/open/timezone -x-runtime: 786ms -content-length: 2831 -server: nginx/0.7.67 -connection: keep-alive -x-ratelimit-limit: 60 -etag: "7ad27323679884e25d6250c231999fbf" -cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:41:21 GMT -content-type: application/json; charset=utf-8 - -{"issues":[{"gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","position":1.0,"number":1,"votes":0,"created_at":"2009/04/18 13:04:09 -0700","comments":0,"body":"This to support getting raw blob/tree data as specified in http://develop.github.com/p/object.html.","title":"option to make_request so it doesn't parse the response as json.","updated_at":"2009/04/18 13:04:09 -0700","html_url":"https://github.com/ask/python-github2/issues/1","user":"ask","labels":[],"state":"open"},{"gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","position":5.0,"number":5,"votes":1,"created_at":"2010/05/18 06:10:36 -0700","comments":1,"body":"Goes without saying...","title":"This project needs tests!","updated_at":"2010/06/20 05:47:06 -0700","html_url":"https://github.com/ask/python-github2/issues/5","user":"ask","labels":[],"state":"open"},{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":39.0,"number":39,"votes":0,"created_at":"2011/04/18 08:25:47 -0700","comments":3,"body":"\nFeeble brainstorming session...\n\nI've just been bitten quite badly by the lack of timezone handling, the cause is the use of naive datetime objects in the 'GitHub' timezone(`America/Los_Angeles`). While processing some tasks that span the PST/PDT changeover the ordering of events is broken.\n\nOptions are:\n\n1. Leave alone and try to process the datetime objects externally, somewhat easy but not a good solution as it requires duplication in each project that requires accurate date handling\n2. Start producing non-naive datetime objects, breaks any caller who is not prepared for it.\n3. Introduce a setting to toggle naive object availability, defaulting to naive objects to maintain backwards compatibility\n\n[python-dateutil](http://labix.org/python-dateutil) makes handling option 1 quite easy, and also simplifies the handling of option 3 at the cost of another external dependency. Option 2 is just pure evil, or pure stupidity depending on point of view.\n\nOption 3 results in a parsing using something like the following entirely untested code:\n\n datetime_ = parser.parse(github_date)\n if NAIVE:\n datetime_.replace(tzinfo=None)\n return datetime_\n\nAnd similarly producing GitHub compatible date strings would require handling of naive formats with equally untested code such as:\n\n if NAIVE:\n datetime_ = datetime_.replace(tz.gettz(\"America/Los_Angeles\"))\n return datetime_.strftime(\"%Y/%m/%d %H:%M:%S %z\")","title":"Datetime timezone handling.","updated_at":"2011/05/29 08:37:08 -0700","diff_url":"https://github.com/ask/python-github2/pull/39.diff","patch_url":"https://github.com/ask/python-github2/pull/39.patch","pull_request_url":"https://github.com/ask/python-github2/pull/39","html_url":"https://github.com/ask/python-github2/issues/39","user":"JNRowe","labels":[],"state":"open"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,issues,show,ask,python-github2,24,5b0c4463c84fc26a94bc1bfaa191fed5 b/tests/data/github.com,api,v2,json,issues,show,ask,python-github2,24,5b0c4463c84fc26a94bc1bfaa191fed5 index f7e70e5..c09772b 100644 --- a/tests/data/github.com,api,v2,json,issues,show,ask,python-github2,24,5b0c4463c84fc26a94bc1bfaa191fed5 +++ b/tests/data/github.com,api,v2,json,issues,show,ask,python-github2,24,5b0c4463c84fc26a94bc1bfaa191fed5 @@ -1,14 +1,15 @@ status: 200 x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/issues/show/ask/python-github2/24 -x-runtime: 54ms -content-length: 717 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 717 +server: nginx/1.0.4 +x-runtime: 18ms x-ratelimit-limit: 60 -etag: "4bf7a5d7cb406c99f66a0110a1828a7b" +etag: "bb0d68a4d27526c9254b59bae43068fd" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:40:55 GMT +date: Thu, 25 Aug 2011 06:52:22 GMT content-type: application/json; charset=utf-8 {"issue":{"gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","position":24.0,"number":24,"votes":0,"created_at":"2010/12/08 23:50:26 -0800","comments":11,"body":"Hi, I added an optional 'page' argument to receive not only last 35 commits, but all others too. Think, such approach could be useful for other list operations too.","title":"Pagination support for commits.","updated_at":"2011/01/04 16:26:07 -0800","diff_url":"https://github.com/ask/python-github2/pull/24.diff","patch_url":"https://github.com/ask/python-github2/pull/24.patch","pull_request_url":"https://github.com/ask/python-github2/pull/24","html_url":"https://github.com/ask/python-github2/issues/24","user":"svetlyak40wt","labels":[],"state":"open"}} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,organizations,github,d8f16b26260e5cb408a092d5071996ca b/tests/data/github.com,api,v2,json,organizations,github,d8f16b26260e5cb408a092d5071996ca index f69777d..32ad149 100644 --- a/tests/data/github.com,api,v2,json,organizations,github,d8f16b26260e5cb408a092d5071996ca +++ b/tests/data/github.com,api,v2,json,organizations,github,d8f16b26260e5cb408a092d5071996ca @@ -1,14 +1,15 @@ -status: 304 -x-ratelimit-remaining: 58 +status: 200 +x-ratelimit-remaining: 57 content-location: https://github.com/api/v2/json/organizations/github +-content-encoding: gzip connection: keep-alive content-length: 387 -server: nginx/0.7.67 -x-runtime: 21ms +server: nginx/1.0.4 +x-runtime: 23ms x-ratelimit-limit: 60 -etag: "f02044d4890b2b09977b7b9e75053b1e" +etag: "8a6bd525c73aaa95dbb493788a45e183" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:46:30 GMT +date: Thu, 25 Aug 2011 06:54:20 GMT content-type: application/json; charset=utf-8 -{"organization":{"gravatar_id":"61024896f291303615bcd4f7a0dcfb74","company":null,"name":"GitHub","created_at":"2008-05-10T21:37:31-07:00","location":"San Francisco, CA","public_repo_count":26,"public_gist_count":0,"blog":"https://github.com/about","following_count":0,"id":9919,"type":"Organization","permission":null,"followers_count":571,"login":"github","email":"support@github.com"}} \ No newline at end of file +{"organization":{"gravatar_id":"61024896f291303615bcd4f7a0dcfb74","company":null,"name":"GitHub","created_at":"2008-05-10T21:37:31-07:00","location":"San Francisco, CA","public_repo_count":31,"public_gist_count":0,"blog":"https://github.com/about","following_count":0,"id":9919,"type":"Organization","permission":null,"followers_count":591,"login":"github","email":"support@github.com"}} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,organizations,github,public_members,01d1fb446743540669e4773bf8cf53c3 b/tests/data/github.com,api,v2,json,organizations,github,public_members,01d1fb446743540669e4773bf8cf53c3 index 924af5f..4b2ecd6 100644 --- a/tests/data/github.com,api,v2,json,organizations,github,public_members,01d1fb446743540669e4773bf8cf53c3 +++ b/tests/data/github.com,api,v2,json,organizations,github,public_members,01d1fb446743540669e4773bf8cf53c3 @@ -1,14 +1,15 @@ status: 200 -x-ratelimit-remaining: 56 +x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/organizations/github/public_members -x-runtime: 2059ms -content-length: 12105 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 12867 +server: nginx/1.0.4 +x-runtime: 744ms x-ratelimit-limit: 60 -etag: "defe4971b2099cdb3aafc77717bc32f7" +etag: "0174ac52c3b274340f5dd5bd0a372282" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:46:58 GMT +date: Thu, 25 Aug 2011 06:54:57 GMT content-type: application/json; charset=utf-8 -{"users":[{"gravatar_id":"7f67284c12b6d38fa1c8590911fd58a0","company":"GitHub","name":"Petros Amiridis","created_at":"2008/10/13 14:19:57 -0700","location":"Thessaloniki, Greece","public_repo_count":12,"public_gist_count":19,"blog":"amiridis.net","following_count":50,"id":28818,"type":"User","permission":null,"followers_count":32,"login":"amiridis","email":"petros@amiridis.net"},{"gravatar_id":"a86224d72ce21cd9f5bee6784d4b06c7","company":"GitHub","name":"Corey Donohoe","created_at":"2008/01/22 01:14:11 -0800","location":"Potrero, SF","public_repo_count":85,"public_gist_count":145,"blog":"http://www.atmos.org","following_count":161,"id":38,"type":"User","permission":null,"followers_count":313,"login":"atmos","email":"atmos@atmos.org"},{"gravatar_id":"4d1c9dad17af98e55cb65b4efce27c42","company":"GitHub","name":"Ben Burkert","created_at":"2008/01/28 15:44:14 -0800","location":"SF","public_repo_count":50,"public_gist_count":23,"blog":"http://benburkert.com","following_count":16,"id":77,"type":"User","permission":null,"followers_count":75,"login":"benburkert","email":"ben@benburkert.com"},{"gravatar_id":"4f237ee952d1af0c47028bfda53664a8","company":"Github, Inc. ","name":"Beth Newland","created_at":"2011/06/06 15:11:41 -0700","location":"San Francisco, CA","public_repo_count":0,"public_gist_count":0,"blog":null,"following_count":0,"id":833804,"type":"User","permission":null,"followers_count":0,"login":"bethnewland","email":"beth@github.com"},{"gravatar_id":"aeb22e809b34e9c8a5623ba6c4738a63","company":"GitHub, Inc.","name":"Ben Bleikamp","created_at":"2008/09/22 13:28:53 -0700","location":"San Francisco, CA","public_repo_count":5,"public_gist_count":14,"blog":"http://bleikamp.com","following_count":36,"id":25792,"type":"User","permission":null,"followers_count":38,"login":"bleikamp","email":"ben@github.com"},{"gravatar_id":"c9f60c0cb1d941fa8e93bbfcb907c27e","company":"GitHub","name":"Brian Lopez","created_at":"2008/05/26 15:54:55 -0700","location":"San Francisco, Ca","public_repo_count":43,"public_gist_count":118,"blog":"http://github.com","following_count":141,"id":11571,"type":"User","permission":null,"followers_count":172,"login":"brianmario","email":"seniorlopez@gmail.com"},{"gravatar_id":"edad3aaefdd499ab37b910aded54e1b3","company":"GitHub, Inc. / Revyver, Inc.","name":"Bryan Veloso","created_at":"2008/02/27 14:57:03 -0800","location":"Los Angeles, CA","public_repo_count":19,"public_gist_count":30,"blog":"http://avalonstar.com","following_count":109,"id":1258,"type":"User","permission":null,"followers_count":192,"login":"bryanveloso","email":"bryan@github.com"},{"gravatar_id":"a79ff2bb7da84e275361857d2feb2b1b","company":"GitHub","name":"Cameron McEfee","created_at":"2009/04/11 23:16:59 -0700","location":"San Francisco","public_repo_count":3,"public_gist_count":0,"blog":"http://www.cameronmcefee.com","following_count":3,"id":72919,"type":"User","permission":null,"followers_count":39,"login":"cameronmcefee","email":"cameron@github.com"},{"gravatar_id":"b8dbb1987e8e5318584865f880036796","company":"GitHub","name":"Chris Wanstrath","created_at":"2007/10/19 22:24:19 -0700","location":"San Francisco","public_repo_count":93,"public_gist_count":277,"blog":"http://chriswanstrath.com/","following_count":211,"id":2,"type":"User","permission":null,"followers_count":2760,"login":"defunkt","email":"chris@wanstrath.com"},{"gravatar_id":"fd923a707b3e788b3d6b0e8f84cfbbe3","company":"GitHub","name":"Alex Malinovich","created_at":"2008/04/15 00:17:51 -0700","location":"San Francisco, CA","public_repo_count":15,"public_gist_count":12,"blog":"http://www.the-love-shack.net","following_count":8,"id":7385,"type":"User","permission":null,"followers_count":22,"login":"demonbane","email":"alex@github.com"},{"gravatar_id":"eb6845de9b94082d7d90a0603d91ff42","company":"GitHub","name":"Heather A. Baldry","created_at":"2011/05/03 14:39:07 -0700","location":"San Francisco, CA","public_repo_count":0,"public_gist_count":0,"blog":null,"following_count":10,"id":766591,"type":"User","permission":null,"followers_count":5,"login":"Foggybtmgirl","email":"heather@github.com"},{"gravatar_id":"6f63cde8b16b035280ca615f621a6c8c","company":"GitHub","name":"Zach Holman","created_at":"2008/03/10 09:32:37 -0700","location":"San Francisco, CA","public_repo_count":33,"public_gist_count":12,"blog":"http://zachholman.com/about","following_count":65,"id":2723,"type":"User","permission":null,"followers_count":278,"login":"holman","email":"hello@zachholman.com"},{"gravatar_id":"bbe5dc8dcf248706525ab76f46185520","company":"GitHub","name":"Joshua Peek","created_at":"2008/02/03 14:05:54 -0800","location":"Chicago, IL","public_repo_count":71,"public_gist_count":50,"blog":"http://joshpeek.com/","following_count":33,"id":137,"type":"User","permission":null,"followers_count":561,"login":"josh","email":"josh@joshpeek.com"},{"gravatar_id":"62e8c8bfaa8d755cab82accb48d335c8","company":"GitHub","name":"Josh Abernathy","created_at":"2008/06/14 17:25:05 -0700","location":"Seattle, WA","public_repo_count":13,"public_gist_count":4,"blog":"http://twitter.com/joshaber","following_count":23,"id":13760,"type":"User","permission":null,"followers_count":166,"login":"joshaber","email":"josh@github.com"},{"gravatar_id":"e650a773fc40f042e46d1e36b326e4e1","company":"GitHub Inc.","name":"Jason Costello","created_at":"2010/09/26 12:46:13 -0700","location":"San Francisco, CA","public_repo_count":0,"public_gist_count":0,"blog":"jason-costello.com","following_count":6,"id":416727,"type":"User","permission":null,"followers_count":18,"login":"jsncostello","email":"jason@github.com"},{"gravatar_id":"28bda3f5dfcc92365efe4eecc0b38eb8","company":"GitHub","name":"Kami","created_at":"2010/10/17 13:21:26 -0700","location":"San Francisco, CA","public_repo_count":4,"public_gist_count":0,"blog":null,"following_count":47,"id":443094,"type":"User","permission":null,"followers_count":30,"login":"kamzilla","email":"kami@github.com"},{"gravatar_id":"4e3f068bcac207404306e790c0d662ed","company":"GitHub Inc.","name":"Kevin Sawicki","created_at":"2011/03/15 09:46:18 -0700","location":"Redwood City, CA","public_repo_count":8,"public_gist_count":4,"blog":null,"following_count":10,"id":671378,"type":"User","permission":null,"followers_count":48,"login":"kevinsawicki","email":"kevin@github.com"},{"gravatar_id":"5f2da528927a2ec9ba4fec2069cbc958","company":"GitHub, Inc.","name":"Kyle Neath","created_at":"2008/02/27 16:48:15 -0800","location":"San Francisco, CA","public_repo_count":21,"public_gist_count":32,"blog":"http://warpspire.com","following_count":40,"id":1354,"type":"User","permission":null,"followers_count":304,"login":"kneath","email":"kyle@github.com"},{"gravatar_id":"17fc534665d54bcd8b4d2676d709aa99","company":"GitHub","name":"Melissa Severini","created_at":"2009/03/19 16:48:58 -0700","location":"San Francisco, CA","public_repo_count":2,"public_gist_count":0,"blog":"http://luckiestmonkey.tumblr.com/","following_count":12,"id":65087,"type":"User","permission":null,"followers_count":58,"login":"luckiestmonkey","email":"luckiest.monkey@gmail.com"},{"gravatar_id":"25c7c18223fb42a4c6ae1c8db6f50f9b","company":"GitHub, Inc.","name":"Tom Preston-Werner","created_at":"2007/10/19 22:24:19 -0700","location":"San Francisco","public_repo_count":50,"public_gist_count":66,"blog":"http://tom.preston-werner.com","following_count":11,"id":1,"type":"User","permission":null,"followers_count":1960,"login":"mojombo","email":"tom@github.com"},{"gravatar_id":"b6861bc75bff3c594212338a914a39ad","company":"Highgroove Studios","name":"Matt Todd","created_at":"2008/02/10 22:28:43 -0800","location":"Atlanta, GA","public_repo_count":89,"public_gist_count":93,"blog":"http://maraby.org/","following_count":175,"id":182,"type":"User","permission":null,"followers_count":102,"login":"mtodd","email":"mtodd@highgroove.com"},{"gravatar_id":"63027897db609fdbe6ac820fa12736b9","company":null,"name":"Jeff King","created_at":"2009/01/12 01:29:10 -0800","location":null,"public_repo_count":7,"public_gist_count":2,"blog":null,"following_count":0,"id":45925,"type":"User","permission":null,"followers_count":31,"login":"peff","email":"peff@peff.net"},{"gravatar_id":"947c333c75de1dc54a711a400d575c8c","company":"GitHub, Inc.","name":"PJ Hyett","created_at":"2008/01/07 09:54:22 -0800","location":"San Francisco, CA","public_repo_count":16,"public_gist_count":23,"blog":"http://twitter.com/pjhyett","following_count":23,"id":3,"type":"User","permission":null,"followers_count":824,"login":"pjhyett","email":"pj@github.com"},{"gravatar_id":"ac65e62b7ad42e9bc5fdf391d0e250a7","company":"mystery","name":"Corey Johnson","created_at":"2008/02/21 14:07:26 -0800","location":"San Francisco","public_repo_count":18,"public_gist_count":57,"blog":"","following_count":1,"id":596,"type":"User","permission":null,"followers_count":134,"login":"probablycorey","email":"cj@github.com"},{"gravatar_id":"920e60e81da4fb61eaeb95fa9d7c3b70","company":"GitHub","name":"Tim Sharpe","created_at":"2009/05/03 20:28:14 -0700","location":"Sydney :: Australia","public_repo_count":29,"public_gist_count":8,"blog":"","following_count":0,"id":80629,"type":"User","permission":null,"followers_count":43,"login":"rodjek","email":"tim@github.com"},{"gravatar_id":"abfc88b96ae18c85ba7aac3bded2ec5e","company":"GitHub","name":"Ryan Tomayko","created_at":"2008/02/18 19:30:53 -0800","location":"San Francisco","public_repo_count":34,"public_gist_count":81,"blog":"http://tomayko.com/about","following_count":79,"id":404,"type":"User","permission":null,"followers_count":870,"login":"rtomayko","email":"r@tomayko.com"},{"gravatar_id":"9375a9529679f1b42b567a640d775e7d","company":"GitHub","name":"Scott Chacon","created_at":"2008/01/27 09:19:28 -0800","location":"San Francisco, CA","public_repo_count":124,"public_gist_count":69,"blog":"http://scottchacon.com","following_count":17,"id":70,"type":"User","permission":null,"followers_count":1479,"login":"schacon","email":"schacon@gmail.com"},{"gravatar_id":"8cf17bf55c4d16cf52480619bb0b6c92","company":"GitHub","name":"Simon Rozet","created_at":"2008/01/29 12:37:53 -0800","location":"Brussels, Belgium","public_repo_count":91,"public_gist_count":52,"blog":"http://atonie.org","following_count":166,"id":90,"type":"User","permission":null,"followers_count":270,"login":"sr","email":"simon@rozet.name"},{"gravatar_id":"6804f1775cb4babfcc3851298566fbce","company":"GitHub","name":"Vicent Martí","created_at":"2008/12/26 12:21:00 -0800","location":"Mainly Europe","public_repo_count":12,"public_gist_count":2,"blog":null,"following_count":20,"id":42793,"type":"User","permission":null,"followers_count":72,"login":"tanoku","email":"vicent@github.com"},{"gravatar_id":"2f4861b27dc35663ed271d39f5358261","company":"GitHub","name":"Tim Clem","created_at":"2009/10/07 13:26:53 -0700","location":"San Francisco, CA","public_repo_count":10,"public_gist_count":3,"blog":"http://timclem.wordpress.com","following_count":1,"id":136521,"type":"User","permission":null,"followers_count":31,"login":"tclem","email":"timothy.clem@gmail.com"},{"gravatar_id":"821395fe70906c8290df7f18ac4ac6cf","company":"GitHub","name":"rick","created_at":"2008/01/13 20:33:35 -0800","location":"sf","public_repo_count":120,"public_gist_count":83,"blog":"http://techno-weenie.net","following_count":14,"id":21,"type":"User","permission":null,"followers_count":1478,"login":"technoweenie","email":"technoweenie@gmail.com"},{"gravatar_id":"495abe87ebbc36e70c8db98680ec8a46","company":null,"name":"Tekkub","created_at":"2008/02/23 13:14:45 -0800","location":"Denver, CO","public_repo_count":132,"public_gist_count":204,"blog":"tekkub.net","following_count":0,"id":706,"type":"User","permission":null,"followers_count":327,"login":"tekkub","email":null},{"gravatar_id":"d47656e20ff5e42f125fc5ea0fd636c6","company":"GitHub, Inc.","name":"Aman Gupta","created_at":"2008/03/07 18:10:31 -0800","location":"San Francisco, CA","public_repo_count":67,"public_gist_count":92,"blog":"http://twitter.com/tmm1","following_count":129,"id":2567,"type":"User","permission":null,"followers_count":537,"login":"tmm1","email":"aman@tmm1.net"}]} \ No newline at end of file +{"users":[{"gravatar_id":"7f67284c12b6d38fa1c8590911fd58a0","company":"GitHub","name":"Petros Amiridis","created_at":"2008/10/13 14:19:57 -0700","location":"Thessaloniki, Greece","public_repo_count":25,"public_gist_count":20,"blog":"amiridis.net","following_count":53,"id":28818,"type":"User","permission":null,"followers_count":47,"login":"amiridis","email":"petros@amiridis.net"},{"gravatar_id":"a86224d72ce21cd9f5bee6784d4b06c7","company":"GitHub","name":"Corey Donohoe","created_at":"2008/01/22 01:14:11 -0800","location":"Potrero, SF","public_repo_count":87,"public_gist_count":146,"blog":"http://www.atmos.org","following_count":161,"id":38,"type":"User","permission":null,"followers_count":333,"login":"atmos","email":"atmos@atmos.org"},{"gravatar_id":"4d1c9dad17af98e55cb65b4efce27c42","company":"GitHub","name":"Ben Burkert","created_at":"2008/01/28 15:44:14 -0800","location":"SF","public_repo_count":57,"public_gist_count":24,"blog":"http://benburkert.com","following_count":16,"id":77,"type":"User","permission":null,"followers_count":80,"login":"benburkert","email":"ben@benburkert.com"},{"gravatar_id":"4f237ee952d1af0c47028bfda53664a8","company":"Github, Inc. ","name":"Beth Newland","created_at":"2011/06/06 15:11:41 -0700","location":"San Francisco, CA","public_repo_count":0,"public_gist_count":0,"blog":null,"following_count":0,"id":833804,"type":"User","permission":null,"followers_count":4,"login":"bethnewland","email":"beth@github.com"},{"gravatar_id":"aeb22e809b34e9c8a5623ba6c4738a63","company":"GitHub, Inc.","name":"Ben Bleikamp","created_at":"2008/09/22 13:28:53 -0700","location":"San Francisco, CA","public_repo_count":9,"public_gist_count":14,"blog":"http://bleikamp.com","following_count":43,"id":25792,"type":"User","permission":null,"followers_count":42,"login":"bleikamp","email":"ben@github.com"},{"gravatar_id":"c9f60c0cb1d941fa8e93bbfcb907c27e","company":"GitHub","name":"Brian Lopez","created_at":"2008/05/26 15:54:55 -0700","location":"San Francisco, Ca","public_repo_count":46,"public_gist_count":118,"blog":"http://github.com","following_count":144,"id":11571,"type":"User","permission":null,"followers_count":188,"login":"brianmario","email":"seniorlopez@gmail.com"},{"gravatar_id":"edad3aaefdd499ab37b910aded54e1b3","company":"GitHub, Inc. / Revyver, Inc.","name":"Bryan Veloso","created_at":"2008/02/27 14:57:03 -0800","location":"Los Angeles, CA","public_repo_count":19,"public_gist_count":31,"blog":"http://avalonstar.com","following_count":110,"id":1258,"type":"User","permission":null,"followers_count":199,"login":"bryanveloso","email":"bryan@github.com"},{"gravatar_id":"a79ff2bb7da84e275361857d2feb2b1b","company":"GitHub","name":"Cameron McEfee","created_at":"2009/04/11 23:16:59 -0700","location":"San Francisco","public_repo_count":3,"public_gist_count":0,"blog":"http://www.cameronmcefee.com","following_count":4,"id":72919,"type":"User","permission":null,"followers_count":67,"login":"cameronmcefee","email":"cameron@github.com"},{"gravatar_id":"b8dbb1987e8e5318584865f880036796","company":"GitHub","name":"Chris Wanstrath","created_at":"2007/10/19 22:24:19 -0700","location":"San Francisco","public_repo_count":93,"public_gist_count":279,"blog":"http://chriswanstrath.com/","following_count":212,"id":2,"type":"User","permission":null,"followers_count":3516,"login":"defunkt","email":"chris@wanstrath.com"},{"gravatar_id":"fd923a707b3e788b3d6b0e8f84cfbbe3","company":"GitHub","name":"Alex Malinovich","created_at":"2008/04/15 00:17:51 -0700","location":"San Francisco, CA","public_repo_count":15,"public_gist_count":13,"blog":"http://www.the-love-shack.net","following_count":8,"id":7385,"type":"User","permission":null,"followers_count":24,"login":"demonbane","email":"alex@github.com"},{"gravatar_id":"eb6845de9b94082d7d90a0603d91ff42","company":"GitHub","name":"Heather A. Baldry","created_at":"2011/05/03 14:39:07 -0700","location":"San Francisco, CA","public_repo_count":0,"public_gist_count":0,"blog":null,"following_count":11,"id":766591,"type":"User","permission":null,"followers_count":7,"login":"Foggybtmgirl","email":"heather@github.com"},{"gravatar_id":"6f63cde8b16b035280ca615f621a6c8c","company":"GitHub","name":"Zach Holman","created_at":"2008/03/10 09:32:37 -0700","location":"San Francisco, CA","public_repo_count":37,"public_gist_count":12,"blog":"http://zachholman.com/about","following_count":69,"id":2723,"type":"User","permission":null,"followers_count":401,"login":"holman","email":"hello@zachholman.com"},{"gravatar_id":"bbe5dc8dcf248706525ab76f46185520","company":"GitHub","name":"Joshua Peek","created_at":"2008/02/03 14:05:54 -0800","location":"Chicago, IL","public_repo_count":76,"public_gist_count":57,"blog":"http://joshpeek.com/","following_count":37,"id":137,"type":"User","permission":null,"followers_count":631,"login":"josh","email":"josh@joshpeek.com"},{"gravatar_id":"62e8c8bfaa8d755cab82accb48d335c8","company":"GitHub","name":"Josh Abernathy","created_at":"2008/06/14 17:25:05 -0700","location":"Seattle, WA","public_repo_count":18,"public_gist_count":5,"blog":"http://twitter.com/joshaber","following_count":28,"id":13760,"type":"User","permission":null,"followers_count":197,"login":"joshaber","email":"josh@github.com"},{"gravatar_id":"e650a773fc40f042e46d1e36b326e4e1","company":"GitHub Inc.","name":"Jason Costello","created_at":"2010/09/26 12:46:13 -0700","location":"San Francisco, CA","public_repo_count":0,"public_gist_count":0,"blog":"jason-costello.com","following_count":8,"id":416727,"type":"User","permission":null,"followers_count":21,"login":"jsncostello","email":"jason@github.com"},{"gravatar_id":"28bda3f5dfcc92365efe4eecc0b38eb8","company":"GitHub","name":"Kami","created_at":"2010/10/17 13:21:26 -0700","location":"San Francisco, CA","public_repo_count":5,"public_gist_count":3,"blog":null,"following_count":53,"id":443094,"type":"User","permission":null,"followers_count":49,"login":"kamzilla","email":"kami@github.com"},{"gravatar_id":"4e3f068bcac207404306e790c0d662ed","company":"GitHub Inc.","name":"Kevin Sawicki","created_at":"2011/03/15 09:46:18 -0700","location":"Redwood City, CA","public_repo_count":23,"public_gist_count":5,"blog":null,"following_count":10,"id":671378,"type":"User","permission":null,"followers_count":55,"login":"kevinsawicki","email":"kevin@github.com"},{"gravatar_id":"5f2da528927a2ec9ba4fec2069cbc958","company":"GitHub, Inc.","name":"Kyle Neath","created_at":"2008/02/27 16:48:15 -0800","location":"San Francisco, CA","public_repo_count":22,"public_gist_count":32,"blog":"http://warpspire.com","following_count":40,"id":1354,"type":"User","permission":null,"followers_count":347,"login":"kneath","email":"kyle@github.com"},{"gravatar_id":"17fc534665d54bcd8b4d2676d709aa99","company":"GitHub","name":"Melissa Severini","created_at":"2009/03/19 16:48:58 -0700","location":"San Francisco, CA","public_repo_count":2,"public_gist_count":0,"blog":"http://luckiestmonkey.tumblr.com/","following_count":12,"id":65087,"type":"User","permission":null,"followers_count":62,"login":"luckiestmonkey","email":"luckiest.monkey@gmail.com"},{"gravatar_id":"366472c969c9754ae2b8079e42fed1ca","company":"GitHub, Inc.","name":"Jon Maddox","created_at":"2008/02/13 15:33:31 -0800","location":"Richmond, Va","public_repo_count":56,"public_gist_count":62,"blog":"http://jonmaddox.com","following_count":8,"id":260,"type":"User","permission":null,"followers_count":184,"login":"maddox","email":"jon@jonmaddox.com"},{"gravatar_id":"25c7c18223fb42a4c6ae1c8db6f50f9b","company":"GitHub, Inc.","name":"Tom Preston-Werner","created_at":"2007/10/19 22:24:19 -0700","location":"San Francisco","public_repo_count":52,"public_gist_count":66,"blog":"http://tom.preston-werner.com","following_count":11,"id":1,"type":"User","permission":null,"followers_count":2745,"login":"mojombo","email":"tom@github.com"},{"gravatar_id":"b6861bc75bff3c594212338a914a39ad","company":"GitHub","name":"Matt Todd","created_at":"2008/02/10 22:28:43 -0800","location":"San Francisco, CA","public_repo_count":97,"public_gist_count":94,"blog":"http://maraby.org/","following_count":177,"id":182,"type":"User","permission":null,"followers_count":121,"login":"mtodd","email":"matt@github.com"},{"gravatar_id":"63027897db609fdbe6ac820fa12736b9","company":null,"name":"Jeff King","created_at":"2009/01/12 01:29:10 -0800","location":null,"public_repo_count":7,"public_gist_count":2,"blog":null,"following_count":0,"id":45925,"type":"User","permission":null,"followers_count":40,"login":"peff","email":"peff@peff.net"},{"gravatar_id":"947c333c75de1dc54a711a400d575c8c","company":"GitHub, Inc.","name":"PJ Hyett","created_at":"2008/01/07 09:54:22 -0800","location":"San Francisco, CA","public_repo_count":16,"public_gist_count":23,"blog":"http://twitter.com/pjhyett","following_count":23,"id":3,"type":"User","permission":null,"followers_count":1279,"login":"pjhyett","email":"pj@github.com"},{"gravatar_id":"ac65e62b7ad42e9bc5fdf391d0e250a7","company":"mystery","name":"Corey Johnson","created_at":"2008/02/21 14:07:26 -0800","location":"San Francisco","public_repo_count":22,"public_gist_count":63,"blog":"","following_count":2,"id":596,"type":"User","permission":null,"followers_count":145,"login":"probablycorey","email":"cj@github.com"},{"gravatar_id":"920e60e81da4fb61eaeb95fa9d7c3b70","company":"GitHub","name":"Tim Sharpe","created_at":"2009/05/03 20:28:14 -0700","location":"Sydney :: Australia","public_repo_count":33,"public_gist_count":9,"blog":"","following_count":0,"id":80629,"type":"User","permission":null,"followers_count":57,"login":"rodjek","email":"tim@github.com"},{"gravatar_id":"abfc88b96ae18c85ba7aac3bded2ec5e","company":"GitHub","name":"Ryan Tomayko","created_at":"2008/02/18 19:30:53 -0800","location":"San Francisco","public_repo_count":37,"public_gist_count":81,"blog":"http://tomayko.com/about","following_count":79,"id":404,"type":"User","permission":null,"followers_count":933,"login":"rtomayko","email":"r@tomayko.com"},{"gravatar_id":"9375a9529679f1b42b567a640d775e7d","company":"GitHub","name":"Scott Chacon","created_at":"2008/01/27 09:19:28 -0800","location":"San Francisco, CA","public_repo_count":131,"public_gist_count":76,"blog":"http://scottchacon.com","following_count":17,"id":70,"type":"User","permission":null,"followers_count":2068,"login":"schacon","email":"schacon@gmail.com"},{"gravatar_id":"8cf17bf55c4d16cf52480619bb0b6c92","company":"GitHub","name":"Simon Rozet","created_at":"2008/01/29 12:37:53 -0800","location":"Brussels, Belgium","public_repo_count":97,"public_gist_count":52,"blog":"http://twitter.com/sr","following_count":166,"id":90,"type":"User","permission":null,"followers_count":282,"login":"sr","email":"simon@rozet.name"},{"gravatar_id":"6804f1775cb4babfcc3851298566fbce","company":"GitHub","name":"Vicent Martí","created_at":"2008/12/26 12:21:00 -0800","location":"Mainly Europe","public_repo_count":16,"public_gist_count":3,"blog":"http://twitter.com/tanoku","following_count":20,"id":42793,"type":"User","permission":null,"followers_count":98,"login":"tanoku","email":"vicent@github.com"},{"gravatar_id":"2f4861b27dc35663ed271d39f5358261","company":"GitHub","name":"Tim Clem","created_at":"2009/10/07 13:26:53 -0700","location":"San Francisco, CA","public_repo_count":11,"public_gist_count":3,"blog":"http://timclem.wordpress.com","following_count":6,"id":136521,"type":"User","permission":null,"followers_count":41,"login":"tclem","email":"timothy.clem@gmail.com"},{"gravatar_id":"821395fe70906c8290df7f18ac4ac6cf","company":"GitHub","name":"rick","created_at":"2008/01/13 20:33:35 -0800","location":"San Francisco","public_repo_count":87,"public_gist_count":86,"blog":"http://techno-weenie.net","following_count":14,"id":21,"type":"User","permission":null,"followers_count":1536,"login":"technoweenie","email":"technoweenie@gmail.com"},{"gravatar_id":"495abe87ebbc36e70c8db98680ec8a46","company":null,"name":"Tekkub","created_at":"2008/02/23 13:14:45 -0800","location":"Denver, CO","public_repo_count":136,"public_gist_count":205,"blog":"tekkub.net","following_count":0,"id":706,"type":"User","permission":null,"followers_count":353,"login":"tekkub","email":null},{"gravatar_id":"d47656e20ff5e42f125fc5ea0fd636c6","company":"GitHub, Inc.","name":"Aman Gupta","created_at":"2008/03/07 18:10:31 -0800","location":"San Francisco, CA","public_repo_count":79,"public_gist_count":93,"blog":"http://twitter.com/tmm1","following_count":129,"id":2567,"type":"User","permission":null,"followers_count":585,"login":"tmm1","email":"aman@tmm1.net"},{"gravatar_id":"8de583685d3e68f79917ec82253185d8","company":"GitHub","name":"Paul Betts","created_at":"2008/02/27 18:26:12 -0800","location":"Seattle","public_repo_count":29,"public_gist_count":37,"blog":"http://blog.paulbetts.org","following_count":1,"id":1396,"type":"User","permission":null,"followers_count":53,"login":"xpaulbettsx","email":"paul@paulbetts.org"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,organizations,github,public_repositories,f3e3e76ac876947b47b43a16fa0e44e5 b/tests/data/github.com,api,v2,json,organizations,github,public_repositories,f3e3e76ac876947b47b43a16fa0e44e5 index 995ca97..27015a8 100644 --- a/tests/data/github.com,api,v2,json,organizations,github,public_repositories,f3e3e76ac876947b47b43a16fa0e44e5 +++ b/tests/data/github.com,api,v2,json,organizations,github,public_repositories,f3e3e76ac876947b47b43a16fa0e44e5 @@ -1,14 +1,15 @@ status: 200 -x-ratelimit-remaining: 57 +x-ratelimit-remaining: 58 content-location: https://github.com/api/v2/json/organizations/github/public_repositories -x-runtime: 62ms -content-length: 11291 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 13453 +server: nginx/1.0.4 +x-runtime: 79ms x-ratelimit-limit: 60 -etag: "1f0d429e423a830166d933f216bfd508" +etag: "245b1ac3569e7232afff40d5ddc21c49" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:46:47 GMT +date: Thu, 25 Aug 2011 06:55:32 GMT content-type: application/json; charset=utf-8 -{"repositories":[{"watchers":61,"has_downloads":true,"organization":"github","homepage":"https://github.com/","pushed_at":"2011/05/31 16:40:29 -0700","created_at":"2008/03/09 15:43:49 -0700","fork":false,"has_wiki":false,"open_issues":0,"url":"https://github.com/github/media","forks":6,"size":128,"private":false,"name":"media","owner":"github","has_issues":false,"description":"Media files for use in your GitHub integration projects"},{"watchers":101,"has_downloads":false,"organization":"github","homepage":"","pushed_at":"2011/04/19 17:45:38 -0700","created_at":"2008/05/10 21:45:03 -0700","fork":false,"has_wiki":false,"open_issues":0,"url":"https://github.com/github/albino","forks":12,"size":1296,"private":false,"language":"Ruby","name":"albino","owner":"github","has_issues":true,"description":"Ruby wrapper for the Pygments syntax highlighter."},{"watchers":42,"has_downloads":false,"organization":"github","homepage":"","pushed_at":"2008/05/10 21:52:00 -0700","created_at":"2008/05/10 21:45:18 -0700","fork":false,"has_wiki":false,"open_issues":1,"url":"https://github.com/github/hubahuba","forks":9,"size":0,"private":false,"language":"Ruby","name":"hubahuba","owner":"github","has_issues":true,"description":"Ruby and Rails core extensions used by GitHub."},{"watchers":50,"has_downloads":false,"organization":"github","homepage":"","pushed_at":"2008/05/10 21:52:22 -0700","created_at":"2008/05/10 21:45:31 -0700","fork":false,"has_wiki":false,"open_issues":1,"url":"https://github.com/github/jquery-hotkeys","forks":7,"size":0,"private":false,"name":"jquery-hotkeys","owner":"github","has_issues":true,"description":"jQuery hotkeys plugin."},{"watchers":72,"has_downloads":false,"organization":"github","homepage":"","pushed_at":"2008/05/10 21:52:38 -0700","created_at":"2008/05/10 21:45:52 -0700","fork":false,"has_wiki":false,"open_issues":2,"url":"https://github.com/github/jquery-relatize_date","forks":9,"size":0,"private":false,"name":"jquery-relatize_date","owner":"github","has_issues":true,"description":"jQuery version of technoweenie's relative date js library."},{"watchers":11,"has_downloads":true,"organization":"github","homepage":"","pushed_at":"2008/12/30 13:04:00 -0800","created_at":"2008/05/10 21:46:10 -0700","fork":false,"has_wiki":true,"open_issues":0,"url":"https://github.com/github/request_timer","forks":0,"size":140,"private":false,"language":"Ruby","name":"request_timer","owner":"github","has_issues":true,"description":"Simple Rails request timer with even simpler js bookmarklet."},{"watchers":27,"has_downloads":true,"organization":"github","homepage":"","pushed_at":"2008/05/10 21:53:11 -0700","created_at":"2008/05/10 21:46:27 -0700","fork":false,"has_wiki":true,"open_issues":0,"url":"https://github.com/github/will_paginate_with_hotkeys","forks":1,"size":0,"private":false,"language":"Ruby","name":"will_paginate_with_hotkeys","owner":"github","has_issues":true,"description":"Evil twin plugin version of will_paginate to work with jQuery hotkeys plugin."},{"watchers":25,"has_downloads":true,"organization":"github","homepage":"","pushed_at":"2008/11/03 20:54:57 -0800","created_at":"2008/10/24 15:29:32 -0700","fork":false,"has_wiki":true,"open_issues":0,"url":"https://github.com/github/gem-builder","forks":3,"size":76,"private":false,"language":"Ruby","name":"gem-builder","owner":"github","has_issues":true,"description":"The scripts used to build RubyGems on GitHub"},{"watchers":4,"has_downloads":true,"organization":"github","homepage":"","pushed_at":"2009/04/08 17:36:30 -0700","created_at":"2009/02/10 19:56:17 -0800","fork":false,"has_wiki":true,"open_issues":0,"url":"https://github.com/github/safegem","forks":0,"size":1024,"private":false,"language":"Ruby","name":"safegem","owner":"github","has_issues":true,"description":"GitHub's safe gem eval web service"},{"watchers":135,"has_downloads":false,"organization":"github","homepage":"http://develop.github.com","pushed_at":"2011/06/01 20:54:15 -0700","created_at":"2009/02/17 15:51:23 -0800","master_branch":"gh-pages","fork":false,"has_wiki":false,"open_issues":34,"url":"https://github.com/github/develop.github.com","forks":45,"size":112,"private":false,"language":"JavaScript","name":"develop.github.com","owner":"github","has_issues":true,"description":"API Documentation for GitHub"},{"watchers":69,"has_downloads":true,"organization":"github","homepage":"http://github.github.com/github-flavored-markdown/","pushed_at":"2011/04/28 04:10:37 -0700","created_at":"2009/04/10 16:01:43 -0700","master_branch":"gh-pages","fork":false,"has_wiki":true,"open_issues":20,"url":"https://github.com/github/github-flavored-markdown","forks":14,"size":232,"private":false,"language":"JavaScript","name":"github-flavored-markdown","owner":"github","has_issues":true,"description":""},{"watchers":314,"has_downloads":false,"organization":"github","homepage":"","pushed_at":"2011/04/03 11:21:14 -0700","created_at":"2009/10/30 18:02:46 -0700","fork":false,"has_wiki":false,"open_issues":41,"url":"https://github.com/github/markup","forks":66,"size":384,"private":false,"language":"Python","name":"markup","owner":"github","has_issues":true,"description":"The code we use to render README.your_favorite_markup"},{"watchers":1209,"has_downloads":true,"organization":"github","homepage":"","pushed_at":"2011/06/07 23:44:52 -0700","created_at":"2010/03/29 11:30:53 -0700","fork":false,"has_wiki":true,"open_issues":87,"url":"https://github.com/github/gollum","forks":136,"size":4812,"private":false,"language":"JavaScript","name":"gollum","owner":"github","has_issues":true,"description":"A simple, Git-powered wiki with a sweet API and local frontend."},{"watchers":23,"has_downloads":true,"organization":"github","homepage":"","pushed_at":"2010/08/01 01:04:46 -0700","created_at":"2010/04/02 21:50:46 -0700","fork":false,"has_wiki":true,"open_issues":2,"url":"https://github.com/github/upload","forks":4,"size":276,"private":false,"language":"Ruby","name":"upload","owner":"github","has_issues":true,"description":"Script to upload files to non-repo storage from the command line"},{"watchers":312,"has_downloads":false,"organization":"github","homepage":"http://github.com/blog/53-github-services-ipo","pushed_at":"2011/06/06 16:57:52 -0700","created_at":"2010/05/14 13:07:36 -0700","fork":false,"has_wiki":false,"open_issues":27,"url":"https://github.com/github/github-services","forks":334,"size":128,"private":false,"language":"Ruby","name":"github-services","owner":"github","has_issues":true,"description":"Official GitHub Services Integration - You can set these up in your repo admin screen under Service Hooks"},{"watchers":154,"has_downloads":false,"organization":"github","homepage":"http://help.github.com","pushed_at":"2011/06/07 09:55:45 -0700","created_at":"2010/05/17 00:25:56 -0700","master_branch":"gh-pages","fork":false,"has_wiki":false,"open_issues":8,"url":"https://github.com/github/help.github.com","forks":107,"size":424,"private":false,"language":"JavaScript","name":"help.github.com","owner":"github","has_issues":false,"description":"GitHub help guides"},{"watchers":1,"has_downloads":true,"organization":"github","homepage":"","pushed_at":"2010/08/24 12:41:38 -0700","created_at":"2010/08/24 12:16:26 -0700","fork":true,"has_wiki":true,"open_issues":0,"url":"https://github.com/github/project","forks":1,"size":296,"private":false,"language":"Ruby","name":"project","owner":"github","has_issues":false,"description":"test project for tutorial"},{"watchers":8,"has_downloads":true,"organization":"github","homepage":"http://git-scm.com","pushed_at":"2010/12/13 15:34:29 -0800","created_at":"2010/10/14 15:25:49 -0700","master_branch":"dup-post-receive-refs","fork":true,"has_wiki":true,"open_issues":0,"url":"https://github.com/github/git","forks":0,"size":292,"private":false,"language":"C","name":"git","owner":"github","has_issues":false,"description":"Git Source Code Mirror"},{"watchers":6,"has_downloads":true,"organization":"github","homepage":"http://rubyonrails.org","pushed_at":"2011/02/16 02:11:39 -0800","created_at":"2010/10/15 17:01:48 -0700","master_branch":"github","fork":true,"has_wiki":false,"open_issues":0,"url":"https://github.com/github/rails","forks":1,"size":460,"private":false,"language":"Ruby","name":"rails","owner":"github","has_issues":false,"integrate_branch":"master","description":"Ruby on Rails + GitHub patches"},{"watchers":2132,"has_downloads":true,"organization":"github","homepage":"","pushed_at":"2011/04/29 02:06:53 -0700","created_at":"2010/11/08 12:17:14 -0800","fork":false,"has_wiki":false,"open_issues":22,"url":"https://github.com/github/gitignore","forks":268,"size":520,"private":false,"name":"gitignore","owner":"github","has_issues":false,"description":"A collection of useful .gitignore templates"},{"watchers":2,"has_downloads":true,"organization":"github","homepage":"","pushed_at":"2010/11/17 18:25:38 -0800","created_at":"2010/11/17 18:06:38 -0800","fork":false,"has_wiki":true,"open_issues":0,"url":"https://github.com/github/testrepo","forks":3,"size":168,"private":false,"language":"C","name":"testrepo","owner":"github","has_issues":false,"description":"my test repo (used for nodeload tests)"},{"watchers":406,"has_downloads":true,"organization":"github","homepage":"http://help.github.com/dmca","pushed_at":"2011/06/07 16:24:20 -0700","created_at":"2011/01/28 15:58:38 -0800","fork":false,"has_wiki":false,"open_issues":0,"url":"https://github.com/github/dmca","forks":8,"size":148,"private":false,"name":"dmca","owner":"github","has_issues":false,"description":"DMCA takedowns GitHub has received"},{"watchers":3,"has_downloads":true,"organization":"github","homepage":"","pushed_at":"2011/02/19 17:38:14 -0800","created_at":"2011/02/19 17:37:40 -0800","fork":false,"has_wiki":true,"open_issues":0,"url":"https://github.com/github/pong","forks":1,"size":108,"private":false,"name":"pong","owner":"github","has_issues":true,"description":"Auxiliary repository for external ping checks"},{"watchers":484,"has_downloads":true,"organization":"github","homepage":"https://github.com/blog/799-win-a-ticket-to-pycon-us-2011","pushed_at":"2011/02/24 13:04:06 -0800","created_at":"2011/02/21 12:28:39 -0800","fork":false,"has_wiki":false,"open_issues":3,"url":"https://github.com/github/pycon2011","forks":271,"size":172,"private":false,"language":"Python","name":"pycon2011","owner":"github","has_issues":false,"description":"Fork me to win a ticket to PyCon 2011!"},{"watchers":39,"has_downloads":true,"organization":"github","homepage":"","pushed_at":"2011/03/17 00:28:10 -0700","created_at":"2011/02/22 18:13:11 -0800","fork":false,"has_wiki":true,"open_issues":0,"url":"https://github.com/github/email_reply_parser","forks":3,"size":844,"private":false,"language":"Ruby","name":"email_reply_parser","owner":"github","has_issues":true,"description":""},{"watchers":14,"has_downloads":true,"organization":"github","homepage":"http://developer.github.com","pushed_at":"2011/06/07 12:03:35 -0700","created_at":"2011/04/26 12:20:56 -0700","fork":false,"has_wiki":true,"open_issues":2,"url":"https://github.com/github/developer.github.com","forks":4,"size":220,"private":false,"language":"Ruby","name":"developer.github.com","owner":"github","has_issues":true,"description":"GitHub API documentation"}]} \ No newline at end of file +{"repositories":[{"description":"Media files for use in your GitHub integration projects","forks":7,"pushed_at":"2011/08/19 12:52:33 -0700","has_downloads":true,"created_at":"2008/03/09 15:43:49 -0700","organization":"github","homepage":"https://github.com/","watchers":67,"fork":false,"has_wiki":false,"size":132,"private":false,"open_issues":0,"name":"media","url":"https://github.com/github/media","owner":"github","has_issues":false},{"description":"Ruby wrapper for the Pygments syntax highlighter.","forks":19,"pushed_at":"2011/07/20 07:47:19 -0700","has_downloads":false,"created_at":"2008/05/10 21:45:03 -0700","organization":"github","homepage":"","watchers":150,"fork":false,"language":"Ruby","has_wiki":false,"size":136,"private":false,"open_issues":1,"name":"albino","url":"https://github.com/github/albino","owner":"github","has_issues":true},{"description":"Ruby and Rails core extensions used by GitHub.","forks":10,"pushed_at":"2008/05/10 21:52:00 -0700","has_downloads":false,"created_at":"2008/05/10 21:45:18 -0700","organization":"github","homepage":"","watchers":45,"fork":false,"language":"Ruby","has_wiki":false,"size":0,"private":false,"open_issues":1,"name":"hubahuba","url":"https://github.com/github/hubahuba","owner":"github","has_issues":true},{"description":"jQuery hotkeys plugin.","forks":7,"pushed_at":"2008/05/10 21:52:22 -0700","has_downloads":false,"created_at":"2008/05/10 21:45:31 -0700","organization":"github","homepage":"","watchers":55,"fork":false,"has_wiki":false,"size":0,"private":false,"open_issues":0,"name":"jquery-hotkeys","url":"https://github.com/github/jquery-hotkeys","owner":"github","has_issues":true},{"description":"jQuery version of technoweenie's relative date js library.","forks":10,"pushed_at":"2008/05/10 21:52:38 -0700","has_downloads":false,"created_at":"2008/05/10 21:45:52 -0700","organization":"github","homepage":"","watchers":79,"fork":false,"has_wiki":false,"size":0,"private":false,"open_issues":2,"name":"jquery-relatize_date","url":"https://github.com/github/jquery-relatize_date","owner":"github","has_issues":true},{"description":"Simple Rails request timer with even simpler js bookmarklet.","forks":0,"pushed_at":"2008/12/30 13:04:00 -0800","has_downloads":true,"created_at":"2008/05/10 21:46:10 -0700","organization":"github","homepage":"","watchers":11,"fork":false,"language":"Ruby","has_wiki":true,"size":140,"private":false,"open_issues":0,"name":"request_timer","url":"https://github.com/github/request_timer","owner":"github","has_issues":true},{"description":"Evil twin plugin version of will_paginate to work with jQuery hotkeys plugin.","forks":1,"pushed_at":"2008/05/10 21:53:11 -0700","has_downloads":true,"created_at":"2008/05/10 21:46:27 -0700","organization":"github","homepage":"","watchers":27,"fork":false,"language":"Ruby","has_wiki":true,"size":0,"private":false,"open_issues":0,"name":"will_paginate_with_hotkeys","url":"https://github.com/github/will_paginate_with_hotkeys","owner":"github","has_issues":true},{"description":"The scripts used to build RubyGems on GitHub","forks":3,"pushed_at":"2008/11/03 20:54:57 -0800","has_downloads":true,"created_at":"2008/10/24 15:29:32 -0700","organization":"github","homepage":"","watchers":26,"fork":false,"language":"Ruby","has_wiki":true,"size":76,"private":false,"open_issues":0,"name":"gem-builder","url":"https://github.com/github/gem-builder","owner":"github","has_issues":true},{"description":"GitHub's safe gem eval web service","forks":0,"pushed_at":"2009/04/08 17:36:30 -0700","has_downloads":true,"created_at":"2009/02/10 19:56:17 -0800","organization":"github","homepage":"","watchers":5,"fork":false,"language":"Ruby","has_wiki":true,"size":1024,"private":false,"open_issues":0,"name":"safegem","url":"https://github.com/github/safegem","owner":"github","has_issues":true},{"description":"API Documentation for GitHub","forks":50,"pushed_at":"2011/08/22 19:07:27 -0700","has_downloads":false,"created_at":"2009/02/17 15:51:23 -0800","organization":"github","homepage":"http://develop.github.com","watchers":147,"fork":false,"language":"JavaScript","has_wiki":false,"size":292,"private":false,"open_issues":38,"name":"develop.github.com","url":"https://github.com/github/develop.github.com","owner":"github","has_issues":true,"master_branch":"gh-pages"},{"description":"","forks":18,"pushed_at":"2011/08/10 13:56:42 -0700","has_downloads":true,"created_at":"2009/04/10 16:01:43 -0700","organization":"github","homepage":"http://github.github.com/github-flavored-markdown/","watchers":88,"fork":false,"language":"JavaScript","has_wiki":true,"size":272,"private":false,"open_issues":21,"name":"github-flavored-markdown","url":"https://github.com/github/github-flavored-markdown","owner":"github","has_issues":true,"master_branch":"gh-pages"},{"description":"The code we use to render README.your_favorite_markup","forks":84,"pushed_at":"2011/08/24 02:41:45 -0700","has_downloads":false,"created_at":"2009/10/30 18:02:46 -0700","organization":"github","homepage":"","watchers":373,"fork":false,"language":"Python","has_wiki":false,"size":500,"private":false,"open_issues":51,"name":"markup","url":"https://github.com/github/markup","owner":"github","has_issues":true},{"description":"A simple, Git-powered wiki with a sweet API and local frontend.","forks":152,"pushed_at":"2011/08/08 15:46:02 -0700","has_downloads":true,"created_at":"2010/03/29 11:30:53 -0700","organization":"github","homepage":"","watchers":1366,"fork":false,"language":"JavaScript","has_wiki":true,"size":608,"private":false,"open_issues":96,"name":"gollum","url":"https://github.com/github/gollum","owner":"github","has_issues":true},{"description":"Script to upload files to non-repo storage from the command line","forks":6,"pushed_at":"2010/08/01 01:04:46 -0700","has_downloads":true,"created_at":"2010/04/02 21:50:46 -0700","organization":"github","homepage":"","watchers":26,"fork":false,"language":"Ruby","has_wiki":true,"size":276,"private":false,"open_issues":2,"name":"upload","url":"https://github.com/github/upload","owner":"github","has_issues":true},{"description":"Official GitHub Services Integration - You can set these up in your repo admin screen under Service Hooks","forks":358,"pushed_at":"2011/08/24 08:01:45 -0700","has_downloads":false,"created_at":"2010/05/14 13:07:36 -0700","organization":"github","homepage":"http://github.com/blog/53-github-services-ipo","watchers":428,"fork":false,"language":"Ruby","has_wiki":false,"size":1028,"private":false,"open_issues":23,"name":"github-services","url":"https://github.com/github/github-services","owner":"github","has_issues":true},{"description":"GitHub help guides","forks":153,"pushed_at":"2011/08/22 19:52:54 -0700","has_downloads":false,"created_at":"2010/05/17 00:25:56 -0700","organization":"github","homepage":"http://help.github.com","watchers":234,"fork":false,"language":"JavaScript","has_wiki":false,"size":696,"private":false,"open_issues":16,"name":"help.github.com","url":"https://github.com/github/help.github.com","owner":"github","has_issues":false,"master_branch":"gh-pages"},{"description":"test project for tutorial","forks":1,"pushed_at":"2010/08/24 12:41:38 -0700","has_downloads":true,"created_at":"2010/08/24 12:16:26 -0700","organization":"github","homepage":"","watchers":1,"fork":true,"language":"Ruby","has_wiki":true,"size":296,"private":false,"open_issues":0,"name":"project","url":"https://github.com/github/project","owner":"github","has_issues":false},{"description":"Git Source Code Mirror","forks":1,"pushed_at":"2011/08/16 16:59:50 -0700","has_downloads":true,"created_at":"2010/10/14 15:25:49 -0700","organization":"github","homepage":"http://git-scm.com","watchers":10,"fork":true,"language":"C","has_wiki":true,"size":212,"private":false,"open_issues":0,"name":"git","url":"https://github.com/github/git","owner":"github","has_issues":false,"master_branch":"dup-post-receive-refs"},{"description":"Ruby on Rails + GitHub patches","forks":2,"pushed_at":"2011/02/16 02:11:39 -0800","has_downloads":true,"created_at":"2010/10/15 17:01:48 -0700","organization":"github","homepage":"http://rubyonrails.org","watchers":8,"fork":true,"language":"Ruby","has_wiki":false,"size":460,"private":false,"open_issues":0,"name":"rails","url":"https://github.com/github/rails","owner":"github","has_issues":false,"integrate_branch":"master","master_branch":"github"},{"description":"A collection of useful .gitignore templates","forks":336,"pushed_at":"2011/08/20 09:38:11 -0700","has_downloads":true,"created_at":"2010/11/08 12:17:14 -0800","organization":"github","homepage":"","watchers":2630,"fork":false,"has_wiki":false,"size":520,"private":false,"open_issues":47,"name":"gitignore","url":"https://github.com/github/gitignore","owner":"github","has_issues":false},{"description":"DMCA takedowns GitHub has received","forks":8,"pushed_at":"2011/07/03 12:25:15 -0700","has_downloads":true,"created_at":"2011/01/28 15:58:38 -0800","organization":"github","homepage":"http://help.github.com/dmca","watchers":436,"fork":false,"has_wiki":false,"size":136,"private":false,"open_issues":0,"name":"dmca","url":"https://github.com/github/dmca","owner":"github","has_issues":false},{"description":"Auxiliary repository for external ping checks","forks":1,"pushed_at":"2011/02/19 17:38:14 -0800","has_downloads":true,"created_at":"2011/02/19 17:37:40 -0800","organization":"github","homepage":"","watchers":3,"fork":false,"has_wiki":true,"size":108,"private":false,"open_issues":0,"name":"pong","url":"https://github.com/github/pong","owner":"github","has_issues":true},{"description":"Fork me to win a ticket to PyCon 2011!","forks":233,"pushed_at":"2011/02/24 13:04:06 -0800","has_downloads":true,"created_at":"2011/02/21 12:28:39 -0800","organization":"github","homepage":"https://github.com/blog/799-win-a-ticket-to-pycon-us-2011","watchers":462,"fork":false,"language":"Python","has_wiki":false,"size":172,"private":false,"open_issues":3,"name":"pycon2011","url":"https://github.com/github/pycon2011","owner":"github","has_issues":false},{"description":"","forks":3,"pushed_at":"2011/08/23 16:18:47 -0700","has_downloads":true,"created_at":"2011/02/22 18:13:11 -0800","organization":"github","homepage":"","watchers":46,"fork":false,"language":"Ruby","has_wiki":true,"size":116,"private":false,"open_issues":0,"name":"email_reply_parser","url":"https://github.com/github/email_reply_parser","owner":"github","has_issues":true},{"description":"GitHub API documentation","forks":22,"pushed_at":"2011/08/22 20:06:11 -0700","has_downloads":true,"created_at":"2011/04/26 12:20:56 -0700","organization":"github","homepage":"http://developer.github.com","watchers":59,"fork":false,"language":"Ruby","has_wiki":true,"size":256,"private":false,"open_issues":14,"name":"developer.github.com","url":"https://github.com/github/developer.github.com","owner":"github","has_issues":true},{"description":"Language Savant","forks":61,"pushed_at":"2011/08/23 10:42:19 -0700","has_downloads":true,"created_at":"2011/05/09 15:53:13 -0700","organization":"github","homepage":"","watchers":552,"fork":false,"language":"JavaScript","has_wiki":false,"size":664,"private":false,"open_issues":0,"name":"linguist","url":"https://github.com/github/linguist","owner":"github","has_issues":true},{"description":"github terminal","forks":2,"pushed_at":"2011/07/06 21:18:47 -0700","has_downloads":true,"created_at":"2011/05/25 09:13:15 -0700","organization":"github","homepage":"https://ghterm.heroku.com","watchers":21,"fork":false,"language":"JavaScript","has_wiki":true,"size":192,"private":false,"open_issues":5,"name":"ghterm","url":"https://github.com/github/ghterm","owner":"github","has_issues":true},{"description":"DON'T DELETE THIS. USED FOR MONITORING AND WHATNOT.","forks":1,"pushed_at":"2011/06/23 13:36:23 -0700","has_downloads":true,"created_at":"2011/06/23 13:34:49 -0700","organization":"github","homepage":"","watchers":3,"fork":false,"has_wiki":true,"size":0,"private":false,"open_issues":0,"name":"testrepo","url":"https://github.com/github/testrepo","owner":"github","has_issues":true},{"description":"node.js client for Etsy'd StatsD server","forks":0,"pushed_at":"2011/08/02 20:04:55 -0700","has_downloads":true,"created_at":"2011/08/01 16:04:48 -0700","organization":"github","homepage":"","watchers":1,"fork":true,"language":"JavaScript","has_wiki":true,"size":112,"private":false,"open_issues":0,"name":"node-statsd","url":"https://github.com/github/node-statsd","owner":"github","has_issues":false},{"description":"A Ruby Statsd client that isn't a direct port of the Python example code. Because Ruby isn't Python.","forks":0,"pushed_at":"2011/08/10 09:29:51 -0700","has_downloads":true,"created_at":"2011/08/10 08:35:44 -0700","organization":"github","homepage":"","watchers":1,"fork":true,"language":"Ruby","has_wiki":false,"size":120,"private":false,"open_issues":0,"name":"statsd-ruby","url":"https://github.com/github/statsd-ruby","owner":"github","has_issues":false},{"description":"Grit gives you object oriented read/write access to Git repositories via Ruby.","forks":0,"pushed_at":"2011/08/19 22:50:44 -0700","has_downloads":true,"created_at":"2011/08/18 09:43:26 -0700","organization":"github","homepage":"http://grit.rubyforge.org/","watchers":2,"fork":true,"language":"Ruby","has_wiki":true,"size":120,"private":false,"open_issues":0,"name":"grit","url":"https://github.com/github/grit","owner":"github","has_issues":false}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,pulls,ask,python-github2,39,599fd11f8dd1b224e0c640d3f70f34c8 b/tests/data/github.com,api,v2,json,pulls,ask,python-github2,39,599fd11f8dd1b224e0c640d3f70f34c8 index 1bdbf22..cda75fa 100644 --- a/tests/data/github.com,api,v2,json,pulls,ask,python-github2,39,599fd11f8dd1b224e0c640d3f70f34c8 +++ b/tests/data/github.com,api,v2,json,pulls,ask,python-github2,39,599fd11f8dd1b224e0c640d3f70f34c8 @@ -1,14 +1,15 @@ status: 200 x-ratelimit-remaining: 57 content-location: https://github.com/api/v2/json/pulls/ask/python-github2/39 -x-runtime: 149ms -content-length: 12398 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 12222 +server: nginx/1.0.4 +x-runtime: 106ms x-ratelimit-limit: 60 -etag: "0226e420f8447aaca8f8eb4add9a6167" +etag: "6139ed3c079c5dc3080cedd92858edf7" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:45:25 GMT +date: Thu, 25 Aug 2011 06:55:51 GMT content-type: application/json; charset=utf-8 -{"pull":{"html_url":"https://github.com/ask/python-github2/pull/39","issue_updated_at":"2011-05-29T15:37:08Z","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":39.0,"number":39,"votes":0,"issue_user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"comments":3,"body":"\nFeeble brainstorming session...\n\nI've just been bitten quite badly by the lack of timezone handling, the cause is the use of naive datetime objects in the 'GitHub' timezone(`America/Los_Angeles`). While processing some tasks that span the PST/PDT changeover the ordering of events is broken.\n\nOptions are:\n\n1. Leave alone and try to process the datetime objects externally, somewhat easy but not a good solution as it requires duplication in each project that requires accurate date handling\n2. Start producing non-naive datetime objects, breaks any caller who is not prepared for it.\n3. Introduce a setting to toggle naive object availability, defaulting to naive objects to maintain backwards compatibility\n\n[python-dateutil](http://labix.org/python-dateutil) makes handling option 1 quite easy, and also simplifies the handling of option 3 at the cost of another external dependency. Option 2 is just pure evil, or pure stupidity depending on point of view.\n\nOption 3 results in a parsing using something like the following entirely untested code:\n\n datetime_ = parser.parse(github_date)\n if NAIVE:\n datetime_.replace(tzinfo=None)\n return datetime_\n\nAnd similarly producing GitHub compatible date strings would require handling of naive formats with equally untested code such as:\n\n if NAIVE:\n datetime_ = datetime_.replace(tz.gettz(\"America/Los_Angeles\"))\n return datetime_.strftime(\"%Y/%m/%d %H:%M:%S %z\")","title":"Datetime timezone handling.","diff_url":"https://github.com/ask/python-github2/pull/39.diff","updated_at":"2011-06-07T13:56:50Z","created_at":"2011-04-30T12:37:40Z","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"base":{"label":"ask:master","user":{"name":"Ask Solem Hoel","company":"RabbitMQ, VMware, Inc.","gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","location":"London, UK","type":"User","login":"ask","email":"ask@celeryproject.org"},"ref":"master","repository":{"watchers":143,"has_downloads":true,"homepage":"http://packages.python.org/github2","pushed_at":"2011/06/06 16:15:04 -0700","created_at":"2009/04/18 08:31:12 -0700","fork":false,"has_wiki":true,"open_issues":5,"url":"https://github.com/ask/python-github2","forks":50,"size":112,"private":false,"language":"Python","name":"python-github2","owner":"ask","has_issues":true,"description":"github client in python, with issues support."},"sha":"6a79f43f174acd3953ced69263c06d311a6bda56"},"mergeable":false,"patch_url":"https://github.com/ask/python-github2/pull/39.patch","discussion":[{"type":"IssueComment","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","created_at":"2011/04/18 08:28:10 -0700","body":"The lack of timezone handling also exhibits itself for any consumers who use a timedelta to convert to local time for the duration of any gap between GitHub's switch to DST and their own. On the order of 2-4 weeks a year for regions that I personally care about ;)","updated_at":"2011/04/18 08:28:10 -0700","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":1021613},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"6738adaf013cef84fb58d2aa755557e5358d122b"}],"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":"458c90b9f07c00c1a988d6f420130ee8bbf6503c","committed_date":"2011-04-30T03:03:06-07:00","authored_date":"2011-04-30T03:03:06-07:00","message":"Added feature spec for naive date handling.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"f2a5b3896a543e1b0f3381d3c35c93d068e168fd"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"458c90b9f07c00c1a988d6f420130ee8bbf6503c"}],"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":"8cca6a3d9815f84f61d0435c6592685a95c303c5","committed_date":"2011-04-30T03:06:07-07:00","authored_date":"2011-04-30T03:06:07-07:00","message":"Added feature spec for timezone-aware date handling.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"152153130dce24262d76b40286bd88a5ce3141fd"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"8cca6a3d9815f84f61d0435c6592685a95c303c5"}],"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":"ced596c31261c89a16df9b818836ff4e63022939","committed_date":"2011-04-30T03:07:35-07:00","authored_date":"2011-04-30T03:07:35-07:00","message":"Added step definitions for date handling support.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"04616bd15ea48dc3ab786e7edfb594c0856be38f"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"ced596c31261c89a16df9b818836ff4e63022939"}],"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":"0ca5486e583a3220cd3702f8520a8664f7969b57","committed_date":"2011-04-30T03:19:32-07:00","authored_date":"2011-04-30T03:19:32-07:00","message":"Added naive datetime implementation.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"bc78b38d34d87c3489fa296bc83462d060fa1aaf"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"0ca5486e583a3220cd3702f8520a8664f7969b57"}],"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":"fb70d0ada52ece6b0a345c203ac0a488e80acd21","committed_date":"2011-04-30T03:21:36-07:00","authored_date":"2011-04-30T03:21:36-07:00","message":"Added timezone-aware datetime implementation.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"02f98c58ea4acdbcd32e5813c8ceda57d956d545"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"fb70d0ada52ece6b0a345c203ac0a488e80acd21"}],"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":"8a7d44bf92c082312280d4e86c47aeee6d570e25","committed_date":"2011-04-30T03:27:30-07:00","authored_date":"2011-04-30T03:27:30-07:00","message":"Document core.NAIVE.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"141c8f0f37f9a3cb1a545c809806fec41e8ceeb7"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"8a7d44bf92c082312280d4e86c47aeee6d570e25"}],"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":"db2ac5452e81fb691b99aa307b3b0b25b2e729ff","committed_date":"2011-04-30T03:30:36-07:00","authored_date":"2011-04-30T03:30:36-07:00","message":"Added python-dateutil to requirements.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"bcd8843e10e8c4a4b8ee982476f371dc0764ea8e"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"db2ac5452e81fb691b99aa307b3b0b25b2e729ff"}],"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":"b3e405b246fd15ced629a12ec19ad5a282e2bfd9","committed_date":"2011-04-30T04:23:16-07:00","authored_date":"2011-04-30T04:23:00-07:00","message":"Require python-dateutil lower than v2.0.\n\nv2.0 only works with Python 3.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"b73cbceb5b54f99aec6e45e76e11ef95d292d8db"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"b3e405b246fd15ced629a12ec19ad5a282e2bfd9"}],"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":"a2c2b287f7863109c83636542c699d509e6c485f","committed_date":"2011-04-30T04:24:20-07:00","authored_date":"2011-04-30T04:24:20-07:00","message":"Run lettuce tests with tox.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"27c5c5bcc58b572e9c186caeddfa2b5166fd568b"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"a2c2b287f7863109c83636542c699d509e6c485f"}],"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":"a31cfb70343d3ac9d6330e6328008c0bc690a5a1","committed_date":"2011-04-30T04:31:45-07:00","authored_date":"2011-04-30T04:31:43-07:00","message":"Don't run lettuce with Python 2.4.\n\nLooks like I've been running a patched version, and didn't realise Python 2.4\nwasn't supported upstream.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"299dca4efab1cc0d76ee30f2335258ace888fc5c"},{"type":"IssueComment","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","created_at":"2011/04/30 05:41:09 -0700","body":"First-run implementation of option 3 from above. Works, but needs some refactoring.","updated_at":"2011/04/30 05:41:58 -0700","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":1080583},{"type":"IssueComment","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","created_at":"2011/05/29 08:37:08 -0700","body":"With the [pull request merge](https://github.com/ask/python-github2/pull/28) there is a new issue of handling timezones because pull requests don't use the \"GitHub timezone\".","updated_at":"2011/05/29 08:37:08 -0700","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"id":1257226}],"issue_created_at":"2011-04-18T15:25:47Z","labels":[],"head":{"label":"JNRowe:timezone_support","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"ref":"timezone_support","repository":{"watchers":3,"has_downloads":true,"homepage":"","pushed_at":"2011/06/06 16:14:48 -0700","created_at":"2010/10/31 01:03:09 -0700","fork":true,"has_wiki":true,"open_issues":0,"url":"https://github.com/JNRowe/python-github2","forks":0,"size":156,"private":false,"language":"Python","name":"python-github2","owner":"JNRowe","has_issues":false,"description":"github client in python, with issues support."},"sha":"a31cfb70343d3ac9d6330e6328008c0bc690a5a1"},"state":"open"}} \ No newline at end of file +{"pull":{"issue_updated_at":"2011-06-23T09:33:57Z","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":39.0,"number":39,"votes":0,"html_url":"https://github.com/ask/python-github2/pull/39","mergeable":true,"created_at":"2011-06-20T16:51:24Z","comments":4,"body":"\nFeeble brainstorming session...\n\nI've just been bitten quite badly by the lack of timezone handling, the cause is the use of naive datetime objects in the 'GitHub' timezone(`America/Los_Angeles`). While processing some tasks that span the PST/PDT changeover the ordering of events is broken.\n\nOptions are:\n\n1. Leave alone and try to process the datetime objects externally, somewhat easy but not a good solution as it requires duplication in each project that requires accurate date handling\n2. Start producing non-naive datetime objects, breaks any caller who is not prepared for it.\n3. Introduce a setting to toggle naive object availability, defaulting to naive objects to maintain backwards compatibility\n\n[python-dateutil](http://labix.org/python-dateutil) makes handling option 1 quite easy, and also simplifies the handling of option 3 at the cost of another external dependency. Option 2 is just pure evil, or pure stupidity depending on point of view.\n\nOption 3 results in a parsing using something like the following entirely untested code:\n\n datetime_ = parser.parse(github_date)\n if NAIVE:\n datetime_.replace(tzinfo=None)\n return datetime_\n\nAnd similarly producing GitHub compatible date strings would require handling of naive formats with equally untested code such as:\n\n if NAIVE:\n datetime_ = datetime_.replace(tz.gettz(\"America/Los_Angeles\"))\n return datetime_.strftime(\"%Y/%m/%d %H:%M:%S %z\")","title":"Datetime timezone handling.","diff_url":"https://github.com/ask/python-github2/pull/39.diff","head":{"sha":"5438e41d9c390f53089ed3fa0842831fafc73d8e","label":"ask:5438e41d9c390f53089ed3fa0842831fafc73d8e","repository":{"description":"github client in python, with issues support.","forks":55,"pushed_at":"2011/08/15 13:20:40 -0700","has_downloads":true,"created_at":"2009/04/18 08:31:12 -0700","homepage":"http://packages.python.org/github2","watchers":149,"fork":false,"language":"Python","has_wiki":true,"size":476,"private":false,"open_issues":4,"name":"python-github2","url":"https://github.com/ask/python-github2","owner":"ask","has_issues":true},"user":{"name":"Ask Solem Hoel","company":"RabbitMQ, VMware","gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","location":"London, UK","type":"User","login":"ask","email":"ask@celeryproject.org"},"ref":"5438e41d9c390f53089ed3fa0842831fafc73d8e"},"issue_user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"base":{"sha":"0786a96c80afad7bbd0747df590f649eaa46ca04","label":"ask:master","repository":{"description":"github client in python, with issues support.","forks":55,"pushed_at":"2011/08/15 13:20:40 -0700","has_downloads":true,"created_at":"2009/04/18 08:31:12 -0700","homepage":"http://packages.python.org/github2","watchers":149,"fork":false,"language":"Python","has_wiki":true,"size":476,"private":false,"open_issues":4,"name":"python-github2","url":"https://github.com/ask/python-github2","owner":"ask","has_issues":true},"user":{"name":"Ask Solem Hoel","company":"RabbitMQ, VMware","gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","location":"London, UK","type":"User","login":"ask","email":"ask@celeryproject.org"},"ref":"master"},"patch_url":"https://github.com/ask/python-github2/pull/39.patch","discussion":[{"type":"IssueComment","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","created_at":"2011/04/18 08:28:10 -0700","body":"The lack of timezone handling also exhibits itself for any consumers who use a timedelta to convert to local time for the duration of any gap between GitHub's switch to DST and their own. On the order of 2-4 weeks a year for regions that I personally care about ;)","updated_at":"2011/04/18 08:28:10 -0700","id":1021613,"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"}},{"type":"IssueComment","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","created_at":"2011/04/30 05:41:09 -0700","body":"First-run implementation of option 3 from above. Works, but needs some refactoring.","updated_at":"2011/04/30 05:41:58 -0700","id":1080583,"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"}},{"type":"IssueComment","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","created_at":"2011/05/29 08:37:08 -0700","body":"With the [pull request merge](https://github.com/ask/python-github2/pull/28) there is a new issue of handling timezones because pull requests don't use the \"GitHub timezone\".","updated_at":"2011/05/29 08:37:08 -0700","id":1257226,"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"}},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"d5d2e0e86d67d29e47e8d6761deeed07e9780f44"}],"id":"bf35a12199ae8431bf321fa6e4ee6e596b5137ba","committed_date":"2011-06-12T18:41:43-07:00","authored_date":"2011-04-30T03:19:32-07:00","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"message":"Added naive datetime implementation.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"ea8747e3cb0c4e375e8b1a5ad594bc8fbaf5ba44"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"bf35a12199ae8431bf321fa6e4ee6e596b5137ba"}],"id":"5019b5f0dd27619bfc99162637d709dc1a5e32e6","committed_date":"2011-06-12T19:02:40-07:00","authored_date":"2011-04-30T03:21:36-07:00","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"message":"Added timezone-aware datetime implementation.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"64682f561d53986ff30d422d3862b65cb28c858a"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"69676d331f6a0b38eb373dbf6026a60dbac44c41"}],"id":"a6ec7be62110eab205f23a799a78e05b821b51ca","committed_date":"2011-06-12T19:02:41-07:00","authored_date":"2011-04-30T04:23:00-07:00","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"message":"Require python-dateutil lower than v2.0.\n\nv2.0 only works with Python 3.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"d8a4ed6f73e6c96775f4bee61a7527ef5d080d7e"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"5019b5f0dd27619bfc99162637d709dc1a5e32e6"}],"id":"606db7c1d930c111d5766f21c49e8d66f1faf353","committed_date":"2011-06-12T19:02:41-07:00","authored_date":"2011-04-30T03:27:30-07:00","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"message":"Document core.NAIVE.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"666b5a96a8efc5f2b1e71427d0a10167d529e859"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"606db7c1d930c111d5766f21c49e8d66f1faf353"}],"id":"69676d331f6a0b38eb373dbf6026a60dbac44c41","committed_date":"2011-06-12T19:02:41-07:00","authored_date":"2011-04-30T03:30:36-07:00","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"message":"Added python-dateutil to requirements.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"6c35929758727315b0896dd6dc0c2a52a9638361"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"a6ec7be62110eab205f23a799a78e05b821b51ca"}],"id":"1b8ceff9d9787e61b0c562109bc5f977b0fe2b07","committed_date":"2011-06-12T19:04:57-07:00","authored_date":"2011-06-12T19:02:14-07:00","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"message":"Added tests for timezone-aware datetimes.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"cc1667b0b89fe21b4e8032bcaee864d2775918ee"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"1b8ceff9d9787e61b0c562109bc5f977b0fe2b07"}],"id":"69e7bc54160de7ee2534e6dc57331724678afcf2","committed_date":"2011-06-12T19:16:50-07:00","authored_date":"2011-06-12T19:15:02-07:00","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"message":"Refactoring of datetime parsing.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"39f2d9a7ceeb6ca25d95758fff8f0c4119c5e17b"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"69e7bc54160de7ee2534e6dc57331724678afcf2"}],"id":"6e91ec332f144ede1bebdbac12f0eb7d8e37b802","committed_date":"2011-06-12T19:27:53-07:00","authored_date":"2011-06-12T19:26:45-07:00","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"message":"Remove duplicate timezone mangling in datetime handling.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"54765bb6953d64b02117e2a041e9fc2910e67680"},{"type":"Commit","author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"parents":[{"id":"6e91ec332f144ede1bebdbac12f0eb7d8e37b802"}],"id":"5438e41d9c390f53089ed3fa0842831fafc73d8e","committed_date":"2011-06-12T19:39:16-07:00","authored_date":"2011-06-12T19:39:16-07:00","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"message":"Document core.GITHUB_TZ.","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"tree":"839e75243afd3707e0060b96a188a41e92a14bd9"},{"type":"IssueComment","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","created_at":"2011/06/20 09:53:42 -0700","body":"The mostly new commits now listed in this pull request(`JNRowe/python-github2 feat/timezone_support`) are what I'm planning to merge RSN.","updated_at":"2011/06/20 09:53:42 -0700","id":1404012,"user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"}}],"closed_at":"2011-06-23T09:33:57Z","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"updated_at":"2011-06-23T09:28:42Z","issue_created_at":"2011-04-18T15:25:47Z","labels":[],"state":"closed"}} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,pulls,ask,python-github2,open,80fdb1a6835888c7811257428c93eef4 b/tests/data/github.com,api,v2,json,pulls,ask,python-github2,open,80fdb1a6835888c7811257428c93eef4 index e9dc3d0..4b68b12 100644 --- a/tests/data/github.com,api,v2,json,pulls,ask,python-github2,open,80fdb1a6835888c7811257428c93eef4 +++ b/tests/data/github.com,api,v2,json,pulls,ask,python-github2,open,80fdb1a6835888c7811257428c93eef4 @@ -1,14 +1,15 @@ status: 200 -x-ratelimit-remaining: 58 +x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/pulls/ask/python-github2/open -x-runtime: 44ms -content-length: 6535 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 2644 +server: nginx/1.0.4 +x-runtime: 37ms x-ratelimit-limit: 60 -etag: "e579ac09b626d198c687da824b39edc2" +etag: "a210795488a95b7c56c4c42cb4467065" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:44:58 GMT +date: Thu, 25 Aug 2011 06:56:02 GMT content-type: application/json; charset=utf-8 -{"pulls":[{"html_url":"https://github.com/ask/python-github2/pull/39","issue_updated_at":"2011-05-29T15:37:08Z","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","position":39.0,"number":39,"votes":0,"issue_user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"comments":3,"body":"\nFeeble brainstorming session...\n\nI've just been bitten quite badly by the lack of timezone handling, the cause is the use of naive datetime objects in the 'GitHub' timezone(`America/Los_Angeles`). While processing some tasks that span the PST/PDT changeover the ordering of events is broken.\n\nOptions are:\n\n1. Leave alone and try to process the datetime objects externally, somewhat easy but not a good solution as it requires duplication in each project that requires accurate date handling\n2. Start producing non-naive datetime objects, breaks any caller who is not prepared for it.\n3. Introduce a setting to toggle naive object availability, defaulting to naive objects to maintain backwards compatibility\n\n[python-dateutil](http://labix.org/python-dateutil) makes handling option 1 quite easy, and also simplifies the handling of option 3 at the cost of another external dependency. Option 2 is just pure evil, or pure stupidity depending on point of view.\n\nOption 3 results in a parsing using something like the following entirely untested code:\n\n datetime_ = parser.parse(github_date)\n if NAIVE:\n datetime_.replace(tzinfo=None)\n return datetime_\n\nAnd similarly producing GitHub compatible date strings would require handling of naive formats with equally untested code such as:\n\n if NAIVE:\n datetime_ = datetime_.replace(tz.gettz(\"America/Los_Angeles\"))\n return datetime_.strftime(\"%Y/%m/%d %H:%M:%S %z\")","title":"Datetime timezone handling.","diff_url":"https://github.com/ask/python-github2/pull/39.diff","updated_at":"2011-06-07T13:56:50Z","created_at":"2011-04-30T12:37:40Z","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"base":{"label":"ask:master","user":{"name":"Ask Solem Hoel","company":"RabbitMQ, VMware, Inc.","gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","location":"London, UK","type":"User","login":"ask","email":"ask@celeryproject.org"},"ref":"master","repository":{"watchers":143,"has_downloads":true,"homepage":"http://packages.python.org/github2","pushed_at":"2011/06/06 16:15:04 -0700","created_at":"2009/04/18 08:31:12 -0700","fork":false,"has_wiki":true,"open_issues":5,"url":"https://github.com/ask/python-github2","forks":50,"size":112,"private":false,"language":"Python","name":"python-github2","owner":"ask","has_issues":true,"description":"github client in python, with issues support."},"sha":"6a79f43f174acd3953ced69263c06d311a6bda56"},"mergeable":false,"patch_url":"https://github.com/ask/python-github2/pull/39.patch","issue_created_at":"2011-04-18T15:25:47Z","labels":[],"head":{"label":"JNRowe:timezone_support","user":{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},"ref":"timezone_support","repository":{"watchers":3,"has_downloads":true,"homepage":"","pushed_at":"2011/06/06 16:14:48 -0700","created_at":"2010/10/31 01:03:09 -0700","fork":true,"has_wiki":true,"open_issues":0,"url":"https://github.com/JNRowe/python-github2","forks":0,"size":156,"private":false,"language":"Python","name":"python-github2","owner":"JNRowe","has_issues":false,"description":"github client in python, with issues support."},"sha":"a31cfb70343d3ac9d6330e6328008c0bc690a5a1"},"state":"open"},{"html_url":"https://github.com/ask/python-github2/pull/24","issue_updated_at":"2011-01-05T00:26:07Z","gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","position":24.0,"number":24,"votes":0,"issue_user":{"name":"Alexander Artemenko","company":"Yandex","gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","location":"Moscow","blog":"http://dev.svetlyak.ru","type":"User","login":"svetlyak40wt","email":"github@svetlyak.ru"},"comments":11,"body":"Hi, I added an optional 'page' argument to receive not only last 35 commits, but all others too. Think, such approach could be useful for other list operations too.","title":"Pagination support for commits.","diff_url":"https://github.com/ask/python-github2/pull/24.diff","updated_at":"2011-05-22T07:56:37Z","created_at":"2010-12-09T07:50:26Z","user":{"name":"Alexander Artemenko","company":"Yandex","gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","location":"Moscow","blog":"http://dev.svetlyak.ru","type":"User","login":"svetlyak40wt","email":"github@svetlyak.ru"},"base":{"label":"ask:master","user":{"name":"Ask Solem Hoel","company":"RabbitMQ, VMware, Inc.","gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","location":"London, UK","type":"User","login":"ask","email":"ask@celeryproject.org"},"ref":"master","repository":{"watchers":143,"has_downloads":true,"homepage":"http://packages.python.org/github2","pushed_at":"2011/06/06 16:15:04 -0700","created_at":"2009/04/18 08:31:12 -0700","fork":false,"has_wiki":true,"open_issues":5,"url":"https://github.com/ask/python-github2","forks":50,"size":112,"private":false,"language":"Python","name":"python-github2","owner":"ask","has_issues":true,"description":"github client in python, with issues support."},"sha":"6a79f43f174acd3953ced69263c06d311a6bda56"},"mergeable":null,"patch_url":"https://github.com/ask/python-github2/pull/24.patch","issue_created_at":"2010-12-09T07:50:26Z","labels":[],"head":{"label":"svetlyak40wt:master","user":{"name":"Alexander Artemenko","company":"Yandex","gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","location":"Moscow","blog":"http://dev.svetlyak.ru","type":"User","login":"svetlyak40wt","email":"github@svetlyak.ru"},"ref":"master","repository":{"watchers":1,"has_downloads":true,"homepage":"","pushed_at":"2011/01/04 16:32:23 -0800","created_at":"2010/12/08 10:39:12 -0800","fork":true,"has_wiki":true,"open_issues":0,"url":"https://github.com/svetlyak40wt/python-github2","forks":0,"size":176,"private":false,"name":"python-github2","owner":"svetlyak40wt","has_issues":false,"description":"github client in python, with issues support."},"sha":"f337f3c7b48e85dda72744f7696c693fe8d5fee0"},"state":"open"}]} \ No newline at end of file +{"pulls":[{"issue_updated_at":"2011-01-05T00:26:07Z","gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","position":24.0,"number":24,"votes":0,"html_url":"https://github.com/ask/python-github2/pull/24","mergeable":null,"created_at":"2010-12-09T07:50:26Z","comments":11,"body":"Hi, I added an optional 'page' argument to receive not only last 35 commits, but all others too. Think, such approach could be useful for other list operations too.","title":"Pagination support for commits.","diff_url":"https://github.com/ask/python-github2/pull/24.diff","head":{"sha":"f337f3c7b48e85dda72744f7696c693fe8d5fee0","label":"svetlyak40wt:master","repository":{"description":"github client in python, with issues support.","forks":0,"pushed_at":"2011/01/04 16:32:23 -0800","has_downloads":true,"created_at":"2010/12/08 10:39:12 -0800","homepage":"","watchers":1,"fork":true,"has_wiki":true,"size":176,"private":false,"open_issues":0,"name":"python-github2","url":"https://github.com/svetlyak40wt/python-github2","owner":"svetlyak40wt","has_issues":false},"user":{"name":"Alexander Artemenko","company":"Yandex","gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","location":"Moscow","blog":"http://dev.svetlyak.ru","type":"User","login":"svetlyak40wt","email":"github@svetlyak.ru"},"ref":"master"},"issue_user":{"name":"Alexander Artemenko","company":"Yandex","gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","location":"Moscow","blog":"http://dev.svetlyak.ru","type":"User","login":"svetlyak40wt","email":"github@svetlyak.ru"},"base":{"sha":"6a79f43f174acd3953ced69263c06d311a6bda56","label":"ask:master","repository":{"description":"github client in python, with issues support.","forks":55,"pushed_at":"2011/08/15 13:20:40 -0700","has_downloads":true,"created_at":"2009/04/18 08:31:12 -0700","homepage":"http://packages.python.org/github2","watchers":149,"fork":false,"language":"Python","has_wiki":true,"size":476,"private":false,"open_issues":4,"name":"python-github2","url":"https://github.com/ask/python-github2","owner":"ask","has_issues":true},"user":{"name":"Ask Solem Hoel","company":"RabbitMQ, VMware","gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","location":"London, UK","type":"User","login":"ask","email":"ask@celeryproject.org"},"ref":"master"},"patch_url":"https://github.com/ask/python-github2/pull/24.patch","user":{"name":"Alexander Artemenko","company":"Yandex","gravatar_id":"5b3558b0fd5ca9c08d9061a6e51b555a","location":"Moscow","blog":"http://dev.svetlyak.ru","type":"User","login":"svetlyak40wt","email":"github@svetlyak.ru"},"updated_at":"2011-05-22T07:56:37Z","issue_created_at":"2010-12-09T07:50:26Z","labels":[],"state":"open"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,repos,search,surfraw,ef28b342b173c62c8b892fffb6509c84 b/tests/data/github.com,api,v2,json,repos,search,surfraw,ef28b342b173c62c8b892fffb6509c84 index 8ada865..1986340 100644 --- a/tests/data/github.com,api,v2,json,repos,search,surfraw,ef28b342b173c62c8b892fffb6509c84 +++ b/tests/data/github.com,api,v2,json,repos,search,surfraw,ef28b342b173c62c8b892fffb6509c84 @@ -1,14 +1,15 @@ status: 200 x-ratelimit-remaining: 58 content-location: https://github.com/api/v2/json/repos/search/surfraw -x-runtime: 160ms -content-length: 4419 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 4418 +server: nginx/1.0.4 +x-runtime: 236ms x-ratelimit-limit: 60 -etag: "4caafca018e434384ec7081baae373c8" +etag: "be8fa2627c87a9ed0c21f0f0e4636cff" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:37:04 GMT +date: Thu, 25 Aug 2011 06:58:39 GMT content-type: application/json; charset=utf-8 -{"repositories":[{"type":"repo","watchers":3,"has_wiki":true,"owner":"JNRowe","open_issues":0,"followers":3,"url":"https://github.com/JNRowe/surfraw","homepage":"http://surfraw.alioth.debian.org/","has_issues":true,"pushed_at":"2011/06/01 01:36:06 -0700","username":"JNRowe","pushed":"2011/06/01 01:36:06 -0700","fork":false,"size":4716,"has_downloads":true,"language":"PHP","score":6.5386825,"name":"surfraw","forks":1,"created":"2010/01/26 03:49:55 -0800","description":"Mirror of the upstream git repository","private":false,"created_at":"2010/01/26 03:49:55 -0800"},{"type":"repo","watchers":1,"has_wiki":true,"owner":"sykora","open_issues":0,"followers":1,"url":"https://github.com/sykora/surfraw","homepage":"http://surfraw.alioth.debian.org/","has_issues":true,"username":"sykora","pushed":null,"language":"","fork":false,"size":0,"has_downloads":true,"score":14.106668,"name":"surfraw","forks":1,"created":"2009/11/13 06:00:42 -0800","description":"A fork of surfraw, and my attempts at adding new elvi.","private":false,"created_at":"2009/11/13 06:00:42 -0800"},{"type":"repo","watchers":1,"has_wiki":true,"owner":"gnufs","open_issues":0,"followers":1,"url":"https://github.com/gnufs/surfraw-elvis","homepage":"","has_issues":true,"pushed_at":"2010/10/11 19:57:51 -0700","username":"gnufs","pushed":"2010/10/11 19:57:51 -0700","language":"","fork":false,"size":256,"has_downloads":true,"score":8.397954,"name":"surfraw-elvis","forks":1,"created":"2010/10/11 19:50:26 -0700","description":"custom elvis for surfraw","private":false,"created_at":"2010/10/11 19:50:26 -0700"},{"type":"repo","watchers":1,"has_wiki":true,"owner":"kisom","open_issues":0,"followers":1,"url":"https://github.com/kisom/surfraw","homepage":"http://surfraw.alioth.debian.org/","has_issues":true,"pushed_at":"2011/01/12 10:32:09 -0800","username":"kisom","pushed":"2011/01/12 10:32:09 -0800","language":"","fork":false,"size":1364,"has_downloads":true,"score":14.259327,"name":"surfraw","forks":1,"created":"2011/01/02 21:37:38 -0800","description":"local changes to surfraw - local edits prior to sending updates to surfraw-devel","private":false,"created_at":"2011/01/02 21:37:38 -0800"},{"type":"repo","watchers":1,"has_wiki":false,"owner":"twinshadow","open_issues":0,"followers":1,"url":"https://github.com/twinshadow/Surfraw","homepage":"http://surfraw.alioth.debian.org","has_issues":true,"pushed_at":"2011/02/20 02:52:58 -0800","username":"twinshadow","pushed":"2011/02/20 02:52:58 -0800","language":"","fork":false,"size":720,"has_downloads":true,"score":6.5386825,"name":"Surfraw","forks":1,"created":"2011/01/23 19:03:21 -0800","description":"Shell Users' Revolutionary Front Rage Against the Web","private":false,"created_at":"2011/01/23 19:03:21 -0800"},{"type":"repo","watchers":1,"has_wiki":true,"owner":"twinshadow","open_issues":0,"followers":1,"url":"https://github.com/twinshadow/surfraw-elvi","homepage":"","has_issues":true,"pushed_at":"2011/02/24 15:59:30 -0800","username":"twinshadow","pushed":"2011/02/24 15:59:30 -0800","language":"","fork":false,"size":196,"has_downloads":true,"score":8.1655445,"name":"surfraw-elvi","forks":1,"created":"2011/02/24 15:58:58 -0800","description":"Twinshadow's personal collection of Elvi for Surfraw","private":false,"created_at":"2011/02/24 15:58:58 -0800"},{"type":"repo","watchers":1,"has_wiki":true,"owner":"gnufs","open_issues":0,"followers":1,"url":"https://github.com/gnufs/rawdog-config-aligunduz.org","homepage":"http://aligunduz.org/planet","has_issues":true,"pushed_at":"2011/04/01 04:57:22 -0700","username":"gnufs","pushed":"2011/04/01 04:57:22 -0700","language":"","fork":false,"size":296,"has_downloads":true,"score":0.7137631,"name":"rawdog-config-aligunduz.org","forks":1,"created":"2010/10/11 20:22:39 -0700","description":"Surfraw configuration of \"Ali's Hive Mind\" on http://aligunduz.org/planet","private":false,"created_at":"2010/10/11 20:22:39 -0700"},{"type":"repo","watchers":1,"has_wiki":true,"owner":"xabbu42","open_issues":0,"followers":1,"url":"https://github.com/xabbu42/psr","homepage":"","has_issues":true,"pushed_at":"2011/04/04 02:52:28 -0700","username":"xabbu42","pushed":"2011/04/04 02:52:28 -0700","language":"","fork":false,"size":730,"has_downloads":true,"score":1.0623765,"name":"psr","forks":1,"created":"2011/01/20 18:00:47 -0800","description":"perl surfraw like script","private":false,"created_at":"2011/01/20 18:00:47 -0800"}]} \ No newline at end of file +{"repositories":[{"type":"repo","description":"Mirror of the upstream git repository","username":"JNRowe","forks":1,"has_wiki":true,"open_issues":0,"created_at":"2010/01/26 03:49:55 -0800","homepage":"http://surfraw.alioth.debian.org/","has_issues":true,"pushed_at":"2011/08/23 13:23:14 -0700","watchers":3,"fork":false,"language":"Shell","score":6.625599,"followers":3,"size":4876,"private":false,"name":"surfraw","url":"https://github.com/JNRowe/surfraw","owner":"JNRowe","has_downloads":true,"pushed":"2011/08/23 13:23:14 -0700","created":"2010/01/26 03:49:55 -0800"},{"type":"repo","description":"A fork of surfraw, and my attempts at adding new elvi.","username":"sykora","forks":1,"has_wiki":true,"open_issues":0,"created_at":"2009/11/13 06:00:42 -0800","homepage":"http://surfraw.alioth.debian.org/","has_issues":true,"language":"","watchers":1,"fork":false,"score":14.336326,"followers":1,"size":0,"private":false,"name":"surfraw","url":"https://github.com/sykora/surfraw","owner":"sykora","has_downloads":true,"pushed":null,"created":"2009/11/13 06:00:42 -0800"},{"type":"repo","description":"custom elvis for surfraw","username":"gnufs","forks":1,"has_wiki":true,"open_issues":0,"created_at":"2010/10/11 19:50:26 -0700","homepage":"","has_issues":true,"pushed_at":"2010/10/11 19:57:51 -0700","language":"","watchers":1,"fork":false,"score":8.581445,"followers":1,"size":256,"private":false,"name":"surfraw-elvis","url":"https://github.com/gnufs/surfraw-elvis","owner":"gnufs","has_downloads":true,"pushed":"2010/10/11 19:57:51 -0700","created":"2010/10/11 19:50:26 -0700"},{"type":"repo","description":"local changes to surfraw - local edits prior to sending updates to surfraw-devel","username":"kisom","forks":1,"has_wiki":true,"open_issues":0,"created_at":"2011/01/02 21:37:38 -0800","homepage":"http://surfraw.alioth.debian.org/","has_issues":true,"pushed_at":"2011/01/12 10:32:09 -0800","language":"","watchers":1,"fork":false,"score":14.496914,"followers":1,"size":1364,"private":false,"name":"surfraw","url":"https://github.com/kisom/surfraw","owner":"kisom","has_downloads":true,"pushed":"2011/01/12 10:32:09 -0800","created":"2011/01/02 21:37:38 -0800"},{"type":"repo","description":"Shell Users' Revolutionary Front Rage Against the Web","username":"twinshadow","forks":1,"has_wiki":false,"open_issues":0,"created_at":"2011/01/23 19:03:21 -0800","homepage":"http://surfraw.alioth.debian.org","has_issues":true,"pushed_at":"2011/02/20 02:52:58 -0800","language":"","watchers":1,"fork":false,"score":6.625599,"followers":1,"size":720,"private":false,"name":"Surfraw","url":"https://github.com/twinshadow/Surfraw","owner":"twinshadow","has_downloads":true,"pushed":"2011/02/20 02:52:58 -0800","created":"2011/01/23 19:03:21 -0800"},{"type":"repo","description":"Twinshadow's personal collection of Elvi for Surfraw","username":"twinshadow","forks":1,"has_wiki":true,"open_issues":0,"created_at":"2011/02/24 15:58:58 -0800","homepage":"","has_issues":true,"pushed_at":"2011/02/24 15:59:30 -0800","language":"","watchers":1,"fork":false,"score":8.336964,"followers":1,"size":196,"private":false,"name":"surfraw-elvi","url":"https://github.com/twinshadow/surfraw-elvi","owner":"twinshadow","has_downloads":true,"pushed":"2011/02/24 15:59:30 -0800","created":"2011/02/24 15:58:58 -0800"},{"type":"repo","description":"Surfraw configuration of \"Ali's Hive Mind\" on http://aligunduz.org/planet","username":"gnufs","forks":1,"has_wiki":true,"open_issues":0,"created_at":"2010/10/11 20:22:39 -0700","homepage":"http://aligunduz.org/planet","has_issues":true,"pushed_at":"2011/04/01 04:57:22 -0700","language":"","watchers":1,"fork":false,"score":0.7484778,"followers":1,"size":296,"private":false,"name":"rawdog-config-aligunduz.org","url":"https://github.com/gnufs/rawdog-config-aligunduz.org","owner":"gnufs","has_downloads":true,"pushed":"2011/04/01 04:57:22 -0700","created":"2010/10/11 20:22:39 -0700"},{"type":"repo","description":"perl surfraw like script","username":"xabbu42","forks":1,"has_wiki":true,"open_issues":0,"created_at":"2011/01/20 18:00:47 -0800","homepage":"","has_issues":true,"pushed_at":"2011/04/04 02:52:28 -0700","language":"","watchers":1,"fork":false,"score":1.1151989,"followers":1,"size":730,"private":false,"name":"psr","url":"https://github.com/xabbu42/psr","owner":"xabbu42","has_downloads":true,"pushed":"2011/04/04 02:52:28 -0700","created":"2011/01/20 18:00:47 -0800"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,repos,show,JNRowe,46d0b95561c6d2a42dda0406e785c3e5 b/tests/data/github.com,api,v2,json,repos,show,JNRowe,46d0b95561c6d2a42dda0406e785c3e5 index 5adfad3..172d08f 100644 --- a/tests/data/github.com,api,v2,json,repos,show,JNRowe,46d0b95561c6d2a42dda0406e785c3e5 +++ b/tests/data/github.com,api,v2,json,repos,show,JNRowe,46d0b95561c6d2a42dda0406e785c3e5 @@ -1,14 +1,15 @@ status: 200 -x-ratelimit-remaining: 58 +x-ratelimit-remaining: 57 content-location: https://github.com/api/v2/json/repos/show/JNRowe -x-runtime: 168ms -content-length: 18333 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 19919 +server: nginx/1.0.4 +x-runtime: 93ms x-ratelimit-limit: 60 -etag: "09af032c0d629f2a27fe5e008c2717d1" +etag: "2ec78256aa429d189bf68539ccabe795" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:37:59 GMT +date: Mon, 15 Aug 2011 19:59:28 GMT content-type: application/json; charset=utf-8 -{"repositories":[{"integrate_branch":"iratqq","watchers":3,"homepage":"http://www.jnrowe.ukfsn.org/projects/bfm.html","has_downloads":true,"created_at":"2009/04/05 18:46:34 -0700","fork":false,"pushed_at":"2011/05/08 23:35:07 -0700","url":"https://github.com/JNRowe/bfm","forks":3,"size":232,"private":false,"has_wiki":true,"language":"C","name":"bfm","owner":"JNRowe","open_issues":0,"description":"This program is a dockapp-style CPU, memory, swap and load average monitor.","has_issues":true},{"watchers":2,"homepage":"http://jnrowe.github.com/upoints/","has_downloads":true,"created_at":"2009/04/23 04:06:46 -0700","fork":false,"pushed_at":"2011/05/16 03:48:13 -0700","url":"https://github.com/JNRowe/upoints","forks":0,"size":3288,"private":false,"has_wiki":true,"language":"Python","name":"upoints","owner":"JNRowe","open_issues":0,"description":"upoints is a collection of GPL v3 licensed modules for working with points on Earth, or other near spherical objects.","has_issues":true},{"watchers":13,"homepage":"http://packages.python.org/pyisbn/","has_downloads":true,"created_at":"2009/04/23 04:07:25 -0700","fork":false,"pushed_at":"2011/06/06 07:04:57 -0700","url":"https://github.com/JNRowe/pyisbn","forks":2,"size":132,"private":false,"has_wiki":true,"language":"Python","name":"pyisbn","owner":"JNRowe","open_issues":1,"description":"A Python module for working with 10- and 13-digit ISBNs","has_issues":true},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2009/04/23 04:09:02 -0700","fork":false,"pushed_at":"2011/05/09 01:49:16 -0700","url":"https://github.com/JNRowe/pytemplate","forks":0,"size":2252,"private":false,"has_wiki":true,"language":"Python","name":"pytemplate","owner":"JNRowe","open_issues":0,"description":"Package template for Python, with distutils setup","has_issues":true},{"watchers":5,"homepage":"http://jnrowe.github.com/misc-overlay/","has_downloads":true,"created_at":"2009/05/02 07:32:50 -0700","fork":false,"pushed_at":"2011/06/07 17:00:59 -0700","url":"https://github.com/JNRowe/misc-overlay","forks":0,"size":11049,"private":false,"has_wiki":true,"language":"Python","name":"misc-overlay","owner":"JNRowe","open_issues":6,"description":"Gentoo overlay -- miscellaneous packages","has_issues":true},{"watchers":1,"homepage":"http://jnrowe.github.com/fixes-overlay","has_downloads":false,"created_at":"2009/05/02 07:52:47 -0700","master_branch":"master","fork":false,"pushed_at":"2011/04/06 10:48:22 -0700","url":"https://github.com/JNRowe/fixes-overlay","forks":0,"size":3636,"private":false,"has_wiki":true,"language":"Python","name":"fixes-overlay","owner":"JNRowe","open_issues":0,"description":"Small package fixes languishing in the Gentoo BTS","has_issues":true},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2009/05/08 04:18:15 -0700","fork":false,"pushed_at":"2010/05/02 19:21:40 -0700","url":"https://github.com/JNRowe/dotbash","forks":0,"size":1148,"private":false,"has_wiki":true,"name":"dotbash","owner":"JNRowe","open_issues":0,"description":"Shared bash configuration files","has_issues":true},{"watchers":2,"homepage":"http://jnrowe.github.com/","has_downloads":true,"created_at":"2009/05/14 06:43:16 -0700","master_branch":"master","fork":false,"pushed_at":"2011/06/06 07:10:57 -0700","url":"https://github.com/JNRowe/jnrowe.github.com","forks":0,"size":6272,"private":false,"has_wiki":false,"language":"JavaScript","name":"jnrowe.github.com","owner":"JNRowe","open_issues":0,"description":"My user pages repository","has_issues":true},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2009/05/14 11:09:34 -0700","fork":false,"pushed_at":"2011/02/14 01:52:50 -0800","url":"https://github.com/JNRowe/local-bin","forks":0,"size":652,"private":false,"has_wiki":true,"language":"Python","name":"local-bin","owner":"JNRowe","open_issues":0,"description":"Tat from my ~/bin","has_issues":true},{"watchers":2,"homepage":"","has_downloads":true,"created_at":"2009/05/24 00:05:46 -0700","fork":true,"pushed_at":"2010/09/24 21:10:10 -0700","url":"https://github.com/JNRowe/termstyle","forks":1,"size":564,"private":false,"has_wiki":true,"name":"termstyle","owner":"JNRowe","open_issues":0,"description":"a dirt-simple terminal-colour library for python","has_issues":false},{"watchers":1,"homepage":"http://readyset.tigris.org/","has_downloads":true,"created_at":"2009/08/16 19:30:50 -0700","fork":false,"pushed_at":"2011/03/04 18:49:12 -0800","url":"https://github.com/JNRowe/readyset","forks":1,"size":3216,"private":false,"has_wiki":true,"language":"JavaScript","name":"readyset","owner":"JNRowe","open_issues":0,"description":"Ready-to-use Software Engineering Templates","has_issues":true},{"watchers":3,"homepage":"http://jnrowe.github.com/cupage","has_downloads":true,"created_at":"2009/09/17 21:03:02 -0700","fork":false,"pushed_at":"2011/05/24 23:07:45 -0700","url":"https://github.com/JNRowe/cupage","forks":1,"size":4948,"private":false,"has_wiki":true,"language":"Python","name":"cupage","owner":"JNRowe","open_issues":5,"description":"A tool to check for updates on web pages","has_issues":true},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2009/09/24 18:42:48 -0700","fork":false,"pushed_at":"2011/02/28 05:02:24 -0800","url":"https://github.com/JNRowe/pages_layouts","forks":1,"size":1948,"private":false,"has_wiki":true,"name":"pages_layouts","owner":"JNRowe","open_issues":0,"description":"Shared layouts submodule for jekyll","has_issues":true},{"watchers":1,"homepage":"http://jnrowe.github.com/bwatch/","has_downloads":true,"created_at":"2009/09/26 10:13:56 -0700","fork":false,"pushed_at":"2011/04/06 10:56:17 -0700","url":"https://github.com/JNRowe/bwatch","forks":1,"size":2248,"private":false,"has_wiki":true,"language":"Python","name":"bwatch","owner":"JNRowe","open_issues":2,"description":"Simple bandwidth watching tool","has_issues":true},{"watchers":1,"homepage":"http://jnrowe.github.com/bleeter/","has_downloads":true,"created_at":"2009/10/14 22:19:25 -0700","fork":false,"pushed_at":"2011/05/15 08:07:47 -0700","url":"https://github.com/JNRowe/bleeter","forks":1,"size":3496,"private":false,"has_wiki":true,"language":"Python","name":"bleeter","owner":"JNRowe","open_issues":1,"description":"Nasty little twitter client","has_issues":true},{"watchers":1,"homepage":"","has_downloads":false,"created_at":"2009/10/28 13:13:46 -0700","master_branch":"master","fork":true,"pushed_at":"2011/05/26 02:55:49 -0700","url":"https://github.com/JNRowe/oh-my-zsh","forks":1,"size":416,"private":false,"has_wiki":false,"language":"Shell","name":"oh-my-zsh","owner":"JNRowe","open_issues":0,"description":"A community-driven framework for managing your zsh configuration.","has_issues":true},{"watchers":3,"homepage":"http://jnrowe.github.com/vim-configs","has_downloads":true,"created_at":"2009/11/12 06:10:53 -0800","fork":false,"pushed_at":"2011/05/30 08:42:41 -0700","url":"https://github.com/JNRowe/vim-configs","forks":1,"size":3616,"private":false,"has_wiki":true,"language":"VimL","name":"vim-configs","owner":"JNRowe","open_issues":2,"description":"Personal vim configs","has_issues":true},{"watchers":3,"homepage":"http://surfraw.alioth.debian.org/","has_downloads":true,"created_at":"2010/01/26 03:49:55 -0800","fork":false,"pushed_at":"2011/06/01 01:36:06 -0700","url":"https://github.com/JNRowe/surfraw","forks":1,"size":4716,"private":false,"has_wiki":true,"language":"PHP","name":"surfraw","owner":"JNRowe","open_issues":0,"description":"Mirror of the upstream git repository","has_issues":true},{"watchers":1,"homepage":"http://jnrowe.github.com/blanco","has_downloads":true,"created_at":"2010/01/31 13:04:51 -0800","fork":false,"pushed_at":"2011/04/06 10:37:48 -0700","url":"https://github.com/JNRowe/blanco","forks":1,"size":4200,"private":false,"has_wiki":true,"language":"Python","name":"blanco","owner":"JNRowe","open_issues":1,"description":"Hey, remember me?","has_issues":true},{"watchers":1,"homepage":"http://jnrowe.github.com/vim-jnrowe/","has_downloads":false,"created_at":"2010/02/11 17:12:11 -0800","fork":false,"pushed_at":"2011/04/14 04:05:52 -0700","url":"https://github.com/JNRowe/vim-jnrowe","forks":1,"size":936,"private":false,"has_wiki":true,"language":"VimL","name":"vim-jnrowe","owner":"JNRowe","open_issues":0,"description":"My colorscheme, decoupled from my vim-configs repo for others ;)","has_issues":true},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2010/02/15 12:19:22 -0800","fork":false,"pushed_at":"2011/06/01 10:27:57 -0700","url":"https://github.com/JNRowe/emacs-configs","forks":1,"size":1604,"private":false,"has_wiki":true,"language":"Emacs Lisp","name":"emacs-configs","owner":"JNRowe","open_issues":0,"description":"Personal emacs configs","has_issues":true},{"watchers":1,"homepage":"http://joshthecoder.github.com/tweepy","has_downloads":true,"created_at":"2010/03/31 14:57:29 -0700","fork":true,"pushed_at":"2010/04/02 19:09:52 -0700","url":"https://github.com/JNRowe/tweepy","forks":1,"size":536,"private":false,"has_wiki":true,"name":"tweepy","owner":"JNRowe","open_issues":0,"description":"A python library for the Twitter API. OAuth, python 3, complete coverage, streaming API","has_issues":true},{"watchers":1,"homepage":"www.vim.org/scripts/script.php?script_id=2540","has_downloads":false,"created_at":"2010/04/05 20:56:06 -0700","fork":true,"pushed_at":"2011/01/27 03:16:30 -0800","url":"https://github.com/JNRowe/snipmate.vim","forks":1,"size":248,"private":false,"has_wiki":false,"language":"VimL","name":"snipmate.vim","owner":"JNRowe","open_issues":0,"description":"snipMate.vim aims to be a concise vim script that implements some of TextMate's snippets features in Vim. ","has_issues":false},{"watchers":1,"homepage":"http://jnrowe.github.com/2010/04/04/FtO-winwrangler_tiling_for_the_masses.html","has_downloads":true,"created_at":"2010/05/05 00:54:23 -0700","fork":false,"pushed_at":"2010/05/05 00:55:01 -0700","url":"https://github.com/JNRowe/winwrangler","forks":1,"size":276,"private":false,"has_wiki":true,"name":"winwrangler","owner":"JNRowe","open_issues":0,"description":"Mirror of the upstream failpad source, converted for Matt","has_issues":true},{"watchers":1,"homepage":"http://divmod.org/trac/wiki/DivmodReverend","has_downloads":true,"created_at":"2010/05/06 10:58:58 -0700","fork":false,"pushed_at":"2010/05/06 11:10:51 -0700","url":"https://github.com/JNRowe/reverend","forks":1,"size":420,"private":false,"has_wiki":true,"name":"reverend","owner":"JNRowe","open_issues":0,"description":"Reverend - Simple Bayesian classifier","has_issues":true},{"watchers":1,"homepage":"http://packages.python.org/github-cli","has_downloads":true,"created_at":"2010/09/15 08:21:44 -0700","fork":true,"pushed_at":"2010/11/02 10:42:20 -0700","url":"https://github.com/JNRowe/github-cli","forks":0,"size":916,"private":false,"has_wiki":true,"name":"github-cli","owner":"JNRowe","open_issues":0,"description":"A command-line interface to the GitHub Issues API v2.","has_issues":false},{"watchers":3,"homepage":"","has_downloads":true,"created_at":"2010/10/31 01:03:09 -0700","fork":true,"pushed_at":"2011/06/06 16:14:48 -0700","url":"https://github.com/JNRowe/python-github2","forks":0,"size":156,"private":false,"has_wiki":true,"language":"Python","name":"python-github2","owner":"JNRowe","open_issues":0,"description":"github client in python, with issues support.","has_issues":false},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2010/10/31 09:27:05 -0700","fork":false,"pushed_at":"2011/05/31 13:08:10 -0700","url":"https://github.com/JNRowe/gh_bugs","forks":1,"size":2564,"private":false,"has_wiki":true,"language":"Python","name":"gh_bugs","owner":"JNRowe","open_issues":6,"description":"Simple client for GitHub issues","has_issues":true},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2011/01/27 03:05:32 -0800","fork":true,"pushed_at":"2011/05/17 06:22:45 -0700","url":"https://github.com/JNRowe/snipmate-snippets","forks":0,"size":956,"private":false,"has_wiki":true,"language":"VimL","name":"snipmate-snippets","owner":"JNRowe","open_issues":0,"description":"A collection of snippets for snipmate (vim plugin) with a focus on bash, php, html and javascript","has_issues":false},{"watchers":1,"homepage":"http://github.com/caffeinehit/hammertime","has_downloads":true,"created_at":"2011/02/02 09:49:21 -0800","fork":true,"pushed_at":"2011/02/02 09:54:18 -0800","url":"https://github.com/JNRowe/hammertime","forks":0,"size":720,"private":false,"has_wiki":true,"language":"Python","name":"hammertime","owner":"JNRowe","open_issues":0,"description":"Time tracking with git","has_issues":false},{"watchers":1,"homepage":"http://jnrowe.github.com/versionah/","has_downloads":true,"created_at":"2011/02/15 08:51:56 -0800","fork":false,"pushed_at":"2011/05/31 10:24:35 -0700","url":"https://github.com/JNRowe/versionah","forks":1,"size":4404,"private":false,"has_wiki":true,"language":"Python","name":"versionah","owner":"JNRowe","open_issues":0,"description":"Simple version number mangler","has_issues":true},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2011/02/22 13:00:23 -0800","fork":false,"url":"https://github.com/JNRowe/issues-test","forks":1,"size":0,"private":false,"has_wiki":true,"name":"issues-test","owner":"JNRowe","open_issues":8,"description":"Repo for testing gh-bugs","has_issues":true},{"watchers":1,"homepage":"http://docs.notmyidea.org/alexis/pelican/","has_downloads":true,"created_at":"2011/02/23 21:20:07 -0800","fork":true,"pushed_at":"2011/04/04 21:22:46 -0700","url":"https://github.com/JNRowe/pelican","forks":0,"size":3916,"private":false,"has_wiki":true,"language":"Python","name":"pelican","owner":"JNRowe","open_issues":0,"description":"Static blog generator in python, using ReST syntax","has_issues":false},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2011/04/04 23:37:38 -0700","fork":true,"pushed_at":"2011/04/04 23:44:42 -0700","url":"https://github.com/JNRowe/pw","forks":0,"size":132,"private":false,"has_wiki":true,"language":"Python","name":"pw","owner":"JNRowe","open_issues":0,"description":"Grep GPG-encrypted YAML password safes.","has_issues":false},{"watchers":1,"homepage":"http://code.google.com/p/shell-doctest/","has_downloads":true,"created_at":"2011/04/05 05:32:07 -0700","fork":false,"pushed_at":"2011/04/05 05:32:44 -0700","url":"https://github.com/JNRowe/shell-doctest","forks":1,"size":128,"private":false,"has_wiki":true,"language":"Python","name":"shell-doctest","owner":"JNRowe","open_issues":0,"description":"shelldoctest is Doctest/UnitTest for shell (mirror of Google Code project)","has_issues":true},{"watchers":1,"homepage":"http://jnrowe.github.com/blog","has_downloads":true,"created_at":"2011/04/05 09:21:16 -0700","fork":false,"pushed_at":"2011/04/05 09:22:26 -0700","url":"https://github.com/JNRowe/blog","forks":1,"size":1152,"private":false,"has_wiki":true,"name":"blog","owner":"JNRowe","open_issues":0,"description":"Old jnrowe.github.com content that *may* be resurrected.","has_issues":true},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2011/04/06 07:35:40 -0700","fork":false,"pushed_at":"2011/05/13 12:27:22 -0700","url":"https://github.com/JNRowe/sphinx-jnrowe","forks":1,"size":644,"private":false,"has_wiki":true,"name":"sphinx-jnrowe","owner":"JNRowe","open_issues":0,"description":"My sphinx theme","has_issues":true},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2011/05/09 06:04:35 -0700","fork":false,"pushed_at":"2011/05/27 00:50:48 -0700","url":"https://github.com/JNRowe/rdial","forks":1,"size":272,"private":false,"has_wiki":true,"language":"Python","name":"rdial","owner":"JNRowe","open_issues":0,"description":"Simple time tracking for simple people","has_issues":true},{"watchers":1,"homepage":"","has_downloads":true,"created_at":"2011/05/22 23:21:28 -0700","fork":true,"pushed_at":"2011/05/30 08:39:21 -0700","url":"https://github.com/JNRowe/vim-cute-python","forks":0,"size":180,"private":false,"has_wiki":true,"language":"VimL","name":"vim-cute-python","owner":"JNRowe","open_issues":0,"description":"Unicode goodness for Python code by using vim's new “conceal” feature","has_issues":false},{"watchers":1,"homepage":"http://develop.github.com","has_downloads":false,"created_at":"2011/05/23 03:32:46 -0700","master_branch":"gh-pages","fork":true,"pushed_at":"2011/05/23 03:36:51 -0700","url":"https://github.com/JNRowe/develop.github.com","forks":0,"size":1584,"private":false,"has_wiki":false,"language":"JavaScript","name":"develop.github.com","owner":"JNRowe","open_issues":0,"description":"API Documentation for GitHub","has_issues":false},{"watchers":1,"homepage":"http://python-requests.org","has_downloads":true,"created_at":"2011/05/27 00:16:23 -0700","master_branch":"develop","fork":true,"pushed_at":"2011/05/27 00:17:44 -0700","url":"https://github.com/JNRowe/requests","forks":0,"size":2648,"private":false,"has_wiki":false,"language":"Python","name":"requests","owner":"JNRowe","open_issues":0,"description":"Python HTTP Requests for Humans.","has_issues":false},{"watchers":1,"homepage":"http://github.com/caelum/restfulie-py","has_downloads":true,"created_at":"2011/05/28 22:04:51 -0700","fork":true,"pushed_at":"2011/05/28 22:05:55 -0700","url":"https://github.com/JNRowe/restfulie-py","forks":0,"size":1794,"private":false,"has_wiki":true,"language":"Python","name":"restfulie-py","owner":"JNRowe","open_issues":0,"description":"Python port of Restfulie","has_issues":false},{"watchers":1,"homepage":"http://tyrs.nicosphere.net","has_downloads":true,"created_at":"2011/06/03 02:42:16 -0700","fork":true,"pushed_at":"2011/06/03 06:45:50 -0700","url":"https://github.com/JNRowe/tyrs","forks":0,"size":132,"private":false,"has_wiki":true,"language":"Python","name":"tyrs","owner":"JNRowe","open_issues":0,"description":"twitter curses client","has_issues":false},{"watchers":1,"homepage":"http://andrewgee.org/blog/projects/gpxviewer","has_downloads":true,"created_at":"2011/06/06 06:21:54 -0700","fork":true,"pushed_at":"2011/06/06 06:23:32 -0700","url":"https://github.com/JNRowe/gpxviewer","forks":0,"size":1040,"private":false,"has_wiki":false,"language":"Python","name":"gpxviewer","owner":"JNRowe","open_issues":0,"description":"GPXViewer GPS trace viewer","has_issues":false}]} \ No newline at end of file +{"repositories":[{"has_downloads":true,"url":"https://github.com/JNRowe/bfm","forks":3,"description":"This program is a dockapp-style CPU, memory, swap and load average monitor.","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://www.jnrowe.ukfsn.org/projects/bfm.html","size":232,"private":false,"has_issues":true,"pushed_at":"2011/05/08 23:35:07 -0700","name":"bfm","owner":"JNRowe","integrate_branch":"iratqq","language":"C","watchers":3,"created_at":"2009/04/05 18:46:34 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/upoints","forks":0,"description":"upoints is a collection of GPL v3 licensed modules for working with points on Earth, or other near spherical objects.","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/upoints/","size":4640,"private":false,"has_issues":true,"pushed_at":"2011/06/23 09:43:42 -0700","name":"upoints","owner":"JNRowe","language":"Python","watchers":2,"created_at":"2009/04/23 04:06:46 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/pyisbn","forks":2,"description":"A Python module for working with 10- and 13-digit ISBNs","has_wiki":true,"fork":false,"open_issues":1,"homepage":"http://packages.python.org/pyisbn/","size":132,"private":false,"has_issues":true,"pushed_at":"2011/06/06 07:04:57 -0700","name":"pyisbn","owner":"JNRowe","language":"Python","watchers":13,"created_at":"2009/04/23 04:07:25 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/pytemplate","forks":0,"description":"Package template for Python, with distutils setup","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":2252,"private":false,"has_issues":true,"pushed_at":"2011/05/09 01:49:16 -0700","name":"pytemplate","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2009/04/23 04:09:02 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/misc-overlay","forks":0,"description":"Gentoo overlay -- miscellaneous packages","has_wiki":true,"fork":false,"open_issues":13,"homepage":"http://jnrowe.github.com/misc-overlay/","size":7777,"private":false,"has_issues":true,"pushed_at":"2011/08/11 11:46:23 -0700","name":"misc-overlay","owner":"JNRowe","language":"Python","watchers":5,"created_at":"2009/05/02 07:32:50 -0700"},{"has_downloads":false,"url":"https://github.com/JNRowe/fixes-overlay","forks":0,"description":"Small package fixes languishing in the Gentoo BTS","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/fixes-overlay","size":3756,"private":false,"has_issues":true,"pushed_at":"2011/06/23 09:59:08 -0700","name":"fixes-overlay","owner":"JNRowe","language":"Python","master_branch":"master","watchers":1,"created_at":"2009/05/02 07:52:47 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/dotbash","forks":0,"description":"Shared bash configuration files","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":1148,"private":false,"has_issues":true,"pushed_at":"2010/05/02 19:21:40 -0700","name":"dotbash","owner":"JNRowe","watchers":1,"created_at":"2009/05/08 04:18:15 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/jnrowe.github.com","forks":0,"description":"My user pages repository","has_wiki":false,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/","size":6636,"private":false,"has_issues":true,"pushed_at":"2011/07/09 11:32:30 -0700","name":"jnrowe.github.com","owner":"JNRowe","language":"JavaScript","master_branch":"master","watchers":2,"created_at":"2009/05/14 06:43:16 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/local-bin","forks":0,"description":"Tat from my ~/bin","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":656,"private":false,"has_issues":true,"pushed_at":"2011/06/20 08:39:36 -0700","name":"local-bin","owner":"JNRowe","language":"Shell","watchers":1,"created_at":"2009/05/14 11:09:34 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/termstyle","forks":1,"description":"a dirt-simple terminal-colour library for python","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":564,"private":false,"has_issues":false,"pushed_at":"2010/09/24 21:10:10 -0700","name":"termstyle","owner":"JNRowe","watchers":2,"created_at":"2009/05/24 00:05:46 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/readyset","forks":1,"description":"Ready-to-use Software Engineering Templates","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://readyset.tigris.org/","size":3216,"private":false,"has_issues":true,"pushed_at":"2011/03/04 18:49:12 -0800","name":"readyset","owner":"JNRowe","language":"JavaScript","watchers":1,"created_at":"2009/08/16 19:30:50 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/cupage","forks":1,"description":"A tool to check for updates on web pages","has_wiki":true,"fork":false,"open_issues":3,"homepage":"http://jnrowe.github.com/cupage","size":612,"private":false,"has_issues":true,"pushed_at":"2011/07/17 10:23:45 -0700","name":"cupage","owner":"JNRowe","language":"Python","watchers":3,"created_at":"2009/09/17 21:03:02 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/pages_layouts","forks":1,"description":"Shared layouts submodule for jekyll","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":1948,"private":false,"has_issues":true,"pushed_at":"2011/02/28 05:02:24 -0800","name":"pages_layouts","owner":"JNRowe","watchers":1,"created_at":"2009/09/24 18:42:48 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/bwatch","forks":1,"description":"Simple bandwidth watching tool","has_wiki":true,"fork":false,"open_issues":2,"homepage":"http://jnrowe.github.com/bwatch/","size":2328,"private":false,"has_issues":true,"pushed_at":"2011/06/23 11:14:25 -0700","name":"bwatch","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2009/09/26 10:13:56 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/bleeter","forks":1,"description":"Nasty little twitter client","has_wiki":true,"fork":false,"open_issues":1,"homepage":"http://jnrowe.github.com/bleeter/","size":3544,"private":false,"has_issues":true,"pushed_at":"2011/06/23 11:17:05 -0700","name":"bleeter","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2009/10/14 22:19:25 -0700"},{"has_downloads":false,"url":"https://github.com/JNRowe/oh-my-zsh","forks":1,"description":"A community-driven framework for managing your zsh configuration.","has_wiki":false,"fork":true,"open_issues":0,"homepage":"","size":416,"private":false,"has_issues":true,"pushed_at":"2011/05/26 02:55:49 -0700","name":"oh-my-zsh","owner":"JNRowe","language":"Shell","master_branch":"master","watchers":1,"created_at":"2009/10/28 13:13:46 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/vim-configs","forks":1,"description":"Personal vim configs","has_wiki":true,"fork":false,"open_issues":2,"homepage":"http://jnrowe.github.com/vim-configs","size":3756,"private":false,"has_issues":true,"pushed_at":"2011/08/11 11:35:34 -0700","name":"vim-configs","owner":"JNRowe","language":"VimL","watchers":3,"created_at":"2009/11/12 06:10:53 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/surfraw","forks":1,"description":"Mirror of the upstream git repository","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://surfraw.alioth.debian.org/","size":4876,"private":false,"has_issues":true,"pushed_at":"2011/08/11 09:34:59 -0700","name":"surfraw","owner":"JNRowe","language":"Shell","watchers":3,"created_at":"2010/01/26 03:49:55 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/blanco","forks":1,"description":"Hey, remember me?","has_wiki":true,"fork":false,"open_issues":1,"homepage":"http://jnrowe.github.com/blanco","size":4296,"private":false,"has_issues":true,"pushed_at":"2011/06/23 11:19:45 -0700","name":"blanco","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2010/01/31 13:04:51 -0800"},{"has_downloads":false,"url":"https://github.com/JNRowe/vim-jnrowe","forks":1,"description":"My colorscheme, decoupled from my vim-configs repo for others ;)","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/vim-jnrowe/","size":1244,"private":false,"has_issues":true,"pushed_at":"2011/06/23 09:25:27 -0700","name":"vim-jnrowe","owner":"JNRowe","language":"VimL","watchers":1,"created_at":"2010/02/11 17:12:11 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/emacs-configs","forks":1,"description":"Personal emacs configs","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":1884,"private":false,"has_issues":true,"pushed_at":"2011/08/11 09:38:11 -0700","name":"emacs-configs","owner":"JNRowe","language":"Emacs Lisp","watchers":1,"created_at":"2010/02/15 12:19:22 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/tweepy","forks":1,"description":"A python library for the Twitter API. OAuth, python 3, complete coverage, streaming API","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://joshthecoder.github.com/tweepy","size":536,"private":false,"has_issues":true,"pushed_at":"2010/04/02 19:09:52 -0700","name":"tweepy","owner":"JNRowe","watchers":1,"created_at":"2010/03/31 14:57:29 -0700"},{"has_downloads":false,"url":"https://github.com/JNRowe/snipmate.vim","forks":1,"description":"snipMate.vim aims to be a concise vim script that implements some of TextMate's snippets features in Vim. ","has_wiki":false,"fork":true,"open_issues":0,"homepage":"www.vim.org/scripts/script.php?script_id=2540","size":248,"private":false,"has_issues":false,"pushed_at":"2011/01/27 03:16:30 -0800","name":"snipmate.vim","owner":"JNRowe","language":"VimL","watchers":1,"created_at":"2010/04/05 20:56:06 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/winwrangler","forks":1,"description":"Mirror of the upstream failpad source, converted for Matt","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/2010/04/04/FtO-winwrangler_tiling_for_the_masses.html","size":276,"private":false,"has_issues":true,"pushed_at":"2010/05/05 00:55:01 -0700","name":"winwrangler","owner":"JNRowe","watchers":1,"created_at":"2010/05/05 00:54:23 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/reverend","forks":1,"description":"Reverend - Simple Bayesian classifier","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://divmod.org/trac/wiki/DivmodReverend","size":420,"private":false,"has_issues":true,"pushed_at":"2010/05/06 11:10:51 -0700","name":"reverend","owner":"JNRowe","watchers":1,"created_at":"2010/05/06 10:58:58 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/github-cli","forks":0,"description":"A command-line interface to the GitHub Issues API v2.","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://packages.python.org/github-cli","size":916,"private":false,"has_issues":false,"pushed_at":"2010/11/02 10:42:20 -0700","name":"github-cli","owner":"JNRowe","watchers":1,"created_at":"2010/09/15 08:21:44 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/python-github2","forks":0,"description":"github client in python, with issues support.","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":144,"private":false,"has_issues":false,"pushed_at":"2011/07/12 09:55:46 -0700","name":"python-github2","owner":"JNRowe","language":"Python","watchers":3,"created_at":"2010/10/31 01:03:09 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/hubugs","forks":1,"description":"Simple client for GitHub issues","has_wiki":true,"fork":false,"open_issues":5,"homepage":"http://packages.python.org/hubugs/","size":3356,"private":false,"has_issues":true,"pushed_at":"2011/07/14 11:41:45 -0700","name":"hubugs","owner":"JNRowe","language":"Python","watchers":2,"created_at":"2010/10/31 09:27:05 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/snipmate-snippets","forks":0,"description":"A collection of snippets for snipmate (vim plugin) with a focus on bash, php, html and javascript","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":956,"private":false,"has_issues":false,"pushed_at":"2011/05/17 06:22:45 -0700","name":"snipmate-snippets","owner":"JNRowe","language":"VimL","watchers":1,"created_at":"2011/01/27 03:05:32 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/hammertime","forks":0,"description":"Time tracking with git","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://github.com/caffeinehit/hammertime","size":720,"private":false,"has_issues":false,"pushed_at":"2011/02/02 09:54:18 -0800","name":"hammertime","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/02/02 09:49:21 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/versionah","forks":1,"description":"Simple version number mangler","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/versionah/","size":4504,"private":false,"has_issues":true,"pushed_at":"2011/08/11 09:35:57 -0700","name":"versionah","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/02/15 08:51:56 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/issues-test","forks":1,"description":"Repo for testing hubugs","has_wiki":true,"fork":false,"open_issues":8,"homepage":"","size":0,"private":false,"has_issues":true,"name":"issues-test","owner":"JNRowe","watchers":1,"created_at":"2011/02/22 13:00:23 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/pelican","forks":0,"description":"Static blog generator in python, using ReST syntax","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://docs.notmyidea.org/alexis/pelican/","size":3916,"private":false,"has_issues":false,"pushed_at":"2011/04/04 21:22:46 -0700","name":"pelican","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/02/23 21:20:07 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/pw","forks":0,"description":"Grep GPG-encrypted YAML password safes.","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":132,"private":false,"has_issues":false,"pushed_at":"2011/04/04 23:44:42 -0700","name":"pw","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/04/04 23:37:38 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/shell-doctest","forks":1,"description":"shelldoctest is Doctest/UnitTest for shell (mirror of Google Code project)","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://code.google.com/p/shell-doctest/","size":128,"private":false,"has_issues":true,"pushed_at":"2011/04/05 05:32:44 -0700","name":"shell-doctest","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/04/05 05:32:07 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/blog","forks":1,"description":"Old jnrowe.github.com content that *may* be resurrected.","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/blog","size":1152,"private":false,"has_issues":true,"pushed_at":"2011/04/05 09:22:26 -0700","name":"blog","owner":"JNRowe","watchers":1,"created_at":"2011/04/05 09:21:16 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/sphinx-jnrowe","forks":1,"description":"My sphinx theme","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":644,"private":false,"has_issues":true,"pushed_at":"2011/05/13 12:27:22 -0700","name":"sphinx-jnrowe","owner":"JNRowe","watchers":1,"created_at":"2011/04/06 07:35:40 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/rdial","forks":1,"description":"Simple time tracking for simple people","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":1688,"private":false,"has_issues":true,"pushed_at":"2011/08/11 07:49:36 -0700","name":"rdial","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/05/09 06:04:35 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/vim-cute-python","forks":0,"description":"Unicode goodness for Python code by using vim's new “conceal” feature","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":112,"private":false,"has_issues":false,"pushed_at":"2011/07/18 06:01:30 -0700","name":"vim-cute-python","owner":"JNRowe","language":"VimL","watchers":1,"created_at":"2011/05/22 23:21:28 -0700"},{"has_downloads":false,"url":"https://github.com/JNRowe/develop.github.com","forks":0,"description":"API Documentation for GitHub","has_wiki":false,"fork":true,"open_issues":0,"homepage":"http://develop.github.com","size":1584,"private":false,"has_issues":false,"pushed_at":"2011/05/23 03:36:51 -0700","name":"develop.github.com","owner":"JNRowe","language":"JavaScript","master_branch":"gh-pages","watchers":1,"created_at":"2011/05/23 03:32:46 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/requests","forks":0,"description":"Python HTTP Requests for Humans.","has_wiki":false,"fork":true,"open_issues":0,"homepage":"http://python-requests.org","size":2648,"private":false,"has_issues":false,"pushed_at":"2011/05/27 00:17:44 -0700","name":"requests","owner":"JNRowe","language":"Python","master_branch":"develop","watchers":1,"created_at":"2011/05/27 00:16:23 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/restfulie-py","forks":0,"description":"Python port of Restfulie","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://github.com/caelum/restfulie-py","size":1794,"private":false,"has_issues":false,"pushed_at":"2011/05/28 22:05:55 -0700","name":"restfulie-py","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/05/28 22:04:51 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/tyrs","forks":0,"description":"twitter curses client","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://tyrs.nicosphere.net","size":132,"private":false,"has_issues":false,"pushed_at":"2011/06/03 06:45:50 -0700","name":"tyrs","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/06/03 02:42:16 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/gpxviewer","forks":0,"description":"GPXViewer GPS trace viewer","has_wiki":false,"fork":true,"open_issues":0,"homepage":"http://andrewgee.org/blog/projects/gpxviewer","size":1040,"private":false,"has_issues":false,"pushed_at":"2011/06/06 06:23:32 -0700","name":"gpxviewer","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/06/06 06:21:54 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/dwm","forks":1,"description":"The dwm codebase I run","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://dwm.suckless.org/","size":1084,"private":false,"has_issues":true,"pushed_at":"2011/06/24 09:18:06 -0700","name":"dwm","owner":"JNRowe","language":"C","master_branch":"jnrowe","watchers":1,"created_at":"2011/06/21 23:57:57 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/micromodels","forks":0,"description":"Declarative dictionary-based model classes for Python","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":368,"private":false,"has_issues":false,"pushed_at":"2011/06/22 00:29:06 -0700","name":"micromodels","owner":"JNRowe","integrate_branch":"develop","language":"Python","watchers":1,"created_at":"2011/06/22 00:27:17 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/HTTPretty","forks":0,"description":"HTTP client mocking tool for Python","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":172,"private":false,"has_issues":false,"pushed_at":"2011/06/30 12:24:07 -0700","name":"HTTPretty","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/06/30 12:19:33 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/thinote","forks":1,"description":"Move along","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":96,"private":false,"has_issues":true,"pushed_at":"2011/07/15 12:10:38 -0700","name":"thinote","owner":"JNRowe","watchers":1,"created_at":"2011/07/15 12:09:17 -0700"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,repos,show,JNRowe,misc-overlay,0d310ea1b3942e443c6e5cae4f3db39f b/tests/data/github.com,api,v2,json,repos,show,JNRowe,misc-overlay,0d310ea1b3942e443c6e5cae4f3db39f index 3ff7cf5..0b669fb 100644 --- a/tests/data/github.com,api,v2,json,repos,show,JNRowe,misc-overlay,0d310ea1b3942e443c6e5cae4f3db39f +++ b/tests/data/github.com,api,v2,json,repos,show,JNRowe,misc-overlay,0d310ea1b3942e443c6e5cae4f3db39f @@ -1,14 +1,15 @@ status: 200 -x-ratelimit-remaining: 59 +x-ratelimit-remaining: 56 content-location: https://github.com/api/v2/json/repos/show/JNRowe/misc-overlay -x-runtime: 11ms -content-length: 447 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 448 +server: nginx/1.0.4 +x-runtime: 14ms x-ratelimit-limit: 60 -etag: "977c6513db34b26e6084b833b45c7754" +etag: "bee34b60622b6d172d1fcfadc3fb03d5" cache-control: private, max-age=0, must-revalidate -date: Sun, 22 May 2011 07:50:08 GMT +date: Mon, 15 Aug 2011 19:59:43 GMT content-type: application/json; charset=utf-8 -{"repository":{"homepage":"http://jnrowe.github.com/misc-overlay/","forks":0,"pushed_at":"2011/05/22 00:24:15 -0700","url":"https://github.com/JNRowe/misc-overlay","has_wiki":true,"watchers":5,"open_issues":6,"fork":false,"created_at":"2009/05/02 07:32:50 -0700","has_issues":true,"description":"Gentoo overlay -- miscellaneous packages","size":8449,"private":false,"name":"misc-overlay","owner":"JNRowe","language":"Python","has_downloads":true}} \ No newline at end of file +{"repository":{"has_downloads":true,"url":"https://github.com/JNRowe/misc-overlay","forks":0,"description":"Gentoo overlay -- miscellaneous packages","has_wiki":true,"fork":false,"open_issues":13,"homepage":"http://jnrowe.github.com/misc-overlay/","size":7777,"private":false,"has_issues":true,"pushed_at":"2011/08/11 11:46:23 -0700","name":"misc-overlay","owner":"JNRowe","language":"Python","watchers":5,"created_at":"2009/05/02 07:32:50 -0700"}} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,contributors,ff5597c19e0d450ad432c56295b19cf8 b/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,contributors,ff5597c19e0d450ad432c56295b19cf8 index 6480977..4118e5d 100644 --- a/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,contributors,ff5597c19e0d450ad432c56295b19cf8 +++ b/tests/data/github.com,api,v2,json,repos,show,ask,python-github2,contributors,ff5597c19e0d450ad432c56295b19cf8 @@ -1,14 +1,15 @@ status: 200 -x-ratelimit-remaining: 54 +x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/repos/show/ask/python-github2/contributors -x-runtime: 43ms -content-length: 5485 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 6007 +server: nginx/1.0.4 +x-runtime: 92ms x-ratelimit-limit: 60 -etag: "bad07c5d349a2f8a18db3268500b2586" +etag: "436cb11fc3ae37c80a03c3b50a30532c" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:39:49 GMT +date: Thu, 25 Aug 2011 06:58:04 GMT content-type: application/json; charset=utf-8 -{"contributors":[{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","contributions":202,"location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},{"name":"Ask Solem Hoel","company":"RabbitMQ, VMware, Inc.","gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","contributions":44,"location":"London, UK","type":"User","login":"ask","email":"ask@celeryproject.org"},{"name":"Vincent Driessen","gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","contributions":9,"location":"Netherlands","blog":"http://nvie.com","type":"User","login":"nvie","email":"vincent@datafox.nl"},{"name":"Adam Vandenberg","gravatar_id":"7ea0cc75793eb2b1ada4abc953a41592","contributions":6,"location":"Issaquah, WA","blog":"http://adamv.com/","type":"User","login":"adamv","email":"flangy@gmail.com"},{"name":"Michael Basnight","gravatar_id":"2f3f68f62f5fc642f0b716b355071176","contributions":5,"location":"Austin","type":"User","login":"hub-cap"},{"name":"chris vale","company":"RocketNinja","gravatar_id":"d5400f77ab68a885319ac7b929bc789e","contributions":4,"location":"San Francisco","blog":"http://blog.crispywalrus.net/","type":"User","login":"crispywalrus","email":""},{"name":"Maximillian Dornseif","company":"HUDORA GmbH","gravatar_id":"ac1e94537ee54758bb954a6d1306be2a","contributions":4,"location":"Germany","blog":"http://mdornseif.github.com/","type":"User","login":"mdornseif"},{"name":"Fernando Perez","company":"University of California, Berkeley.","gravatar_id":"95198572b00e5fbcd97fb5315215bf7a","contributions":4,"location":"Berkeley, CA","blog":"http://fperez.org","type":"User","login":"fperez","email":"fernando.perez@berkeley.edu"},{"name":"Evan Broder","gravatar_id":"425ea4ff715bef0be068e0176251bf53","contributions":4,"location":"San Francisco, CA","blog":"http://ebroder.net","type":"User","login":"ebroder","email":"evan@ebroder.net"},{"name":"Jeremy Dunck","gravatar_id":"f3794e603ef53b0513ab45b6565ee457","contributions":4,"location":"Dallas, TX","type":"User","login":"jdunck","email":""},{"name":"Daniel Greenfeld","company":"pydanny.com","gravatar_id":"67e05420d4dd3492097aeb77f44f7867","contributions":3,"location":"Los Angeles, CA","blog":"http://pydanny.blogspot.com","type":"User","login":"pydanny","email":"pydanny@gmail.com"},{"name":"Scott Torborg","company":"","gravatar_id":"e45c9c1a1c6184d5572859c52ae43bfc","contributions":2,"location":"Portland, OR","blog":"http://www.scotttorborg.com","type":"User","login":"storborg","email":"storborg@mit.edu"},{"name":"Patryk Zawadzki","gravatar_id":"16483a82144b02ad846eafa078ef9b27","contributions":2,"location":"Wrocław, Poland","blog":"http://room-303.com/blog/","type":"User","login":"patrys","email":"patrys@pld-linux.org"},{"name":"Surajram Kumaravel","company":"","gravatar_id":"1ee6b40a1acbcc00eb32e306e0e94037","contributions":2,"location":"Chennai, India","blog":"http://www.surajram.com","type":"User","login":"surajram","email":"root@surajram.com"},{"name":"Cody Soyland","company":"","gravatar_id":"db17092663e716b08de72e936ed082c7","contributions":2,"location":"Lawrence, KS","blog":"http://codysoyland.com/","type":"User","login":"codysoyland","email":"codysoyland@gmail.com"},{"name":"Christopher MacGown","gravatar_id":"4174216c1dc0f223ce608d5a3b66a585","contributions":2,"location":"","type":"User","login":"ChristopherMacGown","email":""},{"gravatar_id":"464f76c5577389c5ca29e3d7cca133d5","contributions":1,"type":"User","login":"broderboy"},{"gravatar_id":"311e2e25841265550f884d3996a4e23b","contributions":1,"type":"User","login":"openhatched"},{"name":"Rick Harris","gravatar_id":"afb82eaa9550a5ba8538bb926b854465","contributions":1,"location":"Austin, TX","type":"User","login":"rconradharris","email":"rconradharris@gmail.com"},{"name":"Josh Weinberg","gravatar_id":"cf04727870245c17f455fb05b25f9f8e","contributions":1,"blog":"http://openemu.org","type":"User","login":"jweinberg","email":"joshuacweinberg@gmail.com"},{"name":"Claudio B.","company":"","gravatar_id":"4dea5cf83d2d6c1228750b76e579b38d","contributions":1,"location":"Los Angeles, United States","blog":"http://claudiob.github.com","type":"User","login":"claudiob","email":""},{"name":"Barthelemy Dagenais","gravatar_id":"1dc7387cedba30b9a3d12792084b4b4a","contributions":1,"location":"Montreal, QC, Canada","blog":"http://www.infobart.com","type":"User","login":"bartdag"},{"name":"Mark Paschal","company":"","gravatar_id":"30e5bdec1073df6350d27b8145bf0dab","contributions":1,"location":"San Francisco, CA, USA","blog":"http://markpasc.org/mark/","type":"User","login":"markpasc","email":""},{"name":"Jonas Obrist","company":"divio GmbH","gravatar_id":"b4f902096ea2ccfce71443d1d8fee5b3","contributions":1,"location":"Zurich, Switzerland","blog":"twitter.com/ojiidotch","type":"User","login":"ojii","email":"jonas.obrist@divio.ch"},{"name":"Kenneth Reitz","company":"Arc90, Inc","gravatar_id":"2eccc4005572c1e2b12a9c00580bc86f","contributions":1,"location":"Washington, DC","blog":"http://kennethreitz.com","type":"User","login":"kennethreitz","email":"_@kennethreitz.com"},{"name":"Justin Quick","company":"Washington Times","gravatar_id":"063d31c517033677654704043d219008","contributions":1,"location":"DC","blog":"http://serotoninstorm.com","type":"User","login":"justquick","email":"justquick@gmail.com"},{"name":"Jens Ohlig","gravatar_id":"9de3f3969367fffe2051c2b405b79810","contributions":1,"blog":"http://www.johl.io","type":"User","login":"johl","email":""}]} \ No newline at end of file +{"contributors":[{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","contributions":267,"type":"User","login":"JNRowe","email":"jnrowe@gmail.com"},{"name":"Ask Solem Hoel","company":"RabbitMQ, VMware","gravatar_id":"7e8b501f7f579c66ddac7e65cb7962b4","location":"London, UK","contributions":44,"type":"User","login":"ask","email":"ask@celeryproject.org"},{"name":"Vincent Driessen","gravatar_id":"c5a7f21b46df698f3db31c37ed0cf55a","location":"Netherlands","blog":"http://nvie.com","contributions":9,"type":"User","login":"nvie","email":"vincent@datafox.nl"},{"name":"Adam Vandenberg","gravatar_id":"7ea0cc75793eb2b1ada4abc953a41592","location":"Issaquah, WA","blog":"http://adamv.com/","contributions":6,"type":"User","login":"adamv","email":"flangy@gmail.com"},{"name":"Michael Basnight","gravatar_id":"2f3f68f62f5fc642f0b716b355071176","location":"Austin","contributions":5,"type":"User","login":"hub-cap"},{"name":"Jeremy Dunck","gravatar_id":"f3794e603ef53b0513ab45b6565ee457","location":"Dallas, TX","contributions":5,"type":"User","login":"jdunck","email":""},{"name":"Maximillian Dornseif","company":"HUDORA GmbH","gravatar_id":"ac1e94537ee54758bb954a6d1306be2a","location":"Germany","blog":"http://mdornseif.github.com/","contributions":4,"type":"User","login":"mdornseif"},{"name":"Fernando Perez","company":"University of California, Berkeley.","gravatar_id":"95198572b00e5fbcd97fb5315215bf7a","location":"Berkeley, CA","blog":"http://fperez.org","contributions":4,"type":"User","login":"fperez","email":"fernando.perez@berkeley.edu"},{"name":"Evan Broder","gravatar_id":"425ea4ff715bef0be068e0176251bf53","location":"San Francisco, CA","blog":"http://ebroder.net","contributions":4,"type":"User","login":"ebroder","email":"evan@ebroder.net"},{"name":"chris vale","company":"RocketNinja","gravatar_id":"d5400f77ab68a885319ac7b929bc789e","location":"San Francisco","blog":"http://blog.crispywalrus.net/","contributions":4,"type":"User","login":"crispywalrus","email":""},{"name":"Daniel Greenfeld","company":"pydanny.com","gravatar_id":"67e05420d4dd3492097aeb77f44f7867","location":"Los Angeles, CA","blog":"http://pydanny.blogspot.com","contributions":3,"type":"User","login":"pydanny","email":"pydanny@gmail.com"},{"name":"Scott Torborg","company":"Cart Logic, Inc.","gravatar_id":"e45c9c1a1c6184d5572859c52ae43bfc","location":"Portland, OR","blog":"http://www.scotttorborg.com","contributions":2,"type":"User","login":"storborg","email":"storborg@mit.edu"},{"name":"Ionuț Arțăriși","company":"","gravatar_id":"68546566350063c9017dfeae5000f6b1","location":"","blog":"mapleoin.bluepink.ro","contributions":2,"type":"User","login":"mapleoin","email":"mapleoin@lavabit.com"},{"name":"Surajram Kumaravel","company":"","gravatar_id":"1ee6b40a1acbcc00eb32e306e0e94037","location":"Chennai, India","blog":"http://www.surajram.com","contributions":2,"type":"User","login":"surajram","email":"root@surajram.com"},{"name":"Christopher MacGown","gravatar_id":"4174216c1dc0f223ce608d5a3b66a585","location":"","contributions":2,"type":"User","login":"ChristopherMacGown","email":""},{"name":"Cody Soyland","company":"","gravatar_id":"db17092663e716b08de72e936ed082c7","location":"Lawrence, KS","blog":"http://codysoyland.com/","contributions":2,"type":"User","login":"codysoyland","email":"codysoyland@gmail.com"},{"name":"Patryk Zawadzki","company":"Mirumee Software","gravatar_id":"16483a82144b02ad846eafa078ef9b27","location":"Wrocław, Poland","blog":"http://room-303.com/blog/","contributions":2,"type":"User","login":"patrys","email":"patrys@pld-linux.org"},{"gravatar_id":"311e2e25841265550f884d3996a4e23b","contributions":1,"type":"User","login":"openhatched"},{"name":"Rick Harris","gravatar_id":"afb82eaa9550a5ba8538bb926b854465","location":"Austin, TX","contributions":1,"type":"User","login":"rconradharris","email":"rconradharris@gmail.com"},{"gravatar_id":"464f76c5577389c5ca29e3d7cca133d5","contributions":1,"type":"User","login":"broderboy"},{"name":"Josh Weinberg","gravatar_id":"cf04727870245c17f455fb05b25f9f8e","blog":"http://openemu.org","contributions":1,"type":"User","login":"jweinberg","email":"joshuacweinberg@gmail.com"},{"name":"Jens Ohlig","gravatar_id":"9de3f3969367fffe2051c2b405b79810","blog":"http://www.johl.io","contributions":1,"type":"User","login":"johl","email":""},{"name":"Claudio B.","company":"","gravatar_id":"4dea5cf83d2d6c1228750b76e579b38d","location":"Los Angeles, United States","blog":"http://claudiob.github.com","contributions":1,"type":"User","login":"claudiob","email":""},{"name":"Jonas Obrist","company":"divio GmbH","gravatar_id":"b4f902096ea2ccfce71443d1d8fee5b3","location":"Zurich, Switzerland","blog":"twitter.com/ojiidotch","contributions":1,"type":"User","login":"ojii","email":"jonas.obrist@divio.ch"},{"name":"Mark Paschal","company":"","gravatar_id":"30e5bdec1073df6350d27b8145bf0dab","location":"San Francisco, CA, USA","blog":"http://markpasc.org/mark/","contributions":1,"type":"User","login":"markpasc","email":""},{"name":"Rok Garbas","company":"garbas.si (Python.Zope.Plone consulting)","gravatar_id":"9124210529f6eb59754932c413dd3c69","location":"Ljubljana, Slovenia","blog":"http://garbas.si","contributions":1,"type":"User","login":"garbas","email":"rok@garbas.si"},{"name":"Justin Quick","company":"Washington Times","gravatar_id":"063d31c517033677654704043d219008","location":"DC","blog":"http://serotoninstorm.com","contributions":1,"type":"User","login":"justquick","email":"justquick@gmail.com"},{"name":"Kenneth Reitz","company":"Arc90 + Readability","gravatar_id":"2eccc4005572c1e2b12a9c00580bc86f","location":"Washington, DC","blog":"http://kennethreitz.com","contributions":1,"type":"User","login":"kennethreitz","email":"_@kennethreitz.com"},{"name":"Barthelemy Dagenais","gravatar_id":"1dc7387cedba30b9a3d12792084b4b4a","location":"Montreal, QC, Canada","blog":"http://www.infobart.com","contributions":1,"type":"User","login":"bartdag"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,repos,watched,JNRowe,7c562435f1efb67be5b048aeb79b3f6c b/tests/data/github.com,api,v2,json,repos,watched,JNRowe,7c562435f1efb67be5b048aeb79b3f6c index c53a97a..e5c343c 100644 --- a/tests/data/github.com,api,v2,json,repos,watched,JNRowe,7c562435f1efb67be5b048aeb79b3f6c +++ b/tests/data/github.com,api,v2,json,repos,watched,JNRowe,7c562435f1efb67be5b048aeb79b3f6c @@ -1,14 +1,15 @@ status: 200 -x-ratelimit-remaining: 55 +x-ratelimit-remaining: 58 content-location: https://github.com/api/v2/json/repos/watched/JNRowe -x-runtime: 293ms -content-length: 37996 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 38320 +server: nginx/1.0.4 +x-runtime: 264ms x-ratelimit-limit: 60 -etag: "2186c1687646c71b67903b8ab8f126af" +etag: "f708f7a7b851d375e602f662d2f7fa16" cache-control: private, max-age=0, must-revalidate -date: Wed, 08 Jun 2011 13:39:41 GMT +date: Mon, 15 Aug 2011 19:59:15 GMT content-type: application/json; charset=utf-8 -{"repositories":[{"watchers":922,"has_wiki":true,"owner":"scrooloose","open_issues":40,"url":"https://github.com/scrooloose/nerdtree","homepage":"","has_issues":true,"pushed_at":"2011/05/06 03:00:51 -0700","fork":false,"size":956,"has_downloads":true,"language":"VimL","name":"nerdtree","forks":70,"description":"hax0r vim script to give you a tree explorer","private":false,"created_at":"2008/03/10 00:34:08 -0700"},{"watchers":336,"has_wiki":true,"owner":"scrooloose","open_issues":6,"url":"https://github.com/scrooloose/nerdcommenter","homepage":"","has_issues":true,"pushed_at":"2011/05/05 18:56:29 -0700","fork":false,"size":1100,"has_downloads":true,"language":"VimL","name":"nerdcommenter","forks":39,"description":"Vim plugin for intensely orgasmic commenting","private":false,"created_at":"2008/03/10 01:19:15 -0700"},{"watchers":25,"has_wiki":true,"owner":"timcharper","open_issues":2,"url":"https://github.com/timcharper/textile.vim","homepage":"http://www.vim.org/scripts/script.php?script_id=2305","has_issues":true,"pushed_at":"2011/02/21 15:23:33 -0800","fork":false,"size":296,"has_downloads":true,"language":"VimL","name":"textile.vim","forks":11,"description":"Textile for VIM","private":false,"created_at":"2008/07/21 03:55:46 -0700"},{"watchers":369,"has_wiki":false,"owner":"tpope","open_issues":7,"url":"https://github.com/tpope/vim-surround","homepage":"http://www.vim.org/scripts/script.php?script_id=1697","has_issues":true,"pushed_at":"2011/01/22 20:29:15 -0800","fork":false,"size":188,"has_downloads":true,"language":"VimL","name":"vim-surround","forks":33,"description":"surround.vim: quoting/parenthesizing made simple","private":false,"created_at":"2008/09/10 18:00:16 -0700"},{"watchers":48,"has_wiki":false,"owner":"tpope","open_issues":0,"url":"https://github.com/tpope/vim-speeddating","homepage":"http://www.vim.org/scripts/script.php?script_id=2120","has_issues":true,"pushed_at":"2010/12/28 20:46:52 -0800","fork":false,"size":148,"has_downloads":false,"language":"VimL","name":"vim-speeddating","forks":5,"description":"speeddating.vim: use CTRL-A/CTRL-X to increment dates, times, and more","private":false,"created_at":"2008/09/10 18:07:06 -0700"},{"watchers":84,"has_wiki":true,"owner":"sjbach","open_issues":7,"url":"https://github.com/sjbach/lusty","homepage":"http://www.vim.org/scripts/script.php?script_id=1890","has_issues":true,"pushed_at":"2011/06/02 19:42:36 -0700","fork":false,"size":1584,"has_downloads":false,"language":"VimL","name":"lusty","forks":16,"description":"LustyExplorer / LustyJuggler for Vim","private":false,"created_at":"2008/09/14 19:54:02 -0700"},{"watchers":135,"has_wiki":false,"owner":"github","open_issues":34,"url":"https://github.com/github/develop.github.com","homepage":"http://develop.github.com","organization":"github","has_issues":true,"pushed_at":"2011/06/01 20:54:15 -0700","master_branch":"gh-pages","fork":false,"size":112,"has_downloads":false,"language":"JavaScript","name":"develop.github.com","forks":45,"description":"API Documentation for GitHub","private":false,"created_at":"2009/02/17 15:51:23 -0800"},{"watchers":3,"has_wiki":true,"owner":"godlygeek","open_issues":0,"url":"https://github.com/godlygeek/windowlayout","homepage":"","has_issues":true,"pushed_at":"2009/02/26 08:46:15 -0800","fork":false,"size":296,"has_downloads":true,"language":"VimL","name":"windowlayout","forks":0,"description":"A vim library for saving and restoring window layouts, plus demo plugins","private":false,"created_at":"2009/02/25 22:10:21 -0800"},{"watchers":157,"has_wiki":true,"owner":"godlygeek","open_issues":0,"url":"https://github.com/godlygeek/tabular","homepage":"","has_issues":true,"pushed_at":"2011/04/01 18:13:35 -0700","fork":false,"size":616,"has_downloads":true,"language":"VimL","name":"tabular","forks":9,"description":"Vim script for text filtering and alignment","private":false,"created_at":"2009/03/02 22:19:16 -0800"},{"watchers":2,"has_wiki":true,"owner":"decklin","open_issues":0,"url":"https://github.com/decklin/mnemosyne","homepage":"http://www.red-bean.com/decklin/mnemosyne/","has_issues":true,"pushed_at":"2009/03/10 10:25:52 -0700","fork":false,"size":344,"has_downloads":true,"name":"mnemosyne","forks":0,"description":"Static Python/Kid weblog generator with Maildir store","private":false,"created_at":"2009/03/10 10:19:38 -0700"},{"watchers":3,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/bfm","homepage":"http://www.jnrowe.ukfsn.org/projects/bfm.html","has_issues":true,"pushed_at":"2011/05/08 23:35:07 -0700","integrate_branch":"iratqq","fork":false,"size":232,"has_downloads":true,"language":"C","name":"bfm","forks":3,"description":"This program is a dockapp-style CPU, memory, swap and load average monitor.","private":false,"created_at":"2009/04/05 18:46:34 -0700"},{"watchers":143,"has_wiki":true,"owner":"ask","open_issues":5,"url":"https://github.com/ask/python-github2","homepage":"http://packages.python.org/github2","has_issues":true,"pushed_at":"2011/06/06 16:15:04 -0700","fork":false,"size":112,"has_downloads":true,"language":"Python","name":"python-github2","forks":50,"description":"github client in python, with issues support.","private":false,"created_at":"2009/04/18 08:31:12 -0700"},{"watchers":108,"has_wiki":true,"owner":"jsmits","open_issues":5,"url":"https://github.com/jsmits/github-cli","homepage":"http://packages.python.org/github-cli","has_issues":true,"pushed_at":"2011/03/16 13:18:51 -0700","fork":false,"size":100,"has_downloads":true,"language":"Python","name":"github-cli","forks":12,"description":"A command-line interface to the GitHub Issues API v2.","private":false,"created_at":"2009/04/19 02:05:27 -0700"},{"watchers":2,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/upoints","homepage":"http://jnrowe.github.com/upoints/","has_issues":true,"pushed_at":"2011/05/16 03:48:13 -0700","fork":false,"size":3288,"has_downloads":true,"language":"Python","name":"upoints","forks":0,"description":"upoints is a collection of GPL v3 licensed modules for working with points on Earth, or other near spherical objects.","private":false,"created_at":"2009/04/23 04:06:46 -0700"},{"watchers":13,"has_wiki":true,"owner":"JNRowe","open_issues":1,"url":"https://github.com/JNRowe/pyisbn","homepage":"http://packages.python.org/pyisbn/","has_issues":true,"pushed_at":"2011/06/06 07:04:57 -0700","fork":false,"size":132,"has_downloads":true,"language":"Python","name":"pyisbn","forks":2,"description":"A Python module for working with 10- and 13-digit ISBNs","private":false,"created_at":"2009/04/23 04:07:25 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/pytemplate","homepage":"","has_issues":true,"pushed_at":"2011/05/09 01:49:16 -0700","fork":false,"size":2252,"has_downloads":true,"language":"Python","name":"pytemplate","forks":0,"description":"Package template for Python, with distutils setup","private":false,"created_at":"2009/04/23 04:09:02 -0700"},{"watchers":5,"has_wiki":true,"owner":"JNRowe","open_issues":6,"url":"https://github.com/JNRowe/misc-overlay","homepage":"http://jnrowe.github.com/misc-overlay/","has_issues":true,"pushed_at":"2011/06/07 17:00:59 -0700","fork":false,"size":11049,"has_downloads":true,"language":"Python","name":"misc-overlay","forks":0,"description":"Gentoo overlay -- miscellaneous packages","private":false,"created_at":"2009/05/02 07:32:50 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/fixes-overlay","homepage":"http://jnrowe.github.com/fixes-overlay","has_issues":true,"pushed_at":"2011/04/06 10:48:22 -0700","master_branch":"master","fork":false,"size":3636,"has_downloads":false,"language":"Python","name":"fixes-overlay","forks":0,"description":"Small package fixes languishing in the Gentoo BTS","private":false,"created_at":"2009/05/02 07:52:47 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/dotbash","homepage":"","has_issues":true,"pushed_at":"2010/05/02 19:21:40 -0700","fork":false,"size":1148,"has_downloads":true,"name":"dotbash","forks":0,"description":"Shared bash configuration files","private":false,"created_at":"2009/05/08 04:18:15 -0700"},{"watchers":2,"has_wiki":false,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/jnrowe.github.com","homepage":"http://jnrowe.github.com/","has_issues":true,"pushed_at":"2011/06/06 07:10:57 -0700","master_branch":"master","fork":false,"size":6272,"has_downloads":true,"language":"JavaScript","name":"jnrowe.github.com","forks":0,"description":"My user pages repository","private":false,"created_at":"2009/05/14 06:43:16 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/local-bin","homepage":"","has_issues":true,"pushed_at":"2011/02/14 01:52:50 -0800","fork":false,"size":652,"has_downloads":true,"language":"Python","name":"local-bin","forks":0,"description":"Tat from my ~/bin","private":false,"created_at":"2009/05/14 11:09:34 -0700"},{"watchers":2,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/termstyle","homepage":"","has_issues":false,"pushed_at":"2010/09/24 21:10:10 -0700","fork":true,"size":564,"has_downloads":true,"name":"termstyle","forks":1,"description":"a dirt-simple terminal-colour library for python","private":false,"created_at":"2009/05/24 00:05:46 -0700"},{"watchers":659,"has_wiki":false,"owner":"tweepy","open_issues":48,"url":"https://github.com/tweepy/tweepy","homepage":"http://tweepy.github.com/","organization":"tweepy","has_issues":true,"pushed_at":"2011/05/25 22:50:37 -0700","fork":false,"size":933,"has_downloads":true,"language":"Python","name":"tweepy","forks":117,"description":"A Python library for access the Twitter API","private":false,"created_at":"2009/07/05 21:15:34 -0700"},{"watchers":35,"has_wiki":true,"owner":"ciaranm","open_issues":0,"url":"https://github.com/ciaranm/inkpot","homepage":"","has_issues":true,"pushed_at":"2009/11/27 15:42:40 -0800","fork":false,"size":124,"has_downloads":true,"language":"VimL","name":"inkpot","forks":3,"description":"Inkpot 88/256 Colour Scheme for Vim","private":false,"created_at":"2009/07/06 09:24:19 -0700"},{"watchers":21,"has_wiki":true,"owner":"ciaranm","open_issues":0,"url":"https://github.com/ciaranm/detectindent","homepage":"","has_issues":true,"pushed_at":"2011/05/23 07:50:37 -0700","fork":false,"size":136,"has_downloads":true,"language":"VimL","name":"detectindent","forks":4,"description":"Vim script for automatically detecting indent settings","private":false,"created_at":"2009/07/09 07:13:01 -0700"},{"watchers":12,"has_wiki":true,"owner":"ciaranm","open_issues":1,"url":"https://github.com/ciaranm/securemodelines","homepage":"","has_issues":true,"pushed_at":"2011/02/06 04:47:00 -0800","fork":false,"size":104,"has_downloads":true,"language":"VimL","name":"securemodelines","forks":4,"description":"A secure alternative to Vim modelines","private":false,"created_at":"2009/07/09 07:18:16 -0700"},{"watchers":190,"has_wiki":true,"owner":"scrooloose","open_issues":12,"url":"https://github.com/scrooloose/syntastic","homepage":"","has_issues":true,"pushed_at":"2011/06/02 13:26:53 -0700","fork":false,"size":120,"has_downloads":true,"language":"VimL","name":"syntastic","forks":42,"description":"Syntax checking hacks for vim","private":false,"created_at":"2009/07/10 21:05:54 -0700"},{"watchers":8,"has_wiki":false,"owner":"flother","open_issues":0,"url":"https://github.com/flother/participationgraphs","homepage":"http://www.flother.com/blog/2009/django-github-sparklines/","has_issues":true,"pushed_at":"2010/09/25 03:57:52 -0700","fork":false,"size":628,"has_downloads":false,"language":"Python","name":"participationgraphs","forks":1,"description":"Django app with a template tag to allow you to include sparklines of the 52-week commit history for a project on Github","private":false,"created_at":"2009/07/15 05:07:51 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/readyset","homepage":"http://readyset.tigris.org/","has_issues":true,"pushed_at":"2011/03/04 18:49:12 -0800","fork":false,"size":3216,"has_downloads":true,"language":"JavaScript","name":"readyset","forks":1,"description":"Ready-to-use Software Engineering Templates","private":false,"created_at":"2009/08/16 19:30:50 -0700"},{"watchers":35,"has_wiki":true,"owner":"spiiph","open_issues":9,"url":"https://github.com/spiiph/vim-space","homepage":"","has_issues":true,"pushed_at":"2010/04/13 07:32:09 -0700","fork":false,"size":572,"has_downloads":true,"language":"VimL","name":"vim-space","forks":7,"description":"space.vim - Smart Space key for Vim","private":false,"created_at":"2009/08/17 05:27:00 -0700"},{"watchers":151,"has_wiki":true,"owner":"sixapart","open_issues":11,"url":"https://github.com/sixapart/remoteobjects","homepage":"http://sixapart.github.com/remoteobjects/","organization":"sixapart","has_issues":true,"pushed_at":"2011/04/19 09:58:32 -0700","fork":false,"size":336,"has_downloads":true,"language":"Python","name":"remoteobjects","forks":12,"description":"An object RESTational model","private":false,"created_at":"2009/08/18 11:26:38 -0700"},{"watchers":3,"has_wiki":true,"owner":"JNRowe","open_issues":5,"url":"https://github.com/JNRowe/cupage","homepage":"http://jnrowe.github.com/cupage","has_issues":true,"pushed_at":"2011/05/24 23:07:45 -0700","fork":false,"size":4948,"has_downloads":true,"language":"Python","name":"cupage","forks":1,"description":"A tool to check for updates on web pages","private":false,"created_at":"2009/09/17 21:03:02 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/pages_layouts","homepage":"","has_issues":true,"pushed_at":"2011/02/28 05:02:24 -0800","fork":false,"size":1948,"has_downloads":true,"name":"pages_layouts","forks":1,"description":"Shared layouts submodule for jekyll","private":false,"created_at":"2009/09/24 18:42:48 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":2,"url":"https://github.com/JNRowe/bwatch","homepage":"http://jnrowe.github.com/bwatch/","has_issues":true,"pushed_at":"2011/04/06 10:56:17 -0700","fork":false,"size":2248,"has_downloads":true,"language":"Python","name":"bwatch","forks":1,"description":"Simple bandwidth watching tool","private":false,"created_at":"2009/09/26 10:13:56 -0700"},{"watchers":1205,"has_wiki":false,"owner":"tpope","open_issues":17,"url":"https://github.com/tpope/vim-fugitive","homepage":"http://www.vim.org/scripts/script.php?script_id=2975","has_issues":true,"pushed_at":"2011/06/02 18:40:54 -0700","fork":false,"size":176,"has_downloads":false,"language":"VimL","name":"vim-fugitive","forks":32,"description":"fugitive.vim: a Git wrapper so awesome, it should be illegal","private":false,"created_at":"2009/10/08 18:09:49 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":1,"url":"https://github.com/JNRowe/bleeter","homepage":"http://jnrowe.github.com/bleeter/","has_issues":true,"pushed_at":"2011/05/15 08:07:47 -0700","fork":false,"size":3496,"has_downloads":true,"language":"Python","name":"bleeter","forks":1,"description":"Nasty little twitter client","private":false,"created_at":"2009/10/14 22:19:25 -0700"},{"watchers":1,"has_wiki":false,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/oh-my-zsh","homepage":"","has_issues":true,"pushed_at":"2011/05/26 02:55:49 -0700","master_branch":"master","fork":true,"size":416,"has_downloads":false,"language":"Shell","name":"oh-my-zsh","forks":1,"description":"A community-driven framework for managing your zsh configuration.","private":false,"created_at":"2009/10/28 13:13:46 -0700"},{"watchers":3,"has_wiki":true,"owner":"JNRowe","open_issues":2,"url":"https://github.com/JNRowe/vim-configs","homepage":"http://jnrowe.github.com/vim-configs","has_issues":true,"pushed_at":"2011/05/30 08:42:41 -0700","fork":false,"size":3616,"has_downloads":true,"language":"VimL","name":"vim-configs","forks":1,"description":"Personal vim configs","private":false,"created_at":"2009/11/12 06:10:53 -0800"},{"watchers":3,"has_wiki":true,"owner":"baruch","open_issues":0,"url":"https://github.com/baruch/notmuch-gtk","homepage":"http://baruch.github.com/notmuch-gtk","has_issues":true,"pushed_at":"2009/11/28 15:42:12 -0800","fork":false,"size":1638,"has_downloads":true,"name":"notmuch-gtk","forks":1,"description":"A Gtk+ interface to the notmuch mail client, not maintained anymore, I switched to gmail instead.","private":false,"created_at":"2009/11/26 07:59:04 -0800"},{"watchers":10,"has_wiki":true,"owner":"c9s","open_issues":2,"url":"https://github.com/c9s/gsession.vim","has_issues":true,"pushed_at":"2010/12/10 00:52:20 -0800","fork":false,"size":144,"has_downloads":true,"language":"VimL","name":"gsession.vim","forks":4,"description":"gsession.vim saves your session files into the same directory (~/.vim/session/) by default. and auto-detect your session file to load session file when you are opening vim editor without arguments.","private":false,"created_at":"2009/12/07 06:31:08 -0800"},{"watchers":565,"has_wiki":true,"owner":"tpope","open_issues":6,"url":"https://github.com/tpope/vim-pathogen","homepage":"http://www.vim.org/scripts/script.php?script_id=2332","has_issues":true,"pushed_at":"2011/05/13 20:58:53 -0700","fork":false,"size":256,"has_downloads":false,"language":"VimL","name":"vim-pathogen","forks":24,"description":"pathogen.vim: manage your runtimepath","private":false,"created_at":"2009/12/13 12:59:18 -0800"},{"watchers":4,"has_wiki":true,"owner":"godlygeek","open_issues":0,"url":"https://github.com/godlygeek/colorchart","homepage":"","has_issues":true,"pushed_at":"2010/09/25 18:11:09 -0700","fork":false,"size":480,"has_downloads":true,"language":"VimL","name":"colorchart","forks":1,"description":"Provides an interactive color chart from examining terminal color palettes in vim","private":false,"created_at":"2009/12/21 00:35:24 -0800"},{"watchers":88,"has_wiki":true,"owner":"tpope","open_issues":2,"url":"https://github.com/tpope/vim-ragtag","homepage":"http://www.vim.org/scripts/script.php?script_id=1896","has_issues":true,"pushed_at":"2010/09/26 08:43:54 -0700","fork":false,"size":736,"has_downloads":true,"language":"VimL","name":"vim-ragtag","forks":13,"description":"ragtag.vim: ghetto HTML/XML mappings (formerly allml.vim)","private":false,"created_at":"2010/01/17 17:04:48 -0800"},{"watchers":2050,"has_wiki":true,"owner":"nvie","open_issues":47,"url":"https://github.com/nvie/gitflow","homepage":"http://nvie.com/posts/a-successful-git-branching-model/","has_issues":true,"pushed_at":"2011/05/23 04:02:34 -0700","integrate_branch":"develop","master_branch":"develop","fork":false,"size":5290,"has_downloads":true,"language":"Shell","name":"gitflow","forks":129,"description":"Git extensions to provide high-level repository operations for Vincent Driessen's branching model.","private":false,"created_at":"2010/01/20 15:14:12 -0800"},{"watchers":3,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/surfraw","homepage":"http://surfraw.alioth.debian.org/","has_issues":true,"pushed_at":"2011/06/01 01:36:06 -0700","fork":false,"size":4716,"has_downloads":true,"language":"PHP","name":"surfraw","forks":1,"description":"Mirror of the upstream git repository","private":false,"created_at":"2010/01/26 03:49:55 -0800"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":1,"url":"https://github.com/JNRowe/blanco","homepage":"http://jnrowe.github.com/blanco","has_issues":true,"pushed_at":"2011/04/06 10:37:48 -0700","fork":false,"size":4200,"has_downloads":true,"language":"Python","name":"blanco","forks":1,"description":"Hey, remember me?","private":false,"created_at":"2010/01/31 13:04:51 -0800"},{"watchers":144,"has_wiki":true,"owner":"benoitc","open_issues":5,"url":"https://github.com/benoitc/restkit","homepage":"http://benoitc.github.com/restkit","has_issues":true,"pushed_at":"2011/05/30 02:02:01 -0700","fork":false,"size":2584,"has_downloads":true,"language":"Python","name":"restkit","forks":11,"description":"an HTTP resource kit for Python","private":false,"created_at":"2010/02/04 05:21:24 -0800"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/vim-jnrowe","homepage":"http://jnrowe.github.com/vim-jnrowe/","has_issues":true,"pushed_at":"2011/04/14 04:05:52 -0700","fork":false,"size":936,"has_downloads":false,"language":"VimL","name":"vim-jnrowe","forks":1,"description":"My colorscheme, decoupled from my vim-configs repo for others ;)","private":false,"created_at":"2010/02/11 17:12:11 -0800"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/emacs-configs","homepage":"","has_issues":true,"pushed_at":"2011/06/01 10:27:57 -0700","fork":false,"size":1604,"has_downloads":true,"language":"Emacs Lisp","name":"emacs-configs","forks":1,"description":"Personal emacs configs","private":false,"created_at":"2010/02/15 12:19:22 -0800"},{"watchers":19,"has_wiki":true,"owner":"rc0","open_issues":1,"url":"https://github.com/rc0/mairix","homepage":"http://www.rc0.org.uk/mairix","has_issues":true,"pushed_at":"2011/02/09 16:31:13 -0800","fork":false,"size":200,"has_downloads":true,"language":"C","name":"mairix","forks":6,"description":"mairix is a program for indexing and searching email messages stored in Maildir, MH or mbox folders","private":false,"created_at":"2010/03/05 14:34:27 -0800"},{"watchers":3,"has_wiki":true,"owner":"rc0","open_issues":0,"url":"https://github.com/rc0/spill","homepage":"http://www.rc0.org.uk/spill","has_issues":true,"pushed_at":"2011/05/17 15:52:40 -0700","fork":false,"size":252,"has_downloads":true,"language":"C","name":"spill","forks":1,"description":"spill is a program for creating set of symbolic links from one directory hierarchy which point to corresponding filenames in a separate directory hierarchy.","private":false,"created_at":"2010/03/06 13:28:55 -0800"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/tweepy","homepage":"http://joshthecoder.github.com/tweepy","has_issues":true,"pushed_at":"2010/04/02 19:09:52 -0700","fork":true,"size":536,"has_downloads":true,"name":"tweepy","forks":1,"description":"A python library for the Twitter API. OAuth, python 3, complete coverage, streaming API","private":false,"created_at":"2010/03/31 14:57:29 -0700"},{"watchers":1,"has_wiki":false,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/snipmate.vim","homepage":"www.vim.org/scripts/script.php?script_id=2540","has_issues":false,"pushed_at":"2011/01/27 03:16:30 -0800","fork":true,"size":248,"has_downloads":false,"language":"VimL","name":"snipmate.vim","forks":1,"description":"snipMate.vim aims to be a concise vim script that implements some of TextMate's snippets features in Vim. ","private":false,"created_at":"2010/04/05 20:56:06 -0700"},{"watchers":11,"has_wiki":true,"owner":"zacharyvoase","open_issues":2,"url":"https://github.com/zacharyvoase/urlobject","homepage":"","has_issues":true,"pushed_at":"2011/06/01 04:53:17 -0700","fork":false,"size":808,"has_downloads":true,"language":"Python","name":"urlobject","forks":1,"description":"Python library for manipulating URLs (and some URIs) in a more natural way.","private":false,"created_at":"2010/04/08 06:44:42 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/winwrangler","homepage":"http://jnrowe.github.com/2010/04/04/FtO-winwrangler_tiling_for_the_masses.html","has_issues":true,"pushed_at":"2010/05/05 00:55:01 -0700","fork":false,"size":276,"has_downloads":true,"name":"winwrangler","forks":1,"description":"Mirror of the upstream failpad source, converted for Matt","private":false,"created_at":"2010/05/05 00:54:23 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/reverend","homepage":"http://divmod.org/trac/wiki/DivmodReverend","has_issues":true,"pushed_at":"2010/05/06 11:10:51 -0700","fork":false,"size":420,"has_downloads":true,"name":"reverend","forks":1,"description":"Reverend - Simple Bayesian classifier","private":false,"created_at":"2010/05/06 10:58:58 -0700"},{"watchers":4,"has_wiki":false,"owner":"andrewgee","open_issues":0,"url":"https://github.com/andrewgee/gpxviewer","homepage":"http://andrewgee.org/blog/projects/gpxviewer","has_issues":false,"pushed_at":"2011/06/06 06:29:23 -0700","fork":false,"size":1044,"has_downloads":true,"language":"Python","name":"gpxviewer","forks":4,"description":"GPXViewer GPS trace viewer","private":false,"created_at":"2010/05/16 02:56:55 -0700"},{"watchers":4,"has_wiki":true,"owner":"c9s","open_issues":0,"url":"https://github.com/c9s/fontselector.vim","has_issues":true,"pushed_at":"2010/10/02 05:46:45 -0700","fork":false,"size":248,"has_downloads":true,"language":"VimL","name":"fontselector.vim","forks":1,"description":"font select plugin for gvim.","private":false,"created_at":"2010/08/06 00:40:51 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/github-cli","homepage":"http://packages.python.org/github-cli","has_issues":false,"pushed_at":"2010/11/02 10:42:20 -0700","fork":true,"size":916,"has_downloads":true,"name":"github-cli","forks":0,"description":"A command-line interface to the GitHub Issues API v2.","private":false,"created_at":"2010/09/15 08:21:44 -0700"},{"watchers":151,"has_wiki":false,"owner":"sjl","open_issues":0,"url":"https://github.com/sjl/gundo.vim","homepage":"http://sjl.bitbucket.org/gundo.vim/","has_issues":false,"pushed_at":"2011/05/27 07:59:39 -0700","fork":false,"size":480,"has_downloads":true,"language":"VimL","name":"gundo.vim","forks":18,"description":"A git mirror of gundo.vim","private":false,"created_at":"2010/10/09 09:31:25 -0700"},{"watchers":38,"has_wiki":true,"owner":"ehamberg","open_issues":0,"url":"https://github.com/ehamberg/vim-cute-python","homepage":"","has_issues":true,"pushed_at":"2011/05/27 01:43:48 -0700","fork":false,"size":120,"has_downloads":true,"language":"VimL","name":"vim-cute-python","forks":9,"description":"Unicode goodness for Python code by using vim's “conceal” feature","private":false,"created_at":"2010/10/19 13:23:10 -0700"},{"watchers":24,"has_wiki":true,"owner":"caelum","open_issues":1,"url":"https://github.com/caelum/restfulie-py","homepage":"http://github.com/caelum/restfulie-py","organization":"caelum","has_issues":true,"pushed_at":"2011/05/29 17:47:58 -0700","fork":false,"size":134,"has_downloads":true,"language":"Python","name":"restfulie-py","forks":6,"description":"Python port of Restfulie","private":false,"created_at":"2010/10/25 04:23:23 -0700"},{"watchers":3,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/python-github2","homepage":"","has_issues":false,"pushed_at":"2011/06/06 16:14:48 -0700","fork":true,"size":156,"has_downloads":true,"language":"Python","name":"python-github2","forks":0,"description":"github client in python, with issues support.","private":false,"created_at":"2010/10/31 01:03:09 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":6,"url":"https://github.com/JNRowe/gh_bugs","homepage":"","has_issues":true,"pushed_at":"2011/05/31 13:08:10 -0700","fork":false,"size":2564,"has_downloads":true,"language":"Python","name":"gh_bugs","forks":1,"description":"Simple client for GitHub issues","private":false,"created_at":"2010/10/31 09:27:05 -0700"},{"watchers":215,"has_wiki":true,"owner":"hsitz","open_issues":8,"url":"https://github.com/hsitz/VimOrganizer","homepage":"http://vimeo.com/17182850 ","has_issues":true,"pushed_at":"2011/04/27 20:03:17 -0700","fork":false,"size":540,"has_downloads":true,"language":"VimL","name":"VimOrganizer","forks":15,"description":"-- partial clone of Emacs' Org-mode -- please use development branch for newest changes ","private":false,"created_at":"2010/11/09 13:33:13 -0800"},{"watchers":26,"has_wiki":true,"owner":"j4mie","open_issues":0,"url":"https://github.com/j4mie/micromodels","homepage":"","has_issues":true,"pushed_at":"2011/02/24 00:46:32 -0800","integrate_branch":"develop","fork":false,"size":336,"has_downloads":true,"language":"Python","name":"micromodels","forks":6,"description":"Declarative dictionary-based model classes for Python","private":false,"created_at":"2010/12/08 16:21:15 -0800"},{"watchers":2,"has_wiki":true,"owner":"catch22","open_issues":0,"url":"https://github.com/catch22/pw","homepage":"","has_issues":true,"pushed_at":"2011/05/17 12:21:16 -0700","fork":false,"size":202,"has_downloads":true,"language":"Python","name":"pw","forks":2,"description":"Grep GPG-encrypted YAML password safes.","private":false,"created_at":"2010/12/18 05:32:17 -0800"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/snipmate-snippets","homepage":"","has_issues":false,"pushed_at":"2011/05/17 06:22:45 -0700","fork":true,"size":956,"has_downloads":true,"language":"VimL","name":"snipmate-snippets","forks":0,"description":"A collection of snippets for snipmate (vim plugin) with a focus on bash, php, html and javascript","private":false,"created_at":"2011/01/27 03:05:32 -0800"},{"watchers":406,"has_wiki":false,"owner":"github","open_issues":0,"url":"https://github.com/github/dmca","homepage":"http://help.github.com/dmca","organization":"github","has_issues":false,"pushed_at":"2011/06/07 16:24:20 -0700","fork":false,"size":148,"has_downloads":true,"name":"dmca","forks":8,"description":"DMCA takedowns GitHub has received","private":false,"created_at":"2011/01/28 15:58:38 -0800"},{"watchers":3,"has_wiki":true,"owner":"passy","open_issues":0,"url":"https://github.com/passy/nose-lettuce","homepage":"","has_issues":true,"pushed_at":"2011/01/31 13:18:55 -0800","fork":false,"size":248,"has_downloads":true,"language":"Python","name":"nose-lettuce","forks":1,"description":"A probably bad idea of how to run lettuce from nose","private":false,"created_at":"2011/01/31 13:04:03 -0800"},{"watchers":6,"has_wiki":true,"owner":"caffeinehit","open_issues":0,"url":"https://github.com/caffeinehit/hammertime","homepage":"http://github.com/caffeinehit/hammertime","organization":"caffeinehit","has_issues":true,"pushed_at":"2011/02/03 02:40:25 -0800","fork":false,"size":140,"has_downloads":true,"language":"Python","name":"hammertime","forks":2,"description":"Time tracking with git","private":false,"created_at":"2011/02/02 02:18:33 -0800"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/hammertime","homepage":"http://github.com/caffeinehit/hammertime","has_issues":false,"pushed_at":"2011/02/02 09:54:18 -0800","fork":true,"size":720,"has_downloads":true,"language":"Python","name":"hammertime","forks":0,"description":"Time tracking with git","private":false,"created_at":"2011/02/02 09:49:21 -0800"},{"watchers":330,"has_wiki":false,"owner":"kennethreitz","open_issues":10,"url":"https://github.com/kennethreitz/requests","homepage":"http://python-requests.org","has_issues":true,"pushed_at":"2011/06/05 18:22:38 -0700","master_branch":"develop","fork":false,"size":164,"has_downloads":true,"language":"Python","name":"requests","forks":24,"description":"Python HTTP Requests for Humans.","private":false,"created_at":"2011/02/13 10:38:17 -0800"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/versionah","homepage":"http://jnrowe.github.com/versionah/","has_issues":true,"pushed_at":"2011/05/31 10:24:35 -0700","fork":false,"size":4404,"has_downloads":true,"language":"Python","name":"versionah","forks":1,"description":"Simple version number mangler","private":false,"created_at":"2011/02/15 08:51:56 -0800"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":8,"url":"https://github.com/JNRowe/issues-test","homepage":"","has_issues":true,"fork":false,"size":0,"has_downloads":true,"name":"issues-test","forks":1,"description":"Repo for testing gh-bugs","private":false,"created_at":"2011/02/22 13:00:23 -0800"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/pelican","homepage":"http://docs.notmyidea.org/alexis/pelican/","has_issues":false,"pushed_at":"2011/04/04 21:22:46 -0700","fork":true,"size":3916,"has_downloads":true,"language":"Python","name":"pelican","forks":0,"description":"Static blog generator in python, using ReST syntax","private":false,"created_at":"2011/02/23 21:20:07 -0800"},{"watchers":19,"has_wiki":true,"owner":"dcramer","open_issues":2,"url":"https://github.com/dcramer/decruft","homepage":"http://code.google.com/p/decruft/","has_issues":true,"pushed_at":"2011/05/18 13:19:39 -0700","fork":false,"size":508,"has_downloads":true,"language":"Python","name":"decruft","forks":5,"description":"python-readability, but faster (mirror-ish)","private":false,"created_at":"2011/02/28 18:07:04 -0800"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/pw","homepage":"","has_issues":false,"pushed_at":"2011/04/04 23:44:42 -0700","fork":true,"size":132,"has_downloads":true,"language":"Python","name":"pw","forks":0,"description":"Grep GPG-encrypted YAML password safes.","private":false,"created_at":"2011/04/04 23:37:38 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/shell-doctest","homepage":"http://code.google.com/p/shell-doctest/","has_issues":true,"pushed_at":"2011/04/05 05:32:44 -0700","fork":false,"size":128,"has_downloads":true,"language":"Python","name":"shell-doctest","forks":1,"description":"shelldoctest is Doctest/UnitTest for shell (mirror of Google Code project)","private":false,"created_at":"2011/04/05 05:32:07 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/blog","homepage":"http://jnrowe.github.com/blog","has_issues":true,"pushed_at":"2011/04/05 09:22:26 -0700","fork":false,"size":1152,"has_downloads":true,"name":"blog","forks":1,"description":"Old jnrowe.github.com content that *may* be resurrected.","private":false,"created_at":"2011/04/05 09:21:16 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/sphinx-jnrowe","homepage":"","has_issues":true,"pushed_at":"2011/05/13 12:27:22 -0700","fork":false,"size":644,"has_downloads":true,"name":"sphinx-jnrowe","forks":1,"description":"My sphinx theme","private":false,"created_at":"2011/04/06 07:35:40 -0700"},{"watchers":15,"has_wiki":true,"owner":"Nic0","open_issues":3,"url":"https://github.com/Nic0/tyrs","homepage":"http://tyrs.nicosphere.net","has_issues":true,"pushed_at":"2011/06/07 19:41:57 -0700","fork":false,"size":436,"has_downloads":true,"language":"Python","name":"tyrs","forks":5,"description":"Twitter and Identica client using curses","private":false,"created_at":"2011/04/28 17:44:58 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/rdial","homepage":"","has_issues":true,"pushed_at":"2011/05/27 00:50:48 -0700","fork":false,"size":272,"has_downloads":true,"language":"Python","name":"rdial","forks":1,"description":"Simple time tracking for simple people","private":false,"created_at":"2011/05/09 06:04:35 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/vim-cute-python","homepage":"","has_issues":false,"pushed_at":"2011/05/30 08:39:21 -0700","fork":true,"size":180,"has_downloads":true,"language":"VimL","name":"vim-cute-python","forks":0,"description":"Unicode goodness for Python code by using vim's new “conceal” feature","private":false,"created_at":"2011/05/22 23:21:28 -0700"},{"watchers":1,"has_wiki":false,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/develop.github.com","homepage":"http://develop.github.com","has_issues":false,"pushed_at":"2011/05/23 03:36:51 -0700","master_branch":"gh-pages","fork":true,"size":1584,"has_downloads":false,"language":"JavaScript","name":"develop.github.com","forks":0,"description":"API Documentation for GitHub","private":false,"created_at":"2011/05/23 03:32:46 -0700"},{"watchers":1,"has_wiki":false,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/requests","homepage":"http://python-requests.org","has_issues":false,"pushed_at":"2011/05/27 00:17:44 -0700","master_branch":"develop","fork":true,"size":2648,"has_downloads":true,"language":"Python","name":"requests","forks":0,"description":"Python HTTP Requests for Humans.","private":false,"created_at":"2011/05/27 00:16:23 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/restfulie-py","homepage":"http://github.com/caelum/restfulie-py","has_issues":false,"pushed_at":"2011/05/28 22:05:55 -0700","fork":true,"size":1794,"has_downloads":true,"language":"Python","name":"restfulie-py","forks":0,"description":"Python port of Restfulie","private":false,"created_at":"2011/05/28 22:04:51 -0700"},{"watchers":1,"has_wiki":true,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/tyrs","homepage":"http://tyrs.nicosphere.net","has_issues":false,"pushed_at":"2011/06/03 06:45:50 -0700","fork":true,"size":132,"has_downloads":true,"language":"Python","name":"tyrs","forks":0,"description":"twitter curses client","private":false,"created_at":"2011/06/03 02:42:16 -0700"},{"watchers":1,"has_wiki":false,"owner":"JNRowe","open_issues":0,"url":"https://github.com/JNRowe/gpxviewer","homepage":"http://andrewgee.org/blog/projects/gpxviewer","has_issues":false,"pushed_at":"2011/06/06 06:23:32 -0700","fork":true,"size":1040,"has_downloads":true,"language":"Python","name":"gpxviewer","forks":0,"description":"GPXViewer GPS trace viewer","private":false,"created_at":"2011/06/06 06:21:54 -0700"}]} \ No newline at end of file +{"repositories":[{"has_downloads":true,"url":"https://github.com/scrooloose/nerdtree","forks":77,"description":"hax0r vim script to give you a tree explorer","has_wiki":true,"fork":false,"open_issues":53,"homepage":"","size":396,"private":false,"has_issues":true,"pushed_at":"2011/08/05 07:49:20 -0700","name":"nerdtree","owner":"scrooloose","language":"VimL","watchers":1019,"created_at":"2008/03/10 00:34:08 -0700"},{"has_downloads":true,"url":"https://github.com/scrooloose/nerdcommenter","forks":42,"description":"Vim plugin for intensely orgasmic commenting","has_wiki":true,"fork":false,"open_issues":7,"homepage":"","size":404,"private":false,"has_issues":true,"pushed_at":"2011/07/21 17:36:40 -0700","name":"nerdcommenter","owner":"scrooloose","language":"VimL","watchers":368,"created_at":"2008/03/10 01:19:15 -0700"},{"has_downloads":true,"url":"https://github.com/timcharper/textile.vim","forks":11,"description":"Textile for VIM","has_wiki":true,"fork":false,"open_issues":3,"homepage":"http://www.vim.org/scripts/script.php?script_id=2305","size":332,"private":false,"has_issues":true,"pushed_at":"2011/07/29 00:56:52 -0700","name":"textile.vim","owner":"timcharper","language":"VimL","watchers":26,"created_at":"2008/07/21 03:55:46 -0700"},{"has_downloads":true,"url":"https://github.com/tpope/vim-surround","forks":36,"description":"surround.vim: quoting/parenthesizing made simple","has_wiki":false,"fork":false,"open_issues":9,"homepage":"http://www.vim.org/scripts/script.php?script_id=1697","size":188,"private":false,"has_issues":true,"pushed_at":"2011/07/16 07:10:23 -0700","name":"vim-surround","owner":"tpope","language":"VimL","watchers":406,"created_at":"2008/09/10 18:00:16 -0700"},{"has_downloads":false,"url":"https://github.com/tpope/vim-speeddating","forks":6,"description":"speeddating.vim: use CTRL-A/CTRL-X to increment dates, times, and more","has_wiki":false,"fork":false,"open_issues":0,"homepage":"http://www.vim.org/scripts/script.php?script_id=2120","size":148,"private":false,"has_issues":true,"pushed_at":"2010/12/28 20:46:52 -0800","name":"vim-speeddating","owner":"tpope","language":"VimL","watchers":51,"created_at":"2008/09/10 18:07:06 -0700"},{"has_downloads":false,"url":"https://github.com/sjbach/lusty","forks":17,"description":"LustyExplorer / LustyJuggler for Vim","has_wiki":true,"fork":false,"open_issues":10,"homepage":"http://www.vim.org/scripts/script.php?script_id=1890","size":1584,"private":false,"has_issues":true,"pushed_at":"2011/08/15 05:20:36 -0700","name":"lusty","owner":"sjbach","language":"VimL","watchers":94,"created_at":"2008/09/14 19:54:02 -0700"},{"has_downloads":false,"organization":"github","url":"https://github.com/github/develop.github.com","forks":49,"description":"API Documentation for GitHub","has_wiki":false,"fork":false,"open_issues":38,"homepage":"http://develop.github.com","size":292,"private":false,"has_issues":true,"pushed_at":"2011/08/09 16:01:16 -0700","name":"develop.github.com","owner":"github","language":"JavaScript","master_branch":"gh-pages","watchers":147,"created_at":"2009/02/17 15:51:23 -0800"},{"has_downloads":true,"url":"https://github.com/godlygeek/windowlayout","forks":0,"description":"A vim library for saving and restoring window layouts, plus demo plugins","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":296,"private":false,"has_issues":true,"pushed_at":"2009/02/26 08:46:15 -0800","name":"windowlayout","owner":"godlygeek","language":"VimL","watchers":3,"created_at":"2009/02/25 22:10:21 -0800"},{"has_downloads":true,"url":"https://github.com/godlygeek/tabular","forks":9,"description":"Vim script for text filtering and alignment","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":616,"private":false,"has_issues":true,"pushed_at":"2011/04/01 18:13:35 -0700","name":"tabular","owner":"godlygeek","language":"VimL","watchers":172,"created_at":"2009/03/02 22:19:16 -0800"},{"has_downloads":true,"url":"https://github.com/decklin/mnemosyne","forks":0,"description":"Static Python/Kid weblog generator with Maildir store","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://www.red-bean.com/decklin/mnemosyne/","size":344,"private":false,"has_issues":true,"pushed_at":"2009/03/10 10:25:52 -0700","name":"mnemosyne","owner":"decklin","watchers":2,"created_at":"2009/03/10 10:19:38 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/bfm","forks":3,"description":"This program is a dockapp-style CPU, memory, swap and load average monitor.","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://www.jnrowe.ukfsn.org/projects/bfm.html","size":232,"private":false,"has_issues":true,"pushed_at":"2011/05/08 23:35:07 -0700","name":"bfm","owner":"JNRowe","integrate_branch":"iratqq","language":"C","watchers":3,"created_at":"2009/04/05 18:46:34 -0700"},{"has_downloads":true,"url":"https://github.com/ask/python-github2","forks":54,"description":"github client in python, with issues support.","has_wiki":true,"fork":false,"open_issues":5,"homepage":"http://packages.python.org/github2","size":456,"private":false,"has_issues":true,"pushed_at":"2011/07/29 19:04:58 -0700","name":"python-github2","owner":"ask","language":"Python","watchers":149,"created_at":"2009/04/18 08:31:12 -0700"},{"has_downloads":true,"url":"https://github.com/jsmits/github-cli","forks":13,"description":"A command-line interface to the GitHub Issues API v2.","has_wiki":true,"fork":false,"open_issues":6,"homepage":"http://packages.python.org/github-cli","size":172,"private":false,"has_issues":true,"pushed_at":"2011/06/24 05:32:16 -0700","name":"github-cli","owner":"jsmits","language":"Python","watchers":115,"created_at":"2009/04/19 02:05:27 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/upoints","forks":0,"description":"upoints is a collection of GPL v3 licensed modules for working with points on Earth, or other near spherical objects.","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/upoints/","size":4640,"private":false,"has_issues":true,"pushed_at":"2011/06/23 09:43:42 -0700","name":"upoints","owner":"JNRowe","language":"Python","watchers":2,"created_at":"2009/04/23 04:06:46 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/pyisbn","forks":2,"description":"A Python module for working with 10- and 13-digit ISBNs","has_wiki":true,"fork":false,"open_issues":1,"homepage":"http://packages.python.org/pyisbn/","size":132,"private":false,"has_issues":true,"pushed_at":"2011/06/06 07:04:57 -0700","name":"pyisbn","owner":"JNRowe","language":"Python","watchers":13,"created_at":"2009/04/23 04:07:25 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/pytemplate","forks":0,"description":"Package template for Python, with distutils setup","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":2252,"private":false,"has_issues":true,"pushed_at":"2011/05/09 01:49:16 -0700","name":"pytemplate","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2009/04/23 04:09:02 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/misc-overlay","forks":0,"description":"Gentoo overlay -- miscellaneous packages","has_wiki":true,"fork":false,"open_issues":13,"homepage":"http://jnrowe.github.com/misc-overlay/","size":7777,"private":false,"has_issues":true,"pushed_at":"2011/08/11 11:46:23 -0700","name":"misc-overlay","owner":"JNRowe","language":"Python","watchers":5,"created_at":"2009/05/02 07:32:50 -0700"},{"has_downloads":false,"url":"https://github.com/JNRowe/fixes-overlay","forks":0,"description":"Small package fixes languishing in the Gentoo BTS","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/fixes-overlay","size":3756,"private":false,"has_issues":true,"pushed_at":"2011/06/23 09:59:08 -0700","name":"fixes-overlay","owner":"JNRowe","language":"Python","master_branch":"master","watchers":1,"created_at":"2009/05/02 07:52:47 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/dotbash","forks":0,"description":"Shared bash configuration files","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":1148,"private":false,"has_issues":true,"pushed_at":"2010/05/02 19:21:40 -0700","name":"dotbash","owner":"JNRowe","watchers":1,"created_at":"2009/05/08 04:18:15 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/jnrowe.github.com","forks":0,"description":"My user pages repository","has_wiki":false,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/","size":6636,"private":false,"has_issues":true,"pushed_at":"2011/07/09 11:32:30 -0700","name":"jnrowe.github.com","owner":"JNRowe","language":"JavaScript","master_branch":"master","watchers":2,"created_at":"2009/05/14 06:43:16 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/local-bin","forks":0,"description":"Tat from my ~/bin","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":656,"private":false,"has_issues":true,"pushed_at":"2011/06/20 08:39:36 -0700","name":"local-bin","owner":"JNRowe","language":"Shell","watchers":1,"created_at":"2009/05/14 11:09:34 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/termstyle","forks":1,"description":"a dirt-simple terminal-colour library for python","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":564,"private":false,"has_issues":false,"pushed_at":"2010/09/24 21:10:10 -0700","name":"termstyle","owner":"JNRowe","watchers":2,"created_at":"2009/05/24 00:05:46 -0700"},{"has_downloads":true,"organization":"tweepy","url":"https://github.com/tweepy/tweepy","forks":140,"description":"A Python library for access the Twitter API","has_wiki":false,"fork":false,"open_issues":55,"homepage":"http://tweepy.github.com/","size":933,"private":false,"has_issues":true,"pushed_at":"2011/07/26 12:25:55 -0700","name":"tweepy","owner":"tweepy","language":"Python","watchers":742,"created_at":"2009/07/05 21:15:34 -0700"},{"has_downloads":true,"url":"https://github.com/ciaranm/inkpot","forks":3,"description":"Inkpot 88/256 Colour Scheme for Vim","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":124,"private":false,"has_issues":true,"pushed_at":"2009/11/27 15:42:40 -0800","name":"inkpot","owner":"ciaranm","language":"VimL","watchers":39,"created_at":"2009/07/06 09:24:19 -0700"},{"has_downloads":true,"url":"https://github.com/ciaranm/detectindent","forks":4,"description":"Vim script for automatically detecting indent settings","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":252,"private":false,"has_issues":true,"pushed_at":"2011/06/26 00:04:21 -0700","name":"detectindent","owner":"ciaranm","language":"VimL","watchers":21,"created_at":"2009/07/09 07:13:01 -0700"},{"has_downloads":true,"url":"https://github.com/ciaranm/securemodelines","forks":4,"description":"A secure alternative to Vim modelines","has_wiki":true,"fork":false,"open_issues":1,"homepage":"","size":104,"private":false,"has_issues":true,"pushed_at":"2011/02/06 04:47:00 -0800","name":"securemodelines","owner":"ciaranm","language":"VimL","watchers":16,"created_at":"2009/07/09 07:18:16 -0700"},{"has_downloads":false,"url":"https://github.com/flother/participationgraphs","forks":1,"description":"Django app with a template tag to allow you to include sparklines of the 52-week commit history for a project on Github","has_wiki":false,"fork":false,"open_issues":0,"homepage":"http://www.flother.com/blog/2009/django-github-sparklines/","size":628,"private":false,"has_issues":true,"pushed_at":"2010/09/25 03:57:52 -0700","name":"participationgraphs","owner":"flother","language":"Python","watchers":8,"created_at":"2009/07/15 05:07:51 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/readyset","forks":1,"description":"Ready-to-use Software Engineering Templates","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://readyset.tigris.org/","size":3216,"private":false,"has_issues":true,"pushed_at":"2011/03/04 18:49:12 -0800","name":"readyset","owner":"JNRowe","language":"JavaScript","watchers":1,"created_at":"2009/08/16 19:30:50 -0700"},{"has_downloads":true,"url":"https://github.com/spiiph/vim-space","forks":8,"description":"space.vim - Smart Space key for Vim","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":176,"private":false,"has_issues":true,"pushed_at":"2011/07/28 01:48:09 -0700","name":"vim-space","owner":"spiiph","language":"VimL","watchers":39,"created_at":"2009/08/17 05:27:00 -0700"},{"has_downloads":true,"organization":"saymedia","url":"https://github.com/saymedia/remoteobjects","forks":14,"description":"An object RESTational model","has_wiki":true,"fork":false,"open_issues":11,"homepage":"http://sixapart.github.com/remoteobjects/","size":336,"private":false,"has_issues":true,"pushed_at":"2011/04/19 09:58:32 -0700","name":"remoteobjects","owner":"saymedia","language":"Python","watchers":152,"created_at":"2009/08/18 11:26:38 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/cupage","forks":1,"description":"A tool to check for updates on web pages","has_wiki":true,"fork":false,"open_issues":3,"homepage":"http://jnrowe.github.com/cupage","size":612,"private":false,"has_issues":true,"pushed_at":"2011/07/17 10:23:45 -0700","name":"cupage","owner":"JNRowe","language":"Python","watchers":3,"created_at":"2009/09/17 21:03:02 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/pages_layouts","forks":1,"description":"Shared layouts submodule for jekyll","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":1948,"private":false,"has_issues":true,"pushed_at":"2011/02/28 05:02:24 -0800","name":"pages_layouts","owner":"JNRowe","watchers":1,"created_at":"2009/09/24 18:42:48 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/bwatch","forks":1,"description":"Simple bandwidth watching tool","has_wiki":true,"fork":false,"open_issues":2,"homepage":"http://jnrowe.github.com/bwatch/","size":2328,"private":false,"has_issues":true,"pushed_at":"2011/06/23 11:14:25 -0700","name":"bwatch","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2009/09/26 10:13:56 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/bleeter","forks":1,"description":"Nasty little twitter client","has_wiki":true,"fork":false,"open_issues":1,"homepage":"http://jnrowe.github.com/bleeter/","size":3544,"private":false,"has_issues":true,"pushed_at":"2011/06/23 11:17:05 -0700","name":"bleeter","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2009/10/14 22:19:25 -0700"},{"has_downloads":false,"url":"https://github.com/JNRowe/oh-my-zsh","forks":1,"description":"A community-driven framework for managing your zsh configuration.","has_wiki":false,"fork":true,"open_issues":0,"homepage":"","size":416,"private":false,"has_issues":true,"pushed_at":"2011/05/26 02:55:49 -0700","name":"oh-my-zsh","owner":"JNRowe","language":"Shell","master_branch":"master","watchers":1,"created_at":"2009/10/28 13:13:46 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/vim-configs","forks":1,"description":"Personal vim configs","has_wiki":true,"fork":false,"open_issues":2,"homepage":"http://jnrowe.github.com/vim-configs","size":3756,"private":false,"has_issues":true,"pushed_at":"2011/08/11 11:35:34 -0700","name":"vim-configs","owner":"JNRowe","language":"VimL","watchers":3,"created_at":"2009/11/12 06:10:53 -0800"},{"has_downloads":true,"url":"https://github.com/baruch/notmuch-gtk","forks":1,"description":"A Gtk+ interface to the notmuch mail client, not maintained anymore, I switched to gmail instead.","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://baruch.github.com/notmuch-gtk","size":1638,"private":false,"has_issues":true,"pushed_at":"2009/11/28 15:42:12 -0800","name":"notmuch-gtk","owner":"baruch","watchers":3,"created_at":"2009/11/26 07:59:04 -0800"},{"has_downloads":true,"url":"https://github.com/c9s/gsession.vim","forks":5,"description":"gsession.vim saves your session files into the same directory (~/.vim/session/) by default. and auto-detect your session file to load session file when you are opening vim editor without arguments.","has_wiki":true,"fork":false,"open_issues":2,"size":184,"private":false,"has_issues":true,"pushed_at":"2011/08/15 02:47:50 -0700","name":"gsession.vim","owner":"c9s","language":"Visual Basic","watchers":11,"created_at":"2009/12/07 06:31:08 -0800"},{"has_downloads":false,"url":"https://github.com/tpope/vim-pathogen","forks":27,"description":"pathogen.vim: manage your runtimepath","has_wiki":true,"fork":false,"open_issues":1,"homepage":"http://www.vim.org/scripts/script.php?script_id=2332","size":200,"private":false,"has_issues":true,"pushed_at":"2011/08/13 09:25:10 -0700","name":"vim-pathogen","owner":"tpope","language":"VimL","watchers":690,"created_at":"2009/12/13 12:59:18 -0800"},{"has_downloads":true,"url":"https://github.com/godlygeek/colorchart","forks":1,"description":"Provides an interactive color chart from examining terminal color palettes in vim","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":480,"private":false,"has_issues":true,"pushed_at":"2010/09/25 18:11:09 -0700","name":"colorchart","owner":"godlygeek","language":"VimL","watchers":4,"created_at":"2009/12/21 00:35:24 -0800"},{"has_downloads":true,"url":"https://github.com/tpope/vim-ragtag","forks":16,"description":"ragtag.vim: ghetto HTML/XML mappings (formerly allml.vim)","has_wiki":true,"fork":false,"open_issues":2,"homepage":"http://www.vim.org/scripts/script.php?script_id=1896","size":156,"private":false,"has_issues":true,"pushed_at":"2011/08/04 19:34:07 -0700","name":"vim-ragtag","owner":"tpope","language":"VimL","watchers":94,"created_at":"2010/01/17 17:04:48 -0800"},{"has_downloads":true,"url":"https://github.com/nvie/gitflow","forks":157,"description":"Git extensions to provide high-level repository operations for Vincent Driessen's branching model.","has_wiki":true,"fork":false,"open_issues":54,"homepage":"http://nvie.com/posts/a-successful-git-branching-model/","size":4654,"private":false,"has_issues":true,"pushed_at":"2011/07/27 00:56:18 -0700","name":"gitflow","owner":"nvie","integrate_branch":"develop","language":"Shell","master_branch":"develop","watchers":2422,"created_at":"2010/01/20 15:14:12 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/surfraw","forks":1,"description":"Mirror of the upstream git repository","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://surfraw.alioth.debian.org/","size":4876,"private":false,"has_issues":true,"pushed_at":"2011/08/11 09:34:59 -0700","name":"surfraw","owner":"JNRowe","language":"Shell","watchers":3,"created_at":"2010/01/26 03:49:55 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/blanco","forks":1,"description":"Hey, remember me?","has_wiki":true,"fork":false,"open_issues":1,"homepage":"http://jnrowe.github.com/blanco","size":4296,"private":false,"has_issues":true,"pushed_at":"2011/06/23 11:19:45 -0700","name":"blanco","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2010/01/31 13:04:51 -0800"},{"has_downloads":false,"url":"https://github.com/JNRowe/vim-jnrowe","forks":1,"description":"My colorscheme, decoupled from my vim-configs repo for others ;)","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/vim-jnrowe/","size":1244,"private":false,"has_issues":true,"pushed_at":"2011/06/23 09:25:27 -0700","name":"vim-jnrowe","owner":"JNRowe","language":"VimL","watchers":1,"created_at":"2010/02/11 17:12:11 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/emacs-configs","forks":1,"description":"Personal emacs configs","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":1884,"private":false,"has_issues":true,"pushed_at":"2011/08/11 09:38:11 -0700","name":"emacs-configs","owner":"JNRowe","language":"Emacs Lisp","watchers":1,"created_at":"2010/02/15 12:19:22 -0800"},{"has_downloads":true,"url":"https://github.com/rc0/mairix","forks":6,"description":"mairix is a program for indexing and searching email messages stored in Maildir, MH or mbox folders","has_wiki":true,"fork":false,"open_issues":1,"homepage":"http://www.rc0.org.uk/mairix","size":140,"private":false,"has_issues":true,"pushed_at":"2011/07/29 16:53:31 -0700","name":"mairix","owner":"rc0","language":"C","watchers":21,"created_at":"2010/03/05 14:34:27 -0800"},{"has_downloads":true,"url":"https://github.com/rc0/spill","forks":1,"description":"spill is a program for creating set of symbolic links from one directory hierarchy which point to corresponding filenames in a separate directory hierarchy.","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://www.rc0.org.uk/spill","size":252,"private":false,"has_issues":true,"pushed_at":"2011/05/17 15:52:40 -0700","name":"spill","owner":"rc0","language":"C","watchers":3,"created_at":"2010/03/06 13:28:55 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/tweepy","forks":1,"description":"A python library for the Twitter API. OAuth, python 3, complete coverage, streaming API","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://joshthecoder.github.com/tweepy","size":536,"private":false,"has_issues":true,"pushed_at":"2010/04/02 19:09:52 -0700","name":"tweepy","owner":"JNRowe","watchers":1,"created_at":"2010/03/31 14:57:29 -0700"},{"has_downloads":false,"url":"https://github.com/JNRowe/snipmate.vim","forks":1,"description":"snipMate.vim aims to be a concise vim script that implements some of TextMate's snippets features in Vim. ","has_wiki":false,"fork":true,"open_issues":0,"homepage":"www.vim.org/scripts/script.php?script_id=2540","size":248,"private":false,"has_issues":false,"pushed_at":"2011/01/27 03:16:30 -0800","name":"snipmate.vim","owner":"JNRowe","language":"VimL","watchers":1,"created_at":"2010/04/05 20:56:06 -0700"},{"has_downloads":true,"url":"https://github.com/zacharyvoase/urlobject","forks":3,"description":"Python library for manipulating URLs (and some URIs) in a more natural way.","has_wiki":true,"fork":false,"open_issues":3,"homepage":"","size":808,"private":false,"has_issues":true,"pushed_at":"2011/06/28 01:15:22 -0700","name":"urlobject","owner":"zacharyvoase","language":"Python","watchers":17,"created_at":"2010/04/08 06:44:42 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/winwrangler","forks":1,"description":"Mirror of the upstream failpad source, converted for Matt","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/2010/04/04/FtO-winwrangler_tiling_for_the_masses.html","size":276,"private":false,"has_issues":true,"pushed_at":"2010/05/05 00:55:01 -0700","name":"winwrangler","owner":"JNRowe","watchers":1,"created_at":"2010/05/05 00:54:23 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/reverend","forks":1,"description":"Reverend - Simple Bayesian classifier","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://divmod.org/trac/wiki/DivmodReverend","size":420,"private":false,"has_issues":true,"pushed_at":"2010/05/06 11:10:51 -0700","name":"reverend","owner":"JNRowe","watchers":1,"created_at":"2010/05/06 10:58:58 -0700"},{"has_downloads":true,"url":"https://github.com/andrewgee/gpxviewer","forks":4,"description":"GPXViewer GPS trace viewer","has_wiki":false,"fork":false,"open_issues":0,"homepage":"http://andrewgee.org/blog/projects/gpxviewer","size":1044,"private":false,"has_issues":false,"pushed_at":"2011/06/06 06:29:23 -0700","name":"gpxviewer","owner":"andrewgee","language":"Python","watchers":4,"created_at":"2010/05/16 02:56:55 -0700"},{"has_downloads":true,"url":"https://github.com/c9s/fontselector.vim","forks":1,"description":"font select plugin for gvim.","has_wiki":true,"fork":false,"open_issues":0,"size":248,"private":false,"has_issues":true,"pushed_at":"2010/10/02 05:46:45 -0700","name":"fontselector.vim","owner":"c9s","language":"VimL","watchers":4,"created_at":"2010/08/06 00:40:51 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/github-cli","forks":0,"description":"A command-line interface to the GitHub Issues API v2.","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://packages.python.org/github-cli","size":916,"private":false,"has_issues":false,"pushed_at":"2010/11/02 10:42:20 -0700","name":"github-cli","owner":"JNRowe","watchers":1,"created_at":"2010/09/15 08:21:44 -0700"},{"has_downloads":true,"url":"https://github.com/sjl/gundo.vim","forks":20,"description":"A git mirror of gundo.vim","has_wiki":false,"fork":false,"open_issues":0,"homepage":"http://sjl.bitbucket.org/gundo.vim/","size":464,"private":false,"has_issues":false,"pushed_at":"2011/08/08 14:07:33 -0700","name":"gundo.vim","owner":"sjl","language":"VimL","watchers":166,"created_at":"2010/10/09 09:31:25 -0700"},{"has_downloads":true,"url":"https://github.com/ehamberg/vim-cute-python","forks":9,"description":"Unicode goodness for Python code by using vim's “conceal” feature","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":120,"private":false,"has_issues":true,"pushed_at":"2011/07/10 03:44:07 -0700","name":"vim-cute-python","owner":"ehamberg","language":"VimL","watchers":42,"created_at":"2010/10/19 13:23:10 -0700"},{"has_downloads":true,"organization":"caelum","url":"https://github.com/caelum/restfulie-py","forks":7,"description":"Python port of Restfulie","has_wiki":true,"fork":false,"open_issues":1,"homepage":"http://github.com/caelum/restfulie-py","size":146,"private":false,"has_issues":true,"pushed_at":"2011/07/26 20:10:12 -0700","name":"restfulie-py","owner":"caelum","language":"Python","watchers":27,"created_at":"2010/10/25 04:23:23 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/python-github2","forks":0,"description":"github client in python, with issues support.","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":144,"private":false,"has_issues":false,"pushed_at":"2011/07/12 09:55:46 -0700","name":"python-github2","owner":"JNRowe","language":"Python","watchers":3,"created_at":"2010/10/31 01:03:09 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/hubugs","forks":1,"description":"Simple client for GitHub issues","has_wiki":true,"fork":false,"open_issues":5,"homepage":"http://packages.python.org/hubugs/","size":3356,"private":false,"has_issues":true,"pushed_at":"2011/07/14 11:41:45 -0700","name":"hubugs","owner":"JNRowe","language":"Python","watchers":2,"created_at":"2010/10/31 09:27:05 -0700"},{"has_downloads":true,"url":"https://github.com/hsitz/VimOrganizer","forks":17,"description":"-- partial clone of Emacs' Org-mode -- please use development branch for newest changes ","has_wiki":true,"fork":false,"open_issues":8,"homepage":"http://vimeo.com/17182850 ","size":540,"private":false,"has_issues":true,"pushed_at":"2011/04/27 20:03:17 -0700","name":"VimOrganizer","owner":"hsitz","language":"VimL","watchers":223,"created_at":"2010/11/09 13:33:13 -0800"},{"has_downloads":true,"url":"https://github.com/j4mie/micromodels","forks":8,"description":"Declarative dictionary-based model classes for Python","has_wiki":true,"fork":false,"open_issues":1,"homepage":"","size":336,"private":false,"has_issues":true,"pushed_at":"2011/02/24 00:46:32 -0800","name":"micromodels","owner":"j4mie","integrate_branch":"develop","language":"Python","watchers":26,"created_at":"2010/12/08 16:21:15 -0800"},{"has_downloads":true,"url":"https://github.com/catch22/pw","forks":2,"description":"Grep GPG-encrypted YAML password safes.","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":202,"private":false,"has_issues":true,"pushed_at":"2011/05/17 12:21:16 -0700","name":"pw","owner":"catch22","language":"Python","watchers":2,"created_at":"2010/12/18 05:32:17 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/snipmate-snippets","forks":0,"description":"A collection of snippets for snipmate (vim plugin) with a focus on bash, php, html and javascript","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":956,"private":false,"has_issues":false,"pushed_at":"2011/05/17 06:22:45 -0700","name":"snipmate-snippets","owner":"JNRowe","language":"VimL","watchers":1,"created_at":"2011/01/27 03:05:32 -0800"},{"has_downloads":true,"url":"https://github.com/gabrielfalcao/HTTPretty","forks":3,"description":"HTTP client mocking tool for Python","has_wiki":true,"fork":false,"open_issues":3,"homepage":"","size":184,"private":false,"has_issues":true,"pushed_at":"2011/06/30 13:04:40 -0700","name":"HTTPretty","owner":"gabrielfalcao","language":"Python","watchers":9,"created_at":"2011/01/28 06:59:02 -0800"},{"has_downloads":true,"organization":"github","url":"https://github.com/github/dmca","forks":8,"description":"DMCA takedowns GitHub has received","has_wiki":false,"fork":false,"open_issues":0,"homepage":"http://help.github.com/dmca","size":136,"private":false,"has_issues":false,"pushed_at":"2011/07/03 12:25:15 -0700","name":"dmca","owner":"github","watchers":438,"created_at":"2011/01/28 15:58:38 -0800"},{"has_downloads":true,"url":"https://github.com/passy/nose-lettuce","forks":1,"description":"A probably bad idea of how to run lettuce from nose","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":248,"private":false,"has_issues":true,"pushed_at":"2011/01/31 13:18:55 -0800","name":"nose-lettuce","owner":"passy","language":"Python","watchers":4,"created_at":"2011/01/31 13:04:03 -0800"},{"has_downloads":true,"organization":"caffeinehit","url":"https://github.com/caffeinehit/hammertime","forks":2,"description":"Time tracking with git","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://github.com/caffeinehit/hammertime","size":140,"private":false,"has_issues":true,"pushed_at":"2011/02/03 02:40:25 -0800","name":"hammertime","owner":"caffeinehit","language":"Python","watchers":6,"created_at":"2011/02/02 02:18:33 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/hammertime","forks":0,"description":"Time tracking with git","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://github.com/caffeinehit/hammertime","size":720,"private":false,"has_issues":false,"pushed_at":"2011/02/02 09:54:18 -0800","name":"hammertime","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/02/02 09:49:21 -0800"},{"has_downloads":true,"url":"https://github.com/kennethreitz/requests","forks":55,"description":"Python HTTP Requests for Humans™.","has_wiki":false,"fork":false,"open_issues":21,"homepage":"http://python-requests.org","size":604,"private":false,"has_issues":true,"pushed_at":"2011/08/15 08:04:00 -0700","name":"requests","owner":"kennethreitz","language":"Python","master_branch":"develop","watchers":659,"created_at":"2011/02/13 10:38:17 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/versionah","forks":1,"description":"Simple version number mangler","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/versionah/","size":4504,"private":false,"has_issues":true,"pushed_at":"2011/08/11 09:35:57 -0700","name":"versionah","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/02/15 08:51:56 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/issues-test","forks":1,"description":"Repo for testing hubugs","has_wiki":true,"fork":false,"open_issues":8,"homepage":"","size":0,"private":false,"has_issues":true,"name":"issues-test","owner":"JNRowe","watchers":1,"created_at":"2011/02/22 13:00:23 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/pelican","forks":0,"description":"Static blog generator in python, using ReST syntax","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://docs.notmyidea.org/alexis/pelican/","size":3916,"private":false,"has_issues":false,"pushed_at":"2011/04/04 21:22:46 -0700","name":"pelican","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/02/23 21:20:07 -0800"},{"has_downloads":true,"url":"https://github.com/dcramer/decruft","forks":8,"description":"python-readability, but faster (mirror-ish)","has_wiki":true,"fork":false,"open_issues":3,"homepage":"http://code.google.com/p/decruft/","size":588,"private":false,"has_issues":true,"pushed_at":"2011/08/11 14:19:19 -0700","name":"decruft","owner":"dcramer","language":"Python","watchers":26,"created_at":"2011/02/28 18:07:04 -0800"},{"has_downloads":true,"url":"https://github.com/JNRowe/pw","forks":0,"description":"Grep GPG-encrypted YAML password safes.","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":132,"private":false,"has_issues":false,"pushed_at":"2011/04/04 23:44:42 -0700","name":"pw","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/04/04 23:37:38 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/shell-doctest","forks":1,"description":"shelldoctest is Doctest/UnitTest for shell (mirror of Google Code project)","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://code.google.com/p/shell-doctest/","size":128,"private":false,"has_issues":true,"pushed_at":"2011/04/05 05:32:44 -0700","name":"shell-doctest","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/04/05 05:32:07 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/blog","forks":1,"description":"Old jnrowe.github.com content that *may* be resurrected.","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://jnrowe.github.com/blog","size":1152,"private":false,"has_issues":true,"pushed_at":"2011/04/05 09:22:26 -0700","name":"blog","owner":"JNRowe","watchers":1,"created_at":"2011/04/05 09:21:16 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/sphinx-jnrowe","forks":1,"description":"My sphinx theme","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":644,"private":false,"has_issues":true,"pushed_at":"2011/05/13 12:27:22 -0700","name":"sphinx-jnrowe","owner":"JNRowe","watchers":1,"created_at":"2011/04/06 07:35:40 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/rdial","forks":1,"description":"Simple time tracking for simple people","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":1688,"private":false,"has_issues":true,"pushed_at":"2011/08/11 07:49:36 -0700","name":"rdial","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/05/09 06:04:35 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/vim-cute-python","forks":0,"description":"Unicode goodness for Python code by using vim's new “conceal” feature","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":112,"private":false,"has_issues":false,"pushed_at":"2011/07/18 06:01:30 -0700","name":"vim-cute-python","owner":"JNRowe","language":"VimL","watchers":1,"created_at":"2011/05/22 23:21:28 -0700"},{"has_downloads":false,"url":"https://github.com/JNRowe/develop.github.com","forks":0,"description":"API Documentation for GitHub","has_wiki":false,"fork":true,"open_issues":0,"homepage":"http://develop.github.com","size":1584,"private":false,"has_issues":false,"pushed_at":"2011/05/23 03:36:51 -0700","name":"develop.github.com","owner":"JNRowe","language":"JavaScript","master_branch":"gh-pages","watchers":1,"created_at":"2011/05/23 03:32:46 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/requests","forks":0,"description":"Python HTTP Requests for Humans.","has_wiki":false,"fork":true,"open_issues":0,"homepage":"http://python-requests.org","size":2648,"private":false,"has_issues":false,"pushed_at":"2011/05/27 00:17:44 -0700","name":"requests","owner":"JNRowe","language":"Python","master_branch":"develop","watchers":1,"created_at":"2011/05/27 00:16:23 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/restfulie-py","forks":0,"description":"Python port of Restfulie","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://github.com/caelum/restfulie-py","size":1794,"private":false,"has_issues":false,"pushed_at":"2011/05/28 22:05:55 -0700","name":"restfulie-py","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/05/28 22:04:51 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/tyrs","forks":0,"description":"twitter curses client","has_wiki":true,"fork":true,"open_issues":0,"homepage":"http://tyrs.nicosphere.net","size":132,"private":false,"has_issues":false,"pushed_at":"2011/06/03 06:45:50 -0700","name":"tyrs","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/06/03 02:42:16 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/gpxviewer","forks":0,"description":"GPXViewer GPS trace viewer","has_wiki":false,"fork":true,"open_issues":0,"homepage":"http://andrewgee.org/blog/projects/gpxviewer","size":1040,"private":false,"has_issues":false,"pushed_at":"2011/06/06 06:23:32 -0700","name":"gpxviewer","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/06/06 06:21:54 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/dwm","forks":1,"description":"The dwm codebase I run","has_wiki":true,"fork":false,"open_issues":0,"homepage":"http://dwm.suckless.org/","size":1084,"private":false,"has_issues":true,"pushed_at":"2011/06/24 09:18:06 -0700","name":"dwm","owner":"JNRowe","language":"C","master_branch":"jnrowe","watchers":1,"created_at":"2011/06/21 23:57:57 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/micromodels","forks":0,"description":"Declarative dictionary-based model classes for Python","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":368,"private":false,"has_issues":false,"pushed_at":"2011/06/22 00:29:06 -0700","name":"micromodels","owner":"JNRowe","integrate_branch":"develop","language":"Python","watchers":1,"created_at":"2011/06/22 00:27:17 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/HTTPretty","forks":0,"description":"HTTP client mocking tool for Python","has_wiki":true,"fork":true,"open_issues":0,"homepage":"","size":172,"private":false,"has_issues":false,"pushed_at":"2011/06/30 12:24:07 -0700","name":"HTTPretty","owner":"JNRowe","language":"Python","watchers":1,"created_at":"2011/06/30 12:19:33 -0700"},{"has_downloads":true,"url":"https://github.com/JNRowe/thinote","forks":1,"description":"Move along","has_wiki":true,"fork":false,"open_issues":0,"homepage":"","size":96,"private":false,"has_issues":true,"pushed_at":"2011/07/15 12:10:38 -0700","name":"thinote","owner":"JNRowe","watchers":1,"created_at":"2011/07/15 12:09:17 -0700"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,user,email,jnrowe%40gmail.com,c8f8e10dbb3704bcbda62ab4de5a69e6 b/tests/data/github.com,api,v2,json,user,email,jnrowe%40gmail.com,c8f8e10dbb3704bcbda62ab4de5a69e6 index d6277ad..6f55fbb 100644 --- a/tests/data/github.com,api,v2,json,user,email,jnrowe%40gmail.com,c8f8e10dbb3704bcbda62ab4de5a69e6 +++ b/tests/data/github.com,api,v2,json,user,email,jnrowe%40gmail.com,c8f8e10dbb3704bcbda62ab4de5a69e6 @@ -1,14 +1,15 @@ -status: 304 -x-ratelimit-remaining: 58 +status: 200 +x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/user/email/jnrowe%40gmail.com +-content-encoding: gzip connection: keep-alive content-length: 370 -server: nginx/0.7.67 -x-runtime: 11ms +server: nginx/1.0.4 +x-runtime: 14ms x-ratelimit-limit: 60 -etag: "56cf9af8aa57da3ccc78fc91d6df4565" +etag: "9732b2f0e3b43cd609879ca8ebc6d5db" cache-control: private, max-age=0, must-revalidate -date: Sun, 22 May 2011 04:42:13 GMT +date: Mon, 15 Aug 2011 19:53:32 GMT content-type: application/json; charset=utf-8 -{"user":{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","company":null,"name":"James Rowe","created_at":"2009/03/08 14:53:38 -0700","location":"Cambridge, UK","public_repo_count":38,"public_gist_count":64,"blog":"http://jnrowe.github.com/","following_count":5,"id":61381,"type":"User","permission":null,"followers_count":6,"login":"JNRowe","email":"jnrowe@gmail.com"}} \ No newline at end of file +{"user":{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","company":null,"name":"James Rowe","created_at":"2009/03/08 14:53:38 -0700","location":"Cambridge, UK","public_repo_count":48,"public_gist_count":64,"blog":"http://jnrowe.github.com/","following_count":5,"id":61381,"type":"User","permission":null,"followers_count":6,"login":"JNRowe","email":"jnrowe@gmail.com"}} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,user,follow,defunkt,access_token=xxx,5670385849f9826634ee63e74bcac43e b/tests/data/github.com,api,v2,json,user,follow,defunkt,access_token=xxx,5670385849f9826634ee63e74bcac43e deleted file mode 100644 index 8b8fbb8..0000000 --- a/tests/data/github.com,api,v2,json,user,follow,defunkt,access_token=xxx,5670385849f9826634ee63e74bcac43e +++ /dev/null @@ -1,14 +0,0 @@ -status: 200 -x-ratelimit-remaining: 58 -content-location: https://github.com/api/v2/json/user/show/mojombo?access_token=xxx -x-runtime: 23ms -content-length: 63 -server: nginx/0.7.67 -connection: keep-alive -x-ratelimit-limit: 60 -etag: "45a6fa1730ba70b40ccd595130b2390e" -cache-control: private, max-age=0, must-revalidate -date: Mon, 11 Apr 2011 14:46:22 GMT -content-type: application/json; charset=utf-8 - -{"users":["c9s","mitsuhiko","seemant","ask","tpope","defunkt"]} diff --git a/tests/data/github.com,api,v2,json,user,follow,defunkt,eb59ee564b4598ac4a39c71474b539fc b/tests/data/github.com,api,v2,json,user,follow,defunkt,eb59ee564b4598ac4a39c71474b539fc new file mode 100644 index 0000000..d03d4dd --- /dev/null +++ b/tests/data/github.com,api,v2,json,user,follow,defunkt,eb59ee564b4598ac4a39c71474b539fc @@ -0,0 +1,14 @@ +status: 200 +x-ratelimit-remaining: 60 +content-location: https://github.com/api/v2/json/user/follow/defunkt?access_token=xxx +x-runtime: 20ms +content-length: 76 +server: nginx/1.0.4 +connection: keep-alive +x-ratelimit-limit: 59 +etag: "051be0232ef98376d11462e632211b9d" +cache-control: private, max-age=0, must-revalidate +date: Thu, 25 Aug 2011 07:18:50 GMT +content-type: application/json; charset=utf-8 + +{"users":["c9s","mitsuhiko","seemant","ask","tpope","defunkt"]} diff --git a/tests/data/github.com,api,v2,json,user,search,James%2BRowe,95221a552352bf0535e2445659dc9ed5 b/tests/data/github.com,api,v2,json,user,search,James%2BRowe,95221a552352bf0535e2445659dc9ed5 index 45dc2b0..e190673 100644 --- a/tests/data/github.com,api,v2,json,user,search,James%2BRowe,95221a552352bf0535e2445659dc9ed5 +++ b/tests/data/github.com,api,v2,json,user,search,James%2BRowe,95221a552352bf0535e2445659dc9ed5 @@ -1,14 +1,15 @@ -status: 304 +status: 200 x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/user/search/James%2BRowe -content-length: 847 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 847 +server: nginx/1.0.4 +x-runtime: 6029ms x-ratelimit-limit: 60 -etag: "f4b69010d01df911cd62a2c2eef3d71f" +etag: "e26a4abb93b2131fe3f9a29d3b3700d1" cache-control: private, max-age=0, must-revalidate -date: Sun, 22 May 2011 04:42:12 GMT +date: Mon, 15 Aug 2011 19:57:56 GMT content-type: application/json; charset=utf-8 -x-runtime: 10ms -{"users":[{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","name":"James Rowe","created_at":"2009-03-08T21:53:38Z","location":"Cambridge, UK","public_repo_count":38,"followers":6,"fullname":"James Rowe","username":"JNRowe","language":"Python","id":"user-61381","repos":38,"type":"user","followers_count":6,"pushed":"2011-05-21T06:15:08.703Z","login":"JNRowe","score":4.247995,"record":null,"created":"2009-03-08T21:53:38Z"},{"gravatar_id":"e70f90f2a6985553d18fa39b90d9db6f","name":"James Rowe","created_at":"2008-11-18T10:39:10Z","location":"Guernsey, Channel Islands","public_repo_count":2,"followers":1,"fullname":"James Rowe","language":"Ruby","username":"wooki","id":"user-35166","repos":2,"type":"user","followers_count":1,"pushed":"2011-05-13T19:15:09.524Z","login":"wooki","score":4.247995,"record":null,"created":"2008-11-18T10:39:10Z"}]} \ No newline at end of file +{"users":[{"gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","name":"James Rowe","created_at":"2009-03-08T21:53:38Z","location":"Cambridge, UK","public_repo_count":48,"followers":6,"fullname":"James Rowe","username":"JNRowe","language":"Python","id":"user-61381","repos":48,"type":"user","followers_count":6,"pushed":"2011-08-11T15:15:16.791Z","login":"JNRowe","score":4.108372,"record":null,"created":"2009-03-08T21:53:38Z"},{"gravatar_id":"e70f90f2a6985553d18fa39b90d9db6f","name":"James Rowe","created_at":"2008-11-18T10:39:10Z","location":"Guernsey, Channel Islands","public_repo_count":2,"followers":1,"fullname":"James Rowe","username":"wooki","language":"Ruby","id":"user-35166","repos":2,"type":"user","followers_count":1,"pushed":"2011-07-26T09:15:15.818Z","login":"wooki","score":4.108372,"record":null,"created":"2008-11-18T10:39:10Z"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,user,show,defunkt,379cb3d60bbce3d9b30e6e6aae66840c b/tests/data/github.com,api,v2,json,user,show,defunkt,379cb3d60bbce3d9b30e6e6aae66840c index 3a94ea7..f8dbc00 100644 --- a/tests/data/github.com,api,v2,json,user,show,defunkt,379cb3d60bbce3d9b30e6e6aae66840c +++ b/tests/data/github.com,api,v2,json,user,show,defunkt,379cb3d60bbce3d9b30e6e6aae66840c @@ -1,14 +1,15 @@ -status: 304 -x-ratelimit-remaining: 56 +status: 200 +x-ratelimit-remaining: 58 content-location: https://github.com/api/v2/json/user/show/defunkt +-content-encoding: gzip connection: keep-alive content-length: 386 -server: nginx/0.7.67 -x-runtime: 16ms +server: nginx/1.0.4 +x-runtime: 364ms x-ratelimit-limit: 60 -etag: "144f668d7265bcd9d61bc1fb91e9caeb" +etag: "198bc0b6ce2cf5d8b6f08519418c9d25" cache-control: private, max-age=0, must-revalidate -date: Sun, 22 May 2011 04:32:12 GMT +date: Mon, 15 Aug 2011 19:53:45 GMT content-type: application/json; charset=utf-8 -{"user":{"gravatar_id":"b8dbb1987e8e5318584865f880036796","company":"GitHub","name":"Chris Wanstrath","created_at":"2007/10/19 22:24:19 -0700","location":"San Francisco","public_repo_count":90,"public_gist_count":277,"blog":"http://chriswanstrath.com/","following_count":212,"id":2,"type":"User","permission":null,"followers_count":2593,"login":"defunkt","email":"chris@wanstrath.com"}} \ No newline at end of file +{"user":{"gravatar_id":"b8dbb1987e8e5318584865f880036796","company":"GitHub","name":"Chris Wanstrath","created_at":"2007/10/19 22:24:19 -0700","location":"San Francisco","public_repo_count":93,"public_gist_count":278,"blog":"http://chriswanstrath.com/","following_count":212,"id":2,"type":"User","permission":null,"followers_count":3402,"login":"defunkt","email":"chris@wanstrath.com"}} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,user,show,defunkt,followers,aba15090598242283ff9d4a8b5969f52 b/tests/data/github.com,api,v2,json,user,show,defunkt,followers,aba15090598242283ff9d4a8b5969f52 index 9370134..3c430cf 100644 --- a/tests/data/github.com,api,v2,json,user,show,defunkt,followers,aba15090598242283ff9d4a8b5969f52 +++ b/tests/data/github.com,api,v2,json,user,show,defunkt,followers,aba15090598242283ff9d4a8b5969f52 @@ -1,14 +1,15 @@ -status: 304 -x-ratelimit-remaining: 59 +status: 200 +x-ratelimit-remaining: 57 content-location: https://github.com/api/v2/json/user/show/defunkt/followers +-content-encoding: gzip connection: keep-alive -content-length: 29004 -server: nginx/0.7.67 -x-runtime: 214ms +content-length: 38576 +server: nginx/1.0.4 +x-runtime: 425ms x-ratelimit-limit: 60 -etag: "e5fafda9776b6ebe037bc5cea456ca6a" +etag: "1645986748f488c8193ded0a4713814e" cache-control: private, max-age=0, must-revalidate -date: Sun, 22 May 2011 04:32:08 GMT +date: Mon, 15 Aug 2011 19:53:47 GMT content-type: application/json; charset=utf-8 -{"users":["jnewland","pjhyett","cnix","dustym","choonkeat","nakajima","mtodd","bumi","takeo","bmizerany","zachinglis","evilchelu","manalang","mmmurf","hornbeck","mindy","therealadam","vanpelt","alexcharlie","seaofclouds","luke0x","rphillips","Caged","kamal","eventualbuddha","bigfleet","jacques","tim","KirinDave","ddemaree","benschwarz","cpjolicoeur","mmcgrana","mdarby","anildigital","ryanahamilton","entangledstate","coty","broughcut","atduskgreg","liz","brianleroux","kballard","haraldmartin","walf443","ss","elliottcable","joshuabates","eastmedia","mattman","imajes","saimonmoore","hoverbird","Fil","nesquena","membogg","ayn","jbritten","peterba","nick","willcodeforfoo","mojombo","rsl","caffo","khigia","BrianTheCoder","tkofol","dstrelau","sant0sk1","joshuaclayton","cee-dub","tooeasy","quirkey","eduardo","raja","timshadel","rsanheim","tokumine","statik","mattly","xilo32","yaroslav","sr","hchoroomi","lgn21st","purzelrakete","seven1m","douglasjarquin","ihower","freels","adamstac","fauxparse","duncanbeevers","jasonwatkinspdx","spohlenz","joaovitor","mikedamage","alainravet","whomwah","ooodigi","nerdrocket","zmack","mulder","kivanio","vlandham","yizzreel","ryanb","cho45","sandro","ratchetcat","jgross","jasherai","jw-00000","zubin","loe","fred","stuartsaunders","skippy","dgiunta","monde","charlenopires","devn","softprops","madx","lukebayes","blech75","newtonapple","edbond","ncr","boboroshi","holtonma","jhubert","libin","bastos","nullobject","croaky","trevorturk","fabioespindula","nick-b","sikachu","schacon","harper","envoked","guitsaru","brianmario","subwindow","Arthur","sob","tiagowhite","jasontorres","lawrencecurtis","bterlson","mattsears","patrickdet","academician","markpuck","mokolabs","baron","arikan","ryanking","willemderu","entombedvirus","cyx","galfert","heycarsten","shallwelin","sbfaulkner","jaehess","jonathannelson","helo","schwabsauce","gusgollings","adzap","joefiorini","trestrantham","hairballopolis","daveliu","thetacom","genki","guillermo","tekin","nextmat","hans","colin","Roman2K","kakutani","qrush","hpoydar","goodtouch","LimeHat","grobie","tosh","epitron","inkdeep","voitto","kvnsmth","darrenhinderer","njonsson","bianster","shanesveller","technicalpickles","erikj","lancecarlson","briandoll","digitalextremist","KevBurnsJr","slim","clarkware","jasoncarter","Krishna","kirk","tinogomes","wfarr","intabulas","hardbap","aziz","atmos","robbyrussell","codeslinger","evandrodutra","martinisoft","smtlaissezfaire","larrywright","joshknowles","evanwalsh","jchris","jqr","jbarnette","rafaelss","dsboulder","res0nat0r","sunfmin","topfunky","NigelThorne","supaspoida","yipstar","davidwparker","jinzhu","johnpaulashenfelter","joshua","agile","cored","visnup","calendaraboutnothing","eoin","deepak","dsparling","oleganza","pengwynn","christophermoura","jgagne33","mhutchin","matsuda","zak","railssummit","taylorrf","peleteiro","greatseth","blackwinter","rberger","elim","eric","collin","henryhamon","shinzui","tongueroo","vanntastic","swdyh","peterpunk","kabnot","ozeias","mwilliams","kamipo","bezugen","arthurgeek","fairos","webmat","bonachela","foysavas","mojodna","dwabnitz","fuzzytone","anthonybarone","mkhl","botanicus","kavu","jhsu","delameko","uhhuhyeah","jcf","nrk","brycethornton","maxdevel","ashleyw","zegomesjf","rjspotter","tjweir","slawcup","pjdavis","ngerakines","rwc9u","aka47","Bregor","oristian","JackDanger","amatsuda","josespinal","sleistner","jdp","mkrisher","rbarazi","mattmatt","luisbebop","rcrowley","anotherjesse","semikolon","albertoperdomo","kaikuehne","marcric","pardel","rads","altamic","badcarl","Marat","rfwatson","jesseclark","iamwilhelm","rtyler","kovacs","alexvollmer","rkh","joelparkerhenderson","shayfrendt","pcalcado","marcelinollano","jngo","robertpfeiffer","ukd1","jpablobr","alfredwesterveld","matthewford","haws","visionmedia","ekinci","hellekin","paulgrunt","seouri","pauldix","CodeOfficer","manuelmeurer","kristopher","mattyoho","neilmock","igorgue","miyagawa","akm","ieure","mwunsch","kairichard","leah","Siansor","kiko","breily","elmer","vshih","samsoffes","graysky","leandrosilva","blinton","ashchristopher","bensie","yura","adamaig","erotte","fernholz","jamesrose","michaeldv","raganw","sstephenson","capotej","BeamerCola","damon","amiel","iamstillalive","rduarte","jney","rymai","jtadeulopes","caironoleto","talboito","alexmchale","davglass","lian","rondevera","shashi","dira","GreenDragon","yonkeltron","jeanmartin","shelling","tehcurtis","gnlnx","joshng","bartuer","bruce","adamv","yasu","cjmartin","jarodl","jonatas","ronnieliew","polly","nonsequitur","marclove","arya","splattael","mcfearsome","skorecky","jaygooby","iande","brosner","brett","jivko","cmelbye","edwingo","hunab","zipme","mnaberez","nimo","justinlilly","howiworkdaily","johnbender","jezdez","petercoulton","juliend2","dhou","enricob","gigamo","markstephenson","gregnewman","rubify","spagalloco","Xac","attack","esycat","webiest","ogijun","travisjeffery","moongtook","meritt","stephencelis","doowttam","mrchrisadams","riethmayer","utahcreative","bkrsta","program247365","montylounge","renatocarvalho","NYiPhoneDeveloper","novas0x2a","rblackwe","basiszwo","deminew","stan","sgarza","epocRepo","georgi","radamant","munjal","jgchristopher","macro","Gig23","diogenesis","poshboytl","pablete","mpreath","ujihisa","Sixeight","andrewhavck","alexch","skateinmars","darwin","EvanBurchard","cytobank-matthew","kidpollo","kjwierenga","psyche","antrover","andrehjr","iamsolarpowered","horaci","rishav","joshbuddy","rlr","wnetoa","simplabs","alex","dustinwhittle","samvincent","memiux","ktlacaelel","rubysolo","chillicoder","teepark","tonyl","hal0thane","james-baker","stuffmc","sepposade","jastix","vianaweb","FDj","auser","sacrosby","ascarter","tdmackey","julienXX","adurity","carlp","asenchi","mazebuhu","caseyhelbling","mikereedell","verbal","satynos","cloudhead","packagethief","bsy","robhurring","davidx","foxscan","detrain","jawspeak","jschoolcraft","lokeshk","yashh","jrsims","moorage","thisgirlangie","jdamick","dsully","gregf","sjain","hughdbrown","webandy","fairchild","wesbillman","mvj3","scrogson","gtcaz","rcarver","superfeedr","didenko","JonRohan","miamiruby","nelix","rvwoens","coiscir","javan","haru01","dastels","artificemm","docgecko","electricgraffitti","detansinn","chunzi","m3talsmith","priteau","jptoto","amerine","jyr","zodman","chipski","christhomson","dayne","mmalone","ccsmail","jeffp","natebunnyfield","f1vlad","joshbutner","sferik","johan--","joahking","aaandre","dennyhalim","gregcopenhaver","teknopartz","CodeMonkeyKevin","zgchurch","vangberg","benaldred","kaichen","ap0ught","jnbn","holywarez","dambalah","juarlex","nevilleburnell","symlink","mdwrigh2","agibralter","kognate","sroegner","daksis","philipefarias","ajsharp","mwhooker","maca","kalkov","synaptic","wolverian","rnaveiras","jjcall","matthewfl","mathieuravaux","temojin","graphicsop","m7d","bbuckley","gabrielfalcao","mamuso","deepthawtz","marksands","tarellel","josh","KieranP","mrkn","raul","sd-fritze","dapi","jaryl","kylebrowning","jimpick","nikolay","joshnesbitt","maggit","xinuc","marciotrindade","bradchoate","bs","peterz","wvl","csamuel","jamesarosen","joshourisman","kacy","martinciu","osde8info","aliem","gabrielg","jaknowlden","evanfarrar","mivaul","shock","nicksergeant","lucian","Asciant","thoas","bicherele","Csele","uamuamuam","i0n","benhaan","jodosha","JonGretar","evolve2k","jondruse","polera","lr","badboy","mikelim","irfn","tangtao","st3f","thegeekbird","tweak","hackedunit","christophsturm","tobi","fvonx","marcoow","pcreux","vapidbabble","reidmix","jherdman","chrisdrackett","overture8","jits","daz","lazzarello","asoltys","Hates","mgomes","tlrobinson","bluehavana","janl","sah","gussan","brynary","adolfosousa","cypher","wintermi","bemurphy","neduma","nowells","hojberg","muddana","juvenn","jobscry","Sutto","arjunghosh","rorrego","jwilkins","nrolland","marcinbunsch","neophiliac","ranza","dusty","hoggarth","sriprasanna","davidhalldor","josephsofaer","rbriank","andreisavu","dennmart","jrmehle","whistlerbrk","shaper","jrivero","gloubidou","denzuko","dmillar","mexpolk","mkuklis","christianhellsten","johndagostino","jots","apillet","qdonce","javisantana","mikeauclair","digx","coreyhaines","rudionrails","jpbougie","brixtonasias","onesunone","bry4n","rhymes","liangzan","kvbik","professionalnerd","visola","suresh","bastih","andrem","r38y","mynyml","bitflut","danielbru","3rdman","cypriss","esdras","benpickles","ducky427","knobe","elkinsware","tpitale","foca","simonw","mrduncan","Xenome","markisisme","al3x","futoase","tomaski","meddah","shakhan","nailor","adamcooke","Hoodow","klacointe","erikvold","rtomayko","kolber","cashyboy21","luddep","closer","riggasconi","aroscoe","sven-q","kurotoshiro","angusb","binarydud","chrisb","gvarela","sukhchander","gnufied","Cutpastecreate","elg0nz","ijayasin","christianchristensen","strange","leandro","dirs","zevarito","jpf","mendelbenjamin","brianherbert","yuritomanek","latrommi","tokuhirom","qhoxie","rust","ericholscher","lxneng","lorchaos","rchk","ches","frnz","filipealvesferreira","lucasefe","paulwalker","httpdss","gdrage","jakalada","claudine","joshamos","fgrehm","rdamen","yaroot","jugyo","messa","digitaltoad","orph","galex","boriscy","rafidude","darashi","angrytuna","AdamN","paydro","rimenes","jacqui","sfkaos","dgalarza","imakado","moomerman","Ashernor","pedrodelgallego","BenWard","bashwork","axelator","zeroLaming","toothrot","pake007","sevas","btoone","dallas","danielrmz","kret","nouse","mdaisuke","fmborghino","ibolmo","zetafish","drewlesueur","dacoz","ciju","noise","salax","jotto","toastdriven","mcroydon","tfreitas","ccheever","sxlee87","jmcantrell","acts-human","bastienlabelle","terrbear","mikhailov","joshdavey","hecticjeff","garru","TBD","vancaem","jasonmc","ariekeren","shreekavi","chrisco","michaeltsmith","hmarr","binq","jakedahn","stonegao","jperras","finn","kerberoS","firman","leeky","gamesthatgive","jchaney","timonk","philippWassibauer","danblick","itspriddle","threedaymonk","michelson","tilgovi","jmchambers","jhindle","mtoledo","nhocki","mrtazz","the-architect","schallis","kneath","gustaf","ejdraper","logicaltext","levycarneiro","ktheory","robb-broome","matflores","SleepTillSeven","bencochran","tmm1","infixfilip","jemerick","edouard","ethangunderson","beanieboi","jwelshiv","MBO","gitmate","rok","santosh79","yaychris","BenHall","sirprize","abraham","heatxsink","joshwalsh","grimen","adamramadhan","mzlittle","demet8","jrpz","jeanpaulcozzatti","mtarbit","jstorimer","cacciaresi","r3trofitted","bennyfreshness","sinetris","jrun","unspace","rgarver","gabrielmansour","jnstq","hgillane","cherring","dceballos","kstewart","donnykurnia","plukevdh","diogenes","joshbrown","yolk","bitfyre","raphaelcosta","esneko","yuriyvolkov","unthinkingly","chad","quinn","wmerydith","donspaulding","notthinking","ikarius","jbr","yoshimax","silverfox","jmwinn21","extraordinaire","hartym","mattonrails","vertis","tommg","weilawei","denniscollective","72616b657368","sork","JamesHayton","kennethreitz","kurko","potomak","mmatuson","amiri","dandean","syntaxritual","holman","alimills","hammer","jnunemaker","risico","fritzek","theflow","dnozay","steshaw","bobanj","webtechnologist","PatrickTulskie","kares","miksago","fuJiin","tommychen","simonreed","foremire","LFabien","bagwanpankaj","bummytime","devinus","rays","krisb","Lymskos","zonble","aantix","vorn-coza","techfolio","albybisy","tcol","jufemaiz","pvdb","pcdavid","danopia","chrislerum","peterto","laberge","smokyonion","guinascimento","longhorny","gabe","kbuckler","durran","tricomsol","bananastalktome","jordanbreeding","c9s","alvin2ye","NV","jwachter","pulni","jjungnickel","f440","ratzefummel","krmdrms","mauriziodemagnis","inffcs00","bobthecow","bengold","gciampa","akshayrawat","said","hawx","samuel","michael","ruyrocha","fmmfonseca","chiragrules","raid5","kamui","hsbt","svenfuchs","l15n","steves","lunestae","pjaspers","chinmaygarde","scotttam","jeekl","kfinlayson","admc","kadel","bilco105","t9md","meskyanichi","timocratic","timhaines","Marak","openface","tlossen","tekacs","jasonpa","nightsailer","technoweenie","chrismear","benatkin","lloydpick","ryanmoran","Tomohiro","aslam","mineiro","gdagley","rociiu","AieshaDot","kijun","robertjwhitney","macek","willrax","VinylFox","rupa","smallacts","truemilk","alanhaggai","mitchellhislop","cobracmder","xoebus","gretch","juretta","mgsnova","invadersmustdie","tedb","jedschneider","maikelgonzalez","bdigital","raycmorgan","zenmatt","thrashr888","dug","avdi","chaifeng","bblimke","vivienschilis","fd","luckiestmonkey","Locke23rus","berlin-ab","myfreeweb","windmill","briankeairns","ricardojsanchez","angelov","cbmeeks","maetl","thepug","gluckspilz","jamin4jc","netzkontrast","mager","jarquesp","phmongeau","jdennes","danishkhan","bensonk","nano","kjbekkelund","flyerhzm","kanashii","mairon","sekimura","joericioppo","bertzhu","mislav","jroes","jenishkottaram","peterwald","alterisian","artisonian","bcherry","jbw","haifeng","stockhausen","bvandenbos","mlbright","consti","simonoff","suzukimilanpaak","ctrochalakis","acrookston","gnomet","dexterdeng","aderyabin","hwijaya","catman","vesan","frederico","zacharyscott","IsraelAgNouhYattara","mikecampo","dsueiro","reeze","stevemckenzie","avelino","stinie","thbishop","sotakone","srobbin","krongk","yaotti","tobym","robhudson","ryanbriones","jcpbacon","zhengjia","awilliford","moubry","rm","cyclades","mikethomas","dkeskar","brianlee","panggi","durbin","fmela","Shekar73","infynyxx","sorenmacbeth","unindented","kevinpanaglima","krachot","dvyjones","joshOiknine","arkx","rrichards","error400","lagsalot","JSilva","twitoaster","rbrant","shaiguitar","jmorganson","electronicbites","fredwu","jlertle","DHoffm","Tyrant505","CodeBlock","jgrevich","fpauser","lastk","scifisamurai","runawayjim","ryana","amanelis","ponzao","michelmelo","edsinclair","reustle","vshvedov","marchdoe","devi","allanberger","alup","tventura","cobra90nj","berkerpeksag","neviim","westoque","Rud5G","cjwoodward","fyskij","1ed","Axispower","icaruswings","DasIch","fredpalmer","al3d","codylindley","Bushjumper","phoenix24","pcora","welterde","VijayM","sr3d","hotoo","nwjsmith","brianjlandau","hemanth","johnknott","MatthewCampbell","mwmitchell","asymmetric","glitterfang","ptn","kraih","ono","myuhe","jque","GVRV","d-r","danthompson","zerd","selman","elsewares","unes","Debadatta","monoceroi","gchandrasa","darknighte","jreading","kron4eg","minad","cdmwebs","inuki","nabeelmukhtar","hornairs","goyox86","gosuri","revans","michaeldwan","helianthuswing","christiansmith","kidrane","melborne","darkhelmet","ikbear","blowmage","maxjustus","sebleier","mattb","GeoffTidey","warehouselabs","german","itsmeduncan","dneighbors","fireflyman","mattheath","madwork","marcosvm","rafmagana","rafaelgaspar","arden","flyfireman","saggim","mnelson","etehtsea","xantus","byrongibson","mopemope","gillesfabio","ZeuQma","tkaemming","jackhq","connrs","jpang","amorton","rubyorchard","ghg","remiprev","michaelparenteau","harikrishnan83","eddieringle","krekoten","andmej","mak1e","seungjin","christofd","gfx","mechanicles","drak","olkarls","gregory80","thheller","devreq","nanek","laripk","jefflab","rick","tapajos","denmark","richardiux","dfbrule","yrosen","ebruning","bts","AzizLight","audy","ballantyne","huerlisi","codepuzzle","khasan","nikochan","pmh","jexchan","designrelated","codykrieger","edorcutt","iamacourser","rowedev","lardissone","wxmcan","threez","cjkoch","gigq","marugoshi","tianyicui","earcar","fadhlirahim","ccollins","adanmayer","tpeden","jsocol","TaurusOlson","jaksys","leandrocg","rube","richard6363","emddudley","JensNockert","he9lin","tmilewski","rishikulkarni","wescleymatos","mootoh","ganesan","rodrigosdo","tonktonk","skaufman","jurajpelikan","fcurella","vic","eston","hiteshmanchanda","tsigo","plang","avsej","kanzure","johnturek","percyperez","vorushin","jakemcgraw","fushang318","juniorbl","alanandrade","kenn","mitchj","webdestroya","supairish","seanhellwig","guilhermechapiewski","rainerborene","zonovo","vertocardoso","vinioliveira","hotchpotch","pch","jeffself","markmhx","Archonyx","indrode","mmaheu","sigardner","kulesa","phsr","ericflo","andyferra","shurizzle","renatoelias","klandergren","fabiomcosta","johngrimes","gleuch","ecksor","lucapette","achiu","benbjohnson","selvan","ey0t","bray","komagata","longda","pixelballistics","a2ikm","hoffmann","Rich-McGrath","abelperez","galvez","mkempe","amiridis","sfgirl","makeusabrew","dragoscrintea","grzegorzkazulak","jcmuller","JustinCampbell","dpree","jquattrocchi","sri","neonsunburst","danielemilan","poseid","chancegarcia","Prog4rammer","HTApplications","cassiomarques","andrerocker","SixArm","andrewsmedina","gaubert","parabuzzle","diogosantos","seanmccann","particlebanana","CloudMarc","majtom2grndctrl","javichito","jk","arunagw","esfand","plentz","caueguerra","albertoleal","adrianoalmeida7","guilleiguaran","donaldw","TaopaiC","stephenbreen","dissolved","ikaros","andrefaria","aporia","benlambert","coolgeng","kitop","mitukiii","kayaman","sLLiK","vmseba","nkchenz","vs","jtsay","arlolra","adaoraul","Demeter","jpadvo","joshaber","ebeigarts","allenwei","nervetattoo","bostonbasso","saki","ajbolanos","seppuku","sonicgao","ainvyu","cbrammer","hostsamurai","vatrai","acadavid","danengle","paddydub","noqqe","zporter","namley","aaronky","rdegges","weatherpoof","tomxander","skyfive","dieinzige","Becojo","saysjonathan","awayken","nataliepo","notrael","mrigor","blatyo","cwaring","sshirokov","kam","joshfng","martintel","skorks","vamsee","Lispython","hansef","seenmyfate","kitt","Markitox","Antti","Kerestey","albertz","samverekar","fredrikmollerstrand","thesp0nge","kdepp","ptzn","wusher","phongvh","sayz","qbyt","mkomitee","mlen","jmanon","duk42111","Naoya-Horiguchi","brianlovesdata","dreamcat4","pxr","neiltron","tauil","jondot","phonx","mininaim","6","Mattia","blambeau","DougTabuchi","idorosen","rachelmyers","capthy","liwh","brunoarueira","DrPheltRight","csanz","scott-stewart","jacobrelkin","shaliko","AAinslie","jamierumbelow","abukhait","scottlabs","tjhanley","mmonis","mrkamel","christiancurland","clyfe","thecocktail","taicki","stephenallred","zires","acadopia","MateuszWijas","zentrification","touchinspiration","reddyonrails","mportiz08","krizzna","nmelo","andrewsardone","kotp","rossta","anups","jeffcarroll","efritz","jpogran","jdp-global","hyperbolist","bf4","lenzcom","ardwalker","L42y","sosedoff","Ajmal","abhishekmunie","kbaldyga","kamzilla","delonnewman","peter-murach","sputnikus","benwr","wijet","marlonglopes","TheFox","kblake","senny","azer","Smarty","milann","ipavelek","elitau","zyan","farnhizzle","hamzakc","Waterfox","arunjitsingh","azizur","kitenge","eatcpcks","lusis","gvt","jasonmelgoza","jichen","Zeelot","albertobarrila","procyon","Wackybob","curbina","goosetav","ghindle","vicmiclovich","wearestac","klebervirgilio","offby1","kaaliputra","Silanus","scopevale","netzflechter","poutyface","raulmangolin","dmshann0n","cricketgeek","VikramRao","mungomash","bradheitmann","kainosnoema","iromli","jwelty","sayem","tobsch","rubynerd","travisanderson","lightyrs","muellmat","cameronmcefee","hector","kjetilod","kinabalu","jglee1027","andrew","metiny","dnurzynski","redpanda","necroua","karmi","lgaches","mabonyi","vyatri","korczis","67ideas","pcunnane","dpbus","ashneo76","joshmattvander","liangcw","vineetbnagaraj","jmatraszek","mkitt","pmandia","yassersouri","yudmiy","arthurix","osebboy","baant","programaker","busticated","emilpetkov","sebacruz","mrdg","DamianZaremba","malikbakt","georgecalm","danielribeiro","Dirklectisch","sup3rcod3r","raeffu","Anthony-Geranio","jitterizer","hectcastro","rudolfochrist","excid3","lampr","voidnothings","tsenart","nt","Amokrane","levicook","qnm","technolize","aodag","sansumbrella","MindTooth","scott2449","X4","mrcaron","randomor","liuzhoou","marciogm","ardiyu07","dannymcc","nfedyashev","batuhanicoz","cognominal","sax","vybs","richardrasu","xcoderzach","lucamaraschi","mohnish","pcardune","madari","TimothyKlim","nbucciarelli","jwoertink","freakyfractal","enc","lite","aanoaa","tomvleonard","mikaa123","jeanregisser","scheibo","Psli","einux","konputer","dzello","Nilloc","cmeiklejohn","georgemandis","tembamazingi","mblair","mconnor","nerdmom","ndegruchy","spearse","larsburgess","burnto","franciscoj","sleparc","rafaelcaricio","ajray","chacha","hasanyavas","pedrolopez","mponizil","timknight","jacksinn","huacnlee","justinbaker","aswadrangnekar","Captainkrtek","DrewFitz","sleepdev","tharkoos","youwannaknow","doud","tmcgilchrist","chlayverts","thomvil","digitalpardoe","sposborne","parkerl","carlosdelfino","omgitsads","tuhin","RLovelett","eregon","sanxac","ezuelectrock","tshauck","mtsoerin","hiromitz","araee","bogdanmuresan","kloderowski","msarvar","drydevelopment","1anre","icco","joestraitiff","jmileham","Refreshe","tansu-uslu","hoverlover","handyjq","xlarsx","bojovs","ajmi","fuzzyfox","lexxx233","diversen","fabianoalmeida","martinlindelof","srih4ri","ianphilpot","pitr","ffontouras","Kjata1013","thasc","newtriks","ashbaker","Ameero","zahir","sunpech","EdlinOrg","snstoyou","nope","elemel","smly","prathe","P6rguVyrst","srisnsris","s3w47m88","semicarry","hidde-jan","rowoot","TBush","AXJ","stevedeneb","adarshp","RootSpeaking","kevasdf","mdesrosiers","Purandhar","hyesushin","DenDen1337","JBean","amhnews","aseba","diegopacheco","macluq","tonycasanova","shaoyang","rmdort","morganwatch","alexandersanz","LinGmnZ","sjh","dalpo","brentsmith","Zolomon","liveink","diulama","tanelpuhu","rcarrieche","dte","RyomaKawajiri","punytan","yoquankara","haoqili","knowncitizen","dinhkhanh","psalami","krishnanagaraj","cespujunk66","lalasusu999","pcurry","wyattdanger","shingonoide","ngoatvm","eriknrd","philfreo","luckydev","Rahulitsmca","gohavefun2","bertjwregeer","nmumen","aumgn","dobcey","davidohalloran","jowido","marksteve","dabio","rmicoy","madewulf","bosism","Tipertuba","PushinPixels","tgdn","shariefsk","m0nkey","henryleacock","CrawfordWynnes","anagri","mlareo","neil477","kdonovan","yamunamathew","berlinbrown","antawara","Cotizado25","gjorquera","Dushyanthkinjarapu","laCour","oooo723","roblecca","pmaingi","gcampbell","robeastham","jgdreyes","Caustic","morgankeys","chesleybrown","zzazang","adanoria","millr","MikeBott","keitsi","zlangley","avalanche123","ilot3k","bendiken","jeheald","ashsmithco","mycroft","lachezar","borahMoloy","cliffsull","goldenandroid","KuraFire","ngpestelos","troessner","Arnab1401","ujjwalkhanal","qadir0108","ihd2911","Firsh3k","lifeisrisky","nevans","munro9","fagiani","lojikbomb","chrisledet","ariel","marcosanson","rem","shivakantmanch","MMLK","skattyadz","mhaidarh","joedynamite","dimasaryo","trico","shaunmichael","vs4vijay","afj176","stevennathaniel","gujiao","olamedia","giupo","whatrocks","stakisko","mhockelberg","shalo","devaraj","attomos","xeneizeyorugua","ryanlecompte","jrk","deryldoucette","jacknagel","togetherville","zypher","kyledoherty","yakomoca","sastha","KMASubhani","tejasc","ErikRHanson","ghais","dontcare4free","streeter","ambreenhussain","mischa","JelenaSparic","logeshpaul","victusfate","Avaruz","hendrolaksono","jeffgw","geeksourcer","wizardwerdna","elliottgoodwin","speric","alextucker","chawei","danieltreacy","blackdoc","mgp","martinemde","tsolomko","six","jayeshinho","jakeguza","bleikamp","ryanpao","ddacunha","mrb","mamdohreda","colinvivy","piyushchauhan2011","correcto","mawaldne","swishstache","Rafe","neelvad","seriouscomedy","trendsetter","beenhero","Amper","ryanKelleher","muehlburger","marktraub","rugers285","ArtemMyagkov","oscardelben","yvesvanbroekhoven","citrus","dennismdel","SupplyBoys","italiano40","darokel","Orton","lobr","sdrkyj","ggppwx","AngeloR","zergmk2","premjg","afaolek","tobrien","fash","susanmccormick","maoer","dtrebbien","tahhan","mzahir","matthewborn","patriciomacadden","nawaidshamim","JudePea","mehrzad","ericchen0121","dominiclovell","antonr","Fir2011","mhenke","bloudermilk","PrashanthRaghu","thecoffman","hozumi","jed","baguo","grumpycola","rht","timerider","thiagocaiubi","carlop","mibbo","Imados","frankwiles","efeerdogru","realpeterz","jordanndaviss","bytecollective","brianritchie","cndv","dfd","panckreous","mike762011","MalsR","case27","mono0x","jonassm","asaaki","jhnmn","huhong","TRAVEL4FREE","marcelomilo","nmudgal","coldFox","tonisan","ctubau","danlister","apurvrdx","armandogalindo","jeremysolarz","mustardhamsters","bfirsh","dmmalam","a4extra","ezkl","michaelowen","sujayhuilgol","chadlomax","dazagrohovaz","DeveloperAlex","c1c2ai","trey","joekhoobyar","jianinz","ugtkbtk","paparts","netoxico","TeacherPond","becked","tuyennguyencanada","motord","eklipse2k8","ZoomZhao","samqiu","makiman","purban","cyberorca","imonyse","jeemar","gazay","davejacobs","bwvoss","Bensign","dann","nickaoscarter","gane5h","glowindark","arielo","joannecheng","hughhefner8","broccolini","bherrup","starmbl09","tothebeat","sabram","qianthinking","iowish","lalitnama","ejr3gan","denis-bykov","cbmd","cleercode","batasrki","dstanek","markmarch","suprsankr","rcroxyosox","treeder","baddogai","froots","haoshubin","uirusan","dzhulk","aaudu","lekkerduidelijk","mcchang","pgebhard","scottgrey","dbergey","carlitosway0","cdadia","lepture","b1naryth1ef","janjohannesson","AndreyChernyh","dynjo","maxstepanov","JonRowe","attymannyluna","cooper1388","vjkaruna","fdd","GoranHalvarsson","Rajesh1213","Triopticon","ramazanayvaz","datl","jeo4long","zeroonnet","cdog","abstractj","anirudh24seven","danielwrobert","laparicio83","balupton","austymenko","avdezine","danieldyzma","jasonbuck","amasad","sideshowbandana","BrianStorti","supercleanse","TheThumbsupguy","alexcsandru","Stdubic","betawaffle","minamipj9","kylpo","ricardovaleriano","adrijlee","hlh59","chazlever","krmboya","vanm","MIchaelChua","benbarclay","mdjohnson1","JeffBrown711","rishabhsrao","dustMason","theLearningChan","malandrew","sac2171","Omerooo95","rnpinc","ivandro","syncopated","arnklint","jayeola","JJMoy","rahman86","josephmisiti","jfilipe","cjcnance","KingsgateRas1","chambaz","sjamayee","aelam","imanzarrabian","gaochunzy","orangix","goopi","michaelkrisper","deonomo","codejoust","aroc","cavalle","johnnyhuman","alexbg","jshr","ssnau","caryhaynie","timmolter","spadin","mlong168","gurmeetkalra","new-top","trondga","maikeru","jamster","jsy","tommyhendr","Hasgaroth","ZephyrSL","rjyo","zephyrpellerin","neilparikh","beata","makestory","haneez","mdhabib","PaulKinlan","cheche","tyshen","bhxtl","osujikenneth","ketiko","frknlgn","katRHS","igrigorik","marianay","detroitexposure","Surgo","mindgap","hiroyukim","DilipSabat","espengra","soubhiks","jaybrent00","tikva","jessestuart","mtanas","redserpent","shukydvir","leoy","stylecoder","coryfoo","prashanthbr","robots2020","sidna","cmes","johndel","diogobaracho","markiBOY","tvkonline","shiawuen","dipak8959","rfosta","nickgoodfate","RiverBridge","fay","benza","karichel","psychicin","gag0q","kl365","nmccarthy","julien51","amylv","abinav","bramsdenteuling","AnonymousCow","ioncache","iesta","cemsisman","Ade147","seamusabshere","doublethink","claudio-alvarez","bird5230","anilanar","debugging","rupakg","ShaneIsley","wicz","roastgoat","dilhamsoft","sh4dy08","roboteti","pubnub","TRMW","rahulsingal14","sanjayts","nhunzaker","baldrailers","Korrawit","frode","thorsteinsson","iveney","endel","jose152","ZhengYang","Keeguon","rahul2011","iainp999","maveonair","SirCodington","sclm","snapette","dshefchik","manderson2080","djohnston08","pirateking","giftedsam","iyerlabz","alejandrolechuga","janela","BxCx","mifan","enestanriover","kernelfail","prinxezzlja","macknight","Girllovers","AquaGeek","charleskline","Foggybtmgirl","ryanatwork","plainspace","stw","naiquevin","huangjunwen","valeh","carhartl","roycefu","tmlee","williamrh","ZachWick","zhuangbiaowei","Baker1904","Skrizy","NageshJatagond","vrillusions","geekrohit","satlavida","cleichner","jhenke","beingnessa","mcgoooo","Bloophub","punklibrarian","abelmartin","take-cheeze","petersonferreira","maxwell","OsvaldoArmando","rclosner","jccorrea","koyonote","denniscking","chanduch","sd2438892","geekard","e3matheus","mbialon","yarvin","rvhani","Predoff","darkness","savethewaves","sdoering","vaporrumors","nevayeshirazi","andysamona","rkwofford","messi1988","anibe","yesimroy","tpiranav","plopezbarbosa","peterkinmond","unitysoe","mjw56","johannchiang","chrismatthieu","yasirmturk","zer09","mparrenovilla","nataliav","lucasdavila","volomike","echannel-leon","rufoni2003","ramonatravels","cpkennedy","NKjoep","witalewski","lonre","stecb","josal","Zul83","Niflheim","ChanCoolKat","umesh991987","marvin","altnerd","insparbo","kmcd","marcofranssen","defiantredpill","BarcelonaRecords1","hbtvieira","kmarcini","lea22","orbotix","sdasinglesclub","buffer","shauncr","ejenkins","yahyaman","burakdd","fjordan","cwholt","yudi-rusmawan","eldios","vascoconde","niky81","mcdave","mcobery","ramen","thePapacy","alexandresaiz","sleighter","riyalein","johmas","chriskelly","andref5","AppSlap","celikmus","bitlag","kareem-abdelsalam","joshuamckenty","jn123456789","egonSchiele","stylepraise","shaw1337","gordonmzhu","erikkallen","ermustaqbal","denisjacquemin","msgehard","robertodecurnex","dcrall","ahto","charleseff","thejspr","twilson63","franciscosouza","sam7wx","jwbecher","eklitzke","serho","vbonillo","jackdracon","brahmasta","giulianoxt","rayelward","jeffw516","jewelrydeveloper","pengper","fyamnky"]} \ No newline at end of file +{"users":["jnewland","pjhyett","cnix","dustym","choonkeat","nakajima","mtodd","bumi","takeo","bmizerany","zachinglis","evilchelu","manalang","mmmurf","hornbeck","mindy","therealadam","vanpelt","alexcharlie","seaofclouds","luke0x","rphillips","Caged","kamal","eventualbuddha","bigfleet","jacques","tim","KirinDave","ddemaree","benschwarz","cpjolicoeur","mmcgrana","mdarby","anildigital","ryanahamilton","entangledstate","coty","broughcut","atduskgreg","liz","brianleroux","kballard","haraldmartin","walf443","ss","elliottcable","joshuabates","eastmedia","mattman","imajes","saimonmoore","hoverbird","Fil","nesquena","membogg","ayn","jbritten","peterba","nick","willcodeforfoo","mojombo","rsl","caffo","khigia","BrianTheCoder","tkofol","dstrelau","sant0sk1","joshuaclayton","cee-dub","tooeasy","quirkey","eduardo","raja","timshadel","rsanheim","tokumine","statik","mattly","xilo32","yaroslav","sr","hchoroomi","lgn21st","purzelrakete","seven1m","douglasjarquin","ihower","freels","adamstac","fauxparse","duncanbeevers","jasonwatkinspdx","spohlenz","joaovitor","mikedamage","alainravet","whomwah","ooodigi","nerdrocket","zmack","mulder","kivanio","vlandham","yizzreel","ryanb","cho45","sandro","ratchetcat","jgross","jasherai","jw-00000","zubin","loe","fred","stuartsaunders","skippy","dgiunta","monde","charlenopires","devn","softprops","madx","lukebayes","blech75","newtonapple","edbond","ncr","boboroshi","holtonma","jhubert","libin","bastos","nullobject","croaky","trevorturk","fabioespindula","nick-b","sikachu","schacon","harper","envoked","guitsaru","brianmario","subwindow","Arthur","sob","tiagowhite","jasontorres","lawrencecurtis","bterlson","mattsears","patrickdet","academician","markpuck","mokolabs","baron","arikan","ryanking","willemderu","entombedvirus","cyx","galfert","heycarsten","shallwelin","sbfaulkner","jaehess","jonathannelson","helo","schwabsauce","gusgollings","adzap","joefiorini","trestrantham","hairballopolis","thetacom","genki","guillermo","tekin","nextmat","hans","colin","Roman2K","kakutani","qrush","hpoydar","goodtouch","LimeHat","grobie","tosh","epitron","inkdeep","voitto","kvnsmth","darrenhinderer","njonsson","bianster","shanesveller","technicalpickles","erikj","lancecarlson","briandoll","digitalextremist","KevBurnsJr","slim","clarkware","jasoncarter","Krishna","kirk","tinogomes","wfarr","intabulas","hardbap","aziz","atmos","robbyrussell","codeslinger","evandrodutra","martinisoft","smtlaissezfaire","larrywright","joshknowles","evanwalsh","jchris","jqr","jbarnette","rafaelss","dsboulder","res0nat0r","sunfmin","topfunky","NigelThorne","supaspoida","yipstar","davidwparker","jinzhu","johnpaulashenfelter","joshua","agile","cored","visnup","calendaraboutnothing","eoin","deepak","dsparling","oleganza","pengwynn","christophermoura","jgagne33","mhutchin","matsuda","zak","railssummit","taylorrf","peleteiro","greatseth","blackwinter","rberger","elim","eric","collin","henryhamon","shinzui","tongueroo","vanntastic","swdyh","peterpunk","kabnot","ozeias","mwilliams","kamipo","bezugen","arthurgeek","fairos","webmat","bonachela","foysavas","mojodna","dwabnitz","fuzzytone","anthonybarone","mkhl","botanicus","kavu","jhsu","delameko","uhhuhyeah","jcf","nrk","brycethornton","maxdevel","ashleyw","zegomesjf","rjspotter","tjweir","slawcup","pjdavis","ngerakines","rwc9u","aka47","Bregor","oristian","JackDanger","amatsuda","josespinal","sleistner","jdp","mkrisher","rbarazi","mattmatt","luisbebop","rcrowley","anotherjesse","semikolon","albertoperdomo","marcric","pardel","rads","altamic","badcarl","Marat","rfwatson","jesseclark","iamwilhelm","rtyler","kovacs","alexvollmer","rkh","joelparkerhenderson","shayfrendt","pcalcado","marcelinollano","jngo","robertpfeiffer","ukd1","jpablobr","alfredwesterveld","matthewford","haws","visionmedia","ekinci","hellekin","paulgrunt","seouri","pauldix","CodeOfficer","manuelmeurer","kristopher","mattyoho","neilmock","igorgue","miyagawa","akm","ieure","mwunsch","kairichard","leah","Siansor","kiko","breily","elmer","vshih","samsoffes","graysky","leandrosilva","blinton","ashchristopher","bensie","yura","adamaig","erotte","fernholz","jamesrose","michaeldv","raganw","sstephenson","capotej","BeamerCola","damon","amiel","iamstillalive","rduarte","jney","rymai","jtadeulopes","caironoleto","talboito","alexmchale","davglass","lian","rondevera","shashi","dira","GreenDragon","yonkeltron","jeanmartin","shelling","tehcurtis","gnlnx","joshng","bartuer","bruce","adamv","yasu","cjmartin","jarodl","jonatas","ronnieliew","polly","nonsequitur","marclove","arya","splattael","mcfearsome","skorecky","jaygooby","iande","brosner","brett","jivko","edwingo","hunab","zipme","mnaberez","nimo","justinlilly","howiworkdaily","johnbender","jezdez","petercoulton","juliend2","dhou","enricob","gigamo","markstephenson","gregnewman","rubify","spagalloco","Xac","attack","esycat","webiest","ogijun","travisjeffery","moongtook","meritt","stephencelis","doowttam","mrchrisadams","riethmayer","utahcreative","bkrsta","program247365","montylounge","renatocarvalho","NYiPhoneDeveloper","novas0x2a","rblackwe","basiszwo","deminew","stan","sgarza","epocRepo","georgi","radamant","munjal","jgchristopher","macro","Gig23","diogenesis","poshboytl","pablete","mpreath","ujihisa","Sixeight","andrewhavck","alexch","skateinmars","darwin","EvanBurchard","cytobank-matthew","kidpollo","kjwierenga","psyche","antrover","andrehjr","iamsolarpowered","horaci","rishav","joshbuddy","rlr","wnetoa","simplabs","alex","dustinwhittle","samvincent","memiux","ktlacaelel","rubysolo","chillicoder","teepark","tonyl","hal0thane","james-baker","stuffmc","sepposade","jastix","vianaweb","FDj","auser","sacrosby","ascarter","tdmackey","julienXX","adurity","carlp","asenchi","mazebuhu","caseyhelbling","mikereedell","verbal","satynos","cloudhead","packagethief","bsy","robhurring","davidx","foxscan","detrain","jawspeak","jschoolcraft","lokeshk","yashh","jrsims","moorage","thisgirlangie","jdamick","dsully","gregf","sjain","hughdbrown","webandy","fairchild","wesbillman","mvj3","scrogson","gtcaz","rcarver","superfeedr","didenko","JonRohan","miamiruby","nelix","rvwoens","coiscir","javan","haru01","dastels","artificemm","docgecko","electricgraffitti","detansinn","chunzi","m3talsmith","priteau","jptoto","amerine","jyr","zodman","chipski","christhomson","dayne","mmalone","ccsmail","jeffp","natebunnyfield","f1vlad","joshbutner","sferik","johan--","joahking","aaandre","dennyhalim","gregcopenhaver","teknopartz","CodeMonkeyKevin","zgchurch","vangberg","benaldred","kaichen","ap0ught","jnbn","holywarez","dambalah","juarlex","nevilleburnell","symlink","mdwrigh2","agibralter","kognate","sroegner","daksis","philipefarias","ajsharp","mwhooker","kalkov","synaptic","wolverian","rnaveiras","jjcall","matthewfl","mathieuravaux","temojin","graphicsop","m7d","bbuckley","gabrielfalcao","mamuso","deepthawtz","marksands","tarellel","josh","KieranP","mrkn","raul","sd-fritze","dapi","jaryl","kylebrowning","jimpick","nikolay","joshnesbitt","maggit","xinuc","marciotrindade","bradchoate","bs","peterz","wvl","csamuel","jamesarosen","joshourisman","kacy","martinciu","osde8info","aliem","gabrielg","jaknowlden","evanfarrar","mivaul","shock","nicksergeant","lucian","Asciant","thoas","bicherele","Csele","uamuamuam","i0n","benhaan","jodosha","JonGretar","evolve2k","jondruse","polera","lr","badboy","mikelim","irfn","tangtao","st3f","thegeekbird","tweak","hackedunit","christophsturm","tobi","fvonx","marcoow","pcreux","vapidbabble","reidmix","jherdman","chrisdrackett","overture8","jits","daz","lazzarello","asoltys","Hates","mgomes","tlrobinson","bluehavana","janl","sah","gussan","brynary","adolfosousa","cypher","wintermi","bemurphy","neduma","nowells","hojberg","muddana","juvenn","jobscry","Sutto","arjunghosh","rorrego","jwilkins","nrolland","marcinbunsch","neophiliac","ranza","dusty","hoggarth","sriprasanna","davidhalldor","josephsofaer","rbriank","andreisavu","dennmart","jrmehle","whistlerbrk","shaper","jrivero","gloubidou","denzuko","dmillar","thisivan","mkuklis","christianhellsten","johndagostino","jots","apillet","qdonce","javisantana","mikeauclair","digx","coreyhaines","rudionrails","jpbougie","brixtonasias","onesunone","bry4n","rhymes","liangzan","kvbik","jongilbraith","visola","suresh","bastih","andrem","r38y","mynyml","bitflut","danielbru","3rdman","cypriss","esdras","benpickles","ducky427","knobe","elkinsware","tpitale","foca","simonw","mrduncan","Xenome","markisisme","al3x","futoase","tomaski","meddah","shakhan","nailor","adamcooke","Hoodow","klacointe","rtomayko","kolber","cashyboy21","luddep","closer","riggasconi","aroscoe","kurotoshiro","angusb","binarydud","chrisb","gvarela","sukhchander","gnufied","Cutpastecreate","elg0nz","ijayasin","christianchristensen","strange","leandro","dirs","zevarito","jpf","mendelbenjamin","brianherbert","yuritomanek","latrommi","tokuhirom","qhoxie","rust","ericholscher","lxneng","lorchaos","rchk","ches","frnz","filipealvesferreira","lucasefe","paulwalker","httpdss","gdrage","jakalada","claudine","joshamos","fgrehm","rdamen","yaroot","jugyo","messa","digitaltoad","orph","galex","boriscy","rafidude","darashi","angrytuna","AdamN","paydro","rimenes","jacqui","sfkaos","dgalarza","imakado","moomerman","Ashernor","pedrodelgallego","BenWard","bashwork","axelator","zeroLaming","toothrot","pake007","sevas","btoone","dallas","danielrmz","kret","nouse","mdaisuke","fmborghino","ibolmo","zetafish","drewlesueur","dacoz","ciju","noise","salax","jotto","toastdriven","mcroydon","tfreitas","ccheever","sxlee87","jmcantrell","acts-human","bastienlabelle","terrbear","mikhailov","joshdavey","hecticjeff","garru","TBD","vancaem","jasonmc","ariekeren","shreekavi","chrisco","michaeltsmith","hmarr","binq","jakedahn","stonegao","jperras","finn","kerberoS","firman","leeky","gamesthatgive","jchaney","timonk","philippWassibauer","danblick","itspriddle","threedaymonk","michelson","tilgovi","jmchambers","jhindle","mtoledo","nhocki","mrtazz","the-architect","schallis","kneath","gustaf","ejdraper","logicaltext","levycarneiro","ktheory","robb-broome","matflores","SleepTillSeven","bencochran","tmm1","infixfilip","jemerick","edouard","ethangunderson","beanieboi","jwelshiv","MBO","gitmate","rok","santosh79","yaychris","BenHall","sirprize","abraham","heatxsink","joshwalsh","grimen","adamramadhan","mzlittle","demet8","jrpz","jeanpaulcozzatti","mtarbit","jstorimer","cacciaresi","r3trofitted","bennyfreshness","sinetris","jrun","unspace","rgarver","gabrielmansour","jnstq","hgillane","cherring","dceballos","kstewart","donnykurnia","plukevdh","diogenes","joshbrown","yolk","bitfyre","raphaelcosta","esneko","yuriyvolkov","unthinkingly","chad","quinn","wmerydith","donspaulding","notthinking","ikarius","jbr","yoshimax","silverfox","jmwinn21","extraordinaire","hartym","mattonrails","vertis","tommg","weilawei","denniscollective","72616b657368","sork","JamesHayton","kennethreitz","kurko","potomak","mmatuson","amiri","dandean","syntaxritual","holman","alimills","hammer","jnunemaker","risico","fritzek","theflow","dnozay","steshaw","bobanj","webtechnologist","PatrickTulskie","kares","miksago","fuJiin","tommychen","simonreed","foremire","LFabien","bagwanpankaj","bummytime","devinus","rays","krisb","Lymskos","zonble","aantix","vorn-coza","techfolio","albybisy","tcol","jufemaiz","pvdb","pcdavid","danopia","chrislerum","peterto","laberge","smokyonion","guinascimento","longhorny","gabe","kbuckler","durran","tricomsol","bananastalktome","jordanbreeding","c9s","alvin2ye","NV","jwachter","pulni","jjungnickel","f440","ratzefummel","krmdrms","mauriziodemagnis","inffcs00","bobthecow","bengold","gciampa","akshayrawat","said","hawx","samuel","michael","ruyrocha","fmmfonseca","chiragrules","raid5","kamui","hsbt","svenfuchs","l15n","steves","pjaspers","chinmaygarde","scotttam","jeekl","kfinlayson","admc","kadel","t9md","meskyanichi","timocratic","timhaines","Marak","openface","tlossen","tekacs","jasonpa","nightsailer","technoweenie","chrismear","benatkin","lloydpick","ryanmoran","Tomohiro","aslam","mineiro","gdagley","rociiu","AieshaDot","kijun","robertjwhitney","macek","willrax","VinylFox","rupa","smallacts","truemilk","alanhaggai","mitchellhislop","cobracmder","xoebus","gretch","juretta","mgsnova","invadersmustdie","tedb","jedschneider","maikelgonzalez","bdigital","raycmorgan","zenmatt","thrashr888","dug","avdi","chaifeng","bblimke","vivienschilis","fd","luckiestmonkey","Locke23rus","berlin-ab","myfreeweb","windmill","briankeairns","ricardojsanchez","angelov","cbmeeks","maetl","thepug","gluckspilz","jamin4jc","netzkontrast","mager","jarquesp","phmongeau","jdennes","danishkhan","bensonk","nano","kjbekkelund","flyerhzm","kanashii","mairon","sekimura","joericioppo","bertzhu","mislav","jroes","jenishkottaram","peterwald","alterisian","artisonian","bcherry","jbw","haifeng","stockhausen","bvandenbos","mlbright","consti","simonoff","suzukimilanpaak","ctrochalakis","acrookston","gnomet","dexterdeng","aderyabin","hwijaya","catman","vesan","frederico","zzak","IsraelAgNouhYattara","mikecampo","dsueiro","reeze","stevemckenzie","avelino","stinie","thbishop","sotakone","srobbin","krongk","yaotti","tobym","robhudson","ryanbriones","jcpbacon","zhengjia","awilliford","moubry","rm","cyclades","mikethomas","dkeskar","brianlee","panggi","durbin","fmela","Shekar73","infynyxx","sorenmacbeth","unindented","kevinpanaglima","krachot","dvyjones","joshOiknine","arkx","rrichards","error400","lagsalot","JSilva","twitoaster","rbrant","shaiguitar","jmorganson","electronicbites","fredwu","jlertle","DHoffm","Tyrant505","CodeBlock","jgrevich","fpauser","lastk","scifisamurai","runawayjim","ryana","amanelis","ponzao","michelmelo","edsinclair","vshvedov","marchdoe","devi","allanberger","alup","tventura","cobra90nj","berkerpeksag","neviim","westoque","Rud5G","cjwoodward","gildo","1ed","Axispower","icaruswings","DasIch","fredpalmer","al3d","codylindley","Bushjumper","phoenix24","pcora","welterde","VijayM","sr3d","hotoo","nwjsmith","brianjlandau","hemanth","johnknott","MatthewCampbell","mwmitchell","asymmetric","glitterfang","ptn","kraih","ono","myuhe","jque","GVRV","d-r","danthompson","zerd","selman","elsewares","unes","Debadatta","monoceroi","gchandrasa","darknighte","jreading","kron4eg","minad","cdmwebs","inuki","nabeelmukhtar","hornairs","goyox86","gosuri","revans","michaeldwan","helianthuswing","christiansmith","kidrane","melborne","darkhelmet","ikbear","blowmage","maxjustus","sebleier","mattb","GeoffTidey","warehouselabs","german","itsmeduncan","dneighbors","fireflyman","mattheath","madwork","marcosvm","rafmagana","rafaelgaspar","arden","flyfireman","saggim","mnelson","etehtsea","xantus","byrongibson","mopemope","gillesfabio","ZeuQma","tkaemming","jackhq","connrs","jpang","amorton","rubyorchard","ghg","remiprev","michaelparenteau","harikrishnan83","eddieringle","krekoten","andmej","mak1e","seungjin","christofd","gfx","mechanicles","drak","olkarls","thheller","devreq","nanek","laripk","jefflab","rick","tapajos","denmark","richardiux","dfbrule","yrosen","ebruning","bts","AzizLight","audy","ballantyne","huerlisi","codepuzzle","khasan","nikochan","pmh","jexchan","designrelated","codykrieger","edorcutt","iamacourser","rowedev","lardissone","wxmcan","threez","cjkoch","gigq","marugoshi","tianyicui","earcar","fadhlirahim","ccollins","adanmayer","tpeden","jsocol","TaurusOlson","jaksys","leandrocg","rube","richard6363","emddudley","JensNockert","he9lin","tmilewski","rishikulkarni","wescleymatos","mootoh","ganesan","rodrigosdo","tonktonk","skaufman","jurajpelikan","fcurella","vic","eston","hiteshmanchanda","tsigo","plang","avsej","kanzure","johnturek","percyperez","vorushin","jakemcgraw","fushang318","juniorbl","alanandrade","kenn","mitchj","webdestroya","supairish","seanhellwig","guilhermechapiewski","rainerborene","zonovo","vertocardoso","vinioliveira","hotchpotch","pch","jeffself","markmhx","Archonyx","indrode","mmaheu","sigardner","kulesa","phsr","ericflo","andyferra","shurizzle","renatoelias","klandergren","fabiomcosta","johngrimes","gleuch","ecksor","lucapette","achiu","benbjohnson","selvan","ey0t","bray","komagata","longda","pixelballistics","a2ikm","hoffmann","Rich-McGrath","abelperez","galvez","mkempe","amiridis","sfgirl","makeusabrew","dragoscrintea","grzegorzkazulak","jcmuller","JustinCampbell","dpree","jquattrocchi","sri","neonsunburst","danielemilan","poseid","chancegarcia","Prog4rammer","HTApplications","cassiomarques","andrerocker","SixArm","andrewsmedina","gaubert","parabuzzle","diogosantos","seanmccann","particlebanana","CloudMarc","majtom2grndctrl","javichito","jk","arunagw","esfand","plentz","caueguerra","albertoleal","adrianoalmeida7","guilleiguaran","donaldw","TaopaiC","stephenbreen","dissolved","ikaros","andrefaria","aporia","benlambert","coolgeng","kitop","mitukiii","kayaman","sLLiK","vmseba","nkchenz","vs","jtsay","arlolra","adaoraul","jpadvo","joshaber","ebeigarts","allenwei","nervetattoo","bostonbasso","saki","ajbolanos","seppuku","sonicgao","ainvyu","cbrammer","hostsamurai","vatrai","acadavid","danengle","paddydub","noqqe","zporter","namley","aaronky","rdegges","weatherpoof","tomxander","skyfive","Becojo","saysjonathan","awayken","nataliepo","sednova","mrigor","blatyo","cwaring","sshirokov","kam","joshfng","martintel","skorks","vamsee","Lispython","hansef","seenmyfate","kitt","Markitox","Antti","albertz","samverekar","fredrikmollerstrand","thesp0nge","kdepp","ptzn","wusher","phongvh","sayz","qbyt","mkomitee","mlen","jmanon","duk42111","Naoya-Horiguchi","brianlovesdata","dreamcat4","pxr","neiltron","tauil","jondot","phonx","mininaim","6","Mattia","blambeau","DougTabuchi","idorosen","rachelmyers","capthy","liwh","brunoarueira","DrPheltRight","csanz","scott-stewart","jacobrelkin","shaliko","AAinslie","jamierumbelow","abukhait","scottlabs","tjhanley","mmonis","mrkamel","christiancurland","clyfe","thecocktail","taicki","stephenallred","zires","acadopia","MateuszWijas","zentrification","touchinspiration","reddyonrails","mportiz08","krizzna","nmelo","andrewsardone","kotp","rossta","anups","jeffcarroll","efritz","jpogran","jdp-global","hyperbolist","bf4","lenzcom","ardwalker","L42y","sosedoff","Ajmal","abhishekmunie","kbaldyga","kamzilla","delonnewman","peter-murach","sputnikus","benwr","wijet","marlonglopes","TheFox","kblake","senny","azer","milann","ipavelek","elitau","zyan","farnhizzle","hamzakc","Kudu","arunjitsingh","azizur","kitenge","eatcpcks","lusis","gvt","jasonmelgoza","jichen","Zeelot","albertobarrila","procyon","Wackybob","curbina","goosetav","ghindle","vicmiclovich","klebervirgilio","offby1","kaaliputra","Silanus","scopevale","netzflechter","poutyface","raulmangolin","dmshann0n","cricketgeek","VikramRao","mungomash","bradheitmann","kainosnoema","iromli","jwelty","sayem","tobsch","travisanderson","lightyrs","muellmat","cameronmcefee","hector","kjetilod","kinabalu","jglee1027","andrew","metiny","dnurzynski","redpanda","necroua","karmi","lgaches","mabonyi","vyatri","korczis","67ideas","pcunnane","dpbus","ashneo76","joshmattvander","liangcw","vineetbnagaraj","jmatraszek","mkitt","pmandia","yassersouri","yudmiy","arthurix","osebboy","baant","programaker","busticated","emilpetkov","mrdg","DamianZaremba","malikbakt","georgecalm","danielribeiro","Dirklectisch","sup3rcod3r","raeffu","jitterizer","hectcastro","rudolfochrist","excid3","lampr","voidnothings","tsenart","nt","Amokrane","levicook","qnm","technolize","aodag","sansumbrella","MindTooth","scott2449","X4","mrcaron","randomor","liuzhoou","marciogm","ardiyu07","dannymcc","nfedyashev","batuhanicoz","cognominal","sax","vybs","richardrasu","xcoderzach","lucamaraschi","mohnish","pcardune","madari","TimothyKlim","nbucciarelli","jwoertink","freakyfractal","enc","lite","aanoaa","tomvleonard","mikaa123","jeanregisser","scheibo","Psli","einux","konputer","dzello","Nilloc","cmeiklejohn","georgemandis","tembamazingi","mconnor","nerdmom","spearse","larsburgess","burnto","franciscoj","sleparc","rafaelcaricio","ajray","chacha","hasanyavas","pedrolopez","timknight","jacksinn","huacnlee","justinbaker","aswadrangnekar","Captainkrtek","DrewFitz","sleepdev","tharkoos","youwannaknow","doud","tmcgilchrist","chlayverts","thomvil","digitalpardoe","sposborne","parkerl","carlosdelfino","omgitsads","tuhin","RLovelett","eregon","sanxac","ezuelectrock","tshauck","mtsoerin","hiromitz","araee","bogdanmuresan","kloderowski","msarvar","drydevelopment","1anre","icco","joestraitiff","jmileham","Refreshe","tansu-uslu","hoverlover","handyjq","xlarsx","bojovs","ajmi","fuzzyfox","lexxx233","diversen","fabianoalmeida","martinlindelof","srih4ri","adminian","pitr","ffontouras","Kjata1013","thasc","newtriks","ashbaker","Ameero","zahir","sunpech","EdlinOrg","snstoyou","nope","elemel","smly","prathe","P6rguVyrst","srisnsris","s3w47m88","semicarry","hidde-jan","rowoot","TBush","AXJ","stevedeneb","adarshp","RootSpeaking","kevasdf","Purandhar","hyesushin","DenDen1337","JBean","amhnews","aseba","diegopacheco","macluq","tonycasanova","shaoyang","rmdort","morganwatch","alexandersanz","LinGmnZ","sjh","dalpo","brentsmith","Zolomon","liveink","diulama","tanelpuhu","rcarrieche","dte","RyomaKawajiri","punytan","yoquankara","haoqili","knowncitizen","dinhkhanh","psalami","krishnanagaraj","cespujunk66","pcurry","wyattdanger","shingonoide","ngoatvm","eriknrd","philfreo","Rahulitsmca","gohavefun2","bertjwregeer","nmumen","aumgn","dobcey","davidohalloran","jowido","marksteve","dabio","rmicoy","madewulf","bosism","Tipertuba","PushinPixels","tgdn","shariefsk","m0nkey","henryleacock","r3clus3","anagri","mlareo","neil477","kdonovan","yamunamathew","berlinbrown","antawara","Cotizado25","gjorquera","Dushyanthkinjarapu","laCour","oooo723","roblecca","pmaingi","gcampbell","robeastham","jgdreyes","Caustic","morgankeys","chesleybrown","zzazang","adanoria","millr","MikeBott","keitsi","zlangley","avalanche123","ilot3k","bendiken","jeheald","ashsmithco","mycroft","lachezar","borahMoloy","cliffsull","goldenandroid","KuraFire","ngpestelos","troessner","Arnab1401","ujjwalkhanal","qadir0108","ihd2911","Firsh3k","lifeisrisky","nevans","munro9","fagiani","lojikbomb","chrisledet","ariel","marcosanson","rem","shivakantmanch","MMLK","skattyadz","mhaidarh","joedynamite","dimasaryo","trico","shaunmichael","vs4vijay","afj176","stevennathaniel","gujiao","olamedia","giupo","whatrocks","stakisko","mhockelberg","shalo","devaraj","attomos","xeneizeyorugua","ryanlecompte","jrk","deryldoucette","jacknagel","togetherville","zypher","kyledoherty","yakomoca","sastha","KMASubhani","tejasc","ErikRHanson","ghais","dontcare4free","streeter","ambreenhussain","mischa","JelenaSparic","logeshpaul","victusfate","Avaruz","hendrolaksono","jeffgw","geeksourcer","wizardwerdna","elliottgoodwin","speric","chawei","blackdoc","mgp","martinemde","tsolomko","six","jayeshinho","jakeguza","bleikamp","ryanpao","ddacunha","mrb","mamdohreda","colinvivy","piyushchauhan2011","correcto","mawaldne","swishstache","Rafe","neelvad","seriouscomedy","trendsetter","beenhero","Amper","ryanKelleher","muehlburger","marktraub","rugers285","ArtemMyagkov","oscardelben","yvesvanbroekhoven","citrus","dennismdel","SupplyBoys","italiano40","darokel","Orton","lobr","sdrkyj","ggppwx","AngeloR","zergmk2","premjg","afaolek","tobrien","fash","susanmccormick","maoer","dtrebbien","tahhan","mzahir","matthewborn","patriciomacadden","nawaidshamim","JudePea","mehrzad","ericchen0121","dominiclovell","antonr","Fir2011","mhenke","bloudermilk","PrashanthRaghu","thecoffman","hozumi","jed","baguo","grumpycola","rht","timerider","thiagocaiubi","carlop","mibbo","Imados","frankwiles","efeerdogru","realpeterz","jordanndaviss","bytecollective","brianritchie","cndv","dfd","panckreous","mike762011","MalsR","case27","mono0x","jonassm","asaaki","jhnmn","huhong","TRAVEL4FREE","marcelomilo","nmudgal","coldFox","ctubau","danlister","apurvrdx","armandogalindo","jeremysolarz","mustardhamsters","bfirsh","dmmalam","a4extra","ezkl","michaelowen","sujayhuilgol","chadlomax","dazagrohovaz","DeveloperAlex","c1c2ai","trey","joekhoobyar","jianinz","ugtkbtk","paparts","netoxico","TeacherPond","becked","tuyennguyencanada","motord","eklipse2k8","ZoomZhao","samqiu","purban","cyberorca","imonyse","jeemar","gazay","davejacobs","bwvoss","Bensign","dann","nickaoscarter","gane5h","glowindark","arielo","joannecheng","hughhefner8","broccolini","bherrup","starmbl09","tothebeat","sabram","qianthinking","iowish","lalitnama","ejr3gan","denis-bykov","cbmd","cleercode","batasrki","dstanek","markmarch","suprsankr","rcroxyosox","treeder","baddogai","froots","haoshubin","uirusan","dzhulk","aaudu","lekkerduidelijk","mcchang","pgebhard","scottgrey","dbergey","carlitosway0","cdadia","lepture","b1naryth1ef","janjohannesson","AndreyChernyh","dynjo","maxstepanov","JonRowe","attymannyluna","cooper1388","vjkaruna","fdd","GoranHalvarsson","Rajesh1213","Triopticon","ramazanayvaz","datl","jeo4long","zeroonnet","cdog","abstractj","anirudh24seven","danielwrobert","laparicio83","balupton","austymenko","avdezine","danieldyzma","jasonbuck","amasad","sideshowbandana","BrianStorti","supercleanse","TheThumbsupguy","alexcsandru","Stdubic","betawaffle","minamipj9","kylpo","ricardovaleriano","adrijlee","hlh59","chazlever","krmboya","vanm","MIchaelChua","mdjohnson1","JeffBrown711","rishabhsrao","dustMason","theLearningChan","malandrew","sac2171","Omerooo95","rnpinc","ivandro","syncopated","arnklint","jayeola","JJMoy","rahman86","josephmisiti","jfilipe","cjcnance","KingsgateRas1","chambaz","sjamayee","aelam","imanzarrabian","gaochunzy","goopi","michaelkrisper","deonomo","codejoust","aroc","cavalle","johnnyhuman","adimitrov","jshr","ssnau","caryhaynie","timmolter","spadin","mlong168","gurmeetkalra","new-top","trondga","maikeru","jamster","jsy","tommyhendr","Hasgaroth","ZephyrSL","rjyo","zephyrpellerin","neilparikh","beata","makestory","haneez","mdhabib","PaulKinlan","cheche","tyshen","bhxtl","osujikenneth","ketiko","frknlgn","katRHS","igrigorik","marianay","detroitexposure","Surgo","mindgap","hiroyukim","DilipSabat","espengra","soubhiks","jaybrent00","tikva","jessestuart","mtanas","redserpent","shukydvir","leoy","stylecoder","coryfoo","prashanthbr","robots2020","sidna","cmes","johndel","diogobaracho","markiBOY","tvkonline","shiawuen","dipak8959","rfosta","nickgoodfate","RiverBridge","fay","benza","karichel","psychicin","gag0q","kl365","nmccarthy","julien51","amylv","abinav","bramsdenteuling","AnonymousCow","ioncache","iesta","cemsisman","Ade147","seamusabshere","doublethink","claudio-alvarez","bird5230","anilanar","debugging","rupakg","ShaneIsley","wicz","roastgoat","dilhamsoft","sh4dy08","roboteti","TRMW","rahulsingal14","sanjayts","nhunzaker","baldrailers","Korrawit","frode","thorsteinsson","iveney","endel","jose152","ZhengYang","Keeguon","rahul2011","iainp999","maveonair","SirCodington","sclm","snapette","dshefchik","manderson2080","djohnston08","pirateking","giftedsam","iyerlabz","alejandrolechuga","janela","BxCx","mifan","enestanriover","kernelfail","prinxezzlja","macknight","Girllovers","AquaGeek","charleskline","Foggybtmgirl","ryanatwork","plainspace","stw","naiquevin","huangjunwen","valeh","carhartl","roycefu","tmlee","williamrh","ZachWick","zhuangbiaowei","Baker1904","Skrizy","NageshJatagond","vrillusions","geekrohit","satlavida","cleichner","jhenke","beingnessa","mcgoooo","Bloophub","punklibrarian","abelmartin","take-cheeze","petersonferreira","maxwell","OsvaldoArmando","rclosner","jccorrea","koyonote","denniscking","chanduch","sd2438892","geekard","e3matheus","mbialon","yarvin","rvhani","Predoff","darkness","savethewaves","sdoering","vaporrumors","nevayeshirazi","andysamona","rkwofford","messi1988","anibe","tpiranav","plopezbarbosa","peterkinmond","unitysoe","mjw56","johannchiang","chrismatthieu","yasirmturk","zer09","nataliav","lucasdavila","volomike","echannel-leon","rufoni2003","ramonatravels","cpkennedy","NKjoep","witalewski","lonre","stecb","josal","Zul83","Niflheim","ChanCoolKat","umesh991987","marvin","altnerd","insparbo","kmcd","marcofranssen","defiantredpill","BarcelonaRecords1","hbtvieira","kmarcini","lea22","orbotix","sdasinglesclub","buffer","shauncr","ejenkins","yahyaman","burakdd","fjordan","cwholt","yudi-rusmawan","eldios","vascoconde","niky81","mcdave","mcobery","ramen","mybuddymichael","alexandresaiz","sleighter","riyalein","johmas","chriskelly","andref5","AppSlap","celikmus","bitlag","kareem-abdelsalam","joshuamckenty","jn123456789","egonSchiele","stylepraise","shaw1337","gordonmzhu","erikkallen","ermustaqbal","denisjacquemin","msgehard","robertodecurnex","dcrall","ahto","charleseff","thejspr","twilson63","franciscosouza","jwbecher","eklitzke","serho","vbonillo","jackdracon","brahmasta","giulianoxt","rayelward","jeffw516","jewelrydeveloper","pengper","fyamnky","robinboening","Qzi","kewin2010","ossreleasefeed","strategit","mceachen","wawin","MarceI","dhagerty9009","vincentv","patrickbajao","swcool","xvfeng","thejeshgn","wbqtac","gsaly","dstegelman","cococoder","zeeshanlakhani","joeyliew7","lynda","anderslemke","thesimplecoder","gokulk","cfhcwebs","croddin","codereflect","dragon3","xuancongwen","bschaeffer","camilohe","seanhaufler","kenziecute","brawnski","hameedullah","Zearin","biblesamacharam","pendomena","Interrupt","ddispaltro","darwyn","anthoula","d10","fphilipe","noppanit","devGabriel","caseyohara","jeffreyengler","jsjohnst","spaceagecrystal","alanpca","phoenixxz","jianxioy","gnugat","tengyong","abuiles","jorgeecardona","jdham","Abranomos","mattevans","didxga","BenConstable","n8tr0n","mvrilo","akasame","oldirty","scottmangel","imd23","kpachnis","kr1sp1n","gidmakus","impulser","robmaceachern","mogria","wrb302","DBozhinovski","ttakezawa","Mckndsnco","maca","milkshakes","araslan","annmary","joycse06","DragonI","nicktran","francov88","luke-gru","cmelbye","plusjade","mooch","sgerrand","yankov","aksh","jemoiea","paulorcf","LeRoove","poptart","adamlapczynski","daegren","BaneZhang","Raki","ZiPlague","statico","mafis","deviscortez","kcnickerson","lynnwallenstein","zupolgec","tschellenbach","wallin","jomonjohnn","kkjorsvik","musaic","carlo2301","lxcid","glhuilli","extofer","Demenza","zdk","tsrajanr","emerleite","eturk","bgilham","fazli","bobcol","fleufleu","DavidAntaramian","YorickPeterse","Julzzz","tunght13488","joshduffy","spurslinux","terita","test84","sialan","McPhish","theduckcult","mg17-2","sebastianmoreno","kaikuehne","snytkine","aatif-naziri","axiomsofchoice","jinseyaluji","noogle","hinbody","psychophrenia","shaon","rizalp","ndres","edison","apcrash","monaxide","arfo90","anuprk","danho123","kadirpekel","dideler","basicallydan","Rendez","satishchandra","matt-hickford","coudenysj","jennycasteel","danroux","bottos","InkSpeck","pegasusplus","devderek","timurbatyrshin","yuchi","dmitrybelyakov","lukequaint","AndrewDavid","tetuyoko","Pa-Sky","danielocallaghan","robertomiranda","andersonfreitas","jpdubois","balasatyam","emmix","bryanmikaelian","smholloway","moos3","Myuzu","msabramo","freesoft","bangnab","prakashrai838","megsk","rono23","StarsoftAnalysis","rujmah","energee","krettig","qza","pandaboy","scott-gc","Pawz","bradpurchase","scristian71","nidarshan","adheputra","Trenker","johnattebury","Zaxis99","enelson","adorohovich","Lost-dog","stefanooldeman","qinguan","sachin-handiekar","eserra","thewiredman","mattash","hswolff","travishaynes","COMFORTOLUSEYI","ladylaia","MyRealityCoding","hiteshgoyani","mayhugh","katherinecopperield","liufengyun","mueblesguatemala","jcihain","tommyz","ainokna","giulianojordao","thaihau","orangewise","NARKOZ","mithun-daa","koganemusy","jorygraham","maketank","humbleSage","yapjanmichael","miggy","bulteau","jasonmel","serghost","vissi","DipendraGurung","happjon1","Frahaan","matiasmoya","themanuel","paolodedios","akostrikov","hugopt","linusjunya","skryptosaurus","majix","ariellephan","alimon808","intertribalmediawoman","svoloshin84","terryjbates","beingzy","FingerFeat","ventura15","DrakeRider256","resaprakasa","Amirul","mattlanham","sarsou","anatolyborodin","viralife","deepak-muley","camfortin","sturdy","monsterpatties","Diego81","punktilend","stefanprutianu","bohwalli","sixbit","chhantyal","bennytjia","jianzhiqi","robparvin","twu","JamesO","salloo","faneshia","JoshuaRamirez","CarlosCR16","hasantayyar","juliangruber","edavis","Yhippa","bokononistCoder","thepixelcoder","rprakasam","anjieya","docteurklein","jcliff","Murhaf","merrittenterprise","seanzarrin","t3dbundy","khanov","fearofcode","theoaks","xsole","miniroo321","chandu2varun3145","nixon","don-neufeld","valkyriesavage","halvors","joapsk8","adrianss","jwestredhat","ozzycodes","ua6ta123","glorieux","sevennineteen","captain-lightning","jordhy","bortan","anurag0535","stulentsev","Tusharlaroiya","prakash01","ikainn","get","Dzonatas","andamtech","sepdo","58bits","sabergeek","menot","jascenci","itwy","higgledy","waqarkhan","ric1950","abhishek0a","johnnykhil","salvianoo","omarf235","dossy","emcgurty","Skw33d","HerryOS","joshangell","ROBERTOAJR","env","lee0741","anilv","efekarakus","tijmenb","codeanu","sunnybarmota","Alex001001001","BrettBukowski","drogoff","gurkanoluc","alexanderpine","gkmngrgn","houcemlaw","alexginzburg","chetopunk77","trivektor","JennYung","omid55","jessemiller","swistaczek","samsonw","tathagata","tyzy","displacement","lindasalas","thontaddeo","hjdivad","dolatow1","thekerker","mikepack","sambacore","cntombela","Mieshon","vkartaviy","dfjones","robochuck84","pjg","opendomain","vanilacreate","khazamondo","pawankjajara","Mcneri","christus","goshakkk","somehume","jaitsu87","tetsuwo","garry420","jithinoc","dezmozz","jesswinter","abdulapopoola","smartweb","malroc","stevemckinney","GlenTrudgett","yaohuah","KOBA789","fugao","iraklid94","adnanchowdhury","alexishughes","yarchiko","rkjaer","kheme","ckilimci","eastok","gt50201","Tearjerker","serradura","waoywssy","austin908","tmaeda","ecarreras","yvesh","roni5","flixic","kschiess","ryanAbbott","Sophian","Pathum","barrycorbett","unknownnf","brok","ymirpl","twalve","jygeer","rongok","plainboy","yusukebe","Slike9","zxcvbnm4709","ispuk","pampalida","miguelbermudez","LordStandley","anaxi","tejaswidp","fernando9096","ossxp-com","KHaegwan","radube","killdream","rgonzalezpirker","warrenjyoung","hooptie45","saurabhsharan","chousho","debator","waifung0207","alvinkatojr","interactivenyc","1lj4z1","susanfelljohnson","paramaggarwal","batatinabobby","Limes102","matrix-revolution","tophtucker","lsandeep83","davidjeff","habzy","ptmardika","jast1986","VictorTango","scullkid","powlow","Favorlock","chiller345","galtech","vipulnsward","hugomastromauro","ssmith1975","madho","strugee","sbrown345","waferbaby","farfaj","alexgaribay","kstephens","seanli","greenyDeath","urbanmunki","balbaugh","companygardener","gnepud","andrewdisley","salspaugh","lazarofl","michaelokeefe","iftekharanam","jakubsvehla","goatslacker","FINESSE50","tjor","yetanothernguyen","vijaykumar-koppad","AdUki","sarnzzle","aajiwani","outsidefactor","premdewli","JulioPolo","saranjith","subodhinic","felipeguerrabr","gdm9000","ppasnani","cparker15","tcowley","HarleyRay","fuentesjr","SteveHerron","JackCA","kingbin","shakeel","benjaminbytheway","barbietunnie","arthith","AmyBearty","fbruges","amardaxini","lvhkhanh","TheCodeKing","aandnota","Macint","eknopf","Isaackmo","ddrone","bseanvt","drupalista-br","gqlewis","seanhelvey","sid140","razmakhin","spacez320","dudektria","sowawa","abhisheksharma","spirityy","andysolomon","jqcoder","zeekay","tylerlong","yukihr","infinityloop","heinrich-S","rrajkowski","Savion","hohmann","tt5609","ryojiosawa","xiaoyafeng","ltganesan","kdsoo","malikwahajahmed","bbatesmanb","Grekz","0rlando","germanluckboy","ConnorLee","eniev06","NAzT","monacate","windylcx","Corm","alyedu","grauwoelfchen","VictorTolbert","nobukatsu","azeagman","slander36","scottkidder","quaker66","fceccon","kfei27","gwilson1997","kaldon","moveck","Nico-Taing","sgulyaev","jeremywen","jtp8419","nickforce","cesararevalo","gcbsumid","abe4tawa8","Kobinsky","shijingbo","ckald","bilalabdulkany","mandarmulherkar","killertim1","nihen","vijayhc","CRahul","AmyTagava","humanitarian","jdizzle76","petersmileyface","l3dlp","epireve","PsychedelicBabe","mariusstratulat","RachidBkh","kranthiakula23","binary132","Red4life","zlulcon","munintech","chrisrowe","fdicarlo","fcruzt","runeroniek","swiss181","gadinkid","naughtystyle","MannyAcevedo","earth2travis","exia","vcube23","briantlc","andrewaynethompson","ckolderup","Maghawry","chaitanyav","osukaa","nottinhill","qzchenwl","samnang","saw123","faman06sw","frogotopia","bradlucas","Visgean","JMulligan","Lovestick","AMervin","daniellqueiroz","Deathmoon","campherkurt","Rudeboy7","wdt1512","gnnk","DlILLUSION","stanislaw","davidshenba","FeliciousX","Manauwarsheikh","akai","darrenlee","etapeta","qingliuyu","rishijain","verbondvanchristophorus","hardikdangar","Krilivye","dflems","jxin","linexteria","keketa","webmuch","fractalis","paulwoods","butu5","calvinliang","bajah","george-wicked","alanjcfs","chromano","JakeBell","uptown1919","shinvee","katettt","Jkaveri","thejared","cmattson","breezewiwiwi","xfstart07","teleyinex","fadillzzz","jefersonph","17tillidie","Anti-Fun","arjunrao2709","rhnvrm","nickxn","qfsmith1","Abbey","stoplion","safetyscissors","davidmckinnon","KevinR150","alexnotov","podviaznikov","addelyn","razex","Sheldor","codercode","yicrotkd","hemalchevli","K2K5150","VoidStatic","evilpenguin","j04ntoh","charryong","deepakdargade","vlea","qiuguo0205","xxd","JoshuaCE","jsmits21","n0nick","Hungsta","mtaus","N1tr0g3n","ducka","jslmnop","anassabri","seratch","kapilrokaya","riserice78","k3mm0tar","Daemon-Devarshi","soimort","coderprince","maslennikov","nateseay","kamexp","josephhurtado","Brian089","jokefun","dva","alex02","khora","flashburn","Smarty","resure","mhayashi1120","chirs","webista","kerrizor","pransome","GuilhermeCR","Tyusama","liedacil","rabishah","olance","natelaclaire","v4de","gerberduffy","xielingwang","creativityhurts","markur","Coffinfeeder","MotaSay","codenightlong","epequeno","AlainAlvarez","gotgithub","jina","SSE4","grayhound","Yasunaga1","drgomesp","mbtech86","metadave","iwasrobbed","faizadjeradi","ygbr","ljilja","slepcha","vishal-yadav","lagrz","caleb7bris","oyeitsme","malher","epdsn","asimsaeed","gezidan","xiaoguizi87","bigpigroy","5D","shogo807","richardashworth","himabindukandhula","thomb2233","TMKCodes","Funfun","jayesh19","andikurnia","dlboutwe","jackquack","alecasanovaprie","reireina","fiyarburst","sumanganguli","CarlosSaraiva","AntoineE","dorachua","esartorelli","taizo","jolin66","sunilsop","mattangriffel","clskkk2222","jo59nah","mmainguy","9Nautilus","jmflannery","mmacaulay","rolodexter","matmoody","RodDev","blackpixel0x17","MechanisM","KBSGUNS","Toetsenist","stapleup","PabloRibeiro","nnaficy","binaryblunt","mrtwiddletoes","7mattoo","thethumb","eddaddy","timaaarrreee","lckamal","la00mariposa","gregorynicholas","kets","MohammadRijwan"]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,user,show,defunkt,following,dc4e4027f60d0737177e4d793ff8a5de b/tests/data/github.com,api,v2,json,user,show,defunkt,following,dc4e4027f60d0737177e4d793ff8a5de index c3f9748..3a04d2b 100644 --- a/tests/data/github.com,api,v2,json,user,show,defunkt,following,dc4e4027f60d0737177e4d793ff8a5de +++ b/tests/data/github.com,api,v2,json,user,show,defunkt,following,dc4e4027f60d0737177e4d793ff8a5de @@ -1,14 +1,15 @@ -status: 304 -x-ratelimit-remaining: 58 +status: 200 +x-ratelimit-remaining: 56 content-location: https://github.com/api/v2/json/user/show/defunkt/following +-content-encoding: gzip connection: keep-alive -content-length: 2286 -server: nginx/0.7.67 -x-runtime: 26ms +content-length: 2289 +server: nginx/1.0.4 +x-runtime: 41ms x-ratelimit-limit: 60 -etag: "f2fb743e37fd58a65bd0b1eb2f4125ab" +etag: "11dadc10e6f1f70985abd24f75004f8c" cache-control: private, max-age=0, must-revalidate -date: Sun, 22 May 2011 04:32:09 GMT +date: Mon, 15 Aug 2011 19:54:06 GMT content-type: application/json; charset=utf-8 -{"users":["pjhyett","mojombo","francois","topfunky","alexcharlie","atmos","automatthew","jnunemaker","sco","jimweirich","parabuzzle","choonkeat","technoweenie","timburks","guitsaru","jeresig","pieter","3n","ryanking","boboroshi","eventualbuddha","freels","mattly","kballard","seaofclouds","nakajima","dustym","therealadam","hoverbird","monde","cnix","ryanb","josh","willcodeforfoo","rsanheim","jnewland","bmizerany","KirinDave","hornbeck","Caged","takeo","vanpelt","drnic","gpbmike","JackDanger","kvnsmth","rubyist","eschulte","jbarnette","smtlaissezfaire","foca","tekkub","jacobian","thwarted","leah","joestump","kastner","marcel","bs","m","BenWard","sstephenson","ericflo","digg","binarylogic","CodeOfficer","mtodd","karnowski","atebits","tmm1","mmalone","stephencelis","mschrag","verbal","qrush","jmhodges","tomaw","maddox","cliffmoon","jonforums","besquared","antirez","miyagawa","jquery","facebook","brianmario","simonw","rtomayko","kneath","jamis","brosner","chrisdrackett","jchris","jezdez","alex","gregnewman","mdirolf","tuaw","harperreed","threedaymonk","technomancy","rackspace","37signals","Sutto","brianjlandau","slact","pauldix","brynary","joshknowles","sd","trotter","fhwang","robhudson","ericholscher","idangazit","justinlilly","quirkey","rcrowley","bitprophet","mitsuhiko","malcolmt","djangrrl","markpasc","adamwiggins","peterc","al3x","mnot","adoy","fredreichbier","juvenn","jtauber","stevedekorte","davglass","trustthevote","ice799","DrewDouglass","andreasronge","dbr","bry4n","ushahidi","jpf","trek","jrk","mcarter","toastdriven","eric","palewire","thedaniel","ry","jessegrosjean","ultrasaurus","sarahmei","palm","notahat","tinymce","schacon","blackwinter","merlinmann","joehewitt","CaptainSqually","Jaymon","square","techcrunch","yahoo","sixapart","LukasRos","adamstac","pengwynn","brandonaaron","holman","evaryont","Tim-Smart","mkhl","mustache","chneukirchen","sr","leafychat","penny-arcade","adamsanderson","joericioppo","rupa","kennethreitz","raycmorgan","jed","consti","ericdwhite","ianb","eston","rojotek","eddit","tapajos","funkatron","joshaber","rentzsch","adamv","nedap","bryanveloso","rodjek","peff","luckiestmonkey","amiridis","frogandcode","karmi","jashkenas","igrigorik","bokowski","marijnh","judofyr","zbrock","quentinberder","kevinsawicki","bleikamp"]} \ No newline at end of file +{"users":["pjhyett","mojombo","francois","topfunky","alexcharlie","atmos","automatthew","jnunemaker","sco","jimweirich","parabuzzle","choonkeat","technoweenie","timburks","guitsaru","jeresig","pieter","3n","ryanking","boboroshi","eventualbuddha","freels","mattly","kballard","seaofclouds","nakajima","dustym","therealadam","hoverbird","monde","cnix","ryanb","josh","willcodeforfoo","rsanheim","jnewland","bmizerany","KirinDave","hornbeck","Caged","takeo","vanpelt","drnic","gpbmike","JackDanger","kvnsmth","rubyist","eschulte","jbarnette","smtlaissezfaire","foca","tekkub","jacobian","thwarted","leah","joestump","kastner","marcel","bs","m","BenWard","sstephenson","ericflo","digg","binarylogic","CodeOfficer","mtodd","karnowski","atebits","tmm1","mmalone","stephencelis","mschrag","verbal","qrush","jmhodges","tomaw","maddox","cliffmoon","jonforums","besquared","antirez","miyagawa","jquery","facebook","brianmario","simonw","rtomayko","kneath","jamis","brosner","chrisdrackett","jchris","jezdez","alex","gregnewman","mdirolf","tuaw","harperreed","threedaymonk","technomancy","rackspace","37signals","Sutto","brianjlandau","slact","pauldix","brynary","joshknowles","sd","trotter","fhwang","robhudson","ericholscher","idangazit","justinlilly","quirkey","rcrowley","bitprophet","mitsuhiko","malcolmt","djangrrl","markpasc","adamwiggins","peterc","al3x","mnot","adoy","fredreichbier","juvenn","jtauber","stevedekorte","davglass","trustthevote","ice799","DrewDouglass","andreasronge","dbr","ushahidi","jpf","trek","jrk","mcarter","toastdriven","eric","palewire","thedaniel","ry","jessegrosjean","ultrasaurus","sarahmei","palm","notahat","tinymce","schacon","blackwinter","merlinmann","joehewitt","CaptainSqually","Jaymon","square","techcrunch","yahoo","saymedia","LukasRos","adamstac","pengwynn","brandonaaron","holman","evaryont","Tim-Smart","mkhl","mustache","chneukirchen","sr","leafychat","penny-arcade","adamsanderson","joericioppo","rupa","kennethreitz","raycmorgan","jed","consti","ericdwhite","ianb","eston","rojotek","eddit","tapajos","funkatron","joshaber","rentzsch","adamv","nedap","bryanveloso","rodjek","peff","luckiestmonkey","amiridis","frogandcode","karmi","jashkenas","igrigorik","bokowski","marijnh","judofyr","zbrock","quentinberder","kevinsawicki","bleikamp","kamzilla"]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,user,show,mojombo,640a810b9b927be6912b70d53d6b0eb1 b/tests/data/github.com,api,v2,json,user,show,mojombo,640a810b9b927be6912b70d53d6b0eb1 index c3838b2..f76739c 100644 --- a/tests/data/github.com,api,v2,json,user,show,mojombo,640a810b9b927be6912b70d53d6b0eb1 +++ b/tests/data/github.com,api,v2,json,user,show,mojombo,640a810b9b927be6912b70d53d6b0eb1 @@ -1,14 +1,15 @@ status: 200 x-ratelimit-remaining: 58 content-location: https://github.com/api/v2/json/user/show/mojombo -x-runtime: 23ms -content-length: 391 -server: nginx/0.7.67 +-content-encoding: gzip connection: keep-alive +content-length: 391 +server: nginx/1.0.4 +x-runtime: 38ms x-ratelimit-limit: 60 -etag: "45a6fa1730ba70b40ccd595130b2390e" +etag: "1e5272c81749101c16c8d7f8239819ba" cache-control: private, max-age=0, must-revalidate -date: Mon, 11 Apr 2011 14:46:22 GMT +date: Mon, 15 Aug 2011 19:57:56 GMT content-type: application/json; charset=utf-8 -{"user":{"gravatar_id":"25c7c18223fb42a4c6ae1c8db6f50f9b","company":"GitHub, Inc.","name":"Tom Preston-Werner","created_at":"2007/10/19 22:24:19 -0700","location":"San Francisco","public_repo_count":49,"public_gist_count":66,"blog":"http://tom.preston-werner.com","following_count":11,"id":1,"type":"User","permission":null,"followers_count":1454,"login":"mojombo","email":"tom@github.com"}} \ No newline at end of file +{"user":{"gravatar_id":"25c7c18223fb42a4c6ae1c8db6f50f9b","company":"GitHub, Inc.","name":"Tom Preston-Werner","created_at":"2007/10/19 22:24:19 -0700","location":"San Francisco","public_repo_count":52,"public_gist_count":66,"blog":"http://tom.preston-werner.com","following_count":11,"id":1,"type":"User","permission":null,"followers_count":2654,"login":"mojombo","email":"tom@github.com"}} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,user,unfollow,defunkt,access_token=xxx,ec72b726c0324f7a53830c7e38ac6444 b/tests/data/github.com,api,v2,json,user,unfollow,defunkt,c18f5f6c951d12528f9f3c2af3e1e623 similarity index 62% rename from tests/data/github.com,api,v2,json,user,unfollow,defunkt,access_token=xxx,ec72b726c0324f7a53830c7e38ac6444 rename to tests/data/github.com,api,v2,json,user,unfollow,defunkt,c18f5f6c951d12528f9f3c2af3e1e623 index 5142ac5..6222b1c 100644 --- a/tests/data/github.com,api,v2,json,user,unfollow,defunkt,access_token=xxx,ec72b726c0324f7a53830c7e38ac6444 +++ b/tests/data/github.com,api,v2,json,user,unfollow,defunkt,c18f5f6c951d12528f9f3c2af3e1e623 @@ -1,14 +1,14 @@ status: 200 -x-ratelimit-remaining: 58 +x-ratelimit-remaining: 60 content-location: http://github.com/api/v2/json/user/unfollow/defunkt?access_token=xxx -x-runtime: 23ms +x-runtime: 20ms content-length: 53 -server: nginx/0.7.67 +server: nginx/1.0.4 connection: keep-alive -x-ratelimit-limit: 60 -etag: "45a6fa1730ba70b40ccd595130b2390e" +x-ratelimit-limit: 58 +etag: "397a2fcea970a6391b74eabcb62ed265" cache-control: private, max-age=0, must-revalidate -date: Mon, 11 Apr 2011 14:46:22 GMT +date: Thu, 25 Aug 2011 07:18:56 GMT content-type: application/json; charset=utf-8 {"users":["c9s","mitsuhiko","seemant","ask","tpope"]} diff --git a/tests/test_commits.py b/tests/test_commits.py index 38b2055..483846c 100644 --- a/tests/test_commits.py +++ b/tests/test_commits.py @@ -19,24 +19,24 @@ def test_list(self): commits = self.client.commits.list('JNRowe/misc-overlay') assert_equals(len(commits), 35) assert_equals(commits[0].id, - '37233b357d1a3648434ffda8f569ce96b3bcbf53') + '4de0834d58b37ef3020c49df43c95649217a2def') def test_list_with_branch(self): commits = self.client.commits.list('JNRowe/misc-overlay', 'gh-pages') assert_equals(len(commits), 35) assert_equals(commits[0].id, - '482f657443df4b701137a3025ae08476cddd2b7d') + '025148bdaa6fb6bdac9c3522d481fadf1c0a456f') def test_list_with_file(self): commits = self.client.commits.list('JNRowe/misc-overlay', file='Makefile') - assert_equals(len(commits), 31) + assert_equals(len(commits), 35) assert_equals(commits[0].id, - '41bcd985139189763256a8c82b8f0fcbe150eb03') + 'fc12b924d34dc38c8ce76d27a866221faa88cb72') def test_list_with_branch_and_file(self): commits = self.client.commits.list('JNRowe/misc-overlay', 'gh-pages', 'packages/dev-python.html') assert_equals(len(commits), 35) assert_equals(commits[0].id, - '482f657443df4b701137a3025ae08476cddd2b7d') + '025148bdaa6fb6bdac9c3522d481fadf1c0a456f') diff --git a/tests/test_issues.py b/tests/test_issues.py index 72988f3..83e2822 100644 --- a/tests/test_issues.py +++ b/tests/test_issues.py @@ -10,7 +10,7 @@ def test_issue_repr(self): issue = self.client.issues.show('ask/python-github2', 24) assert_equals(repr(issue), '') - + def test_comment_repr(self): comments = self.client.issues.comments('ask/python-github2', 24) assert_equals(repr(comments[1]), @@ -20,21 +20,22 @@ def test_comment_repr(self): class IssueQueries(utils.HttpMockTestCase): """Test issue querying""" def test_search(self): - issues = self.client.issues.search('ask/python-github2', 'timezone') - assert_equals(len(issues), 3) - assert_equals(issues[2].number, 39) + issues = self.client.issues.search('ask/python-github2', 'timezone', + 'closed') + assert_equals(len(issues), 2) + assert_equals(issues[1].number, 39) def test_list(self): issues = self.client.issues.list('ask/python-github2') - assert_equals(len(issues), 5) - assert_equals(issues[-1].number, 53) + assert_equals(len(issues), 4) + assert_equals(issues[-1].number, 58) def test_list_with_state(self): issues = self.client.issues.list('ask/python-github2', "closed") - assert_equals(len(issues), 48) - assert_equals(issues[0].number, 52) + assert_equals(len(issues), 55) + assert_equals(issues[0].number, 59) def test_issue_labels(self): labels = self.client.issues.list_labels('JNRowe/misc-overlay') - assert_equals(len(labels), 3) + assert_equals(len(labels), 4) assert_equals(labels[0], 'feature') diff --git a/tests/test_organizations.py b/tests/test_organizations.py index 120c9c0..1425a07 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -24,10 +24,10 @@ class OrganizationQueries(utils.HttpMockTestCase): """Test organisation querying""" def test_public_repositories(self): repos = self.client.organizations.public_repositories('github') - assert_equals(len(repos), 26) + assert_equals(len(repos), 31) assert_equals(repos[2].name, 'hubahuba') def test_public_members(self): members = self.client.organizations.public_members('github') - assert_equals(len(members), 33) + assert_equals(len(members), 35) assert_equals(members[2].name, 'Ben Burkert') diff --git a/tests/test_pull_requests.py b/tests/test_pull_requests.py index 522b799..a5ae228 100644 --- a/tests/test_pull_requests.py +++ b/tests/test_pull_requests.py @@ -16,5 +16,5 @@ class PullRequestQueries(utils.HttpMockTestCase): """Test pull request querying""" def test_list(self): pull_requests = self.client.pull_requests.list('ask/python-github2') - assert_equals(len(pull_requests), 2) - assert_equals(pull_requests[0].title, 'Datetime timezone handling.') + assert_equals(len(pull_requests), 1) + assert_equals(pull_requests[0].title, 'Pagination support for commits.') diff --git a/tests/test_repositories.py b/tests/test_repositories.py index 497a5c2..750f1e2 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -36,11 +36,11 @@ def test_meta(self): assert_equals(repo.fork, False) assert_equals(repo.master_branch, None) assert_equals(repo.integration_branch, None) - assert_equals(repo.open_issues, 6) + assert_equals(repo.open_issues, 13) assert_equals(repo.created_at, datetime.datetime(2009, 5, 2, 7, 32, 50)) assert_equals(repo.pushed_at, - datetime.datetime(2011, 5, 22, 0, 24, 15)) + datetime.datetime(2011, 8, 11, 11, 46, 23)) assert_equals(repo.has_downloads, True) assert_equals(repo.has_wiki, True) assert_equals(repo.has_issues, True) @@ -56,17 +56,17 @@ def test_search(self): def test_list(self): repos = self.client.repos.list('JNRowe') - assert_equals(len(repos), 44) + assert_equals(len(repos), 48) assert_equals(repos[0].name, 'bfm') def test_watching(self): repos = self.client.repos.watching('JNRowe') - assert_equals(len(repos), 89) + assert_equals(len(repos), 90) assert_equals(repos[0].name, 'nerdtree') def test_contributors(self): contributors = self.client.repos.list_contributors('ask/python-github2') - assert_equals(len(contributors), 27) + assert_equals(len(contributors), 29) assert_equals(contributors[1].name, 'Ask Solem Hoel') diff --git a/tests/test_user.py b/tests/test_user.py index cf5444c..5fe4c5b 100644 --- a/tests/test_user.py +++ b/tests/test_user.py @@ -24,15 +24,15 @@ def test_meta(self): user = self.client.users.show('defunkt') assert_equals(user.created_at, datetime.datetime(2007, 10, 19, 22, 24, 19)) - assert_equals(user.followers_count, 2593) + assert_equals(user.followers_count, 3402) assert_equals(user.following_count, 212) assert_equals(user.gravatar_id, 'b8dbb1987e8e5318584865f880036796') assert_equals(user.id, 2) - assert_equals(user.public_gist_count, 277) - assert_equals(user.public_repo_count, 90) + assert_equals(user.public_gist_count, 278) + assert_equals(user.public_repo_count, 93) def test_followers(self): - assert_equals(len(self.client.users.followers('defunkt')), 2593) + assert_equals(len(self.client.users.followers('defunkt')), 3402) def test_following(self): assert_equals(len(self.client.users.following('defunkt')), 212) From 2ebc10066d1698d32125e2b198f60ad73fcc90f6 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 25 Aug 2011 08:28:56 +0100 Subject: [PATCH 008/129] Force POST for user {,un}follow. --- github2/users.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/github2/users.py b/github2/users.py index 7196a22..a75d5b3 100644 --- a/github2/users.py +++ b/github2/users.py @@ -86,7 +86,7 @@ def follow(self, other_user): :param str other_user: Github user name """ - return self.make_request("follow", other_user) + return self.make_request("follow", other_user, method="POST") @requires_auth def unfollow(self, other_user): @@ -94,4 +94,4 @@ def unfollow(self, other_user): :param str other_user: Github user name """ - return self.make_request("unfollow", other_user) + return self.make_request("unfollow", other_user, method="POST") From 22adc58c8a8f8f1335709e379d6b186759bad866 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 25 Aug 2011 08:30:19 +0100 Subject: [PATCH 009/129] Fixed empty POST requests. Fixes regression introduced in 6feaabb9. --- github2/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github2/core.py b/github2/core.py index cb6bddc..87cc117 100644 --- a/github2/core.py +++ b/github2/core.py @@ -134,7 +134,7 @@ def make_request(self, command, *args, **kwargs): filter = kwargs.get("filter") post_data = kwargs.get("post_data") or {} method = kwargs.get("method", "GET") - if method.upper() in ("POST", "GET") and post_data: + if method.upper() == "POST" or method.upper() == "GET" and post_data: response = self.request.post(self.domain, command, *args, **post_data) elif method.upper() == "PUT": From 0b76ff2facc3c5c4036a887866e5383c8c3c4c18 Mon Sep 17 00:00:00 2001 From: twidi Date: Mon, 29 Aug 2011 21:47:04 +0200 Subject: [PATCH 010/129] Added parent property for repository. Closes #60. --- AUTHORS | 1 + github2/repositories.py | 1 + ...ython-github2,ef4102f3c324bd1ce10d00d1b011f1c5 | 15 +++++++++++++++ tests/test_repositories.py | 6 ++++++ 4 files changed, 23 insertions(+) create mode 100644 tests/data/github.com,api,v2,json,repos,show,JNRowe,python-github2,ef4102f3c324bd1ce10d00d1b011f1c5 diff --git a/AUTHORS b/AUTHORS index d917daf..3b88c6d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -27,3 +27,4 @@ Michael Basnight Christopher MacGown Rok Garbas Ionuț Arțăriși +twidi diff --git a/github2/repositories.py b/github2/repositories.py index 17476f1..61d6403 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -23,6 +23,7 @@ class Repository(BaseData): has_wiki = Attribute("If True, this repository has a wiki.") has_issues = Attribute("If True, this repository has an issue tracker.") language = Attribute("Primary language for the repository.") + parent = Attribute("The parent project of this fork.") def _project(self): return self.owner + "/" + self.name diff --git a/tests/data/github.com,api,v2,json,repos,show,JNRowe,python-github2,ef4102f3c324bd1ce10d00d1b011f1c5 b/tests/data/github.com,api,v2,json,repos,show,JNRowe,python-github2,ef4102f3c324bd1ce10d00d1b011f1c5 new file mode 100644 index 0000000..7fae8c2 --- /dev/null +++ b/tests/data/github.com,api,v2,json,repos,show,JNRowe,python-github2,ef4102f3c324bd1ce10d00d1b011f1c5 @@ -0,0 +1,15 @@ +status: 200 +x-ratelimit-remaining: 59 +content-location: https://github.com/api/v2/json/repos/show/JNRowe/python-github2 +-content-encoding: gzip +connection: keep-alive +content-length: 477 +server: nginx/1.0.4 +x-runtime: 14ms +x-ratelimit-limit: 60 +etag: "33efaec4c2fd40a4dd0369470bc1ab23" +cache-control: private, max-age=0, must-revalidate +date: Tue, 30 Aug 2011 09:23:19 GMT +content-type: application/json; charset=utf-8 + +{"repository":{"parent":"ask/python-github2","owner":"JNRowe","has_downloads":true,"homepage":"","pushed_at":"2011/08/25 00:43:37 -0700","watchers":3,"forks":0,"has_wiki":true,"source":"ask/python-github2","url":"https://github.com/JNRowe/python-github2","open_issues":0,"created_at":"2010/10/31 01:03:09 -0700","fork":true,"size":280,"name":"python-github2","has_issues":false,"private":false,"language":"Python","description":"github client in python, with issues support."}} \ No newline at end of file diff --git a/tests/test_repositories.py b/tests/test_repositories.py index 750f1e2..1d90bbc 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -46,6 +46,12 @@ def test_meta(self): assert_equals(repo.has_issues, True) assert_equals(repo.language, 'Python') + def test_fork_properties(self): + repo = self.client.repos.show('JNRowe/python-github2') + assert_equals(repo.forks, 0) + assert_equals(repo.fork, True) + assert_equals(repo.parent, 'ask/python-github2') + class RepoQueries(utils.HttpMockTestCase): """Test repository querying""" From e6ffc94a01ce437bf3abd3294f9ab9df1f22a878 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 30 Aug 2011 12:20:16 +0100 Subject: [PATCH 011/129] Allow subscript access on BaseData objects. This is a compatibility hack to allow us to switch from dictionary responses to BaseData derived objects. Refs #61. --- github2/core.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/github2/core.py b/github2/core.py index 87cc117..4a1b619 100644 --- a/github2/core.py +++ b/github2/core.py @@ -1,5 +1,7 @@ import sys +from warnings import warn + from datetime import datetime from dateutil import (parser, tz) @@ -261,6 +263,29 @@ def iterate(self): class BaseData(object): __metaclass__ = BaseDataType + def __getitem__(self, key): + """Access objects's attribute using subscript notation + + This is here purely to maintain compatibility when switching ``dict`` + responses to ``BaseData`` derived objects. + """ + warn("Subscript access on %r is deprecated, use object attributes" + % self.__class__.__name__, DeprecationWarning) + if not key in self._meta.keys(): + raise KeyError(key) + return getattr(self, key) + + def __setitem__(self, key, value): + """Update object's attribute using subscript notation + + :see: ``BaseData.__getitem__`` + """ + warn("Subscript access on %r is deprecated, use object attributes" + % self.__class__.__name__, DeprecationWarning) + if not key in self._meta.keys(): + raise KeyError(key) + setattr(self, key, value) + def repr_string(string): """Shorten string for use in repr() output From 85b23a29e7446b97e6290b1ebbdcd606e949ddd1 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 30 Aug 2011 12:41:32 +0100 Subject: [PATCH 012/129] Use BaseData derived objects where possible. These were previously returning dicts. --- github2/issues.py | 6 +++--- github2/repositories.py | 9 ++++++--- github2/teams.py | 12 ++++++------ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/github2/issues.py b/github2/issues.py index c7cc74d..52fdffe 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -170,9 +170,9 @@ def comment(self, project, number, comment): :param str comment: comment to attach to issue """ comment_data = {'comment': comment} - return self.make_request("comment", project, str(number), - post_data=comment_data, - filter='comment') + return self.get_value("comment", project, str(number), + post_data=comment_data, filter='comment', + datatype=Comment) def comments(self, project, number): """View comments on an issue. diff --git a/github2/repositories.py b/github2/repositories.py index 61d6403..2e7d65c 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -81,7 +81,8 @@ def watch(self, project): :param str project: GitHub project """ - return self.make_request("watch", project) + return self.get_value("watch", project, filter='repository', + datatype=Repository) @requires_auth def unwatch(self, project): @@ -89,7 +90,8 @@ def unwatch(self, project): :param str project: GitHub project """ - return self.make_request("unwatch", project) + return self.get_value("unwatch", project, filter='repository', + datatype=Repository) @requires_auth def fork(self, project): @@ -173,7 +175,8 @@ def network(self, project): :param str project: Github project """ - return self.make_request("show", project, "network", filter="network") + return self.get_values("show", project, "network", filter="network", + datatype=Repository) def languages(self, project): """Get programming language data for project diff --git a/github2/teams.py b/github2/teams.py index 9332b67..859a40e 100644 --- a/github2/teams.py +++ b/github2/teams.py @@ -48,9 +48,9 @@ def add_project(self, team_id, project): """ if isinstance(project, Repository): project = project.project - return self.make_request(str(team_id), "repositories", method="POST", - post_data={'name': project}, - filter="repositories", datatype=Repository) + return self.get_values(str(team_id), "repositories", method="POST", + post_data={'name': project}, + filter="repositories", datatype=Repository) def remove_project(self, team_id, project): """Remove a project to a team @@ -60,6 +60,6 @@ def remove_project(self, team_id, project): """ if isinstance(project, Repository): project = project.project - return self.make_request(str(team_id), "repositories", method="DELETE", - post_data={'name': project}, - filter="repositories", datatype=Repository) + return self.get_values(str(team_id), "repositories", method="DELETE", + post_data={'name': project}, + filter="repositories", datatype=Repository) From 011af0a9a93f6709801068e700aa89c7f340304f Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 30 Aug 2011 12:42:27 +0100 Subject: [PATCH 013/129] =?UTF-8?q?Update=20St=C3=A9phane=20Angel's=20name?= =?UTF-8?q?=20in=20AUTHORS.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AUTHORS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 3b88c6d..66d4ec9 100644 --- a/AUTHORS +++ b/AUTHORS @@ -27,4 +27,4 @@ Michael Basnight Christopher MacGown Rok Garbas Ionuț Arțăriși -twidi +Stéphane Angel From b8aec787de2e35f09a2eabaa17613a273af39013 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 30 Aug 2011 12:42:51 +0100 Subject: [PATCH 014/129] Minor whitespace fixes. --- github2/pull_requests.py | 2 +- github2/repositories.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/github2/pull_requests.py b/github2/pull_requests.py index 09f92e5..c90872e 100644 --- a/github2/pull_requests.py +++ b/github2/pull_requests.py @@ -73,7 +73,7 @@ def create(self, project, base, head, title=None, body=None, issue=None): "pull request should be attached.") pull_request_data = [("pull[%s]" % k, v) for k, v in post_data.items()] return self.get_value(project, post_data=dict(pull_request_data), - filter="pull", datatype=PullRequest) + filter="pull", datatype=PullRequest) def show(self, project, number): """Show a single pull request diff --git a/github2/repositories.py b/github2/repositories.py index 61d6403..9774ebd 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -58,7 +58,8 @@ def pushable(self): .. versionadded:: 0.3.0 """ - return self.get_values("pushable", filter="repositories", datatype=Repository) + return self.get_values("pushable", filter="repositories", + datatype=Repository) def list(self, user=None): From b74801485f3940406cf377c77bc3a6d4ff9757ee Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 30 Aug 2011 12:43:08 +0100 Subject: [PATCH 015/129] Added OrganizeMyRepositories entry to wild.rst. --- doc/wild.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/wild.rst b/doc/wild.rst index 6c83ed3..b57d04d 100644 --- a/doc/wild.rst +++ b/doc/wild.rst @@ -43,6 +43,15 @@ listed on this page. .. _GitHub's issue tracker: http://github.com/blog/411-github-issue-tracker +``OrganizeMyRepositories`` +'''''''''''''''''''''''''' + + The source code of the [name to come] site, a site to help you manage all + your repositories (your own, and watched/liked/followed ones) hosted by + different providers (github, bitbucket) + +:Git repository: https://github.com/twidi/OrganizeMyRepositories + ``roundabout`` '''''''''''''' From 5016a043ab6dba23f8824bb294f757e97db8da5e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 30 Aug 2011 12:55:08 +0100 Subject: [PATCH 016/129] Use get_value{,s} instead of make_request. It makes the return type more explicit when reading the code. --- github2/issues.py | 8 ++++---- github2/repositories.py | 15 ++++++--------- github2/users.py | 8 ++++---- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/github2/issues.py b/github2/issues.py index 52fdffe..43111b0 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -147,8 +147,8 @@ def add_label(self, project, number, label): :param int number: issue number in the Github database :param str label: label to attach to issue """ - return self.make_request("label/add", project, label, str(number), - filter="labels", method="POST") + return self.get_values("label/add", project, label, str(number), + filter="labels", method="POST") @requires_auth def remove_label(self, project, number, label): @@ -158,8 +158,8 @@ def remove_label(self, project, number, label): :param int number: issue number in the Github database :param str label: label to remove from issue """ - return self.make_request("label/remove", project, label, str(number), - filter="labels", method="POST") + return self.get_values("label/remove", project, label, str(number), + filter="labels", method="POST") @requires_auth def comment(self, project, number, comment): diff --git a/github2/repositories.py b/github2/repositories.py index 2e7d65c..4a88539 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -148,8 +148,8 @@ def list_collaborators(self, project): :param str project: GitHub project """ - return self.make_request("show", project, "collaborators", - filter="collaborators") + return self.get_values("show", project, "collaborators", + filter="collaborators") @requires_auth def add_collaborator(self, project, username): @@ -183,31 +183,28 @@ def languages(self, project): :param str project: Github project """ - return self.make_request("show", project, "languages", - filter="languages") + return self.get_values("show", project, "languages", filter="languages") def tags(self, project): """Get tags for project :param str project: Github project """ - return self.make_request("show", project, "tags", filter="tags") + return self.get_values("show", project, "tags", filter="tags") def branches(self, project): """Get branch names for project :param str project: Github project """ - return self.make_request("show", project, "branches", - filter="branches") + return self.get_values("show", project, "branches", filter="branches") def watchers(self, project): """Get list of watchers for project :param str project: Github project """ - return self.make_request("show", project, "watchers", - filter="watchers") + return self.get_values("show", project, "watchers", filter="watchers") def watching(self, for_user=None): """Lists all the repos a user is watching diff --git a/github2/users.py b/github2/users.py index a75d5b3..19efcca 100644 --- a/github2/users.py +++ b/github2/users.py @@ -71,14 +71,14 @@ def followers(self, username): :param str username: Github user name """ - return self.make_request("show", username, "followers", filter="users") + return self.get_values("show", username, "followers", filter="users") def following(self, username): """Get list of users a Github user is following :param str username: Github user name """ - return self.make_request("show", username, "following", filter="users") + return self.get_values("show", username, "following", filter="users") @requires_auth def follow(self, other_user): @@ -86,7 +86,7 @@ def follow(self, other_user): :param str other_user: Github user name """ - return self.make_request("follow", other_user, method="POST") + return self.get_values("follow", other_user, method="POST") @requires_auth def unfollow(self, other_user): @@ -94,4 +94,4 @@ def unfollow(self, other_user): :param str other_user: Github user name """ - return self.make_request("unfollow", other_user, method="POST") + return self.get_values("unfollow", other_user, method="POST") From c0d021998556c0e0a1121684b652a97be1a47db2 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 30 Aug 2011 12:55:35 +0100 Subject: [PATCH 017/129] Adding a collaborator requires POST. --- github2/repositories.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/github2/repositories.py b/github2/repositories.py index 9774ebd..43fe82d 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -157,7 +157,8 @@ def add_collaborator(self, project, username): :param str project: Github project :param str username: Github user to add as collaborator """ - return self.make_request("collaborators", project, "add", username) + return self.make_request("collaborators", project, "add", username, + method="POST") @requires_auth def remove_collaborator(self, project, username): From d5a84291a2e92995099fa2cb8f2c9e8316c2d422 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 30 Aug 2011 15:44:01 +0100 Subject: [PATCH 018/129] =?UTF-8?q?Added=20test=20for=20attribute=20?= =?UTF-8?q?=E2=86=92=20=5F=5Fgetitem=5F=5F=20support.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_unit.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/test_unit.py b/tests/test_unit.py index 43fe2fc..9d6650b 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -50,6 +50,18 @@ def test_iter(self): assert_true('__iter__' in dir(commit)) +class BaseDataDict(utils.HttpMockTestCase): + """Test __getitem__ availability on objects""" + def test_getitem(self): + user = self.client.users.show('defunkt') + assert_equals(user['blog'], user.blog) + assert_equals(user['company'], user.company) + assert_equals(user['email'], user.email) + assert_equals(user['location'], user.location) + assert_equals(user['login'], user.login) + assert_equals(user['name'], user.name) + + def test_project_for_user_repo(): client = Github() assert_equals(client.project_for_user_repo('JNRowe', 'misc-overlay'), From 96c2fa7d5d4c2439611b4caf87f30844abbfdae5 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 2 Sep 2011 17:36:29 +0100 Subject: [PATCH 019/129] Bumped version to 0.5.2. --- NEWS.rst | 8 ++++++++ README.rst | 2 +- github2/__init__.py | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/NEWS.rst b/NEWS.rst index 7a8b477..cebb8ac 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -3,6 +3,14 @@ User-visible changes .. contents:: +0.5.2 - 2011-09-02 +------------------ + +* Functions that returned `dict` objects have been deprecated, enable + DeprecationWarning_ support to see if you're affected + +.. _DeprecationWarning: http://docs.python.org/library/warnings.html + 0.5.1 - 2011-06-11 ------------------ diff --git a/README.rst b/README.rst index d28c84e..0746644 100644 --- a/README.rst +++ b/README.rst @@ -4,7 +4,7 @@ github2 - Github API v2 library for Python. :Authors: Ask Solem (askh@opera.com) -:Version: 0.5.1 +:Version: 0.5.2 This is a Python library implementing all of the features available in version 2 of the `Github API`_. diff --git a/github2/__init__.py b/github2/__init__.py index b65a729..ce95e04 100644 --- a/github2/__init__.py +++ b/github2/__init__.py @@ -1,5 +1,5 @@ "Github API v2 library for Python" -VERSION = (0, 5, 1) +VERSION = (0, 5, 2) __author__ = "Ask Solem" __contact__ = "askh@opera.com" From 234e9066b5fb6343e12a285efeb4f0045b9cfb94 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Mon, 5 Sep 2011 15:58:26 +0100 Subject: [PATCH 020/129] HTTP exceptions should allow easy access to response data. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thanks to Stéphane Angel for the suggestion. Refs #62. --- github2/request.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/github2/request.py b/github2/request.py index 7a6581c..d350d55 100644 --- a/github2/request.py +++ b/github2/request.py @@ -3,6 +3,7 @@ import re import time import httplib2 +from httplib import responses try: import json as simplejson # For Python 2.6 except ImportError: @@ -41,6 +42,25 @@ class GithubError(Exception): """An error occured when making a request to the Github API.""" +class HttpError(RuntimeError): + """A HTTP error occured when making a request to the Github API.""" + def __init__(self, message, content, code): + """Create a HttpError exception + + :param str message: Exception string + :param str content: Full content of HTTP request + :param int code: HTTP status code + """ + self.args = (message, content, code) + self.message = message + self.content = content + self.code = code + if code: + self.code_reason = responses[code] + else: + self.code_reason = "" + + class GithubRequest(object): github_url = GITHUB_URL url_format = "%(github_url)s/api/%(api_version)s/%(api_format)s" @@ -143,8 +163,9 @@ def raw_request(self, url, extra_post_data, method="GET"): logging.debug("URL: %r POST_DATA: %r RESPONSE_TEXT: %r", url, post_data, content) if response.status >= 400: - raise RuntimeError("unexpected response from github.com %d: %r" % ( - response.status, content)) + raise HttpError("Unexpected response from github.com %d: %r" + % (response.status, content), content, + response.status) json = simplejson.loads(content.decode(charset_from_headers(response))) if json.get("error"): raise self.GithubError(json["error"][0]["error"]) From 2b6c15ec872cfb3e94dbd2c15b31210f2e4bb4f1 Mon Sep 17 00:00:00 2001 From: twidi Date: Thu, 8 Sep 2011 02:35:29 +0200 Subject: [PATCH 021/129] OrganizeMyRepositories is now named "Repos.io" --- doc/wild.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/wild.rst b/doc/wild.rst index b57d04d..52c6c38 100644 --- a/doc/wild.rst +++ b/doc/wild.rst @@ -43,14 +43,14 @@ listed on this page. .. _GitHub's issue tracker: http://github.com/blog/411-github-issue-tracker -``OrganizeMyRepositories`` -'''''''''''''''''''''''''' +``Repos.io`` +'''''''''''' - The source code of the [name to come] site, a site to help you manage all - your repositories (your own, and watched/liked/followed ones) hosted by - different providers (github, bitbucket) + The source code of the Repos.io site, a site to help you manage all your + repositories (your own, and watched/liked/followed ones) hosted by different + providers (github, bitbucket) -:Git repository: https://github.com/twidi/OrganizeMyRepositories +:Git repository: https://github.com/twidi/Repos.io ``roundabout`` '''''''''''''' From 00e2ce5f3a1c199fa74591d5944d6dbbe5c57a8a Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 7 Oct 2011 21:18:36 +0100 Subject: [PATCH 022/129] Added applause to 'in the wild' document. --- doc/wild.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/wild.rst b/doc/wild.rst index 52c6c38..6ee7751 100644 --- a/doc/wild.rst +++ b/doc/wild.rst @@ -10,6 +10,13 @@ listed on this page. :mod:`github2`? Add it to this list! Just `open an issue`_ or click the ``Fork and edit this file`` button on the `project website`_ +``applause`` +'''''''''''' + + Applause when a bug gets closed. Extra cheering for old bugs. + +:PyPI page: :pypi:`applause` + ``bitbucket2github`` '''''''''''''''''''' From a8125aad2e41af7bbd864dc2ffb7f76eb534c3d2 Mon Sep 17 00:00:00 2001 From: twidi Date: Mon, 17 Oct 2011 22:54:43 +0200 Subject: [PATCH 023/129] Add `page` parameter for objects supporting a list. --- github2/commits.py | 7 ++++--- github2/core.py | 3 +++ github2/pull_requests.py | 5 +++-- github2/repositories.py | 10 ++++++---- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/github2/commits.py b/github2/commits.py index a671901..8910937 100644 --- a/github2/commits.py +++ b/github2/commits.py @@ -27,7 +27,7 @@ def __repr__(self): class Commits(GithubCommand): domain = "commits" - def list(self, project, branch="master", file=None): + def list(self, project, branch="master", file=None, page=1): """List commits on a project .. warning:: @@ -38,9 +38,10 @@ def list(self, project, branch="master", file=None): :param str project: project name :param str branch: branch name, or ``master`` if not given :param str file: optional file filter + :param int page: optional page number """ - return self.get_values("list", project, branch, file, - filter="commits", datatype=Commit) + return self.get_values("list", project, branch, file, filter="commits", + datatype=Commit, page=page) def show(self, project, sha): """Get a specific commit diff --git a/github2/core.py b/github2/core.py index 4a1b619..4e11ec7 100644 --- a/github2/core.py +++ b/github2/core.py @@ -135,6 +135,9 @@ def __init__(self, request): def make_request(self, command, *args, **kwargs): filter = kwargs.get("filter") post_data = kwargs.get("post_data") or {} + page = kwargs.pop("page", 1) + if page and not page == 1: + post_data["page"] = page method = kwargs.get("method", "GET") if method.upper() == "POST" or method.upper() == "GET" and post_data: response = self.request.post(self.domain, command, *args, diff --git a/github2/pull_requests.py b/github2/pull_requests.py index c90872e..3573f75 100644 --- a/github2/pull_requests.py +++ b/github2/pull_requests.py @@ -84,11 +84,12 @@ def show(self, project, number): return self.get_value(project, str(number), filter="pull", datatype=PullRequest) - def list(self, project, state="open"): + def list(self, project, state="open", page=1): """List all pull requests for a project :param str project: Github project :param str state: can be either ``open`` or ``closed`` + :param int page: optional page number """ return self.get_values(project, state, filter="pulls", - datatype=PullRequest) + datatype=PullRequest, page=page) diff --git a/github2/repositories.py b/github2/repositories.py index 11ded7a..2a81be7 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -62,7 +62,7 @@ def pushable(self): datatype=Repository) - def list(self, user=None): + def list(self, user=None, page=1): """Return a list of all repositories for a user. .. deprecated: 0.4.0 @@ -71,10 +71,11 @@ def list(self, user=None): brittle and will be removed in a future release! :param str user: Github user name to list repositories for + :param int page: optional page number """ user = user or self.request.username return self.get_values("show", user, filter="repositories", - datatype=Repository) + datatype=Repository, page=page) @requires_auth def watch(self, project): @@ -208,14 +209,15 @@ def watchers(self, project): """ return self.get_values("show", project, "watchers", filter="watchers") - def watching(self, for_user=None): + def watching(self, for_user=None, page=None): """Lists all the repos a user is watching :param str for_user: optional Github user name to list repositories for + :param int page: optional page number """ for_user = for_user or self.request.username return self.get_values("watched", for_user, filter="repositories", - datatype=Repository) + datatype=Repository, page=page) def list_contributors(self, project): """Lists all the contributors in a project From ed1e23c0ce33353dc2d41dce6f172a644a805345 Mon Sep 17 00:00:00 2001 From: twidi Date: Mon, 17 Oct 2011 22:54:43 +0200 Subject: [PATCH 024/129] Added warning for unpageable requests. --- github2/repositories.py | 3 +++ github2/users.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/github2/repositories.py b/github2/repositories.py index 2a81be7..2724627 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -39,6 +39,9 @@ class Repositories(GithubCommand): def search(self, query): """Get all repositories that match term. + .. warning: + Returns at most 100 repositories + :param str query: term to search issues for """ return self.get_values("search", query, filter="repositories", diff --git a/github2/users.py b/github2/users.py index 19efcca..3a40a8f 100644 --- a/github2/users.py +++ b/github2/users.py @@ -43,6 +43,9 @@ class Users(GithubCommand): def search(self, query): """Search for users + .. warning: + Returns at most 100 users + :param str query: term to search for """ return self.get_values("search", urllib.quote_plus(query), From ab8ec7d91c330dafad7a120f198eaf9148f7830c Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 19 Oct 2011 09:36:12 +0100 Subject: [PATCH 025/129] Added tests/examples for paged request results. --- doc/api/commit.rst | 4 ++++ doc/api/pull_requests.rst | 5 +++++ doc/api/repos.rst | 8 +++++--- ...isc,master,a252487bd992cdfc8247b3c41d0cb9fa | 18 ++++++++++++++++++ ...y-zsh,open,b0f946d4b280dcc6f7b65dd7fddeea6b | 16 ++++++++++++++++ ...how,tekkub,05ca6f8b40fe3e2ecd7da9236cbe8004 | 16 ++++++++++++++++ ...hed,tekkub,ab3eb0c9eb0123839606c57857627b30 | 16 ++++++++++++++++ tests/test_commits.py | 6 ++++++ tests/test_pull_requests.py | 6 ++++++ tests/test_repositories.py | 10 ++++++++++ 10 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 tests/data/github.com,api,v2,json,commits,list,JNRowe,jnrowe-misc,master,a252487bd992cdfc8247b3c41d0cb9fa create mode 100644 tests/data/github.com,api,v2,json,pulls,robbyrussell,oh-my-zsh,open,b0f946d4b280dcc6f7b65dd7fddeea6b create mode 100644 tests/data/github.com,api,v2,json,repos,show,tekkub,05ca6f8b40fe3e2ecd7da9236cbe8004 create mode 100644 tests/data/github.com,api,v2,json,repos,watched,tekkub,ab3eb0c9eb0123839606c57857627b30 diff --git a/doc/api/commit.rst b/doc/api/commit.rst index 7a37e07..e4a69bf 100644 --- a/doc/api/commit.rst +++ b/doc/api/commit.rst @@ -21,6 +21,10 @@ Listing Commits on a Branch >>> commits = github.commits.list("mojombo/grit", "master") +By default the first page of results is returned, you can return further results +with the ``page`` parameter: + + >>> commits = github.commits.list("mojombo/grit", "master", page=2) Listing Commits for a File '''''''''''''''''''''''''' diff --git a/doc/api/pull_requests.rst b/doc/api/pull_requests.rst index a2748cc..140a824 100644 --- a/doc/api/pull_requests.rst +++ b/doc/api/pull_requests.rst @@ -19,6 +19,11 @@ Listing pull requests >>> results = github.pull_requests.list("ask/python-github2") +By default the first page of results is returned, you can return further results +with the ``page`` parameter: + + >>> results = github.pull_requests.list("ask/python-github2", page=2) + View a pull request ''''''''''''''''''' diff --git a/doc/api/repos.rst b/doc/api/repos.rst index 45c4b4a..4f777ee 100644 --- a/doc/api/repos.rst +++ b/doc/api/repos.rst @@ -32,11 +32,13 @@ Show Repo Info List All Repositories ''''''''''''''''''''' - # By default lists all repos for the current user. - >>> repos = github.repos.list() - >>> repos = github.repos.list("schacon") +By default the first page of results is returned, you can return further results +with the ``page`` parameter: + + >>> repos = github.repos.list("schacon", page=2) + Watching Repositories ''''''''''''''''''''' diff --git a/tests/data/github.com,api,v2,json,commits,list,JNRowe,jnrowe-misc,master,a252487bd992cdfc8247b3c41d0cb9fa b/tests/data/github.com,api,v2,json,commits,list,JNRowe,jnrowe-misc,master,a252487bd992cdfc8247b3c41d0cb9fa new file mode 100644 index 0000000..7128271 --- /dev/null +++ b/tests/data/github.com,api,v2,json,commits,list,JNRowe,jnrowe-misc,master,a252487bd992cdfc8247b3c41d0cb9fa @@ -0,0 +1,18 @@ +status: 200 +x-ratelimit-remaining: 59 +content-location: https://github.com/api/v2/json/commits/list/JNRowe/jnrowe-misc/master?page=2 +-content-encoding: gzip +set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; + path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly +connection: keep-alive +content-length: 22608 +server: nginx/1.0.4 +x-runtime: 76ms +x-ratelimit-limit: 60 +etag: "c08770df8de8932404acd85ac90b5ec1" +cache-control: private, max-age=0, must-revalidate +date: Wed, 19 Oct 2011 08:33:37 GMT +x-frame-options: deny +content-type: application/json; charset=utf-8 + +{"commits":[{"parents":[{"id":"243c33a2060d5cd51290d52195e1715ac29b2b58"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/1f5ad2c3206bafc4aca9e6ce50f5c605befdb3d6","id":"1f5ad2c3206bafc4aca9e6ce50f5c605befdb3d6","committed_date":"2011-10-12T16:07:14-07:00","authored_date":"2011-10-12T16:07:14-07:00","message":"Pushed hammertime stabilisation back 90 days.\n\nWaiting on upstream to stabilise git-python.","tree":"677ba94fca78e6d1430a49c2c1cd27e05a209eaf","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"5514efe6f3f2e9f7a58f0049521c8384a1c8ceb2"},{"id":"4b85ff1be7b73b1a1a3d11cc9de56e6dfd42540f"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/243c33a2060d5cd51290d52195e1715ac29b2b58","id":"243c33a2060d5cd51290d52195e1715ac29b2b58","committed_date":"2011-10-10T18:18:42-07:00","authored_date":"2011-10-10T18:18:42-07:00","message":"Merge branch 'maint/x86_keywording'\n\n* maint/x86_keywording:\n notmuch-0.7-r1 keyworded x86.\n gitflow-0.4.1-r1 keyworded x86.\n\nConflicts:\n\tmetadata/cache/mail-client/notmuch-0.7\n\tmetadata/cache/mail-client/notmuch-0.7-r1","tree":"7886c72264760286420375d3e85c865fdfb8defc","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"902317c71edc00f69edec774c5cce281c2cd9fbe"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/4b85ff1be7b73b1a1a3d11cc9de56e6dfd42540f","id":"4b85ff1be7b73b1a1a3d11cc9de56e6dfd42540f","committed_date":"2011-10-10T18:17:28-07:00","authored_date":"2011-10-10T18:16:47-07:00","message":"notmuch-0.7-r1 keyworded x86.\n\n(Portage version: 2.1.10.11/git/Linux x86, signed Manifest commit with key C0174749)","tree":"d1595b60f8341cf8dbbf8deff3952ff16163462e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"ca357f4dbfd0fb84b1e69f21319834a4231a32d6"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/902317c71edc00f69edec774c5cce281c2cd9fbe","id":"902317c71edc00f69edec774c5cce281c2cd9fbe","committed_date":"2011-10-10T18:16:22-07:00","authored_date":"2011-10-10T18:16:07-07:00","message":"gitflow-0.4.1-r1 keyworded x86.\n\n(Portage version: 2.1.10.11/git/Linux x86, signed Manifest commit with key C0174749)","tree":"524a4017fb63380d0aee437a65a31f2a6d6d0d47","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"e40f04082fd0d65779b4dc4ff183228678da3a48"},{"id":"116b9861acf29a2cf0161008d372e46d8ecd6b94"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/ca357f4dbfd0fb84b1e69f21319834a4231a32d6","id":"ca357f4dbfd0fb84b1e69f21319834a4231a32d6","committed_date":"2011-10-10T18:15:11-07:00","authored_date":"2011-10-10T18:15:11-07:00","message":"Merge branch 'maint/amd64_keywording' into maint/x86_keywording\n\n* maint/amd64_keywording:\n notmuch-0.7-r1 keyworded amd64.\n gitflow-0.4.1-r1 keyworded amd64.","tree":"af0f14bb6eaa8acfedf8e3f2e6dd2a7de4c1b7fb","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f7b6644a57cc3ea0032bf39a0adef64474335bc4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/5514efe6f3f2e9f7a58f0049521c8384a1c8ceb2","id":"5514efe6f3f2e9f7a58f0049521c8384a1c8ceb2","committed_date":"2011-10-10T12:58:52-07:00","authored_date":"2011-10-10T12:58:52-07:00","message":"Synced metadata cache for upstream's ruby eclass changes.","tree":"7b475d494eaa1fc176a200ed265af02ff772fb19","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"b0d6bf4cec00418a08c1cd8250260742ad78de72"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/f7b6644a57cc3ea0032bf39a0adef64474335bc4","id":"f7b6644a57cc3ea0032bf39a0adef64474335bc4","committed_date":"2011-10-10T12:58:44-07:00","authored_date":"2011-10-10T12:58:44-07:00","message":"Synced metadata cache for upstream's python eclass changes.","tree":"0871aa5e0e17acbd82845416990bb8e4711ee2a0","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"b7a2bc11de398d17a584cbaa6d997fe72629f1d0"},{"id":"116b9861acf29a2cf0161008d372e46d8ecd6b94"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/b0d6bf4cec00418a08c1cd8250260742ad78de72","id":"b0d6bf4cec00418a08c1cd8250260742ad78de72","committed_date":"2011-10-10T12:57:08-07:00","authored_date":"2011-10-10T12:57:08-07:00","message":"Merge branch 'maint/amd64_keywording'\n\n* maint/amd64_keywording:\n notmuch-0.7-r1 keyworded amd64.\n gitflow-0.4.1-r1 keyworded amd64.","tree":"af0f14bb6eaa8acfedf8e3f2e6dd2a7de4c1b7fb","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d6461d1383c27228fbb95e13adb92f32f98585bb"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/116b9861acf29a2cf0161008d372e46d8ecd6b94","id":"116b9861acf29a2cf0161008d372e46d8ecd6b94","committed_date":"2011-10-10T12:56:57-07:00","authored_date":"2011-10-10T12:56:18-07:00","message":"notmuch-0.7-r1 keyworded amd64.\n\n(Portage version: 2.1.10.11/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"af0f14bb6eaa8acfedf8e3f2e6dd2a7de4c1b7fb","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"b7a2bc11de398d17a584cbaa6d997fe72629f1d0"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/d6461d1383c27228fbb95e13adb92f32f98585bb","id":"d6461d1383c27228fbb95e13adb92f32f98585bb","committed_date":"2011-10-10T12:55:54-07:00","authored_date":"2011-10-10T12:55:40-07:00","message":"gitflow-0.4.1-r1 keyworded amd64.\n\n(Portage version: 2.1.10.11/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"cb7b49317a7c3d0f0c4de862a074f5c165162b56","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"baa8903ad5083ac52a344000f104e00f6add0607"},{"id":"e40f04082fd0d65779b4dc4ff183228678da3a48"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/b7a2bc11de398d17a584cbaa6d997fe72629f1d0","id":"b7a2bc11de398d17a584cbaa6d997fe72629f1d0","committed_date":"2011-10-06T13:51:44-07:00","authored_date":"2011-10-06T13:51:44-07:00","message":"Merge branch 'maint/x86_keywording'\n\n* maint/x86_keywording:\n Pushed hubugs stabilisation back 30 days.\n virtualenvwrapper-2.9 keyworded x86.\n sphinxcontrib-issuetracker-0.9 keyworded x86.\n Pushed github2 stabilisation back 30 days.\n argh-0.14.1 keyworded x86.\n Pushed hubugs stabilisation back 30 days.\n virtualenvwrapper-2.9 keyworded amd64.\n sphinxcontrib-issuetracker-0.9 keyworded amd64.\n Pushed github2 stabilisation back 30 days.\n argh-0.14.1 keyworded amd64.","tree":"f9d4490139bd84f62e00bde0f7655bc69f827d2d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"8f07dc29d4f3f882a95f75bfef58e5b3b5f846a3"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/e40f04082fd0d65779b4dc4ff183228678da3a48","id":"e40f04082fd0d65779b4dc4ff183228678da3a48","committed_date":"2011-10-06T13:51:37-07:00","authored_date":"2011-10-06T13:51:37-07:00","message":"Pushed hubugs stabilisation back 30 days.\n\nWaiting on upstream to stabilise httplib2 for github2.","tree":"f9d4490139bd84f62e00bde0f7655bc69f827d2d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"39ec48f45cc57d9dbf14ad2194d718afdaa80257"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/8f07dc29d4f3f882a95f75bfef58e5b3b5f846a3","id":"8f07dc29d4f3f882a95f75bfef58e5b3b5f846a3","committed_date":"2011-10-06T13:51:20-07:00","authored_date":"2011-10-06T13:51:13-07:00","message":"virtualenvwrapper-2.9 keyworded x86.\n\n(Portage version: 2.1.10.11/git/Linux x86, signed Manifest commit with key C0174749)","tree":"97d75cbb684ff4ba8d1c5810c7055e9450b7f9c1","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"12879c35cb79a3cc162c39f3fbddf22d8b74f1d3"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/39ec48f45cc57d9dbf14ad2194d718afdaa80257","id":"39ec48f45cc57d9dbf14ad2194d718afdaa80257","committed_date":"2011-10-06T13:50:38-07:00","authored_date":"2011-10-06T13:50:27-07:00","message":"sphinxcontrib-issuetracker-0.9 keyworded x86.\n\n(Portage version: 2.1.10.11/git/Linux x86, signed Manifest commit with key C0174749)","tree":"b918414c2d44d0ad8d3c40cf37c1eb163926c23e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"5a10ee7f895b5262c5608ce81d4c65c921d3c048"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/12879c35cb79a3cc162c39f3fbddf22d8b74f1d3","id":"12879c35cb79a3cc162c39f3fbddf22d8b74f1d3","committed_date":"2011-10-06T13:49:57-07:00","authored_date":"2011-10-06T13:49:57-07:00","message":"Pushed github2 stabilisation back 30 days.\n\nWaiting on upstream to stabilise httplib2.","tree":"286d652bf585eea95950c80569642d788d01d8a2","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"f5d532003b18bf6bab2a3f6b87732058d46d2153"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/5a10ee7f895b5262c5608ce81d4c65c921d3c048","id":"5a10ee7f895b5262c5608ce81d4c65c921d3c048","committed_date":"2011-10-06T13:49:25-07:00","authored_date":"2011-10-06T13:49:13-07:00","message":"argh-0.14.1 keyworded x86.\n\n(Portage version: 2.1.10.11/git/Linux x86, signed Manifest commit with key C0174749)","tree":"0a4249ac47d63c6d882442cadaad66936547a61d","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"4bd60274bbb6ee0fa3448191b55c0f8e55e326d2"},{"id":"fecae2825deeebbbb4b0315f6cc74c5ac909f396"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/f5d532003b18bf6bab2a3f6b87732058d46d2153","id":"f5d532003b18bf6bab2a3f6b87732058d46d2153","committed_date":"2011-10-06T13:45:29-07:00","authored_date":"2011-10-06T13:45:29-07:00","message":"Merge branch 'maint/amd64_keywording' into maint/x86_keywording\n\n* maint/amd64_keywording:\n Pushed hubugs stabilisation back 30 days.\n virtualenvwrapper-2.9 keyworded amd64.\n sphinxcontrib-issuetracker-0.9 keyworded amd64.\n Pushed github2 stabilisation back 30 days.\n argh-0.14.1 keyworded amd64.","tree":"38b6893bc9dfe17c95bc9726580f7f7848b780ab","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6201dc6d93c4f9ebf1d6a78ce77cb010edc9bb92"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/fecae2825deeebbbb4b0315f6cc74c5ac909f396","id":"fecae2825deeebbbb4b0315f6cc74c5ac909f396","committed_date":"2011-10-06T12:35:41-07:00","authored_date":"2011-10-06T12:35:41-07:00","message":"Pushed hubugs stabilisation back 30 days.\n\nWaiting on upstream to stabilise httplib2 for github2.","tree":"38b6893bc9dfe17c95bc9726580f7f7848b780ab","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"37fed3c9c8cf3760c5f3b620307cb75998ca43fd"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/6201dc6d93c4f9ebf1d6a78ce77cb010edc9bb92","id":"6201dc6d93c4f9ebf1d6a78ce77cb010edc9bb92","committed_date":"2011-10-06T12:34:52-07:00","authored_date":"2011-10-06T12:34:41-07:00","message":"virtualenvwrapper-2.9 keyworded amd64.\n\n(Portage version: 2.1.10.11/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"746f31efe1f0a235715f226e1546077a5604cac9","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"dce45a46cfac68218770173a3ea85d6e5c8c8738"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/37fed3c9c8cf3760c5f3b620307cb75998ca43fd","id":"37fed3c9c8cf3760c5f3b620307cb75998ca43fd","committed_date":"2011-10-06T12:34:11-07:00","authored_date":"2011-10-06T12:33:53-07:00","message":"sphinxcontrib-issuetracker-0.9 keyworded amd64.\n\n(Portage version: 2.1.10.11/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"4c442627b85f14891bbc9ad433e70fbf608f4bfd","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d5bc5958475581d429e7a5fe3d8a5ea32cf36c14"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/dce45a46cfac68218770173a3ea85d6e5c8c8738","id":"dce45a46cfac68218770173a3ea85d6e5c8c8738","committed_date":"2011-10-06T12:33:12-07:00","authored_date":"2011-10-06T12:33:06-07:00","message":"Pushed github2 stabilisation back 30 days.\n\nWaiting on upstream to stabilise >httplib2-0.7.","tree":"a94c7c50c583ea077aea940605f8917b809021c9","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"baa8903ad5083ac52a344000f104e00f6add0607"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/d5bc5958475581d429e7a5fe3d8a5ea32cf36c14","id":"d5bc5958475581d429e7a5fe3d8a5ea32cf36c14","committed_date":"2011-10-06T12:32:14-07:00","authored_date":"2011-10-06T12:31:53-07:00","message":"argh-0.14.1 keyworded amd64.\n\n(Portage version: 2.1.10.11/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"b75f02ad8ecf5461d834fceccea3054a36113616","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"fdf889cbecf352d2a128ac571679f18fdbe13358"},{"id":"4bd60274bbb6ee0fa3448191b55c0f8e55e326d2"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/baa8903ad5083ac52a344000f104e00f6add0607","id":"baa8903ad5083ac52a344000f104e00f6add0607","committed_date":"2011-10-05T15:27:54-07:00","authored_date":"2011-10-05T15:27:54-07:00","message":"Merge branch 'maint/x86_keywording'\n\n* maint/x86_keywording:\n poster-0.8.1-r1 keyworded x86.\n Pushed pycparser stabilisation back 120 days.\n Pushed mnemosyne stabilisation back 120 days.\n poster-0.8.1-r1 keyworded amd64.\n Pushed pycparser stabilisation back 120 days.\n Pushed mnemosyne stabilisation back 120 days.","tree":"ea91858ca8eacb66b5740d714d4c6fe2d21de420","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"d04abe67da0a7e20eeab22627e7a3b9763f45894"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/4bd60274bbb6ee0fa3448191b55c0f8e55e326d2","id":"4bd60274bbb6ee0fa3448191b55c0f8e55e326d2","committed_date":"2011-10-05T15:27:24-07:00","authored_date":"2011-10-05T15:27:14-07:00","message":"poster-0.8.1-r1 keyworded x86.\n\n(Portage version: 2.1.10.11/git/Linux x86, signed Manifest commit with key C0174749)","tree":"ea91858ca8eacb66b5740d714d4c6fe2d21de420","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"6d6527c2c8fe0811b571886047d56da51ea54da4"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/d04abe67da0a7e20eeab22627e7a3b9763f45894","id":"d04abe67da0a7e20eeab22627e7a3b9763f45894","committed_date":"2011-10-05T15:26:32-07:00","authored_date":"2011-10-05T15:26:32-07:00","message":"Pushed pycparser stabilisation back 120 days.\n\nWaiting on upstream to stabilise ply.","tree":"d93a8a679e59ec246d8b50473614d72b85e408be","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"c2803c6976c504e3ceb84b51393181f88b7ba206"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/6d6527c2c8fe0811b571886047d56da51ea54da4","id":"6d6527c2c8fe0811b571886047d56da51ea54da4","committed_date":"2011-10-05T15:26:03-07:00","authored_date":"2011-10-05T15:26:03-07:00","message":"Pushed mnemosyne stabilisation back 120 days.\n\nWaiting on upstream to stabilise kid.","tree":"d045483f6281a9794ded4ecafed72dd54fe3852e","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"acdf46261919b8244acdc36b323c9f8139f0b72b"},{"id":"4f472c1925b03eb936c424a65555be09c45d1a23"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/c2803c6976c504e3ceb84b51393181f88b7ba206","id":"c2803c6976c504e3ceb84b51393181f88b7ba206","committed_date":"2011-10-05T15:25:27-07:00","authored_date":"2011-10-05T15:25:27-07:00","message":"Merge branch 'maint/amd64_keywording' into maint/x86_keywording\n\n* maint/amd64_keywording:\n poster-0.8.1-r1 keyworded amd64.\n Pushed pycparser stabilisation back 120 days.\n Pushed mnemosyne stabilisation back 120 days.","tree":"e1fb02fb2adc92e006c25d7e2795e269fc32a9c1","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"e6ca71e08bb48a7f1d5aebdaa21eb41404e57124"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/4f472c1925b03eb936c424a65555be09c45d1a23","id":"4f472c1925b03eb936c424a65555be09c45d1a23","committed_date":"2011-10-05T06:12:54-07:00","authored_date":"2011-10-05T06:12:39-07:00","message":"poster-0.8.1-r1 keyworded amd64.\n\n(Portage version: 2.1.10.11/git/Linux x86_64, signed Manifest commit with key C0174749)","tree":"e1fb02fb2adc92e006c25d7e2795e269fc32a9c1","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"c8e0a78296e4da35a999939484e2949115116aac"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/e6ca71e08bb48a7f1d5aebdaa21eb41404e57124","id":"e6ca71e08bb48a7f1d5aebdaa21eb41404e57124","committed_date":"2011-10-05T06:11:42-07:00","authored_date":"2011-10-05T06:11:42-07:00","message":"Pushed pycparser stabilisation back 120 days.\n\nWaiting on upstream to stabilise ply.","tree":"854e90ed4557a301e50313762fc7611c971db4c2","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"fdf889cbecf352d2a128ac571679f18fdbe13358"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/c8e0a78296e4da35a999939484e2949115116aac","id":"c8e0a78296e4da35a999939484e2949115116aac","committed_date":"2011-10-05T06:11:04-07:00","authored_date":"2011-10-05T06:11:04-07:00","message":"Pushed mnemosyne stabilisation back 120 days.\n\nWaiting on upstream to stabilise kid.","tree":"883c3796c8a3f023b247e2513267e23731fe69d7","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"a676eb056510cc903a441289bda41a75261dd9c4"},{"id":"acdf46261919b8244acdc36b323c9f8139f0b72b"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/fdf889cbecf352d2a128ac571679f18fdbe13358","id":"fdf889cbecf352d2a128ac571679f18fdbe13358","committed_date":"2011-10-01T12:55:17-07:00","authored_date":"2011-10-01T12:55:17-07:00","message":"Merge branch 'maint/x86_keywording'\n\n* maint/x86_keywording:\n Pushed termtool stabilisation back 30 days.","tree":"0f94ddc8cfcb53350d9fe268dfcc43092f6b3edc","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"38e453da5deea4142a3e46ce8c271f1237185b7d"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/acdf46261919b8244acdc36b323c9f8139f0b72b","id":"acdf46261919b8244acdc36b323c9f8139f0b72b","committed_date":"2011-10-01T12:55:10-07:00","authored_date":"2011-10-01T12:55:10-07:00","message":"Pushed termtool stabilisation back 30 days.\n\nWaiting on upstream to stabilise progressbar.","tree":"0f94ddc8cfcb53350d9fe268dfcc43092f6b3edc","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"c0a7946e57249619437d4c47207cb99ae2741cb6"},{"id":"70dbab11e092872fe402c9108497695b013770f2"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/38e453da5deea4142a3e46ce8c271f1237185b7d","id":"38e453da5deea4142a3e46ce8c271f1237185b7d","committed_date":"2011-09-30T13:50:05-07:00","authored_date":"2011-09-30T13:50:05-07:00","message":"Merge branch 'maint/amd64_keywording' into maint/x86_keywording\n\n* maint/amd64_keywording:\n Pushed termtool stabilisation back 30 days.","tree":"3b4bf1f427190c36f1f91801021c7a1c436ddab0","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"31729c497b6bee3a36f20168fae12e2651cfd94b"},{"id":"70dbab11e092872fe402c9108497695b013770f2"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/a676eb056510cc903a441289bda41a75261dd9c4","id":"a676eb056510cc903a441289bda41a75261dd9c4","committed_date":"2011-09-30T13:49:20-07:00","authored_date":"2011-09-30T13:49:20-07:00","message":"Merge branch 'maint/amd64_keywording'\n\n* maint/amd64_keywording:\n Pushed termtool stabilisation back 30 days.","tree":"3b4bf1f427190c36f1f91801021c7a1c436ddab0","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}},{"parents":[{"id":"31729c497b6bee3a36f20168fae12e2651cfd94b"}],"author":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"},"url":"/JNRowe/jnrowe-misc/commit/70dbab11e092872fe402c9108497695b013770f2","id":"70dbab11e092872fe402c9108497695b013770f2","committed_date":"2011-09-30T13:48:48-07:00","authored_date":"2011-09-30T13:48:48-07:00","message":"Pushed termtool stabilisation back 30 days.\n\nWaiting on upstream to stabilise progressbar.","tree":"3b4bf1f427190c36f1f91801021c7a1c436ddab0","committer":{"name":"James Rowe","login":"JNRowe","email":"jnrowe@gmail.com"}}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,pulls,robbyrussell,oh-my-zsh,open,b0f946d4b280dcc6f7b65dd7fddeea6b b/tests/data/github.com,api,v2,json,pulls,robbyrussell,oh-my-zsh,open,b0f946d4b280dcc6f7b65dd7fddeea6b new file mode 100644 index 0000000..7e87993 --- /dev/null +++ b/tests/data/github.com,api,v2,json,pulls,robbyrussell,oh-my-zsh,open,b0f946d4b280dcc6f7b65dd7fddeea6b @@ -0,0 +1,16 @@ +status: 200 +x-ratelimit-remaining: 57 +content-location: https://github.com/api/v2/json/pulls/robbyrussell/oh-my-zsh/open?page=2 +-content-encoding: gzip +connection: keep-alive +content-length: 161938 +server: nginx/1.0.4 +x-runtime: 2179ms +x-ratelimit-limit: 60 +etag: "3ac026d624c5fb42df721ef6074f8e23" +cache-control: private, max-age=0, must-revalidate +date: Wed, 19 Oct 2011 08:41:49 GMT +x-frame-options: deny +content-type: application/json; charset=utf-8 + +{"pulls":[{"issue_updated_at":"2011-06-12T16:09:05Z","gravatar_id":"8357260cb0018190686f892ff6c05dab","position":421.0,"number":422,"votes":0,"user":{"name":"Simon","gravatar_id":"8357260cb0018190686f892ff6c05dab","type":"User","login":"else"},"comments":0,"body":"I've modified the install.sh script to check if zsh is installed.\r\n\r\n--Simon","title":"checking if zsh is installed before switching to the awesomeness","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/422.diff","updated_at":"2011-10-10T12:51:01Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/422","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/422.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"ed990f61ff66a5c409ef2d8a444820cecf098188","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Simon","gravatar_id":"8357260cb0018190686f892ff6c05dab","type":"User","login":"else"},"created_at":"2011-06-12T16:04:16Z","head":{"user":{"name":"Simon","gravatar_id":"8357260cb0018190686f892ff6c05dab","type":"User","login":"else"},"ref":"zshcheck","sha":"7e3f2342eb548d8c1870864335a2051bc58f15d0","label":"else:zshcheck","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/06/12 09:02:55 -0700","url":"https://github.com/else/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 70 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":768,"private":false,"name":"oh-my-zsh","owner":"else","created_at":"2011/03/24 01:48:09 -0700","open_issues":0,"homepage":""}},"issue_created_at":"2011-06-12T16:04:16Z","labels":[],"state":"open"},{"issue_updated_at":"2011-06-09T22:22:26Z","gravatar_id":"7f81fd5c7792dabca22c433abbfbf0cb","position":415.0,"number":416,"votes":0,"user":{"name":"Danish Khan","company":"Engine Yard","gravatar_id":"7f81fd5c7792dabca22c433abbfbf0cb","location":"San Francisco, CA","blog":"http://danishkhan.org","type":"User","login":"danishkhan","email":"danishkhan@danishkhan.org"},"comments":0,"body":"","title":"Added my own custom theme","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/416.diff","updated_at":"2011-10-10T12:51:00Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/416","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/416.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"ed990f61ff66a5c409ef2d8a444820cecf098188","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Danish Khan","company":"Engine Yard","gravatar_id":"7f81fd5c7792dabca22c433abbfbf0cb","location":"San Francisco, CA","blog":"http://danishkhan.org","type":"User","login":"danishkhan","email":"danishkhan@danishkhan.org"},"created_at":"2011-06-09T22:22:26Z","head":{"user":{"name":"Danish Khan","company":"Engine Yard","gravatar_id":"7f81fd5c7792dabca22c433abbfbf0cb","location":"San Francisco, CA","blog":"http://danishkhan.org","type":"User","login":"danishkhan","email":"danishkhan@danishkhan.org"},"ref":"master","sha":"a635ad5bfc3ec28c73b8f446cf0f06cd346fc17c","label":"danishkhan:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/06/10 11:51:40 -0700","url":"https://github.com/danishkhan/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":164,"private":false,"name":"oh-my-zsh","owner":"danishkhan","created_at":"2011/06/09 15:01:14 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-06-09T22:22:26Z","labels":[],"state":"open"},{"issue_updated_at":"2011-10-12T13:09:59Z","gravatar_id":"e49e4471a176ee8b633c44835e301238","position":412.0,"number":413,"votes":0,"user":{"name":"Lowe Schmidt","company":"Unibet","gravatar_id":"e49e4471a176ee8b633c44835e301238","location":"Stockholm, Sweden","blog":"http://loweschmidt.se","type":"User","login":"lsc","email":"lowe.schmidt@gmail.com"},"comments":1,"body":"Inspired by my old one and the one called arrow.\r\nHas return status to far left, cwd + git status to the far right.\r\n\r\nScreenshots\r\nhttp://nobelium.se/frost-theme-clean.png\r\nhttp://nobelium.se/frost-theme-dirty.png\r\n\r\nNot the nicest pull request I know, shout if it needs fixing. ","title":"Yet another theme.","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/413.diff","updated_at":"2011-10-12T13:09:59Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/413","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/413.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"ed990f61ff66a5c409ef2d8a444820cecf098188","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Lowe Schmidt","company":"Unibet","gravatar_id":"e49e4471a176ee8b633c44835e301238","location":"Stockholm, Sweden","blog":"http://loweschmidt.se","type":"User","login":"lsc","email":"lowe.schmidt@gmail.com"},"created_at":"2011-06-06T13:05:51Z","head":{"user":{"name":"Lowe Schmidt","company":"Unibet","gravatar_id":"e49e4471a176ee8b633c44835e301238","location":"Stockholm, Sweden","blog":"http://loweschmidt.se","type":"User","login":"lsc","email":"lowe.schmidt@gmail.com"},"ref":"master","sha":"8c8883880ecfcb2d35c0223779e129d4c902c5c4","label":"lsc:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/06/06 05:42:27 -0700","url":"https://github.com/lsc/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":164,"private":false,"name":"oh-my-zsh","owner":"lsc","created_at":"2011/06/02 11:13:07 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-06-06T13:05:51Z","labels":[],"state":"open"},{"issue_updated_at":"2011-06-07T23:00:16Z","gravatar_id":"d12c4dde141a2caed9afe67bbab2295b","position":410.0,"number":411,"votes":0,"user":{"name":"Jesse B. Hannah","gravatar_id":"d12c4dde141a2caed9afe67bbab2295b","location":"Tempe, AZ","blog":"http://jbhannah.net/","type":"User","login":"jbhannah","email":"jesse@jbhannah.net"},"comments":4,"body":"Using the `gems` command from the RVM plugin on Ubuntu 11.04 was not working correctly—all it would do was show the GNU `sed` help output. Some playing around showed that the repeated `-E` option was causing that to happen, so removing all `-E`s after the first one returned what appears to be the correct output. I don't remember this same problem occurring on my Mac (latest 10.6, `zsh` from `brew`), and I don't have it with me to test this or to see if the output is the same as what it's supposed to be originally, but this does at least fix the radically unexpected behavior when using GNU `sed` in Ubuntu 11.04.","title":"Fixed(?) RVM gem list helper","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/411.diff","updated_at":"2011-10-10T12:51:00Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/411","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/411.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"ed990f61ff66a5c409ef2d8a444820cecf098188","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Jesse B. Hannah","gravatar_id":"d12c4dde141a2caed9afe67bbab2295b","location":"Tempe, AZ","blog":"http://jbhannah.net/","type":"User","login":"jbhannah","email":"jesse@jbhannah.net"},"created_at":"2011-06-06T03:39:45Z","head":{"user":{"name":"Jesse B. Hannah","gravatar_id":"d12c4dde141a2caed9afe67bbab2295b","location":"Tempe, AZ","blog":"http://jbhannah.net/","type":"User","login":"jbhannah","email":"jesse@jbhannah.net"},"ref":"rvm","sha":"69277bd5905479583c040063c5ac3874ccaad1a4","label":"jbhannah:rvm","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/08/04 07:53:46 -0700","url":"https://github.com/jbhannah/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":false,"size":120,"private":false,"name":"oh-my-zsh","owner":"jbhannah","created_at":"2011/06/05 18:19:42 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-06-06T03:39:45Z","labels":[],"state":"open"},{"issue_updated_at":"2011-06-06T02:20:30Z","gravatar_id":"c59b979bdf791fa8cacd6cc7d3e28553","position":409.0,"number":410,"votes":0,"user":{"name":"Kien Tran","gravatar_id":"c59b979bdf791fa8cacd6cc7d3e28553","location":"Arlington, Texas","blog":"http://www.kientran.com","type":"User","login":"kientran","email":"kien@kientran.com"},"comments":0,"body":"Please pull in my theme \"kientran\" into the main repo.\r\n\r\nI also make a tweak to the RVM plugin. It will now only display the RVM gemset if it is not the default one. Before it was still showing a blank set of \"()\" when it was on the default system ruby. Please verify and consider pulling that!\r\n\r\nThanks!","title":"Add my personal theme + RVM plugin tweak","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/410.diff","updated_at":"2011-10-10T12:50:59Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/410","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/410.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"ed990f61ff66a5c409ef2d8a444820cecf098188","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Kien Tran","gravatar_id":"c59b979bdf791fa8cacd6cc7d3e28553","location":"Arlington, Texas","blog":"http://www.kientran.com","type":"User","login":"kientran","email":"kien@kientran.com"},"created_at":"2011-06-06T02:20:30Z","head":{"user":{"name":"Kien Tran","gravatar_id":"c59b979bdf791fa8cacd6cc7d3e28553","location":"Arlington, Texas","blog":"http://www.kientran.com","type":"User","login":"kientran","email":"kien@kientran.com"},"ref":"master","sha":"18dbdc3e7343ea37746514f6b1edcbcfb0b1b67f","label":"kientran:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/06/06 13:20:49 -0700","url":"https://github.com/kientran/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":164,"private":false,"name":"oh-my-zsh","owner":"kientran","created_at":"2011/06/05 19:06:06 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-06-06T02:20:30Z","labels":[],"state":"open"},{"issue_updated_at":"2011-06-05T23:57:59Z","gravatar_id":"232657bc369e6379b6a8801452d2507f","position":408.0,"number":409,"votes":0,"user":{"name":"Maxim Filatov","company":"Exectum LLC","gravatar_id":"232657bc369e6379b6a8801452d2507f","location":"Saint Petersburg, Russia","blog":"","type":"User","login":"Bregor","email":"pipopolam@gmail.com"},"comments":0,"body":"Dollar sign instead of percent in unprivileged user prompt (as in real gentoo)","title":"Dollar sign instead of percent in unprivileged user prompt (as in real ge","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/409.diff","updated_at":"2011-10-10T12:50:59Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/409","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/409.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"ed990f61ff66a5c409ef2d8a444820cecf098188","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Maxim Filatov","company":"Exectum LLC","gravatar_id":"232657bc369e6379b6a8801452d2507f","location":"Saint Petersburg, Russia","blog":"","type":"User","login":"Bregor","email":"pipopolam@gmail.com"},"created_at":"2011-06-05T23:57:59Z","head":{"user":{"name":"Maxim Filatov","company":"Exectum LLC","gravatar_id":"232657bc369e6379b6a8801452d2507f","location":"Saint Petersburg, Russia","blog":"","type":"User","login":"Bregor","email":"pipopolam@gmail.com"},"ref":"patch-1","sha":"f0451195f63b3607461bda1570c5fb2a4e429b3e","label":"Bregor:patch-1","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/06/05 16:57:21 -0700","url":"https://github.com/Bregor/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":124,"private":false,"name":"oh-my-zsh","owner":"Bregor","created_at":"2011/06/05 16:56:25 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-06-05T23:57:59Z","labels":[],"state":"open"},{"issue_updated_at":"2011-07-28T05:08:23Z","gravatar_id":"40f08b15afb1b17d7d39730c993be8a8","position":401.0,"number":402,"votes":0,"user":{"name":"Mark Walling","company":"","gravatar_id":"40f08b15afb1b17d7d39730c993be8a8","location":"Schenectady, NY","blog":"markwalling.org","type":"User","login":"mwalling","email":"mark@markwalling.org"},"comments":1,"body":"Plugin provides completion for fabric targets from the `fab` command line.\r\n\r\nI think what I did is a major hack (at least it feels that way), comments very welcome.","title":"Added completion support for fabric targets","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/402.diff","updated_at":"2011-10-10T12:50:59Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/402","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/402.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"e8bd400bffc51c83e0ef6671ecb5f364dc2f5065","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Mark Walling","company":"","gravatar_id":"40f08b15afb1b17d7d39730c993be8a8","location":"Schenectady, NY","blog":"markwalling.org","type":"User","login":"mwalling","email":"mark@markwalling.org"},"created_at":"2011-06-04T20:45:05Z","head":{"user":{"name":"Mark Walling","company":"","gravatar_id":"40f08b15afb1b17d7d39730c993be8a8","location":"Schenectady, NY","blog":"markwalling.org","type":"User","login":"mwalling","email":"mark@markwalling.org"},"ref":"fabric-completion","sha":"19cea6c4435ec4fbbe7c66de6140f51348fc67bd","label":"mwalling:fabric-completion","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/06/04 13:42:25 -0700","url":"https://github.com/mwalling/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":136,"private":false,"name":"oh-my-zsh","owner":"mwalling","created_at":"2011/06/04 13:39:53 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-06-04T20:45:05Z","labels":[],"state":"open"},{"issue_updated_at":"2011-06-04T15:17:10Z","gravatar_id":"cd9ac7713c79d5e108ee1755c9d7b5cf","position":397.0,"number":398,"votes":0,"user":{"name":"Luke Lee","gravatar_id":"cd9ac7713c79d5e108ee1755c9d7b5cf","location":"Houston, TX","blog":"www.lukelee.net","type":"User","login":"durden"},"comments":1,"body":"I really wanted to ability maintain a small set of themes I like and randomize through them. It could be as easy as removing those themes that I don't like, but then you'd might have to be careful when merging changes and collaborating, etc.\r\n\r\nInstead, I thought just creating a simple shell function to make a symlink in another directory would be an easy way to keep track of 'liked' themes. This way there isn't really any overhead because the themes aren't be copied, and removing favorites or 'unliking' themes is as easy as remove the symlink.\r\n\r\nGoes along with Issue #397","title":"Add ability to 'like' and 'unlike' themes and maintain list of favorite themes","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/398.diff","updated_at":"2011-10-10T12:50:59Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/398","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/398.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"e8bd400bffc51c83e0ef6671ecb5f364dc2f5065","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Luke Lee","gravatar_id":"cd9ac7713c79d5e108ee1755c9d7b5cf","location":"Houston, TX","blog":"www.lukelee.net","type":"User","login":"durden"},"created_at":"2011-06-04T15:13:38Z","head":{"user":{"name":"Luke Lee","gravatar_id":"cd9ac7713c79d5e108ee1755c9d7b5cf","location":"Houston, TX","blog":"www.lukelee.net","type":"User","login":"durden"},"ref":"master","sha":"2e203cb1d3edc69ceda8590983da566aa97d69f3","label":"durden:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/06/04 08:08:53 -0700","url":"https://github.com/durden/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":376,"private":false,"name":"oh-my-zsh","owner":"durden","created_at":"2011/06/03 16:55:16 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-06-04T15:13:38Z","labels":[],"state":"open"},{"issue_updated_at":"2011-08-31T19:30:09Z","gravatar_id":"9ed1beafd217429d03af5afb05e33469","position":395.0,"number":396,"votes":0,"user":{"name":"Andrew Hodges","company":"Vitrue, Inc.","gravatar_id":"9ed1beafd217429d03af5afb05e33469","location":"Norcross, GA","blog":"http://betawaffle.com/","type":"User","login":"betawaffle","email":"betawaffle@gmail.com"},"comments":3,"body":"Ok, I've made improvements to #393. Now the code looks (a bit) nicer, and it's easier to change if you don't like some decision I've made.\r\n\r\nEnjoy!","title":"Colorize Uninstall, Improve Colorization of Install and Upgrade","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/396.diff","updated_at":"2011-10-10T12:50:58Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/396","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/396.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"ed990f61ff66a5c409ef2d8a444820cecf098188","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Andrew Hodges","company":"Vitrue, Inc.","gravatar_id":"9ed1beafd217429d03af5afb05e33469","location":"Norcross, GA","blog":"http://betawaffle.com/","type":"User","login":"betawaffle","email":"betawaffle@gmail.com"},"created_at":"2011-06-04T12:54:25Z","head":{"user":{"name":"Andrew Hodges","company":"Vitrue, Inc.","gravatar_id":"9ed1beafd217429d03af5afb05e33469","location":"Norcross, GA","blog":"http://betawaffle.com/","type":"User","login":"betawaffle","email":"betawaffle@gmail.com"},"ref":"colorize-install","sha":"3e6d6df4fef5fa526e00db198dd6a509e57da6f8","label":"betawaffle:colorize-install","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/06/09 05:19:26 -0700","url":"https://github.com/betawaffle/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"Fork of robbyrussell's community-driven framework for zsh configuration.","has_wiki":false,"size":204,"private":false,"name":"oh-my-zsh","owner":"betawaffle","created_at":"2011/05/15 09:42:42 -0700","open_issues":0,"master_branch":"custom","homepage":""}},"issue_created_at":"2011-06-04T12:54:25Z","labels":[],"state":"open"},{"issue_updated_at":"2011-06-05T12:13:46Z","gravatar_id":"9ed1beafd217429d03af5afb05e33469","position":391.0,"number":392,"votes":0,"user":{"name":"Andrew Hodges","company":"Vitrue, Inc.","gravatar_id":"9ed1beafd217429d03af5afb05e33469","location":"Norcross, GA","blog":"http://betawaffle.com/","type":"User","login":"betawaffle","email":"betawaffle@gmail.com"},"comments":1,"body":"Modify directory listing aliases to make more sense. Remove conflicting helper\r\nfunction (mcd conflicts with mtools).\r\n\r\nRebased and reopened. Used to be #369","title":"Directory listing aliases and removal of mcd","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/392.diff","updated_at":"2011-10-10T12:50:58Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/392","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/392.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"ed990f61ff66a5c409ef2d8a444820cecf098188","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Andrew Hodges","company":"Vitrue, Inc.","gravatar_id":"9ed1beafd217429d03af5afb05e33469","location":"Norcross, GA","blog":"http://betawaffle.com/","type":"User","login":"betawaffle","email":"betawaffle@gmail.com"},"created_at":"2011-06-03T17:08:34Z","head":{"user":{"name":"Andrew Hodges","company":"Vitrue, Inc.","gravatar_id":"9ed1beafd217429d03af5afb05e33469","location":"Norcross, GA","blog":"http://betawaffle.com/","type":"User","login":"betawaffle","email":"betawaffle@gmail.com"},"ref":"pull-001","sha":"25adbe81a55664335e0166c202b8d8424a67c8aa","label":"betawaffle:pull-001","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/06/09 05:19:26 -0700","url":"https://github.com/betawaffle/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"Fork of robbyrussell's community-driven framework for zsh configuration.","has_wiki":false,"size":204,"private":false,"name":"oh-my-zsh","owner":"betawaffle","created_at":"2011/05/15 09:42:42 -0700","open_issues":0,"master_branch":"custom","homepage":""}},"issue_created_at":"2011-06-03T17:08:34Z","labels":[],"state":"open"},{"issue_updated_at":"2011-08-13T19:09:40Z","gravatar_id":"7e042c238dffcc90a7535ccb682e47be","position":371.0,"number":372,"votes":0,"user":{"name":"Will Leinweber","company":"heroku","gravatar_id":"7e042c238dffcc90a7535ccb682e47be","location":"San Francisco, CA","blog":"http://bitfission.com","type":"User","login":"will","email":"will@bitfission.com"},"comments":2,"body":"before, custom plugins were getting the wrong fpath set","title":"correctly add custom/plugin plugins to fpath","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/372.diff","updated_at":"2011-10-10T12:50:58Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/372","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/372.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"142c03dbd223683fd2d99f878b68f0f075cf33fb","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Will Leinweber","company":"heroku","gravatar_id":"7e042c238dffcc90a7535ccb682e47be","location":"San Francisco, CA","blog":"http://bitfission.com","type":"User","login":"will","email":"will@bitfission.com"},"created_at":"2011-05-30T01:12:42Z","head":{"user":{"name":"Will Leinweber","company":"heroku","gravatar_id":"7e042c238dffcc90a7535ccb682e47be","location":"San Francisco, CA","blog":"http://bitfission.com","type":"User","login":"will","email":"will@bitfission.com"},"ref":"patch-1","sha":"1ec4a83bf1779379f0f353888978e3c8f696ae53","label":"will:patch-1","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/05/29 18:12:14 -0700","url":"https://github.com/will/oh-my-zsh","has_downloads":true,"forks":1,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":284,"private":false,"name":"oh-my-zsh","owner":"will","created_at":"2010/07/02 16:05:30 -0700","open_issues":0,"homepage":""}},"issue_created_at":"2011-05-30T01:12:42Z","labels":["Plugins"],"state":"open"},{"issue_updated_at":"2011-10-10T12:11:53Z","gravatar_id":"a0c7542c45873945d9e76b76c6006c56","position":366.0,"number":367,"votes":0,"user":{"name":"Reza","gravatar_id":"a0c7542c45873945d9e76b76c6006c56","type":"User","login":"ryco","email":""},"comments":4,"body":"Made it compatible with Capistrano 2.x show tasks.","title":"Fixed cap plugin","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/367.diff","updated_at":"2011-10-10T12:50:57Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/367","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/367.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"ab2a7b51a8c3ead55a272fba58232d0823e519a2","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Reza","gravatar_id":"a0c7542c45873945d9e76b76c6006c56","type":"User","login":"ryco","email":""},"created_at":"2011-05-28T21:39:16Z","head":{"user":{"name":"Reza","gravatar_id":"a0c7542c45873945d9e76b76c6006c56","type":"User","login":"ryco","email":""},"ref":"cap_plugin","sha":"efa5593f88e552fbd3fde850b283fa43d36f481c","label":"ryco:cap_plugin","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/08/16 14:00:28 -0700","url":"https://github.com/ryco/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":false,"size":116,"private":false,"name":"oh-my-zsh","owner":"ryco","created_at":"2010/11/13 06:51:20 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-05-28T21:39:16Z","labels":["Plugins"],"state":"open"},{"issue_updated_at":"2011-05-26T04:27:37Z","gravatar_id":"c5386d8b7cee5f9474cfc01c2a68fa48","position":355.0,"number":356,"votes":0,"user":{"name":"Nicolas Pinto","company":"MIT","gravatar_id":"c5386d8b7cee5f9474cfc01c2a68fa48","location":"Boston, MA","type":"User","login":"npinto","email":"pinto@mit.edu"},"comments":0,"body":"First of all, thanks a ton for oh-my-zsh, exactly what I needed !\r\n\r\nMay I ask you to merge my theme in your repo ?\r\n\r\nThanks in advance.\r\n\r\nNicolas","title":"Add npinto theme.","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/356.diff","updated_at":"2011-10-10T12:50:57Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/356","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/356.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"f9e2af2bd7e567114724c4ca7f4a1727a656e7e2","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Nicolas Pinto","company":"MIT","gravatar_id":"c5386d8b7cee5f9474cfc01c2a68fa48","location":"Boston, MA","type":"User","login":"npinto","email":"pinto@mit.edu"},"created_at":"2011-05-26T04:27:37Z","head":{"user":{"name":"Nicolas Pinto","company":"MIT","gravatar_id":"c5386d8b7cee5f9474cfc01c2a68fa48","location":"Boston, MA","type":"User","login":"npinto","email":"pinto@mit.edu"},"ref":"develop","sha":"792680131b0df0e56645df54463b95f4df450144","label":"npinto:develop","repository":{"has_issues":false,"language":"Shell","watchers":2,"pushed_at":"2011/10/03 20:29:13 -0700","url":"https://github.com/npinto/oh-my-zsh","has_downloads":true,"forks":1,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 80 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":116,"private":false,"name":"oh-my-zsh","owner":"npinto","created_at":"2011/05/25 21:14:08 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-05-26T04:27:37Z","labels":["Idea","Themes"],"state":"open"},{"issue_updated_at":"2011-08-18T02:55:15Z","gravatar_id":"4625b7404fa2b2377a4818d027ba7678","position":351.0,"number":352,"votes":0,"user":{"name":"Alexander Simonov","company":"","gravatar_id":"4625b7404fa2b2377a4818d027ba7678","location":"Kiev, Ukraine","blog":"http://simonov.me","type":"User","login":"simonoff","email":"alex@simonov.me"},"comments":2,"body":"","title":"new theme and rvm theming support","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/352.diff","updated_at":"2011-10-10T12:50:57Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/352","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/352.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"7c3d12c7de1c2d8efdefe09b02349e24106e36c6","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Alexander Simonov","company":"","gravatar_id":"4625b7404fa2b2377a4818d027ba7678","location":"Kiev, Ukraine","blog":"http://simonov.me","type":"User","login":"simonoff","email":"alex@simonov.me"},"created_at":"2011-05-24T08:12:48Z","head":{"user":{"name":"Alexander Simonov","company":"","gravatar_id":"4625b7404fa2b2377a4818d027ba7678","location":"Kiev, Ukraine","blog":"http://simonov.me","type":"User","login":"simonoff","email":"alex@simonov.me"},"ref":"master","sha":"ea55e5128eb88b4834627dadc69853341caf68a0","label":"simonoff:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/05/24 01:11:56 -0700","url":"https://github.com/simonoff/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 80 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":1548,"private":false,"name":"oh-my-zsh","owner":"simonoff","created_at":"2011/05/21 00:47:57 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-05-24T08:12:48Z","labels":["Idea","Themes"],"state":"open"},{"issue_updated_at":"2011-05-26T08:20:29Z","gravatar_id":"faf3701bf886a19fd2643810999d287e","position":343.0,"number":344,"votes":0,"user":{"name":"Paul Gideon Dann","gravatar_id":"faf3701bf886a19fd2643810999d287e","location":"Birmingham, UK","blog":"http://paulandsophiedann.co.uk","type":"User","login":"giddie","email":"pdgiddie@gmail.com"},"comments":2,"body":"Oh-my-zsh currently breaks if the \"custom\" directory is empty. This fixes that problem, but maybe there's a better way than invoking \"find\"?\r\n\r\nContext: for tidiness, I've removed the custom/example.zsh script from my fork of oh-my-zsh. I don't like simply deleting the file after a fresh clone, because that results in the file appearing as \"deleted\" in git-status from then on. Hence the empty \"custom\" directory after a fresh clone :)","title":"Don't break when there are no files in \"custom\"","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/344.diff","updated_at":"2011-10-10T12:50:57Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/344","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/344.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"7c3d12c7de1c2d8efdefe09b02349e24106e36c6","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Paul Gideon Dann","gravatar_id":"faf3701bf886a19fd2643810999d287e","location":"Birmingham, UK","blog":"http://paulandsophiedann.co.uk","type":"User","login":"giddie","email":"pdgiddie@gmail.com"},"created_at":"2011-05-19T10:24:52Z","head":{"user":{"name":"Paul Gideon Dann","gravatar_id":"faf3701bf886a19fd2643810999d287e","location":"Birmingham, UK","blog":"http://paulandsophiedann.co.uk","type":"User","login":"giddie","email":"pdgiddie@gmail.com"},"ref":"allow-empty-custom","sha":"903206abf46a25f6f345eaa71db7559f8a7658c3","label":"giddie:allow-empty-custom","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/09/27 07:48:48 -0700","url":"https://github.com/giddie/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 80 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":116,"private":false,"name":"oh-my-zsh","owner":"giddie","created_at":"2011/05/18 08:13:25 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-05-19T10:24:52Z","labels":["Annoyance"],"state":"open"},{"issue_updated_at":"2011-09-21T09:01:21Z","gravatar_id":"faf3701bf886a19fd2643810999d287e","position":342.0,"number":343,"votes":0,"user":{"name":"Paul Gideon Dann","gravatar_id":"faf3701bf886a19fd2643810999d287e","location":"Birmingham, UK","blog":"http://paulandsophiedann.co.uk","type":"User","login":"giddie","email":"pdgiddie@gmail.com"},"comments":18,"body":"I need to use WOL for a few machines. This simple plugin helps by reducing this:\r\n\r\n# wakeonlan -f ~/.wakeonlan/mypc\r\n\r\n...to this:\r\n\r\n# wake mypc","title":"Plugin to make WOL nice & easy","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/343.diff","updated_at":"2011-10-10T12:50:56Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/343","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/343.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"7c3d12c7de1c2d8efdefe09b02349e24106e36c6","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Paul Gideon Dann","gravatar_id":"faf3701bf886a19fd2643810999d287e","location":"Birmingham, UK","blog":"http://paulandsophiedann.co.uk","type":"User","login":"giddie","email":"pdgiddie@gmail.com"},"created_at":"2011-05-19T10:01:38Z","head":{"user":{"name":"Paul Gideon Dann","gravatar_id":"faf3701bf886a19fd2643810999d287e","location":"Birmingham, UK","blog":"http://paulandsophiedann.co.uk","type":"User","login":"giddie","email":"pdgiddie@gmail.com"},"ref":"plugin-wakeonlan","sha":"7ba54d197dac8d5ae380271259ba4d8843f01b4f","label":"giddie:plugin-wakeonlan","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/09/27 07:48:48 -0700","url":"https://github.com/giddie/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 80 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":116,"private":false,"name":"oh-my-zsh","owner":"giddie","created_at":"2011/05/18 08:13:25 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-05-19T10:01:38Z","labels":["Plugins"],"state":"open"},{"issue_updated_at":"2011-05-16T16:34:45Z","gravatar_id":"64fec2287666363ff9697ea37f0c3412","position":339.0,"number":340,"votes":0,"user":{"name":"Lori Holden","company":"Comverge","gravatar_id":"64fec2287666363ff9697ea37f0c3412","location":"Broomfield, CO","blog":"http://loriholden.com","type":"User","login":"lholden","email":"email@loriholden.com"},"comments":0,"body":"","title":"Just my theme :)","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/340.diff","updated_at":"2011-10-10T12:50:56Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/340","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/340.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"7c3d12c7de1c2d8efdefe09b02349e24106e36c6","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Lori Holden","company":"Comverge","gravatar_id":"64fec2287666363ff9697ea37f0c3412","location":"Broomfield, CO","blog":"http://loriholden.com","type":"User","login":"lholden","email":"email@loriholden.com"},"created_at":"2011-05-16T16:34:45Z","head":{"user":{"name":"Lori Holden","company":"Comverge","gravatar_id":"64fec2287666363ff9697ea37f0c3412","location":"Broomfield, CO","blog":"http://loriholden.com","type":"User","login":"lholden","email":"email@loriholden.com"},"ref":"master","sha":"b6182e923fb75bdf2f059c849eb56d5473735134","label":"lholden:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/05/16 09:55:36 -0700","url":"https://github.com/lholden/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 80 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":1492,"private":false,"name":"oh-my-zsh","owner":"lholden","created_at":"2011/05/16 09:32:33 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-05-16T16:34:45Z","labels":["Themes"],"state":"open"},{"issue_updated_at":"2011-05-16T07:25:01Z","gravatar_id":"3eae0b6c37b4ee8cc974798f79c2aff5","position":338.0,"number":339,"votes":0,"user":{"name":"Andrew Nutter-Upham","gravatar_id":"3eae0b6c37b4ee8cc974798f79c2aff5","location":"Cambridge, MA","type":"User","login":"andynu"},"comments":0,"body":"This is my first pull request. Should I have branched first?\r\n\r\nThank you so much for this project. I've been managing all my dot files in a similar fashion in svn for years and this has pushed me over the edge to convert it all to git.\r\n\r\nThe deb plugin made me smile (the only difference between my aliases and those in the plugin are capital As). I have loads of shell tweaks, and thanks to the nice structure here I'll have more pull requests as I migrate them from custom to plugin.\r\n\r\nCheers,\r\n--\r\nAndy","title":"zsh-theme function (with completion), and another theme.","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/339.diff","updated_at":"2011-10-10T12:50:56Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/339","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/339.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"7c3d12c7de1c2d8efdefe09b02349e24106e36c6","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Andrew Nutter-Upham","gravatar_id":"3eae0b6c37b4ee8cc974798f79c2aff5","location":"Cambridge, MA","type":"User","login":"andynu"},"created_at":"2011-05-16T07:25:01Z","head":{"user":{"name":"Andrew Nutter-Upham","gravatar_id":"3eae0b6c37b4ee8cc974798f79c2aff5","location":"Cambridge, MA","type":"User","login":"andynu"},"ref":"master","sha":"31425d1600c0689f0f83b1d610fde2401512d075","label":"andynu:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/05/16 00:11:10 -0700","url":"https://github.com/andynu/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 80 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":1480,"private":false,"name":"oh-my-zsh","owner":"andynu","created_at":"2011/05/15 23:08:42 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-05-16T07:25:01Z","labels":["Themes"],"state":"open"},{"issue_updated_at":"2011-05-13T17:10:24Z","gravatar_id":"dbce141f7e94c123f0e9909f21541670","position":334.0,"number":335,"votes":0,"user":{"name":"Ashley Dev","gravatar_id":"dbce141f7e94c123f0e9909f21541670","type":"User","login":"ashleydev"},"comments":0,"body":"The ashleydev theme has some optimizations and ideas that should probably make their way into lib/git.zsh for making the git prompt faster and more feature-full.\r\n\r\nI've added more aliases for git cmds (see commit description).","title":"add ashleydev theme; update git plugin","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/335.diff","updated_at":"2011-10-10T12:50:56Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/335","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/335.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"3552423de3d5ae439dc815b7f9c4cbeab3fbebe8","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Ashley Dev","gravatar_id":"dbce141f7e94c123f0e9909f21541670","type":"User","login":"ashleydev"},"created_at":"2011-05-13T17:10:24Z","head":{"user":{"name":"Ashley Dev","gravatar_id":"dbce141f7e94c123f0e9909f21541670","type":"User","login":"ashleydev"},"ref":"master","sha":"78e8fe3337e4985c9d22a03027be06be250cf309","label":"ashleydev:master","repository":{"has_issues":false,"language":"Shell","watchers":3,"pushed_at":"2011/09/29 04:23:06 -0700","url":"https://github.com/ashleydev/oh-my-zsh","has_downloads":true,"forks":1,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":132,"private":false,"name":"oh-my-zsh","owner":"ashleydev","created_at":"2011/05/14 10:14:46 -0700","open_issues":1,"homepage":""}},"issue_created_at":"2011-05-13T17:10:24Z","labels":["Themes"],"state":"open"},{"issue_updated_at":"2011-05-26T23:05:12Z","gravatar_id":"3a5b19932cfbe1c8387d7dc8f9baa5d6","position":327.0,"number":328,"votes":0,"user":{"name":"Dave Lee","company":"Gray101","gravatar_id":"3a5b19932cfbe1c8387d7dc8f9baa5d6","location":"St. Louis, MO","blog":"camperdave.github.com","type":"User","login":"camperdave","email":"dave@gray101.com"},"comments":2,"body":"Hey, I've been tinkering with this awesome script for a bit, and I've decided to make this script for myself called full-upgrade. It handles automatic updates to a lot of things, as well as making it easier to setup your custom changes on multiple machines.\r\n\r\nBasically, it performs a regular upgrade (via the stock script), then looks to see if the user's git repository has a remote named \"custom-overlay\". If it does, it pulls down that remote's \"custom-overlay\" branch. For an example of how that can be used, check out my other repository, over here.\r\n\r\nOnce those files are pulled down, it checks each subdirectory in the plugins folder for a .git folder inside that. That indicates that the plugin in that folder is distributed outside the main oh-my-zsh repository, and it therefore pulls down the latest changes from that repository as well.\r\n\r\nSome of the code may not be perfect. The system sometimes complains if you pull down a custom-overlay and have untracked versions of the files lying around - in that case, it prompts you to delete them before it pulls the new ones down. You can always cancel and do it manually if you want to see the differences :)\r\n\r\nHopefully this fits into your vision for this awesome piece of software. If not, I'll just use it myself :)","title":"Full update","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/328.diff","updated_at":"2011-10-10T12:50:55Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/328","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/328.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"7c3d12c7de1c2d8efdefe09b02349e24106e36c6","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Dave Lee","company":"Gray101","gravatar_id":"3a5b19932cfbe1c8387d7dc8f9baa5d6","location":"St. Louis, MO","blog":"camperdave.github.com","type":"User","login":"camperdave","email":"dave@gray101.com"},"created_at":"2011-05-08T21:54:56Z","head":{"user":{"name":"Dave Lee","company":"Gray101","gravatar_id":"3a5b19932cfbe1c8387d7dc8f9baa5d6","location":"St. Louis, MO","blog":"camperdave.github.com","type":"User","login":"camperdave","email":"dave@gray101.com"},"ref":"full-update","sha":"b4036c3aff1c63fef143d5071124c7e078cbbc7e","label":"camperdave:full-update","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/07/06 19:34:56 -0700","url":"https://github.com/camperdave/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 80 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":184,"private":false,"name":"oh-my-zsh","owner":"camperdave","created_at":"2011/05/06 16:29:40 -0700","open_issues":0,"master_branch":"full-update","homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-05-08T21:54:56Z","labels":[],"state":"open"},{"issue_updated_at":"2011-05-08T16:27:13Z","gravatar_id":"a10db193524d6a5f9d0f6bd74614436b","position":326.0,"number":327,"votes":0,"user":{"name":"Will St. Clair","company":"Obama for America","gravatar_id":"a10db193524d6a5f9d0f6bd74614436b","location":"Chicago, IL","blog":"willstclair.com","type":"User","login":"wsc","email":"will@willstclair.com"},"comments":1,"body":"Hyphenated git commands were deprecated 5 years ago, and are non-functional on the Ubuntu git packages unless you add something to your $PATH.\r\n\r\nhttp://www.kernel.org/pub/software/scm/git/docs/RelNotes-1.6.0.txt","title":"Hyphenated commands are deprecated/don't work","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/327.diff","updated_at":"2011-10-10T12:50:55Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/327","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/327.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"0365ef0529ddfb912ca8202773e45916c55fdf4f","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Will St. Clair","company":"Obama for America","gravatar_id":"a10db193524d6a5f9d0f6bd74614436b","location":"Chicago, IL","blog":"willstclair.com","type":"User","login":"wsc","email":"will@willstclair.com"},"created_at":"2011-05-07T22:31:10Z","head":{"user":{"name":"Will St. Clair","company":"Obama for America","gravatar_id":"a10db193524d6a5f9d0f6bd74614436b","location":"Chicago, IL","blog":"willstclair.com","type":"User","login":"wsc","email":"will@willstclair.com"},"ref":"hyphens","sha":"8d7a68bd4ce3b08d32b481ff1cb09f12dffee4aa","label":"wsc:hyphens","repository":null},"issue_created_at":"2011-05-07T22:31:10Z","labels":[],"state":"open"},{"issue_updated_at":"2011-06-04T18:39:45Z","gravatar_id":"589f0b0dd5c19c7f42fd89a91221e6a6","position":317.0,"number":318,"votes":0,"user":{"name":"Thiago Avelino","company":"Trianguli","gravatar_id":"589f0b0dd5c19c7f42fd89a91221e6a6","location":"Brasil - São Paulo / SP","blog":"http://avelino.us","type":"User","login":"avelino","email":"thiagoavelinoster@gmail.com"},"comments":1,"body":"Alias for Python and Django","title":"Add new plugin Python and Django","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/318.diff","updated_at":"2011-10-10T12:50:55Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/318","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/318.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"a525993f6b62f3c5acec0afd204ff517408b6f29","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Thiago Avelino","company":"Trianguli","gravatar_id":"589f0b0dd5c19c7f42fd89a91221e6a6","location":"Brasil - São Paulo / SP","blog":"http://avelino.us","type":"User","login":"avelino","email":"thiagoavelinoster@gmail.com"},"created_at":"2011-04-30T20:12:57Z","head":{"user":{"name":"Thiago Avelino","company":"Trianguli","gravatar_id":"589f0b0dd5c19c7f42fd89a91221e6a6","location":"Brasil - São Paulo / SP","blog":"http://avelino.us","type":"User","login":"avelino","email":"thiagoavelinoster@gmail.com"},"ref":"master","sha":"653db8fbe99084e9e0d80857fab2dfc2b2e24584","label":"avelino:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/04/30 13:20:30 -0700","url":"https://github.com/avelino/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 80 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":1420,"private":false,"name":"oh-my-zsh","owner":"avelino","created_at":"2011/04/30 12:49:39 -0700","open_issues":0,"homepage":"http://twitter.com/ohmyzsh"}},"issue_created_at":"2011-04-30T20:12:57Z","labels":["Plugins"],"state":"open"},{"issue_updated_at":"2011-09-02T20:45:27Z","gravatar_id":"e08e1c732a835527370881c93f83d517","position":315.0,"number":316,"votes":0,"user":{"name":"Pat Regan","gravatar_id":"e08e1c732a835527370881c93f83d517","location":"Scranton, PA","blog":"blog.patshead.com","type":"User","login":"oknowton","email":"thehead@patshead.com"},"comments":20,"body":"Things are a getting a bit too fast to consistently benchmark now... \r\n\r\nI ran 20 consecutive benchmarks with and without this commit. Without this change zsh takes between 0.11 and 0.15 seconds to start up. With this change it clocks between 0.09 and 0.13 seconds.\r\n\r\nWhen something causes ~/.zcompdump to change the startup time for me is about 0.45 seconds. This shouldn't happen very often, I think only when something in the fpath changes.\r\n","title":"Compile ~/.zcompdump when it has been modified, for another minor speed up","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/316.diff","updated_at":"2011-10-10T12:50:55Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/316","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/316.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"7c3d12c7de1c2d8efdefe09b02349e24106e36c6","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Pat Regan","gravatar_id":"e08e1c732a835527370881c93f83d517","location":"Scranton, PA","blog":"blog.patshead.com","type":"User","login":"oknowton","email":"thehead@patshead.com"},"created_at":"2011-04-30T02:58:43Z","head":{"user":{"name":"Pat Regan","gravatar_id":"e08e1c732a835527370881c93f83d517","location":"Scranton, PA","blog":"blog.patshead.com","type":"User","login":"oknowton","email":"thehead@patshead.com"},"ref":"master","sha":"5b2e24173c865aa71dd5c9c1b80484cadd64e87b","label":"oknowton:master","repository":{"has_issues":false,"language":"Shell","watchers":2,"pushed_at":"2011/05/18 15:18:19 -0700","url":"https://github.com/oknowton/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 70 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":1324,"private":false,"name":"oh-my-zsh","owner":"oknowton","created_at":"2011/04/08 07:03:43 -0700","open_issues":0,"homepage":""}},"issue_created_at":"2011-04-30T02:58:43Z","labels":[],"state":"open"},{"issue_updated_at":"2011-04-29T12:28:03Z","gravatar_id":"85eaedd1b833c73e1656ee21a267e59e","position":312.0,"number":313,"votes":0,"user":{"name":"Vikram Verma","gravatar_id":"85eaedd1b833c73e1656ee21a267e59e","location":"Singapore","blog":"http://vikramverma.com","type":"User","login":"vikramverma","email":"me@vikramverma.com"},"comments":0,"body":"","title":"Added 'basic' zsh theme.","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/313.diff","updated_at":"2011-10-10T12:50:54Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/313","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/313.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"784c56cd09842c28df9a2e78279dd0667db8da47","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Vikram Verma","gravatar_id":"85eaedd1b833c73e1656ee21a267e59e","location":"Singapore","blog":"http://vikramverma.com","type":"User","login":"vikramverma","email":"me@vikramverma.com"},"created_at":"2011-04-29T12:28:02Z","head":{"user":{"name":"Vikram Verma","gravatar_id":"85eaedd1b833c73e1656ee21a267e59e","location":"Singapore","blog":"http://vikramverma.com","type":"User","login":"vikramverma","email":"me@vikramverma.com"},"ref":"master","sha":"7d172696988b029c0ff6a7a5b052e02f943fe693","label":"vikramverma:master","repository":null},"issue_created_at":"2011-04-29T12:28:03Z","labels":[],"state":"open"},{"issue_updated_at":"2011-04-28T19:08:52Z","gravatar_id":"793789919cd04697f099e9ef1ecd6de1","position":305.0,"number":306,"votes":0,"user":{"name":"Justin Riley","gravatar_id":"793789919cd04697f099e9ef1ecd6de1","location":"Boston, MA","blog":"http://web.mit.edu/starcluster","type":"User","login":"jtriley"},"comments":0,"body":"I find the http://github.com/olivierverdier/zsh-git-prompt prompt extremely useful when working inside of git repos. I've added it as a plugin called 'git-prompt' in my oh-my-zsh.","title":"add git-prompt plugin from olivierverdier/zsh-git-prompt","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/306.diff","updated_at":"2011-10-10T12:50:54Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/306","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/306.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"70d0beae22e7d97d4380af32dae1618f45e3dd4b","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Justin Riley","gravatar_id":"793789919cd04697f099e9ef1ecd6de1","location":"Boston, MA","blog":"http://web.mit.edu/starcluster","type":"User","login":"jtriley"},"created_at":"2011-04-28T19:08:52Z","head":{"user":{"name":"Justin Riley","gravatar_id":"793789919cd04697f099e9ef1ecd6de1","location":"Boston, MA","blog":"http://web.mit.edu/starcluster","type":"User","login":"jtriley"},"ref":"git-prompt","sha":"e5f77b8f0496e5915383f2f456f91a20f5ff4ace","label":"jtriley:git-prompt","repository":{"has_issues":false,"language":"Shell","watchers":2,"pushed_at":"2011/05/09 07:19:54 -0700","url":"https://github.com/jtriley/oh-my-zsh","has_downloads":true,"forks":1,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 70 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":1372,"private":false,"name":"oh-my-zsh","owner":"jtriley","created_at":"2011/04/21 20:18:21 -0700","open_issues":0,"homepage":""}},"issue_created_at":"2011-04-28T19:08:52Z","labels":[],"state":"open"},{"issue_updated_at":"2011-04-26T16:53:06Z","gravatar_id":"54169a64eca05a858bdf95173915ed79","position":291.0,"number":292,"votes":0,"user":{"name":"Sorin Ionescu","gravatar_id":"54169a64eca05a858bdf95173915ed79","blog":"http://blog.tweefari.com","type":"User","login":"sorin-ionescu","email":"sorin.ionescu@gmail.com"},"comments":4,"body":"Do not call `grep` for basic expressions. Use built-in ZSH regex. This also fixes a couple of bugs where certain repository changes were not indicated properly.","title":"ZSH has built-in regex support; use it!","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/292.diff","updated_at":"2011-10-10T12:50:54Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/292","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/292.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"3bb21afa88f136c18073808852118dedd7e21fbf","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Sorin Ionescu","gravatar_id":"54169a64eca05a858bdf95173915ed79","blog":"http://blog.tweefari.com","type":"User","login":"sorin-ionescu","email":"sorin.ionescu@gmail.com"},"created_at":"2011-04-20T03:51:37Z","head":{"user":{"name":"Sorin Ionescu","gravatar_id":"54169a64eca05a858bdf95173915ed79","blog":"http://blog.tweefari.com","type":"User","login":"sorin-ionescu","email":"sorin.ionescu@gmail.com"},"ref":"lib-git","sha":"c55256b8b227c905e9022ba028535ed9f9e30aa7","label":"sorin-ionescu:lib-git","repository":{"has_issues":false,"language":"Shell","watchers":11,"pushed_at":"2011/09/21 05:14:06 -0700","url":"https://github.com/sorin-ionescu/oh-my-zsh","has_downloads":true,"forks":3,"fork":true,"description":"A community-driven framework for managing ZSH.","has_wiki":false,"size":252,"private":false,"name":"oh-my-zsh","owner":"sorin-ionescu","created_at":"2010/12/16 00:07:04 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-04-20T03:51:37Z","labels":[],"state":"open"},{"issue_updated_at":"2011-06-14T01:07:36Z","gravatar_id":"d116c69ed16fb1af875c0fda8d1295f5","position":290.0,"number":291,"votes":0,"user":{"name":"Gareth Owen","gravatar_id":"d116c69ed16fb1af875c0fda8d1295f5","type":"User","login":"gwjo"},"comments":2,"body":"* Fix the gdv function, as reported in #282\r\n* Skip the _ (alias for sudo) when displaying the running command in the term title\r\n* Unset locally created variables at the end of oh-my-zsh.sh\r\n* Don't overwrite existing environment variables for grep, pager and local (fixes #425)","title":"A couple of minor fixes","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/291.diff","updated_at":"2011-10-10T12:50:54Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/291","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/291.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"ed990f61ff66a5c409ef2d8a444820cecf098188","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Gareth Owen","gravatar_id":"d116c69ed16fb1af875c0fda8d1295f5","type":"User","login":"gwjo"},"created_at":"2011-04-20T00:16:49Z","head":{"user":{"name":"Gareth Owen","gravatar_id":"d116c69ed16fb1af875c0fda8d1295f5","type":"User","login":"gwjo"},"ref":"fixes","sha":"533760df9f605cb621d250e56eb69004dbe35d81","label":"gwjo:fixes","repository":{"has_issues":false,"language":"Shell","watchers":2,"pushed_at":"2011/08/02 17:36:27 -0700","url":"https://github.com/gwjo/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":false,"size":136,"private":false,"name":"oh-my-zsh","owner":"gwjo","created_at":"2010/09/16 17:10:00 -0700","integrate_branch":"fork-queue","open_issues":0,"master_branch":"custom","homepage":""}},"issue_created_at":"2011-04-20T00:16:49Z","labels":[],"state":"open"},{"issue_updated_at":"2011-04-19T19:34:46Z","gravatar_id":"c0944a93ae347ad93150020f52d5432b","position":288.0,"number":289,"votes":0,"user":{"name":"Benjamin Martinez","gravatar_id":"c0944a93ae347ad93150020f52d5432b","blog":"http://cruznick.github.com","type":"User","login":"cruznick","email":"cruznickbjm@gmail"},"comments":1,"body":"I created a new theme based on nanotech theme\r\n\r\n\r\nalso added a battery plugin for linux based systems that shows batt percent\r\nadded mercurial plugin\r\nand 2 distro specific plugins (chakra linux and archlinux)","title":"New theme and 4 more plugins","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/289.diff","updated_at":"2011-10-10T12:50:53Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/289","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/289.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"971b071dc67f423d8b2a6f476e1dd58819049f41","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Benjamin Martinez","gravatar_id":"c0944a93ae347ad93150020f52d5432b","blog":"http://cruznick.github.com","type":"User","login":"cruznick","email":"cruznickbjm@gmail"},"created_at":"2011-04-19T15:17:53Z","head":{"user":{"name":"Benjamin Martinez","gravatar_id":"c0944a93ae347ad93150020f52d5432b","blog":"http://cruznick.github.com","type":"User","login":"cruznick","email":"cruznickbjm@gmail"},"ref":"master","sha":"f34fb9cc04cb36adc693810bcc32749837f72bcd","label":"cruznick:master","repository":null},"issue_created_at":"2011-04-19T15:17:53Z","labels":["Themes"],"state":"open"},{"issue_updated_at":"2011-04-19T01:38:55Z","gravatar_id":"e0718b33da5851b64caffcddf99aa36d","position":285.0,"number":286,"votes":0,"user":{"gravatar_id":"e0718b33da5851b64caffcddf99aa36d","type":"User","login":"hjz"},"comments":0,"body":"","title":"New theme that shows # of background and suspended jobs","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/286.diff","updated_at":"2011-10-10T12:50:53Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/286","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/286.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"3552423de3d5ae439dc815b7f9c4cbeab3fbebe8","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"gravatar_id":"e0718b33da5851b64caffcddf99aa36d","type":"User","login":"hjz"},"created_at":"2011-04-18T06:46:29Z","head":{"user":{"gravatar_id":"e0718b33da5851b64caffcddf99aa36d","type":"User","login":"hjz"},"ref":"master","sha":"617b15179ba6b8bcfcf836c8fccee6bc289e12e5","label":"hjz:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/07/10 02:59:08 -0700","url":"https://github.com/hjz/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":false,"size":124,"private":false,"name":"oh-my-zsh","owner":"hjz","created_at":"2011/07/10 01:11:53 -0700","open_issues":0,"homepage":""}},"issue_created_at":"2011-04-18T06:46:29Z","labels":["Themes"],"state":"open"},{"issue_updated_at":"2011-04-18T01:47:34Z","gravatar_id":"274a52c00e4f37979f33423fc8acf371","position":284.0,"number":285,"votes":0,"user":{"name":"Carter Tazio Schonwald","gravatar_id":"274a52c00e4f37979f33423fc8acf371","location":"The Northeast, USA","blog":"www.carter.schonwald.org","type":"User","login":"cartazio","email":"first name dot last name at the google mail thing"},"comments":0,"body":"its a modification of some other code so that theres a single new tab command that work on both iterm and terminal apps. \r\n\r\ni can't seem to seperate out the style file commits, and perhaps theres some naming that could be fixed up, but the command works better than the previous one, and it interacts more robustly with how to sanely embed apple script within a zsh script","title":"iterm and terminal app new tab command that works correctly","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/285.diff","updated_at":"2011-10-10T12:50:53Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/285","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/285.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"9f46eafae0bed7df50a0004fca5d25539425ff85","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Carter Tazio Schonwald","gravatar_id":"274a52c00e4f37979f33423fc8acf371","location":"The Northeast, USA","blog":"www.carter.schonwald.org","type":"User","login":"cartazio","email":"first name dot last name at the google mail thing"},"created_at":"2011-04-18T01:47:34Z","head":{"user":{"name":"Carter Tazio Schonwald","gravatar_id":"274a52c00e4f37979f33423fc8acf371","location":"The Northeast, USA","blog":"www.carter.schonwald.org","type":"User","login":"cartazio","email":"first name dot last name at the google mail thing"},"ref":"master","sha":"21fb7e419fddc7c19435de88e4b336bc66ab9a5a","label":"cartazio:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/09/01 19:14:25 -0700","url":"https://github.com/cartazio/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":116,"private":false,"name":"oh-my-zsh","owner":"cartazio","created_at":"2011/02/19 10:08:22 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-04-18T01:47:34Z","labels":[],"state":"open"},{"issue_updated_at":"2011-09-12T15:54:23Z","gravatar_id":"d116c69ed16fb1af875c0fda8d1295f5","position":282.0,"number":283,"votes":0,"user":{"name":"Gareth Owen","gravatar_id":"d116c69ed16fb1af875c0fda8d1295f5","type":"User","login":"gwjo"},"comments":5,"body":"usage:\n\n growl \"Notification Text\"\n\n\nYou can use \\n and \\t to add newlines and tabs respectively, or add \\a to make it beep. I find this useful to let me know when a long command, such as a compile completes...\n\n make ; growl \"Make finished\\a\"\n\n","title":"Add growl command for iTerm/iTerm2","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/283.diff","updated_at":"2011-10-10T12:50:52Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/283","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/283.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"971b071dc67f423d8b2a6f476e1dd58819049f41","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Gareth Owen","gravatar_id":"d116c69ed16fb1af875c0fda8d1295f5","type":"User","login":"gwjo"},"created_at":"2011-04-17T23:09:32Z","head":{"user":{"name":"Gareth Owen","gravatar_id":"d116c69ed16fb1af875c0fda8d1295f5","type":"User","login":"gwjo"},"ref":"osx","sha":"27cee97228e6d662e4ad5f1c08cde44cfdd0483a","label":"gwjo:osx","repository":{"has_issues":false,"language":"Shell","watchers":2,"pushed_at":"2011/08/02 17:36:27 -0700","url":"https://github.com/gwjo/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":false,"size":136,"private":false,"name":"oh-my-zsh","owner":"gwjo","created_at":"2010/09/16 17:10:00 -0700","integrate_branch":"fork-queue","open_issues":0,"master_branch":"custom","homepage":""}},"issue_created_at":"2011-04-17T23:09:32Z","labels":[],"state":"open"},{"issue_updated_at":"2011-04-08T22:43:24Z","gravatar_id":"9c3620f41b41a013dfc20fbc90eb19ed","position":267.0,"number":268,"votes":0,"user":{"name":"Jared Hancock","gravatar_id":"9c3620f41b41a013dfc20fbc90eb19ed","location":"Louisiana, USA","type":"User","login":"greezybacon"},"comments":2,"body":"There is a bit more work that could be done to unify the various workarounds implemented in the plugins for VCS's, but this at least adds support for any VCS by adding a plugin that defines four functions. I added a Mercurial plugin to illustriate the idea. I also upgraded all the themes to use the slightly different style so that they can all work with any VCS under the hood.\r\n\r\nCheers","title":"Use a generic \"vcs\" library to support any VCS in the prompt","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/268.diff","updated_at":"2011-10-10T12:50:52Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/268","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/268.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"2e9492969b0ea90932ad3f4298330b75ef8cf2ce","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Jared Hancock","gravatar_id":"9c3620f41b41a013dfc20fbc90eb19ed","location":"Louisiana, USA","type":"User","login":"greezybacon"},"created_at":"2011-04-08T04:00:53Z","head":{"user":{"name":"Jared Hancock","gravatar_id":"9c3620f41b41a013dfc20fbc90eb19ed","location":"Louisiana, USA","type":"User","login":"greezybacon"},"ref":"master","sha":"46ffcda777a3fa3b587897a22a5726f8c24ef957","label":"greezybacon:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/04/07 21:05:49 -0700","url":"https://github.com/greezybacon/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 70 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":792,"private":false,"name":"oh-my-zsh","owner":"greezybacon","created_at":"2011/04/07 20:57:57 -0700","open_issues":0,"homepage":""}},"issue_created_at":"2011-04-08T04:00:53Z","labels":[],"state":"open"},{"issue_updated_at":"2011-03-29T17:38:15Z","gravatar_id":"f9116c42e95b260f995680d301695a84","position":260.0,"number":261,"votes":0,"user":{"name":"Ben Langfeld","company":"MyStudioTools Ltd","gravatar_id":"f9116c42e95b260f995680d301695a84","location":"Preston, UK","blog":"langfeld.me","type":"User","login":"benlangfeld","email":"ben@langfeld.me"},"comments":0,"body":"Please feel free to come up with an inventive name for this","title":"Add custom tweaked version of dallas theme","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/261.diff","updated_at":"2011-10-10T12:50:52Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/261","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/261.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"2497c57976b1e5002ebecd7ffa5c35bc87ada903","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Ben Langfeld","company":"MyStudioTools Ltd","gravatar_id":"f9116c42e95b260f995680d301695a84","location":"Preston, UK","blog":"langfeld.me","type":"User","login":"benlangfeld","email":"ben@langfeld.me"},"created_at":"2011-03-29T17:38:15Z","head":{"user":{"name":"Ben Langfeld","company":"MyStudioTools Ltd","gravatar_id":"f9116c42e95b260f995680d301695a84","location":"Preston, UK","blog":"langfeld.me","type":"User","login":"benlangfeld","email":"ben@langfeld.me"},"ref":"custom-theme","sha":"154640c5256bcd21696fa5784053c85a5a64c401","label":"benlangfeld:custom-theme","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/04/10 07:07:39 -0700","url":"https://github.com/benlangfeld/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":776,"private":false,"name":"oh-my-zsh","owner":"benlangfeld","created_at":"2010/11/22 01:13:38 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-03-29T17:38:15Z","labels":["Themes"],"state":"open"},{"issue_updated_at":"2011-03-29T17:35:49Z","gravatar_id":"f9116c42e95b260f995680d301695a84","position":259.0,"number":260,"votes":0,"user":{"name":"Ben Langfeld","company":"MyStudioTools Ltd","gravatar_id":"f9116c42e95b260f995680d301695a84","location":"Preston, UK","blog":"langfeld.me","type":"User","login":"benlangfeld","email":"ben@langfeld.me"},"comments":0,"body":"* As described here: http://ryan.mcgeary.org/2011/02/09/vendor-everything-still-applies/","title":"Update the bundler plugin to follow the \"vendor everything\" routine","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/260.diff","updated_at":"2011-10-10T12:50:52Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/260","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/260.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"2497c57976b1e5002ebecd7ffa5c35bc87ada903","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Ben Langfeld","company":"MyStudioTools Ltd","gravatar_id":"f9116c42e95b260f995680d301695a84","location":"Preston, UK","blog":"langfeld.me","type":"User","login":"benlangfeld","email":"ben@langfeld.me"},"created_at":"2011-03-29T17:35:49Z","head":{"user":{"name":"Ben Langfeld","company":"MyStudioTools Ltd","gravatar_id":"f9116c42e95b260f995680d301695a84","location":"Preston, UK","blog":"langfeld.me","type":"User","login":"benlangfeld","email":"ben@langfeld.me"},"ref":"bundler-plugin","sha":"43af3cb51342c85db08abae26b562021426d6b85","label":"benlangfeld:bundler-plugin","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/04/10 07:07:39 -0700","url":"https://github.com/benlangfeld/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":776,"private":false,"name":"oh-my-zsh","owner":"benlangfeld","created_at":"2010/11/22 01:13:38 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-03-29T17:35:49Z","labels":[],"state":"open"},{"issue_updated_at":"2011-03-24T04:27:14Z","gravatar_id":"9c2ccd0119fd43ec68aaf4fdd0a5d4d8","position":255.0,"number":256,"votes":0,"user":{"name":"Lorrin Nelson","company":"Multifarious, Inc.","gravatar_id":"9c2ccd0119fd43ec68aaf4fdd0a5d4d8","location":"Seattle","blog":"http://www.lorrin.org","type":"User","login":"lorrin"},"comments":0,"body":"","title":"Make command-not-found no-op when support not available (e.g. not on Ubuntu)","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/256.diff","updated_at":"2011-10-10T12:50:51Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/256","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/256.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"52df85440ee8ead8f17d3aa3e1fedf187162313c","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Lorrin Nelson","company":"Multifarious, Inc.","gravatar_id":"9c2ccd0119fd43ec68aaf4fdd0a5d4d8","location":"Seattle","blog":"http://www.lorrin.org","type":"User","login":"lorrin"},"created_at":"2011-03-24T04:27:14Z","head":{"user":{"name":"Lorrin Nelson","company":"Multifarious, Inc.","gravatar_id":"9c2ccd0119fd43ec68aaf4fdd0a5d4d8","location":"Seattle","blog":"http://www.lorrin.org","type":"User","login":"lorrin"},"ref":"no-op_command-not-found","sha":"e8a7a31ef66093f1b1ab034e84e01a147fa8b28a","label":"lorrin:no-op_command-not-found","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/10/13 16:10:32 -0700","url":"https://github.com/lorrin/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":112,"private":false,"name":"oh-my-zsh","owner":"lorrin","created_at":"2011/01/27 16:21:14 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-03-24T04:27:14Z","labels":[],"state":"open"},{"issue_updated_at":"2011-08-01T05:24:02Z","gravatar_id":"20171a64471be602e50c8ba7662313af","position":252.0,"number":253,"votes":0,"user":{"name":"James Smith","company":"Heyzap","gravatar_id":"20171a64471be602e50c8ba7662313af","location":"San Francisco, CA","blog":"http://loopj.com","type":"User","login":"loopj"},"comments":1,"body":"I've added function git_remote_status to lib/git.zsh which extracts if the local branch is ahead/behind/diverged from remote. Also included is my current theme \"intheloop\" which demonstrates how to use git_remote_status.","title":"Added function git_remote_status to lib/git.zsh which extracts if the local branch is ahead/behind/diverged from remote","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/253.diff","updated_at":"2011-10-10T12:50:51Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/253","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/253.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"a738ca9b645c3cc53bdb01e8676202ceca449ccf","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"James Smith","company":"Heyzap","gravatar_id":"20171a64471be602e50c8ba7662313af","location":"San Francisco, CA","blog":"http://loopj.com","type":"User","login":"loopj"},"created_at":"2011-03-20T00:53:22Z","head":{"user":{"name":"James Smith","company":"Heyzap","gravatar_id":"20171a64471be602e50c8ba7662313af","location":"San Francisco, CA","blog":"http://loopj.com","type":"User","login":"loopj"},"ref":"master","sha":"0ba398f9e1aaf05e72406d5c840f013eebb6b260","label":"loopj:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/08/01 00:45:02 -0700","url":"https://github.com/loopj/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), nearly 70 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":772,"private":false,"name":"oh-my-zsh","owner":"loopj","created_at":"2011/03/19 17:39:00 -0700","open_issues":0,"homepage":""}},"issue_created_at":"2011-03-20T00:53:22Z","labels":[],"state":"open"},{"issue_updated_at":"2011-08-22T19:19:22Z","gravatar_id":"c6b62e8457dbdd18bd3c578c769497ae","position":238.0,"number":239,"votes":0,"user":{"name":"Fredrik Appelberg","gravatar_id":"c6b62e8457dbdd18bd3c578c769497ae","location":"Uppsala, Sweden","blog":"mulli.nu","type":"User","login":"fred-o"},"comments":10,"body":"Hi, I've added plugins for Maven and GNU Screen, based mostly on code I found on the web. \r\n\r\nCheers,\r\n-- Fredrik","title":"Maven and GNU Screen plugins","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/239.diff","updated_at":"2011-10-10T12:50:51Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/239","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/239.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"971b071dc67f423d8b2a6f476e1dd58819049f41","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Fredrik Appelberg","gravatar_id":"c6b62e8457dbdd18bd3c578c769497ae","location":"Uppsala, Sweden","blog":"mulli.nu","type":"User","login":"fred-o"},"created_at":"2011-03-11T09:38:59Z","head":{"user":{"name":"Fredrik Appelberg","gravatar_id":"c6b62e8457dbdd18bd3c578c769497ae","location":"Uppsala, Sweden","blog":"mulli.nu","type":"User","login":"fred-o"},"ref":"master","sha":"0a896119214b5211d26be6446d5e98af7634c5ae","label":"fred-o:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/04/17 05:03:27 -0700","url":"https://github.com/fred-o/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":744,"private":false,"name":"oh-my-zsh","owner":"fred-o","created_at":"2011/02/11 00:00:32 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-03-11T09:38:59Z","labels":["Plugins"],"state":"open"},{"issue_updated_at":"2011-02-07T22:40:30Z","gravatar_id":"2fb7f7dfb58d70107a2efc774badb256","position":213.0,"number":214,"votes":0,"user":{"name":"Allan Caffee","gravatar_id":"2fb7f7dfb58d70107a2efc774badb256","type":"User","login":"allancaffee"},"comments":0,"body":"I've added completion for the vm names.","title":"Improved completion for vagrant","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/214.diff","updated_at":"2011-10-10T12:50:51Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/214","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/214.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"01b0366f3e27cf30f3882870100f14625fc267d1","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Allan Caffee","gravatar_id":"2fb7f7dfb58d70107a2efc774badb256","type":"User","login":"allancaffee"},"created_at":"2011-02-07T22:40:30Z","head":{"user":{"name":"Allan Caffee","gravatar_id":"2fb7f7dfb58d70107a2efc774badb256","type":"User","login":"allancaffee"},"ref":"master","sha":"8aec32b48bb88e980150a43586e7e02b9156e165","label":"allancaffee:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/02/07 12:37:44 -0800","url":"https://github.com/allancaffee/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":420,"private":false,"name":"oh-my-zsh","owner":"allancaffee","created_at":"2011/02/07 12:28:02 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-02-07T22:40:30Z","labels":[],"state":"open"},{"issue_updated_at":"2011-02-06T02:57:21Z","gravatar_id":"4e17e0dd05911f4bcd69f8aafabf1b48","position":211.0,"number":212,"votes":0,"user":{"name":"Alex Ray","company":"North Carolina State University","gravatar_id":"4e17e0dd05911f4bcd69f8aafabf1b48","location":"Raleigh, NC","blog":"machinaut.posterous.com","type":"User","login":"ajray","email":"ajray@ncsu.edu"},"comments":0,"body":"this is something actually from trabianmatt's fork of oh-my-zsh but it didnt look like he put in a pull request for it.\r\n\r\nI was just looking for a fix to my problem and i found it in his oh-my-zsh fork.","title":"Simple rvm plugin to fix the ~rvm-cwd errors","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/212.diff","updated_at":"2011-10-10T12:50:50Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/212","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/212.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"01b0366f3e27cf30f3882870100f14625fc267d1","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Alex Ray","company":"North Carolina State University","gravatar_id":"4e17e0dd05911f4bcd69f8aafabf1b48","location":"Raleigh, NC","blog":"machinaut.posterous.com","type":"User","login":"ajray","email":"ajray@ncsu.edu"},"created_at":"2011-02-06T02:57:21Z","head":{"user":{"name":"Alex Ray","company":"North Carolina State University","gravatar_id":"4e17e0dd05911f4bcd69f8aafabf1b48","location":"Raleigh, NC","blog":"machinaut.posterous.com","type":"User","login":"ajray","email":"ajray@ncsu.edu"},"ref":"master","sha":"202215a3c956450d0e2a515d3e1b8791d0b1b982","label":"ajray:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/05/26 12:13:13 -0700","url":"https://github.com/ajray/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":708,"private":false,"name":"oh-my-zsh","owner":"ajray","created_at":"2011/02/05 18:53:29 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-02-06T02:57:21Z","labels":["Plugins"],"state":"open"},{"issue_updated_at":"2011-02-04T04:13:50Z","gravatar_id":"54169a64eca05a858bdf95173915ed79","position":208.0,"number":209,"votes":0,"user":{"name":"Sorin Ionescu","gravatar_id":"54169a64eca05a858bdf95173915ed79","blog":"http://blog.tweefari.com","type":"User","login":"sorin-ionescu","email":"sorin.ionescu@gmail.com"},"comments":0,"body":"The inconsistent casing was confusing me as I read the man page to see what each option does; so, I fixed it.","title":"Fixed inconsistent casing in history.zsh","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/209.diff","updated_at":"2011-10-10T12:50:50Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/209","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/209.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"3bb21afa88f136c18073808852118dedd7e21fbf","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Sorin Ionescu","gravatar_id":"54169a64eca05a858bdf95173915ed79","blog":"http://blog.tweefari.com","type":"User","login":"sorin-ionescu","email":"sorin.ionescu@gmail.com"},"created_at":"2011-02-04T04:13:50Z","head":{"user":{"name":"Sorin Ionescu","gravatar_id":"54169a64eca05a858bdf95173915ed79","blog":"http://blog.tweefari.com","type":"User","login":"sorin-ionescu","email":"sorin.ionescu@gmail.com"},"ref":"lib-history","sha":"e9dc19988c88f0ff83cb5e8fd9d2f62627f5403d","label":"sorin-ionescu:lib-history","repository":{"has_issues":false,"language":"Shell","watchers":11,"pushed_at":"2011/09/21 05:14:06 -0700","url":"https://github.com/sorin-ionescu/oh-my-zsh","has_downloads":true,"forks":3,"fork":true,"description":"A community-driven framework for managing ZSH.","has_wiki":false,"size":252,"private":false,"name":"oh-my-zsh","owner":"sorin-ionescu","created_at":"2010/12/16 00:07:04 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-02-04T04:13:50Z","labels":[],"state":"open"},{"issue_updated_at":"2011-03-21T15:22:11Z","gravatar_id":"53e3d1467d76485f11f104efa03ceb93","position":200.0,"number":201,"votes":0,"user":{"name":"Alex Satrapa","gravatar_id":"53e3d1467d76485f11f104efa03ceb93","type":"User","login":"AlexSatrapa"},"comments":1,"body":"My theme is based on \"arrow\" and pulls the exit code display trick from \"dieter\".\r\n\r\nThe Mercurial status is very primitive, based on the git status library.","title":"Added Mercurial status, along with a theme to illustrate the usage","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/201.diff","updated_at":"2011-10-10T12:50:50Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/201","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/201.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"01b0366f3e27cf30f3882870100f14625fc267d1","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Alex Satrapa","gravatar_id":"53e3d1467d76485f11f104efa03ceb93","type":"User","login":"AlexSatrapa"},"created_at":"2011-02-03T02:51:37Z","head":{"user":{"name":"Alex Satrapa","gravatar_id":"53e3d1467d76485f11f104efa03ceb93","type":"User","login":"AlexSatrapa"},"ref":"master","sha":"b52a7b74a14f808a93a43524023c78bf73c7a8ca","label":"AlexSatrapa:master","repository":{"has_issues":false,"language":"Shell","watchers":2,"pushed_at":"2011/06/08 21:04:19 -0700","url":"https://github.com/AlexSatrapa/oh-my-zsh","has_downloads":true,"forks":1,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":528,"private":false,"name":"oh-my-zsh","owner":"AlexSatrapa","created_at":"2011/02/02 18:41:58 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-02-03T02:51:37Z","labels":[],"state":"open"},{"issue_updated_at":"2011-02-22T05:58:36Z","gravatar_id":"6b4a65af011809338ec6ac746b48f6c3","position":197.0,"number":198,"votes":0,"user":{"name":"vlad","company":"self","gravatar_id":"6b4a65af011809338ec6ac746b48f6c3","location":"Kyiv","type":"User","login":"sumskyi","email":"sumskyi@gmail.com"},"comments":1,"body":"","title":"cap plugin fix","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/198.diff","updated_at":"2011-10-10T12:50:50Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/198","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/198.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"01b0366f3e27cf30f3882870100f14625fc267d1","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"vlad","company":"self","gravatar_id":"6b4a65af011809338ec6ac746b48f6c3","location":"Kyiv","type":"User","login":"sumskyi","email":"sumskyi@gmail.com"},"created_at":"2011-01-27T11:10:50Z","head":{"user":{"name":"vlad","company":"self","gravatar_id":"6b4a65af011809338ec6ac746b48f6c3","location":"Kyiv","type":"User","login":"sumskyi","email":"sumskyi@gmail.com"},"ref":"master","sha":"955b89388dfae9726bcc73ae1a9edfe3ebc6ad3a","label":"sumskyi:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/01/27 03:03:07 -0800","url":"https://github.com/sumskyi/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":408,"private":false,"name":"oh-my-zsh","owner":"sumskyi","created_at":"2011/01/27 02:37:52 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-01-27T11:10:50Z","labels":["Plugins"],"state":"open"},{"issue_updated_at":"2011-07-23T16:27:12Z","gravatar_id":"0024a11ba1af1a5e8fa7c48ba50698bc","position":193.0,"number":194,"votes":0,"user":{"name":"Joseph Booker","company":"Neoturbine","gravatar_id":"0024a11ba1af1a5e8fa7c48ba50698bc","location":"Chicago","blog":"","type":"User","login":"sargas","email":"joe@neoturbine.net"},"comments":1,"body":"This change only modifies the upgrade.sh script to see if the origin is still left at robby's repo. If it isn't, it detects if an \"upstream\" remote is already created, and if not adds it. One way or another, the upgrade.sh script now merges the latest upstream code.*\r\n\r\n\r\n\r\n(*well, hopefull)","title":"Extend upgrade script to be useful to people maintaining forks","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/194.diff","updated_at":"2011-10-10T12:50:49Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/194","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/194.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"01b0366f3e27cf30f3882870100f14625fc267d1","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Joseph Booker","company":"Neoturbine","gravatar_id":"0024a11ba1af1a5e8fa7c48ba50698bc","location":"Chicago","blog":"","type":"User","login":"sargas","email":"joe@neoturbine.net"},"created_at":"2011-01-17T20:02:25Z","head":{"user":{"name":"Joseph Booker","company":"Neoturbine","gravatar_id":"0024a11ba1af1a5e8fa7c48ba50698bc","location":"Chicago","blog":"","type":"User","login":"sargas","email":"joe@neoturbine.net"},"ref":"joerc","sha":"fdb53851228da17d7536fc6c036c3a0e7535fd84","label":"sargas:joerc","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/01/17 11:58:14 -0800","url":"https://github.com/sargas/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":132,"private":false,"name":"oh-my-zsh","owner":"sargas","created_at":"2010/11/03 14:13:41 -0700","open_issues":0,"homepage":""}},"issue_created_at":"2011-01-17T20:02:25Z","labels":[],"state":"open"},{"issue_updated_at":"2011-01-10T17:00:14Z","gravatar_id":"aa9576161bb251ce62ead1d545c203fa","position":184.0,"number":185,"votes":0,"user":{"gravatar_id":"aa9576161bb251ce62ead1d545c203fa","type":"User","login":"RobinRamael"},"comments":0,"body":"Hi,\r\n\r\nI took the liberty to create some infrastructure to allow for the prompt to display info of several scms, without the theme having to excplicitly mention each scm. This is how it is used:\r\n\r\nFor users:\r\nthis works the same as plugins: the scms variable is set in ~/.zshrc with a list of SCM for which info should be displayed in the prompt, as simple as that.\r\n\r\nfor theme developers:\r\ninstead of calling the git_prompt_info function, you can call the get_scm_prompt, which will display info for all the scms in the scms variable.\r\nthe following variables can be used in the old git-way:\r\n\r\nZSH_THEME_SCM_PROMPT_PREFIX: before everything but the scm's name (svn, git, ..)\r\nZSH_THEME_SCM_PROMPT_SUFFIX: after everything\r\nZSH_THEME_SCM_PROMPT_DIRTY: displayed when the repo is dirty\r\nZSH_THEME_SCM_PROMPT_CLEAN: displated when the repo is clean\r\nby default, the name of the scm (git, svn, ...) is not displayed before the scm info, but this can be changed by setting the ZSH_THEME_SCM_DISPLAY_NAME to 1.\r\n\r\nfor scm-plugin developers:\r\nto make an scm plugin with the name 'foo':\r\nadd a script called 'foo.scm.zsh' in to the scm folder. this script has to contain two functions:\r\n\r\nscm_in_foo_repo: checks wether we are in a foo repo, usually by checking if a .foo folder is present\r\nscm_foo_prompt_info: returns the prompt which follows the rules outlined above (in the \"for theme developers\"-section)\r\nSuggestions and criticism welcome!\r\n\r\nPS: this branch also includes a small change to the .gitignore file, making it ignore everything in custom/, not only the zshell scripts. I needed this for myself, because I keep other stuff like my pythonrc there, but I think it would be sensible to change this everywhere.\r\n\r\ncheers \r\n\r\nRobin","title":"Implemented scm plugin system and added scmplugins for git and svn","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/185.diff","updated_at":"2011-10-10T12:50:49Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/185","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/185.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"7a9cc198196cb0c935afe96e1de249c3a05ad413","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"gravatar_id":"aa9576161bb251ce62ead1d545c203fa","type":"User","login":"RobinRamael"},"created_at":"2011-01-10T17:00:13Z","head":{"user":{"gravatar_id":"aa9576161bb251ce62ead1d545c203fa","type":"User","login":"RobinRamael"},"ref":"scm","sha":"fe4504cef92440f36b7fdcad9be6e7365bd89878","label":"RobinRamael:scm","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/08/07 04:01:36 -0700","url":"https://github.com/RobinRamael/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":316,"private":false,"name":"oh-my-zsh","owner":"RobinRamael","created_at":"2011/01/10 08:49:30 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2011-01-10T17:00:14Z","labels":[],"state":"open"},{"issue_updated_at":"2011-06-05T03:00:54Z","gravatar_id":"ede5e59165e3efc98c7a8c268b0d8f3d","position":172.0,"number":173,"votes":0,"user":{"name":"Florent Thoumie","company":"Facebook","gravatar_id":"ede5e59165e3efc98c7a8c268b0d8f3d","location":"Dublin, Ireland","blog":"http://blog.xbsd.org/","type":"User","login":"flz","email":"flz@xbsd.org"},"comments":5,"body":"Here are two commits:\r\n- one to support LS_COLORS automatically in zsh completion,\r\n- the other to add vcs_info_prompt(), a more generic version of git_prompt_info().","title":"Merge candidates","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/173.diff","updated_at":"2011-10-10T12:50:49Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/173","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/173.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"4fadc302472f9b02e386da3e7182c1397ee3cd5c","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Florent Thoumie","company":"Facebook","gravatar_id":"ede5e59165e3efc98c7a8c268b0d8f3d","location":"Dublin, Ireland","blog":"http://blog.xbsd.org/","type":"User","login":"flz","email":"flz@xbsd.org"},"created_at":"2010-12-29T14:02:11Z","head":{"user":{"name":"Florent Thoumie","company":"Facebook","gravatar_id":"ede5e59165e3efc98c7a8c268b0d8f3d","location":"Dublin, Ireland","blog":"http://blog.xbsd.org/","type":"User","login":"flz","email":"flz@xbsd.org"},"ref":"merge-candidates","sha":"53411d03d68b93a903300ca14ba9b775450127d2","label":"flz:merge-candidates","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2010/12/29 06:44:47 -0800","url":"https://github.com/flz/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":104,"private":false,"name":"oh-my-zsh","owner":"flz","created_at":"2010/12/29 03:33:38 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2010-12-29T14:02:11Z","labels":[],"state":"open"},{"issue_updated_at":"2010-12-20T09:15:53Z","gravatar_id":"429fa73ee46e8cf341c1a36aa918484f","position":161.0,"number":162,"votes":0,"user":{"name":"Kristaps Kūlis","company":"truevision","gravatar_id":"429fa73ee46e8cf341c1a36aa918484f","location":"Rīga, Latvia","blog":"","type":"User","login":"krikulis","email":"kristaps.kulis@gmail.com"},"comments":0,"body":"new theme, based on arrow with hostname prefixed (to avoid confusion between numerous sshd terminals)","title":"theme","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/162.diff","updated_at":"2011-10-10T12:50:48Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/162","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/162.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"4fadc302472f9b02e386da3e7182c1397ee3cd5c","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Kristaps Kūlis","company":"truevision","gravatar_id":"429fa73ee46e8cf341c1a36aa918484f","location":"Rīga, Latvia","blog":"","type":"User","login":"krikulis","email":"kristaps.kulis@gmail.com"},"created_at":"2010-12-20T09:15:53Z","head":{"user":{"name":"Kristaps Kūlis","company":"truevision","gravatar_id":"429fa73ee46e8cf341c1a36aa918484f","location":"Rīga, Latvia","blog":"","type":"User","login":"krikulis","email":"kristaps.kulis@gmail.com"},"ref":"master","sha":"86b7349ae245a7684028593798f9851bca823cdb","label":"krikulis:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2010/12/20 01:14:09 -0800","url":"https://github.com/krikulis/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":156,"private":false,"name":"oh-my-zsh","owner":"krikulis","created_at":"2010/12/20 01:12:03 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2010-12-20T09:15:53Z","labels":["Themes"],"state":"open"},{"issue_updated_at":"2010-12-06T00:56:31Z","gravatar_id":"b05542985d6d1ec0d1824283c614fd80","position":154.0,"number":155,"votes":0,"user":{"name":"Anton Stroganov","gravatar_id":"b05542985d6d1ec0d1824283c614fd80","location":"San Francisco, CA","blog":"http://aeontech.tumblr.com","type":"User","login":"Aeon","email":"stroganov.a@gmail.com"},"comments":0,"body":"Not sure what happened to the old Rake plugin, this fixes the cap plugin problems and adds the rake plugin back in.","title":"Fix Capistrano plugin and add Rake plugin","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/155.diff","updated_at":"2011-10-10T12:50:48Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/155","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/155.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"762b55bb2bc0452ce3f5f2f21bc22b61936ef704","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Anton Stroganov","gravatar_id":"b05542985d6d1ec0d1824283c614fd80","location":"San Francisco, CA","blog":"http://aeontech.tumblr.com","type":"User","login":"Aeon","email":"stroganov.a@gmail.com"},"created_at":"2010-12-06T00:56:30Z","head":{"user":{"name":"Anton Stroganov","gravatar_id":"b05542985d6d1ec0d1824283c614fd80","location":"San Francisco, CA","blog":"http://aeontech.tumblr.com","type":"User","login":"Aeon","email":"stroganov.a@gmail.com"},"ref":"master","sha":"25527d5a4b9fb275c5088eae6c4288308f398538","label":"Aeon:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2011/09/13 13:16:38 -0700","url":"https://github.com/Aeon/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":116,"private":false,"name":"oh-my-zsh","owner":"Aeon","created_at":"2010/12/04 16:17:37 -0800","open_issues":0,"homepage":""}},"issue_created_at":"2010-12-06T00:56:31Z","labels":["Plugins"],"state":"open"},{"issue_updated_at":"2010-11-30T22:12:11Z","gravatar_id":"b0369eeb7dc9a214418dc59ab0c682d7","position":147.0,"number":148,"votes":0,"user":{"gravatar_id":"b0369eeb7dc9a214418dc59ab0c682d7","type":"User","login":"danbaatar"},"comments":0,"body":"I made a \"new\" theme by modifying the candy theme. It's not revolutionary: I just wanted something informative, but short.\r\n\r\nThe prompt format is:\r\n\r\nname@host:hours.mins.secs:current_dir>\r\n\r\nAdditionally, if the previous shell command failed, a bright red X is added to the end of the prompt.\r\n\r\n--dan","title":"New theme \"compact\" for oh-my-zsh","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/148.diff","updated_at":"2011-10-10T12:50:47Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/148","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/148.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"4fadc302472f9b02e386da3e7182c1397ee3cd5c","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"gravatar_id":"b0369eeb7dc9a214418dc59ab0c682d7","type":"User","login":"danbaatar"},"created_at":"2010-11-30T22:12:11Z","head":{"user":{"gravatar_id":"b0369eeb7dc9a214418dc59ab0c682d7","type":"User","login":"danbaatar"},"ref":"master","sha":"151c6410e086c0b9f0a77723f01b630bd99e52ff","label":"danbaatar:master","repository":null},"issue_created_at":"2010-11-30T22:12:11Z","labels":["Themes"],"state":"open"},{"issue_updated_at":"2010-12-02T18:30:26Z","gravatar_id":"609b69cbb09257883a4e32d7d5aff098","position":143.0,"number":144,"votes":0,"user":{"name":"Guillaume Hain","gravatar_id":"609b69cbb09257883a4e32d7d5aff098","location":"France","type":"User","login":"zedtux","email":"zedtux@zedroot.org"},"comments":4,"body":"Hello,\r\n\r\nAs you requested me, here is my pull request that include my own zsh theme, based on eastwood, with rvm, git and bazaar integration.","title":"My own zsh theme","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/144.diff","updated_at":"2011-10-10T12:50:47Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/144","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/144.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"583c984a864969579a0c258528ae93f9529308d4","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Guillaume Hain","gravatar_id":"609b69cbb09257883a4e32d7d5aff098","location":"France","type":"User","login":"zedtux","email":"zedtux@zedroot.org"},"created_at":"2010-11-25T18:10:10Z","head":{"user":{"name":"Guillaume Hain","gravatar_id":"609b69cbb09257883a4e32d7d5aff098","location":"France","type":"User","login":"zedtux","email":"zedtux@zedroot.org"},"ref":"master","sha":"7caa6df18a209aa8259e1cdf3fdc5e0c3f0e5acb","label":"zedtux:master","repository":null},"issue_created_at":"2010-11-25T18:10:10Z","labels":["Themes"],"state":"open"},{"issue_updated_at":"2010-10-28T23:48:03Z","gravatar_id":"9289db62d5c34afb4f277a5215e05c83","position":121.0,"number":122,"votes":0,"user":{"name":"Irakli Gozalishvili","company":"Mozilla","gravatar_id":"9289db62d5c34afb4f277a5215e05c83","location":"Paris, France","blog":"http://jeditoolkit.com/","type":"User","login":"Gozala","email":"rfobic@gmail.com"},"comments":1,"body":"Hi,\r\n\r\nI've added port of `__git_ps1` function that comes with git's bash_completion. It's basically smarter version of already existing `current_branch` function. In contrast to `current_branch` `__git_ps1` can does things like:\r\n\r\n(bb8f98d...) <- if you checkout non branched commit\r\n(master|REBASE) <- if on rebase of your master are run into confilct \r\n(master|MERGING) <- if on merge you got a merge-conflict\r\n","title":"port of __git_ps1 that comes with git's bash_completion","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/122.diff","updated_at":"2011-10-10T12:50:47Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/122","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/122.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"dc12853b0c3e5af9e42f44cb9efdf57d44d20711","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Irakli Gozalishvili","company":"Mozilla","gravatar_id":"9289db62d5c34afb4f277a5215e05c83","location":"Paris, France","blog":"http://jeditoolkit.com/","type":"User","login":"Gozala","email":"rfobic@gmail.com"},"created_at":"2010-10-25T16:21:02Z","head":{"user":{"name":"Irakli Gozalishvili","company":"Mozilla","gravatar_id":"9289db62d5c34afb4f277a5215e05c83","location":"Paris, France","blog":"http://jeditoolkit.com/","type":"User","login":"Gozala","email":"rfobic@gmail.com"},"ref":"master","sha":"79305256b9b9480304233ac01e624151c9409b82","label":"Gozala:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2010/10/25 09:10:13 -0700","url":"https://github.com/Gozala/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":1004,"private":false,"name":"oh-my-zsh","owner":"Gozala","created_at":"2010/10/08 16:24:48 -0700","open_issues":0,"homepage":""}},"issue_created_at":"2010-10-25T16:21:02Z","labels":[],"state":"open"},{"issue_updated_at":"2011-09-16T17:54:20Z","gravatar_id":"9e857848a61366860a1b23ba584817e8","position":120.0,"number":121,"votes":1,"user":{"name":"Ryan Phillips","company":"","gravatar_id":"9e857848a61366860a1b23ba584817e8","location":"Austin, TX","blog":"","type":"User","login":"rphillips","email":""},"comments":26,"body":"Fixes issue 43.\r\n\r\nI believe it would be better to remove the lib/git.zsh support in favor of the vcsinfo plugin. Native zsh has support for bzr, cdv, cvs, darcs, git, hg, mtn, p4, svk, svn, tla, git-p4, and git-svn. This makes for a more flexible SCM solution within oh-my-zsh. \r\n\r\nRegards,\r\nRyan\r\n\r\nhttp://zsh.sourceforge.net/Doc/Release/User-Contributions.html#SEC273","title":"Add vcsinfo plugin","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/121.diff","updated_at":"2011-10-10T12:50:47Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/121","mergeable":false,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/121.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"ab2a7b51a8c3ead55a272fba58232d0823e519a2","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Ryan Phillips","company":"","gravatar_id":"9e857848a61366860a1b23ba584817e8","location":"Austin, TX","blog":"","type":"User","login":"rphillips","email":""},"created_at":"2010-10-19T04:47:04Z","head":{"user":{"name":"Ryan Phillips","company":"","gravatar_id":"9e857848a61366860a1b23ba584817e8","location":"Austin, TX","blog":"","type":"User","login":"rphillips","email":""},"ref":"master","sha":"1e709d00e77d1bfa5342cde142607ff625a726de","label":"rphillips:master","repository":{"has_issues":false,"language":"Shell","watchers":4,"pushed_at":"2011/05/26 08:45:17 -0700","url":"https://github.com/rphillips/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":188,"private":false,"name":"oh-my-zsh","owner":"rphillips","created_at":"2010/10/18 21:11:21 -0700","open_issues":0,"homepage":""}},"issue_created_at":"2010-10-19T04:47:04Z","labels":["Plugins"],"state":"open"},{"issue_updated_at":"2010-10-13T13:02:24Z","gravatar_id":"dcbf676f860477e44b275cae5d6318a4","position":110.0,"number":111,"votes":0,"user":{"name":"Piotr Usewicz","company":"layer|twenty|two","gravatar_id":"dcbf676f860477e44b275cae5d6318a4","location":"London","blog":"www.layer22.com","type":"User","login":"pusewicz","email":"piotr@layer22.com"},"comments":0,"body":"Add ZSH_THEME_RVM_PROMPT_{PREFIX|SUFFIX}\r\nAdd pete theme","title":"Add ZSH_THEME_RVM_PROMPT_{PREFIX|SUFFIX} and new theme","diff_url":"https://github.com/robbyrussell/oh-my-zsh/pull/111.diff","updated_at":"2011-10-10T12:50:47Z","html_url":"https://github.com/robbyrussell/oh-my-zsh/pull/111","mergeable":true,"patch_url":"https://github.com/robbyrussell/oh-my-zsh/pull/111.patch","base":{"user":{"name":"Robby Russell","company":"Planet Argon, LLC","gravatar_id":"a82ba1167f4d4a8d1de63820e576a87f","location":"Paris, France","blog":"http://planetargon.com/who-we-are/robby-russell","type":"User","login":"robbyrussell","email":""},"ref":"master","sha":"dc12853b0c3e5af9e42f44cb9efdf57d44d20711","label":"robbyrussell:master","repository":{"has_issues":true,"language":"Shell","watchers":3035,"pushed_at":"2011/10/18 17:18:37 -0700","url":"https://github.com/robbyrussell/oh-my-zsh","has_downloads":true,"forks":1258,"fork":false,"description":"A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.","has_wiki":true,"size":3080,"private":false,"name":"oh-my-zsh","owner":"robbyrussell","created_at":"2009/08/28 11:15:37 -0700","open_issues":213,"homepage":"http://twitter.com/ohmyzsh"}},"issue_user":{"name":"Piotr Usewicz","company":"layer|twenty|two","gravatar_id":"dcbf676f860477e44b275cae5d6318a4","location":"London","blog":"www.layer22.com","type":"User","login":"pusewicz","email":"piotr@layer22.com"},"created_at":"2010-10-13T13:02:24Z","head":{"user":{"name":"Piotr Usewicz","company":"layer|twenty|two","gravatar_id":"dcbf676f860477e44b275cae5d6318a4","location":"London","blog":"www.layer22.com","type":"User","login":"pusewicz","email":"piotr@layer22.com"},"ref":"master","sha":"bf5a53e2eae35a55c8dc8d88fbd99411153977ad","label":"pusewicz:master","repository":{"has_issues":false,"language":"Shell","watchers":1,"pushed_at":"2010/10/13 05:59:58 -0700","url":"https://github.com/pusewicz/oh-my-zsh","has_downloads":true,"forks":0,"fork":true,"description":"A community-driven framework for managing your zsh configuration. Includes optional plugins for various tools (rails, git, OSX, brew,...), over 40 terminal themes, and an auto-updating tool so that you can keep up with the latest improvements from the community.","has_wiki":true,"size":324,"private":false,"name":"oh-my-zsh","owner":"pusewicz","created_at":"2010/10/13 05:05:02 -0700","open_issues":0,"homepage":""}},"issue_created_at":"2010-10-13T13:02:24Z","labels":["Themes"],"state":"open"}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,repos,show,tekkub,05ca6f8b40fe3e2ecd7da9236cbe8004 b/tests/data/github.com,api,v2,json,repos,show,tekkub,05ca6f8b40fe3e2ecd7da9236cbe8004 new file mode 100644 index 0000000..9651c43 --- /dev/null +++ b/tests/data/github.com,api,v2,json,repos,show,tekkub,05ca6f8b40fe3e2ecd7da9236cbe8004 @@ -0,0 +1,16 @@ +status: 200 +x-ratelimit-remaining: 58 +content-location: https://github.com/api/v2/json/repos/show/tekkub?page=2 +-content-encoding: gzip +connection: keep-alive +content-length: 14995 +server: nginx/1.0.4 +date: Wed, 19 Oct 2011 08:39:57 GMT +x-runtime: 330ms +x-ratelimit-limit: 60 +etag: "e0a7a0299440c8e2f32c845e8fec1c0c" +cache-control: private, max-age=0, must-revalidate +x-frame-options: deny +content-type: application/json; charset=utf-8 + +{"repositories":[{"watchers":1,"url":"https://github.com/tekkub/OhSnap","open_issues":0,"forks":2,"has_issues":true,"fork":false,"description":"","has_downloads":true,"size":0,"private":false,"pushed_at":"2009/07/27 17:49:36 -0700","name":"OhSnap","owner":"tekkub","created_at":"2009/07/27 17:48:23 -0700","homepage":"","has_wiki":true},{"language":"Lua","watchers":13,"url":"https://github.com/tekkub/GoodNewsEveryone","open_issues":6,"forks":7,"has_issues":true,"fork":false,"description":"WoW Addon - I've invented a device that tells you when reactive abilities are available!","has_downloads":true,"size":112,"private":false,"pushed_at":"2011/07/23 23:20:25 -0700","name":"GoodNewsEveryone","owner":"tekkub","created_at":"2009/07/28 18:45:05 -0700","homepage":"http://www.tekkub.net/addons/GoodNewsEveryone","has_wiki":true},{"language":"Lua","watchers":23,"url":"https://github.com/tekkub/GnomishVendorShrinker","open_issues":2,"forks":4,"has_issues":true,"fork":false,"description":"WoW Addon - Compact scrolling vendor frame","has_downloads":true,"size":596,"private":false,"pushed_at":"2011/07/04 15:36:43 -0700","name":"GnomishVendorShrinker","owner":"tekkub","created_at":"2009/08/15 19:56:03 -0700","homepage":"http://www.tekkub.net/addons/GnomishVendorShrinker","has_wiki":true},{"language":"Lua","watchers":6,"url":"https://github.com/tekkub/tekChat","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"WoW Addon - Misc chat stuff\r","has_downloads":true,"size":780,"private":false,"pushed_at":"2010/06/24 01:09:16 -0700","name":"tekChat","owner":"tekkub","created_at":"2009/08/23 01:46:24 -0700","homepage":"http://www.tekkub.net/addons/tekChat","has_wiki":true},{"language":"C","watchers":2,"url":"https://github.com/tekkub/limechat","open_issues":0,"forks":1,"has_issues":false,"fork":true,"description":"IRC Client for OSX","has_downloads":true,"size":16220,"private":false,"pushed_at":"2010/05/01 17:31:48 -0700","name":"limechat","owner":"tekkub","created_at":"2009/09/03 23:58:49 -0700","homepage":"http://limechat.net/mac/","has_wiki":true},{"language":"Lua","watchers":1,"url":"https://github.com/tekkub/leafLFG","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"My fork of leafLFG","has_downloads":true,"size":540,"private":false,"pushed_at":"2009/09/06 19:14:29 -0700","name":"leafLFG","owner":"tekkub","created_at":"2009/09/06 19:10:51 -0700","homepage":"http://www.wowinterface.com/downloads/fileinfo.php?id=13287","has_wiki":true},{"watchers":2,"url":"https://github.com/tekkub/Warmup","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"","has_downloads":true,"size":0,"private":false,"name":"Warmup","owner":"tekkub","created_at":"2009/10/01 16:09:12 -0700","homepage":"","has_wiki":true},{"language":"Ruby","watchers":4,"url":"https://github.com/tekkub/github-upload","open_issues":0,"forks":5,"has_issues":true,"fork":false,"description":"","has_downloads":true,"size":260,"private":false,"pushed_at":"2009/10/24 15:41:42 -0700","name":"github-upload","owner":"tekkub","created_at":"2009/10/02 15:39:42 -0700","homepage":"","has_wiki":true},{"language":"Lua","watchers":2,"url":"https://github.com/tekkub/oUF_HealComm4","open_issues":0,"forks":1,"has_issues":false,"fork":false,"description":"add LibHealComm-4.0 bars to oUF frames","has_downloads":true,"size":0,"private":false,"pushed_at":"2009/11/03 11:15:42 -0800","name":"oUF_HealComm4","owner":"tekkub","created_at":"2009/11/01 22:53:01 -0800","homepage":"","has_wiki":true},{"watchers":16,"url":"https://github.com/tekkub/Mustache.tmbundle","open_issues":0,"forks":5,"has_issues":true,"fork":false,"description":"A little textmate bundle for defunkt/mustache","has_downloads":true,"size":124,"private":false,"pushed_at":"2009/11/11 17:34:38 -0800","name":"Mustache.tmbundle","owner":"tekkub","created_at":"2009/11/11 17:12:46 -0800","homepage":"","has_wiki":true},{"language":"Ruby","watchers":1,"url":"https://github.com/tekkub/mustache-sinatra-example","open_issues":0,"forks":1,"has_issues":false,"fork":true,"description":"An example of using Mustache in a Sinatra app.","has_downloads":false,"size":252,"private":false,"pushed_at":"2009/11/11 22:28:24 -0800","name":"mustache-sinatra-example","owner":"tekkub","created_at":"2009/11/11 22:27:25 -0800","homepage":"","has_wiki":false},{"language":"JavaScript","watchers":8,"url":"https://github.com/tekkub/ihaveissues.github.com","open_issues":1,"forks":2,"has_issues":true,"fork":false,"description":"","has_downloads":true,"size":112,"private":false,"pushed_at":"2011/06/26 22:38:27 -0700","name":"ihaveissues.github.com","owner":"tekkub","created_at":"2009/12/04 00:48:18 -0800","master_branch":"gh-pages","homepage":"http://ihaveissues.github.com","has_wiki":true},{"watchers":2,"url":"https://github.com/tekkub/sandbox","open_issues":1,"forks":1,"has_issues":true,"fork":false,"description":"","has_downloads":true,"size":0,"private":false,"name":"sandbox","owner":"tekkub","created_at":"2009/12/14 12:06:49 -0800","homepage":"","has_wiki":true},{"language":"JavaScript","watchers":1,"url":"https://github.com/tekkub/wowace-navbar","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"Chrome extension to fix wowace.com forum navbar","has_downloads":true,"size":209,"private":false,"pushed_at":"2009/12/17 01:53:58 -0800","name":"wowace-navbar","owner":"tekkub","created_at":"2009/12/17 01:50:57 -0800","homepage":"","has_wiki":true},{"language":"Lua","watchers":6,"url":"https://github.com/tekkub/tekKrush","open_issues":0,"forks":2,"has_issues":true,"fork":false,"description":"WoW Addon - Yes, I really want to destroy that item, stop asking","has_downloads":true,"size":100,"private":false,"pushed_at":"2011/07/23 22:13:25 -0700","name":"tekKrush","owner":"tekkub","created_at":"2009/12/29 16:30:57 -0800","homepage":"http://www.tekkub.net/","has_wiki":true},{"language":"Lua","watchers":5,"url":"https://github.com/tekkub/MediumRare","open_issues":0,"forks":2,"has_issues":true,"fork":false,"description":"WoW Addon - Scans NPCs around you for rares","has_downloads":true,"size":260,"private":false,"pushed_at":"2010/12/20 22:43:18 -0800","name":"MediumRare","owner":"tekkub","created_at":"2010/01/02 17:40:19 -0800","homepage":"http://www.tekkub.net/","has_wiki":true},{"language":"Lua","watchers":2,"url":"https://github.com/tekkub/Shrank","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"WoW Addon - Warn when players cast spells that aren't max rank","has_downloads":true,"size":112,"private":false,"pushed_at":"2010/01/02 17:43:21 -0800","name":"Shrank","owner":"tekkub","created_at":"2010/01/02 17:43:15 -0800","homepage":"http://www.tekkub.net/","has_wiki":true},{"language":"Lua","watchers":3,"url":"https://github.com/tekkub/erroff","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"WoW Addon - Simple error message blocker for macros","has_downloads":true,"size":108,"private":false,"pushed_at":"2010/01/03 14:14:52 -0800","name":"erroff","owner":"tekkub","created_at":"2010/01/03 01:37:57 -0800","homepage":"http://www.tekkub.net/","has_wiki":true},{"language":"JavaScript","watchers":6,"url":"https://github.com/tekkub/tender-checker","open_issues":0,"forks":2,"has_issues":true,"fork":false,"description":"Chrome extension - Adds a browser action to track a tenderapp.com inbox","has_downloads":true,"size":560,"private":false,"pushed_at":"2010/01/17 02:10:22 -0800","name":"tender-checker","owner":"tekkub","created_at":"2010/01/16 17:08:37 -0800","homepage":"","has_wiki":true},{"language":"JavaScript","watchers":1,"url":"https://github.com/tekkub/facebook-friend-renamer","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"Chrome extension - Lets you rename facebook friends, because you don't use \"real\" names with these people","has_downloads":true,"size":276,"private":false,"pushed_at":"2010/01/23 11:51:04 -0800","name":"facebook-friend-renamer","owner":"tekkub","created_at":"2010/01/23 11:32:53 -0800","homepage":"","has_wiki":true},{"language":"Lua","watchers":1,"url":"https://github.com/tekkub/tekAutoRepair","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"WoW Addon - Automatically repair shits","has_downloads":true,"size":100,"private":false,"pushed_at":"2010/04/18 16:30:08 -0700","name":"tekAutoRepair","owner":"tekkub","created_at":"2010/04/18 16:29:56 -0700","homepage":"http://www.tekkub.net/","has_wiki":true},{"language":"Lua","watchers":5,"url":"https://github.com/tekkub/GnomishInboxShrinker","open_issues":0,"forks":2,"has_issues":true,"fork":false,"description":"WoW Addon - A simple, scrolling inbox","has_downloads":true,"size":312,"private":false,"pushed_at":"2010/06/06 12:14:09 -0700","name":"GnomishInboxShrinker","owner":"tekkub","created_at":"2010/04/19 11:30:41 -0700","homepage":"http://www.tekkub.net/","has_wiki":true},{"language":"Lua","watchers":2,"url":"https://github.com/tekkub/ImbaPalas","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"WoW Addon - The missing paladin bubble sound effect","has_downloads":true,"size":656,"private":false,"pushed_at":"2010/05/02 21:34:21 -0700","name":"ImbaPalas","owner":"tekkub","created_at":"2010/05/02 21:33:57 -0700","homepage":"http://www.tekkub.net/","has_wiki":true},{"language":"JavaScript","watchers":2,"url":"https://github.com/tekkub/goo.gl-QR","open_issues":0,"forks":2,"has_issues":true,"fork":false,"description":"Chrome extension - Shorten URL with goo.gl and generate a QR code","has_downloads":true,"size":212,"private":false,"pushed_at":"2010/06/06 15:07:50 -0700","name":"goo.gl-QR","owner":"tekkub","created_at":"2010/06/06 14:56:25 -0700","homepage":"","has_wiki":true},{"language":"Lua","watchers":6,"url":"https://github.com/tekkub/UnrealID","open_issues":0,"forks":2,"has_issues":false,"fork":false,"description":"WoW Addon - Make \"real\" names go away","has_downloads":true,"size":124,"private":false,"pushed_at":"2010/07/10 22:01:28 -0700","name":"UnrealID","owner":"tekkub","created_at":"2010/06/29 22:08:32 -0700","homepage":"http://www.tekkub.net/","has_wiki":true},{"language":"Ruby","watchers":1,"url":"https://github.com/tekkub/hubahuba","open_issues":0,"forks":1,"has_issues":false,"fork":true,"description":"Ruby and Rails core extensions used by GitHub.","has_downloads":false,"size":0,"private":false,"pushed_at":"2008/05/10 21:52:00 -0700","name":"hubahuba","owner":"tekkub","created_at":"2010/07/19 17:10:40 -0700","homepage":"","has_wiki":false},{"language":"Ruby","watchers":1,"url":"https://github.com/tekkub/scaffolding","open_issues":0,"forks":1,"has_issues":false,"fork":true,"description":"Dynamic Scaffolding plugin","has_downloads":true,"size":0,"private":false,"pushed_at":"2008/05/29 13:55:30 -0700","name":"scaffolding","owner":"tekkub","created_at":"2010/07/19 17:12:00 -0700","homepage":"http://rubyonrails.org","has_wiki":true},{"watchers":4,"url":"https://github.com/tekkub/gmail","open_issues":0,"forks":2,"has_issues":true,"fork":false,"description":"","has_downloads":true,"size":132,"private":false,"pushed_at":"2010/11/11 02:14:43 -0800","name":"gmail","owner":"tekkub","created_at":"2010/11/11 02:09:38 -0800","master_branch":"gh-pages","homepage":"","has_wiki":true},{"language":"Ruby","watchers":1,"url":"https://github.com/tekkub/zp","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"Zero Punctuation Video RSS feed generator","has_downloads":true,"size":652,"private":false,"pushed_at":"2011/08/17 19:36:07 -0700","name":"zp","owner":"tekkub","created_at":"2010/11/16 01:43:02 -0800","master_branch":"master","homepage":"http://tekkub.net/zp/videos.xml","has_wiki":true},{"language":"Lua","watchers":1,"integrate_branch":"1.4","url":"https://github.com/tekkub/oUF","open_issues":0,"forks":0,"has_issues":false,"fork":true,"description":"WoW AddOn - Unit frame framework.","has_downloads":true,"size":820,"private":false,"pushed_at":"2010/12/01 00:07:08 -0800","name":"oUF","owner":"tekkub","created_at":"2010/12/01 00:04:14 -0800","homepage":"http://www.wowinterface.com/downloads/info9994-oUF.html","has_wiki":true},{"language":"Lua","watchers":3,"url":"https://github.com/tekkub/MillerLite","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"WoW Addon - Adds a frame to the AH for fast crafting mat lookup","has_downloads":true,"size":192,"private":false,"pushed_at":"2010/12/30 21:15:20 -0800","name":"MillerLite","owner":"tekkub","created_at":"2010/12/17 19:58:28 -0800","homepage":"http://www.tekkub.net/","has_wiki":true},{"language":"JavaScript","watchers":1,"url":"https://github.com/tekkub/doublecaps","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"I'm a terrible typist, true story","has_downloads":true,"size":184,"private":false,"pushed_at":"2010/12/24 16:32:40 -0800","name":"doublecaps","owner":"tekkub","created_at":"2010/12/24 16:26:36 -0800","homepage":"","has_wiki":true},{"language":"JavaScript","watchers":1,"url":"https://github.com/tekkub/rtd","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"Just a little RTD lightrail schedule for my bear","has_downloads":true,"size":616,"private":false,"pushed_at":"2011/07/17 14:18:13 -0700","name":"rtd","owner":"tekkub","created_at":"2011/06/05 00:34:36 -0700","master_branch":"gh-pages","homepage":"http://tekkub.net/rtd","has_wiki":true},{"language":"Lua","watchers":2,"url":"https://github.com/tekkub/Velluminous","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"WoW Addon - Quickly enchant directly to vellum","has_downloads":true,"size":96,"private":false,"pushed_at":"2011/06/26 01:19:45 -0700","name":"Velluminous","owner":"tekkub","created_at":"2011/06/26 01:19:14 -0700","homepage":"http://tekkub.net/","has_wiki":true},{"language":"JavaScript","watchers":5,"url":"https://github.com/tekkub/dotjs","open_issues":0,"forks":2,"has_issues":true,"fork":false,"description":"My dotjs scripts","has_downloads":true,"size":108,"private":false,"pushed_at":"2011/10/13 03:26:02 -0700","name":"dotjs","owner":"tekkub","created_at":"2011/06/30 15:50:38 -0700","homepage":"http://defunkt.io/dotjs/","has_wiki":true},{"language":"JavaScript","watchers":2,"url":"https://github.com/tekkub/gitmarks","open_issues":0,"forks":0,"has_issues":false,"fork":true,"description":"Add project bookmarking to github","has_downloads":true,"size":112,"private":false,"pushed_at":"2011/09/16 14:14:20 -0700","name":"gitmarks","owner":"tekkub","created_at":"2011/07/16 01:07:57 -0700","homepage":"","has_wiki":true},{"language":"Ruby","watchers":6,"url":"https://github.com/tekkub/supportbee","open_issues":0,"forks":1,"has_issues":true,"fork":false,"description":"A little ruby library for talking to supportbee's API","has_downloads":true,"size":100,"private":false,"pushed_at":"2011/09/23 21:35:24 -0700","name":"supportbee","owner":"tekkub","created_at":"2011/09/23 21:28:34 -0700","homepage":"supportbee.com","has_wiki":true}]} \ No newline at end of file diff --git a/tests/data/github.com,api,v2,json,repos,watched,tekkub,ab3eb0c9eb0123839606c57857627b30 b/tests/data/github.com,api,v2,json,repos,watched,tekkub,ab3eb0c9eb0123839606c57857627b30 new file mode 100644 index 0000000..711a2dd --- /dev/null +++ b/tests/data/github.com,api,v2,json,repos,watched,tekkub,ab3eb0c9eb0123839606c57857627b30 @@ -0,0 +1,16 @@ +status: 200 +x-ratelimit-remaining: 57 +content-location: https://github.com/api/v2/json/repos/watched/tekkub?page=2 +-content-encoding: gzip +connection: keep-alive +content-length: 15803 +server: nginx/1.0.4 +date: Wed, 19 Oct 2011 08:40:14 GMT +x-runtime: 313ms +x-ratelimit-limit: 60 +etag: "b189a43b15d26fb7fb5940dcbaf3046c" +cache-control: private, max-age=0, must-revalidate +x-frame-options: deny +content-type: application/json; charset=utf-8 + +{"repositories":[{"open_issues":0,"language":"Lua","watchers":2,"pushed_at":"2009/07/25 20:07:42 -0700","url":"https://github.com/tekkub/Buffoon","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - Show who cast what buff via LDB","size":132,"private":false,"name":"Buffoon","owner":"tekkub","has_wiki":true,"created_at":"2009/07/25 20:07:27 -0700","forks":1,"homepage":"http://www.tekkub.net/addons/Buffoon"},{"open_issues":0,"watchers":1,"pushed_at":"2009/07/27 17:49:36 -0700","url":"https://github.com/tekkub/OhSnap","has_issues":true,"has_downloads":true,"fork":false,"description":"","size":0,"private":false,"name":"OhSnap","owner":"tekkub","has_wiki":true,"created_at":"2009/07/27 17:48:23 -0700","forks":2,"homepage":""},{"open_issues":6,"language":"Lua","watchers":13,"pushed_at":"2011/07/23 23:20:25 -0700","url":"https://github.com/tekkub/GoodNewsEveryone","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - I've invented a device that tells you when reactive abilities are available!","size":112,"private":false,"name":"GoodNewsEveryone","owner":"tekkub","has_wiki":true,"created_at":"2009/07/28 18:45:05 -0700","forks":7,"homepage":"http://www.tekkub.net/addons/GoodNewsEveryone"},{"open_issues":2,"language":"Lua","watchers":23,"pushed_at":"2011/07/04 15:36:43 -0700","url":"https://github.com/tekkub/GnomishVendorShrinker","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - Compact scrolling vendor frame","size":596,"private":false,"name":"GnomishVendorShrinker","owner":"tekkub","has_wiki":true,"created_at":"2009/08/15 19:56:03 -0700","forks":4,"homepage":"http://www.tekkub.net/addons/GnomishVendorShrinker"},{"open_issues":0,"language":"Lua","watchers":6,"pushed_at":"2010/06/24 01:09:16 -0700","url":"https://github.com/tekkub/tekChat","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - Misc chat stuff\r","size":780,"private":false,"name":"tekChat","owner":"tekkub","has_wiki":true,"created_at":"2009/08/23 01:46:24 -0700","forks":1,"homepage":"http://www.tekkub.net/addons/tekChat"},{"open_issues":0,"language":"C","watchers":2,"pushed_at":"2010/05/01 17:31:48 -0700","url":"https://github.com/tekkub/limechat","has_issues":false,"has_downloads":true,"fork":true,"description":"IRC Client for OSX","size":16220,"private":false,"name":"limechat","owner":"tekkub","has_wiki":true,"created_at":"2009/09/03 23:58:49 -0700","forks":1,"homepage":"http://limechat.net/mac/"},{"open_issues":0,"language":"Lua","watchers":1,"pushed_at":"2009/09/06 19:14:29 -0700","url":"https://github.com/tekkub/leafLFG","has_issues":true,"has_downloads":true,"fork":false,"description":"My fork of leafLFG","size":540,"private":false,"name":"leafLFG","owner":"tekkub","has_wiki":true,"created_at":"2009/09/06 19:10:51 -0700","forks":1,"homepage":"http://www.wowinterface.com/downloads/fileinfo.php?id=13287"},{"open_issues":0,"watchers":2,"url":"https://github.com/tekkub/Warmup","has_issues":true,"has_downloads":true,"fork":false,"description":"","size":0,"private":false,"name":"Warmup","owner":"tekkub","has_wiki":true,"created_at":"2009/10/01 16:09:12 -0700","forks":1,"homepage":""},{"open_issues":0,"language":"Ruby","watchers":4,"pushed_at":"2009/10/24 15:41:42 -0700","url":"https://github.com/tekkub/github-upload","has_issues":true,"has_downloads":true,"fork":false,"description":"","size":260,"private":false,"name":"github-upload","owner":"tekkub","has_wiki":true,"created_at":"2009/10/02 15:39:42 -0700","forks":5,"homepage":""},{"open_issues":0,"language":"Lua","watchers":2,"pushed_at":"2009/11/03 11:15:42 -0800","url":"https://github.com/tekkub/oUF_HealComm4","has_issues":false,"has_downloads":true,"fork":false,"description":"add LibHealComm-4.0 bars to oUF frames","size":0,"private":false,"name":"oUF_HealComm4","owner":"tekkub","has_wiki":true,"created_at":"2009/11/01 22:53:01 -0800","forks":1,"homepage":""},{"open_issues":0,"watchers":16,"pushed_at":"2009/11/11 17:34:38 -0800","url":"https://github.com/tekkub/Mustache.tmbundle","has_issues":true,"has_downloads":true,"fork":false,"description":"A little textmate bundle for defunkt/mustache","size":124,"private":false,"name":"Mustache.tmbundle","owner":"tekkub","has_wiki":true,"created_at":"2009/11/11 17:12:46 -0800","forks":5,"homepage":""},{"open_issues":0,"language":"Ruby","watchers":1,"pushed_at":"2009/11/11 22:28:24 -0800","url":"https://github.com/tekkub/mustache-sinatra-example","has_issues":false,"has_downloads":false,"fork":true,"description":"An example of using Mustache in a Sinatra app.","size":252,"private":false,"name":"mustache-sinatra-example","owner":"tekkub","has_wiki":false,"created_at":"2009/11/11 22:27:25 -0800","forks":1,"homepage":""},{"open_issues":1,"language":"JavaScript","watchers":8,"pushed_at":"2011/06/26 22:38:27 -0700","url":"https://github.com/tekkub/ihaveissues.github.com","has_issues":true,"has_downloads":true,"fork":false,"description":"","size":112,"private":false,"name":"ihaveissues.github.com","owner":"tekkub","has_wiki":true,"created_at":"2009/12/04 00:48:18 -0800","forks":2,"master_branch":"gh-pages","homepage":"http://ihaveissues.github.com"},{"open_issues":1,"watchers":2,"url":"https://github.com/tekkub/sandbox","has_issues":true,"has_downloads":true,"fork":false,"description":"","size":0,"private":false,"name":"sandbox","owner":"tekkub","has_wiki":true,"created_at":"2009/12/14 12:06:49 -0800","forks":1,"homepage":""},{"open_issues":0,"language":"JavaScript","watchers":1,"pushed_at":"2009/12/17 01:53:58 -0800","url":"https://github.com/tekkub/wowace-navbar","has_issues":true,"has_downloads":true,"fork":false,"description":"Chrome extension to fix wowace.com forum navbar","size":209,"private":false,"name":"wowace-navbar","owner":"tekkub","has_wiki":true,"created_at":"2009/12/17 01:50:57 -0800","forks":1,"homepage":""},{"open_issues":0,"language":"Lua","watchers":6,"pushed_at":"2011/07/23 22:13:25 -0700","url":"https://github.com/tekkub/tekKrush","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - Yes, I really want to destroy that item, stop asking","size":100,"private":false,"name":"tekKrush","owner":"tekkub","has_wiki":true,"created_at":"2009/12/29 16:30:57 -0800","forks":2,"homepage":"http://www.tekkub.net/"},{"open_issues":0,"language":"Lua","watchers":5,"pushed_at":"2010/12/20 22:43:18 -0800","url":"https://github.com/tekkub/MediumRare","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - Scans NPCs around you for rares","size":260,"private":false,"name":"MediumRare","owner":"tekkub","has_wiki":true,"created_at":"2010/01/02 17:40:19 -0800","forks":2,"homepage":"http://www.tekkub.net/"},{"open_issues":0,"language":"Lua","watchers":2,"pushed_at":"2010/01/02 17:43:21 -0800","url":"https://github.com/tekkub/Shrank","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - Warn when players cast spells that aren't max rank","size":112,"private":false,"name":"Shrank","owner":"tekkub","has_wiki":true,"created_at":"2010/01/02 17:43:15 -0800","forks":1,"homepage":"http://www.tekkub.net/"},{"open_issues":0,"language":"Lua","watchers":3,"pushed_at":"2010/01/03 14:14:52 -0800","url":"https://github.com/tekkub/erroff","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - Simple error message blocker for macros","size":108,"private":false,"name":"erroff","owner":"tekkub","has_wiki":true,"created_at":"2010/01/03 01:37:57 -0800","forks":1,"homepage":"http://www.tekkub.net/"},{"open_issues":0,"language":"JavaScript","watchers":6,"pushed_at":"2010/01/17 02:10:22 -0800","url":"https://github.com/tekkub/tender-checker","has_issues":true,"has_downloads":true,"fork":false,"description":"Chrome extension - Adds a browser action to track a tenderapp.com inbox","size":560,"private":false,"name":"tender-checker","owner":"tekkub","has_wiki":true,"created_at":"2010/01/16 17:08:37 -0800","forks":2,"homepage":""},{"open_issues":0,"language":"JavaScript","watchers":1,"pushed_at":"2010/01/23 11:51:04 -0800","url":"https://github.com/tekkub/facebook-friend-renamer","has_issues":true,"has_downloads":true,"fork":false,"description":"Chrome extension - Lets you rename facebook friends, because you don't use \"real\" names with these people","size":276,"private":false,"name":"facebook-friend-renamer","owner":"tekkub","has_wiki":true,"created_at":"2010/01/23 11:32:53 -0800","forks":1,"homepage":""},{"open_issues":0,"language":"Lua","watchers":1,"pushed_at":"2010/04/18 16:30:08 -0700","url":"https://github.com/tekkub/tekAutoRepair","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - Automatically repair shits","size":100,"private":false,"name":"tekAutoRepair","owner":"tekkub","has_wiki":true,"created_at":"2010/04/18 16:29:56 -0700","forks":1,"homepage":"http://www.tekkub.net/"},{"open_issues":0,"language":"Lua","watchers":5,"pushed_at":"2010/06/06 12:14:09 -0700","url":"https://github.com/tekkub/GnomishInboxShrinker","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - A simple, scrolling inbox","size":312,"private":false,"name":"GnomishInboxShrinker","owner":"tekkub","has_wiki":true,"created_at":"2010/04/19 11:30:41 -0700","forks":2,"homepage":"http://www.tekkub.net/"},{"open_issues":0,"language":"Lua","watchers":2,"pushed_at":"2010/05/02 21:34:21 -0700","url":"https://github.com/tekkub/ImbaPalas","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - The missing paladin bubble sound effect","size":656,"private":false,"name":"ImbaPalas","owner":"tekkub","has_wiki":true,"created_at":"2010/05/02 21:33:57 -0700","forks":1,"homepage":"http://www.tekkub.net/"},{"open_issues":0,"language":"JavaScript","watchers":2,"pushed_at":"2010/06/06 15:07:50 -0700","url":"https://github.com/tekkub/goo.gl-QR","has_issues":true,"has_downloads":true,"fork":false,"description":"Chrome extension - Shorten URL with goo.gl and generate a QR code","size":212,"private":false,"name":"goo.gl-QR","owner":"tekkub","has_wiki":true,"created_at":"2010/06/06 14:56:25 -0700","forks":2,"homepage":""},{"open_issues":0,"language":"Lua","watchers":6,"pushed_at":"2010/07/10 22:01:28 -0700","url":"https://github.com/tekkub/UnrealID","has_issues":false,"has_downloads":true,"fork":false,"description":"WoW Addon - Make \"real\" names go away","size":124,"private":false,"name":"UnrealID","owner":"tekkub","has_wiki":true,"created_at":"2010/06/29 22:08:32 -0700","forks":2,"homepage":"http://www.tekkub.net/"},{"open_issues":0,"language":"Ruby","watchers":1,"pushed_at":"2008/05/10 21:52:00 -0700","url":"https://github.com/tekkub/hubahuba","has_issues":false,"has_downloads":false,"fork":true,"description":"Ruby and Rails core extensions used by GitHub.","size":0,"private":false,"name":"hubahuba","owner":"tekkub","has_wiki":false,"created_at":"2010/07/19 17:10:40 -0700","forks":1,"homepage":""},{"open_issues":0,"language":"Ruby","watchers":1,"pushed_at":"2008/05/29 13:55:30 -0700","url":"https://github.com/tekkub/scaffolding","has_issues":false,"has_downloads":true,"fork":true,"description":"Dynamic Scaffolding plugin","size":0,"private":false,"name":"scaffolding","owner":"tekkub","has_wiki":true,"created_at":"2010/07/19 17:12:00 -0700","forks":1,"homepage":"http://rubyonrails.org"},{"open_issues":0,"watchers":4,"pushed_at":"2010/11/11 02:14:43 -0800","url":"https://github.com/tekkub/gmail","has_issues":true,"has_downloads":true,"fork":false,"description":"","size":132,"private":false,"name":"gmail","owner":"tekkub","has_wiki":true,"created_at":"2010/11/11 02:09:38 -0800","forks":2,"master_branch":"gh-pages","homepage":""},{"open_issues":0,"language":"Ruby","watchers":1,"pushed_at":"2011/08/17 19:36:07 -0700","url":"https://github.com/tekkub/zp","has_issues":true,"has_downloads":true,"fork":false,"description":"Zero Punctuation Video RSS feed generator","size":652,"private":false,"name":"zp","owner":"tekkub","has_wiki":true,"created_at":"2010/11/16 01:43:02 -0800","forks":1,"master_branch":"master","homepage":"http://tekkub.net/zp/videos.xml"},{"open_issues":0,"language":"Lua","watchers":1,"pushed_at":"2010/12/01 00:07:08 -0800","url":"https://github.com/tekkub/oUF","has_issues":false,"has_downloads":true,"fork":true,"description":"WoW AddOn - Unit frame framework.","size":820,"private":false,"name":"oUF","owner":"tekkub","has_wiki":true,"created_at":"2010/12/01 00:04:14 -0800","forks":0,"homepage":"http://www.wowinterface.com/downloads/info9994-oUF.html","integrate_branch":"1.4"},{"open_issues":0,"language":"Lua","watchers":3,"pushed_at":"2010/12/30 21:15:20 -0800","url":"https://github.com/tekkub/MillerLite","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - Adds a frame to the AH for fast crafting mat lookup","size":192,"private":false,"name":"MillerLite","owner":"tekkub","has_wiki":true,"created_at":"2010/12/17 19:58:28 -0800","forks":1,"homepage":"http://www.tekkub.net/"},{"open_issues":0,"language":"JavaScript","watchers":1,"pushed_at":"2010/12/24 16:32:40 -0800","url":"https://github.com/tekkub/doublecaps","has_issues":true,"has_downloads":true,"fork":false,"description":"I'm a terrible typist, true story","size":184,"private":false,"name":"doublecaps","owner":"tekkub","has_wiki":true,"created_at":"2010/12/24 16:26:36 -0800","forks":1,"homepage":""},{"open_issues":0,"language":"JavaScript","watchers":1,"pushed_at":"2011/07/17 14:18:13 -0700","url":"https://github.com/tekkub/rtd","has_issues":true,"has_downloads":true,"fork":false,"description":"Just a little RTD lightrail schedule for my bear","size":616,"private":false,"name":"rtd","owner":"tekkub","has_wiki":true,"created_at":"2011/06/05 00:34:36 -0700","forks":1,"master_branch":"gh-pages","homepage":"http://tekkub.net/rtd"},{"open_issues":0,"language":"Lua","watchers":2,"pushed_at":"2011/06/26 01:19:45 -0700","url":"https://github.com/tekkub/Velluminous","has_issues":true,"has_downloads":true,"fork":false,"description":"WoW Addon - Quickly enchant directly to vellum","size":96,"private":false,"name":"Velluminous","owner":"tekkub","has_wiki":true,"created_at":"2011/06/26 01:19:14 -0700","forks":1,"homepage":"http://tekkub.net/"},{"open_issues":0,"language":"JavaScript","watchers":5,"pushed_at":"2011/10/13 03:26:02 -0700","url":"https://github.com/tekkub/dotjs","has_issues":true,"has_downloads":true,"fork":false,"description":"My dotjs scripts","size":108,"private":false,"name":"dotjs","owner":"tekkub","has_wiki":true,"created_at":"2011/06/30 15:50:38 -0700","forks":2,"homepage":"http://defunkt.io/dotjs/"},{"open_issues":4,"language":"JavaScript","watchers":12,"pushed_at":"2011/09/19 06:35:53 -0700","url":"https://github.com/jacksonh/gitmarks","has_issues":true,"has_downloads":true,"fork":false,"description":"Add project bookmarking to github","size":188,"private":false,"name":"gitmarks","owner":"jacksonh","has_wiki":true,"created_at":"2011/07/14 07:34:05 -0700","forks":4,"homepage":""},{"open_issues":0,"language":"JavaScript","watchers":2,"pushed_at":"2011/09/16 14:14:20 -0700","url":"https://github.com/tekkub/gitmarks","has_issues":false,"has_downloads":true,"fork":true,"description":"Add project bookmarking to github","size":112,"private":false,"name":"gitmarks","owner":"tekkub","has_wiki":true,"created_at":"2011/07/16 01:07:57 -0700","forks":0,"homepage":""},{"open_issues":0,"language":"Ruby","watchers":6,"pushed_at":"2011/09/23 21:35:24 -0700","url":"https://github.com/tekkub/supportbee","has_issues":true,"has_downloads":true,"fork":false,"description":"A little ruby library for talking to supportbee's API","size":100,"private":false,"name":"supportbee","owner":"tekkub","has_wiki":true,"created_at":"2011/09/23 21:28:34 -0700","forks":1,"homepage":"supportbee.com"}]} \ No newline at end of file diff --git a/tests/test_commits.py b/tests/test_commits.py index 483846c..06f3b1c 100644 --- a/tests/test_commits.py +++ b/tests/test_commits.py @@ -21,6 +21,12 @@ def test_list(self): assert_equals(commits[0].id, '4de0834d58b37ef3020c49df43c95649217a2def') + def test_list_with_page(self): + commits = self.client.commits.list('JNRowe/jnrowe-misc', page=2) + assert_equals(len(commits), 35) + assert_equals(commits[0].id, + '1f5ad2c3206bafc4aca9e6ce50f5c605befdb3d6') + def test_list_with_branch(self): commits = self.client.commits.list('JNRowe/misc-overlay', 'gh-pages') assert_equals(len(commits), 35) diff --git a/tests/test_pull_requests.py b/tests/test_pull_requests.py index a5ae228..80cc540 100644 --- a/tests/test_pull_requests.py +++ b/tests/test_pull_requests.py @@ -18,3 +18,9 @@ def test_list(self): pull_requests = self.client.pull_requests.list('ask/python-github2') assert_equals(len(pull_requests), 1) assert_equals(pull_requests[0].title, 'Pagination support for commits.') + + def test_list_with_page(self): + pull_requests = self.client.pull_requests.list('robbyrussell/oh-my-zsh', + page=2) + assert_equals(len(pull_requests), 52) + assert_equals(pull_requests[1].title, 'Added my own custom theme') diff --git a/tests/test_repositories.py b/tests/test_repositories.py index 1d90bbc..d7f9c07 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -65,11 +65,21 @@ def test_list(self): assert_equals(len(repos), 48) assert_equals(repos[0].name, 'bfm') + def test_list_with_page(self): + repos = self.client.repos.list('tekkub', page=2) + assert_equals(len(repos), 37) + assert_equals(repos[0].name, 'OhSnap') + def test_watching(self): repos = self.client.repos.watching('JNRowe') assert_equals(len(repos), 90) assert_equals(repos[0].name, 'nerdtree') + def test_watching_with_page(self): + repos = self.client.repos.watching('tekkub', page=2) + assert_equals(len(repos), 39) + assert_equals(repos[0].name, 'Buffoon') + def test_contributors(self): contributors = self.client.repos.list_contributors('ask/python-github2') assert_equals(len(contributors), 29) From d13d7691d23828bb100254e84e6ae183da859331 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 13:52:01 +0000 Subject: [PATCH 026/129] Silly little PEP-8 fixes. --- github2/core.py | 14 ++++++++------ github2/issues.py | 4 ++-- github2/repositories.py | 6 +++--- github2/request.py | 2 +- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/github2/core.py b/github2/core.py index 4e11ec7..fe0a122 100644 --- a/github2/core.py +++ b/github2/core.py @@ -100,8 +100,8 @@ def requires_auth(f): :param func f: Function to wrap :raises AuthError: If function called without an authenticated session """ - # When Python 2.4 support is dropped move straight to functools.wraps, don't - # pass go and don't collect $200. + # When Python 2.4 support is dropped move straight to functools.wraps, + # don't pass go and don't collect $200. def wrapper(self, *args, **kwargs): if not self.request.access_token and not self.request.api_token: raise AuthError("%r requires an authenticated session" @@ -161,7 +161,8 @@ def get_value(self, *args, **kwargs): # unicode keys are not accepted as kwargs by python, see: #http://mail-archives.apache.org/mod_mbox/qpid-dev/200609.mbox/%3C1159389941.4505.10.camel@localhost.localdomain%3E # So we make a local dict with the same keys but as strings: - return datatype(**dict((str(k), v) for (k, v) in value.iteritems())) + return datatype(**dict((str(k), v) + for (k, v) in value.iteritems())) return value def get_values(self, *args, **kwargs): @@ -170,7 +171,8 @@ def get_values(self, *args, **kwargs): if datatype: # Same as above, unicode keys will blow up in **args, so we need to # create a new 'values' dict with string keys - return [datatype(**dict((str(k), v) for (k, v) in value.iteritems())) + return [datatype(**dict((str(k), v) + for (k, v) in value.iteritems())) for value in values] else: return values @@ -273,7 +275,7 @@ def __getitem__(self, key): responses to ``BaseData`` derived objects. """ warn("Subscript access on %r is deprecated, use object attributes" - % self.__class__.__name__, DeprecationWarning) + % self.__class__.__name__, DeprecationWarning) if not key in self._meta.keys(): raise KeyError(key) return getattr(self, key) @@ -284,7 +286,7 @@ def __setitem__(self, key, value): :see: ``BaseData.__getitem__`` """ warn("Subscript access on %r is deprecated, use object attributes" - % self.__class__.__name__, DeprecationWarning) + % self.__class__.__name__, DeprecationWarning) if not key in self._meta.keys(): raise KeyError(key) setattr(self, key, value) diff --git a/github2/issues.py b/github2/issues.py index 43111b0..0983b29 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -68,8 +68,8 @@ def list_by_label(self, project, label): :param str project: GitHub project :param str label: a string representing a label (e.g., ``bug``). """ - return self.get_values("list", project, "label", label, filter="issues", - datatype=Issue) + return self.get_values("list", project, "label", label, + filter="issues", datatype=Issue) def list_labels(self, project): """Get all labels for project. diff --git a/github2/repositories.py b/github2/repositories.py index 2724627..cbd9ad4 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -14,7 +14,7 @@ class Repository(BaseData): fork = Attribute("If True, this is a fork of another repository.") owner = Attribute("Username of the user owning this repository.") homepage = Attribute("Homepage for this project.") - master_branch = Attribute("Default branch, if set.") + master_branch = Attribute("Default branch, if set.") integration_branch = Attribute("Integration branch, if set.") open_issues = Attribute("List of open issues for this repository.") created_at = DateAttribute("Datetime the repository was created.") @@ -64,7 +64,6 @@ def pushable(self): return self.get_values("pushable", filter="repositories", datatype=Repository) - def list(self, user=None, page=1): """Return a list of all repositories for a user. @@ -189,7 +188,8 @@ def languages(self, project): :param str project: Github project """ - return self.get_values("show", project, "languages", filter="languages") + return self.get_values("show", project, "languages", + filter="languages") def tags(self, project): """Get tags for project diff --git a/github2/request.py b/github2/request.py index d350d55..aea7405 100644 --- a/github2/request.py +++ b/github2/request.py @@ -90,7 +90,7 @@ def __init__(self, username=None, api_token=None, url_prefix=None, "api_version": self.api_version, "api_format": self.api_format, } - digicert_ha_cert = path.join(path.dirname(path.abspath(__file__ )), + digicert_ha_cert = path.join(path.dirname(path.abspath(__file__)), "DigiCert_High_Assurance_EV_Root_CA.crt") if proxy_host is None: self._http = httplib2.Http(cache=cache, ca_certs=digicert_ha_cert) From 162d8eade2ebc7acf0ba67accf4bfd2d9fab4487 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 13:52:45 +0000 Subject: [PATCH 027/129] Remove invalid cookies from test data. --- ...st,JNRowe,jnrowe-misc,master,a252487bd992cdfc8247b3c41d0cb9fa | 1 - ...JNRowe,misc-overlay,gh-pages,d0ce7ae70e44f7f396a93485a24b3423 | 1 - ...ges,packages,dev-python.html,8622bc5e052f03439528cc9b7bf3fea2 | 1 - ...misc-overlay,master,Makefile,75d9a1e41e76c3b924420d48b56dc756 | 1 - ...t,JNRowe,misc-overlay,master,bfb4f990e48c87dab73d988a81318d69 | 1 - ...c396a01af1007fb7b88765b9ae45,a4f58221c8131c4e0975cd806f13d76c | 1 - 6 files changed, 6 deletions(-) diff --git a/tests/data/github.com,api,v2,json,commits,list,JNRowe,jnrowe-misc,master,a252487bd992cdfc8247b3c41d0cb9fa b/tests/data/github.com,api,v2,json,commits,list,JNRowe,jnrowe-misc,master,a252487bd992cdfc8247b3c41d0cb9fa index 7128271..b88099b 100644 --- a/tests/data/github.com,api,v2,json,commits,list,JNRowe,jnrowe-misc,master,a252487bd992cdfc8247b3c41d0cb9fa +++ b/tests/data/github.com,api,v2,json,commits,list,JNRowe,jnrowe-misc,master,a252487bd992cdfc8247b3c41d0cb9fa @@ -2,7 +2,6 @@ status: 200 x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/commits/list/JNRowe/jnrowe-misc/master?page=2 -content-encoding: gzip -set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly connection: keep-alive content-length: 22608 diff --git a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,d0ce7ae70e44f7f396a93485a24b3423 b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,d0ce7ae70e44f7f396a93485a24b3423 index 56b04cb..b15f434 100644 --- a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,d0ce7ae70e44f7f396a93485a24b3423 +++ b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,d0ce7ae70e44f7f396a93485a24b3423 @@ -2,7 +2,6 @@ status: 200 x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/commits/list/JNRowe/misc-overlay/gh-pages -content-encoding: gzip -set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly connection: keep-alive content-length: 19508 diff --git a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,packages,dev-python.html,8622bc5e052f03439528cc9b7bf3fea2 b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,packages,dev-python.html,8622bc5e052f03439528cc9b7bf3fea2 index 3493ec2..a55f85d 100644 --- a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,packages,dev-python.html,8622bc5e052f03439528cc9b7bf3fea2 +++ b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,gh-pages,packages,dev-python.html,8622bc5e052f03439528cc9b7bf3fea2 @@ -2,7 +2,6 @@ status: 200 x-ratelimit-remaining: 58 content-location: https://github.com/api/v2/json/commits/list/JNRowe/misc-overlay/gh-pages/packages/dev-python.html -content-encoding: gzip -set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly connection: keep-alive content-length: 19508 diff --git a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,Makefile,75d9a1e41e76c3b924420d48b56dc756 b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,Makefile,75d9a1e41e76c3b924420d48b56dc756 index eb2d090..d420f44 100644 --- a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,Makefile,75d9a1e41e76c3b924420d48b56dc756 +++ b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,Makefile,75d9a1e41e76c3b924420d48b56dc756 @@ -2,7 +2,6 @@ status: 200 x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/commits/list/JNRowe/misc-overlay/master/Makefile -content-encoding: gzip -set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly connection: keep-alive content-length: 19364 diff --git a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,bfb4f990e48c87dab73d988a81318d69 b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,bfb4f990e48c87dab73d988a81318d69 index 33b6332..e6d80d7 100644 --- a/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,bfb4f990e48c87dab73d988a81318d69 +++ b/tests/data/github.com,api,v2,json,commits,list,JNRowe,misc-overlay,master,bfb4f990e48c87dab73d988a81318d69 @@ -2,7 +2,6 @@ status: 200 x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/commits/list/JNRowe/misc-overlay/master -content-encoding: gzip -set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly connection: keep-alive content-length: 23425 diff --git a/tests/data/github.com,api,v2,json,commits,show,ask,python-github2,1c83cde9b5a7c396a01af1007fb7b88765b9ae45,a4f58221c8131c4e0975cd806f13d76c b/tests/data/github.com,api,v2,json,commits,show,ask,python-github2,1c83cde9b5a7c396a01af1007fb7b88765b9ae45,a4f58221c8131c4e0975cd806f13d76c index 6340de4..e7cf6dc 100644 --- a/tests/data/github.com,api,v2,json,commits,show,ask,python-github2,1c83cde9b5a7c396a01af1007fb7b88765b9ae45,a4f58221c8131c4e0975cd806f13d76c +++ b/tests/data/github.com,api,v2,json,commits,show,ask,python-github2,1c83cde9b5a7c396a01af1007fb7b88765b9ae45,a4f58221c8131c4e0975cd806f13d76c @@ -2,7 +2,6 @@ status: 200 x-ratelimit-remaining: 59 content-location: https://github.com/api/v2/json/commits/show/ask/python-github2/1c83cde9b5a7c396a01af1007fb7b88765b9ae45 -content-encoding: gzip -set-cookie: _gh_sess=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--ed7eadd474fd37850b68bd3c08a5c55ad0c3c833; path=/; expires=Fri, 01 Jan 2021 00:00:00 GMT; secure; HttpOnly connection: keep-alive content-length: 1578 From f5c447d35000c46e5daeadaf2052d7c6c1d4c5ee Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 13:53:09 +0000 Subject: [PATCH 028/129] Use UTF-8 encoding for test_unit. --- tests/test_unit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_unit.py b/tests/test_unit.py index 9d6650b..ccadb36 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -1,4 +1,4 @@ -# -*- coding: latin-1 -*- +# -*- coding: utf-8 -*- import _setup From f72a255efed7a3cf5fb21dfc5ba07e6371c785ad Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 14:00:12 +0000 Subject: [PATCH 029/129] Added github-plots to 'in the wild' document. --- doc/wild.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/wild.rst b/doc/wild.rst index 6ee7751..0603a94 100644 --- a/doc/wild.rst +++ b/doc/wild.rst @@ -40,6 +40,13 @@ listed on this page. :PyPI page: :pypi:`ghmiles` +``github-plots`` +'''''''''''''''' + + Alternative plots from GitHub stats. + +:PyPI page: :pypi:`github-plots` + ``hubugs`` '''''''''' From c2e043c4d6026b76a524e144a8dc0aecd6b52b0f Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 14:26:04 +0000 Subject: [PATCH 030/129] Added github-issues to 'in the wild' document. --- doc/wild.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/wild.rst b/doc/wild.rst index 0603a94..5e20f7f 100644 --- a/doc/wild.rst +++ b/doc/wild.rst @@ -40,6 +40,14 @@ listed on this page. :PyPI page: :pypi:`ghmiles` +``github-issues`` +''''''''''''''''' + + github-issues allows you to create, close, show, list, and comment on + issues on your github project - that's it. + +:Git repository: https://github.com/kashifrazzaqui/github-issues + ``github-plots`` '''''''''''''''' From edb064d577763f4973e933c826b3c45a9addc477 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 13:43:30 +0000 Subject: [PATCH 031/129] Attempt to import using Python 3 stdlib names first. --- github2/issues.py | 10 ++++++---- github2/request.py | 17 ++++++++++++----- github2/users.py | 10 +++++++--- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/github2/issues.py b/github2/issues.py index 43111b0..c5adb90 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -1,4 +1,7 @@ -import urllib +try: + from urllib.parse import quote_plus # For Python 3 +except ImportError: + from urllib import quote_plus from github2.core import (GithubCommand, BaseData, Attribute, DateAttribute, repr_string, requires_auth) @@ -47,9 +50,8 @@ def search(self, project, term, state="open"): :param str term: term to search issues for :param str state: can be either ``open`` or ``closed``. """ - return self.get_values("search", project, state, - urllib.quote_plus(term), filter="issues", - datatype=Issue) + return self.get_values("search", project, state, quote_plus(term), + filter="issues", datatype=Issue) def list(self, project, state="open"): """Get all issues for project with given state. diff --git a/github2/request.py b/github2/request.py index d350d55..d7d2769 100644 --- a/github2/request.py +++ b/github2/request.py @@ -3,18 +3,25 @@ import re import time import httplib2 -from httplib import responses +try: + from http.client import responses # For Python 3 +except ImportError: + from httplib import responses try: import json as simplejson # For Python 2.6 except ImportError: import simplejson from os import path -from urlparse import (urlsplit, urlunsplit) try: - from urlparse import parse_qs + # For Python 3 + from urllib.parse import (parse_qs, quote, urlencode, urlsplit, urlunsplit) except ImportError: - from cgi import parse_qs -from urllib import urlencode, quote + from urlparse import (urlsplit, urlunsplit) + try: + from urlparse import parse_qs + except ImportError: + from cgi import parse_qs + from urllib import urlencode, quote #: Hostname for API access diff --git a/github2/users.py b/github2/users.py index 3a40a8f..7dba3e6 100644 --- a/github2/users.py +++ b/github2/users.py @@ -1,6 +1,10 @@ +try: + from urllib.parse import quote_plus # For Python 3 +except ImportError: + from urllib import quote_plus + from github2.core import (BaseData, GithubCommand, DateAttribute, Attribute, enhanced_by_auth, requires_auth) -import urllib class User(BaseData): @@ -48,8 +52,8 @@ def search(self, query): :param str query: term to search for """ - return self.get_values("search", urllib.quote_plus(query), - filter="users", datatype=User) + return self.get_values("search", quote_plus(query), filter="users", + datatype=User) def search_by_email(self, query): """Search for users by email address From 9ea7e4ca60652b9db8d41eacee129d003a28d8dc Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 13:44:25 +0000 Subject: [PATCH 032/129] Use Python 2 & 3 compatible syntax for metaclass usage. --- github2/core.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/github2/core.py b/github2/core.py index 4e11ec7..a1137c0 100644 --- a/github2/core.py +++ b/github2/core.py @@ -263,9 +263,9 @@ def iterate(self): return result_cls -class BaseData(object): - __metaclass__ = BaseDataType - +# Ugly base class definition for Python 2 and 3 compatibility, where metaclass +# syntax is incompatible +class BaseData(BaseDataType('BaseData', (object, ), {})): def __getitem__(self, key): """Access objects's attribute using subscript notation From 32fe44d25fce6211f665568cfd318cef71d24899 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 13:45:25 +0000 Subject: [PATCH 033/129] =?UTF-8?q?No=20need=20for=20unicode=E2=86=92str?= =?UTF-8?q?=20kwargs=20hack=20in=20Python=203.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- github2/core.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/github2/core.py b/github2/core.py index a1137c0..36558a0 100644 --- a/github2/core.py +++ b/github2/core.py @@ -158,20 +158,26 @@ def get_value(self, *args, **kwargs): datatype = kwargs.pop("datatype", None) value = self.make_request(*args, **kwargs) if datatype: - # unicode keys are not accepted as kwargs by python, see: - #http://mail-archives.apache.org/mod_mbox/qpid-dev/200609.mbox/%3C1159389941.4505.10.camel@localhost.localdomain%3E - # So we make a local dict with the same keys but as strings: - return datatype(**dict((str(k), v) for (k, v) in value.iteritems())) + if not PY3K: + # unicode keys are not accepted as kwargs by python, see: + #http://mail-archives.apache.org/mod_mbox/qpid-dev/200609.mbox/%3C1159389941.4505.10.camel@localhost.localdomain%3E + # So we make a local dict with the same keys but as strings: + return datatype(**dict((str(k), v) for (k, v) in value.items())) + else: + return datatype(**value) return value def get_values(self, *args, **kwargs): datatype = kwargs.pop("datatype", None) values = self.make_request(*args, **kwargs) if datatype: - # Same as above, unicode keys will blow up in **args, so we need to - # create a new 'values' dict with string keys - return [datatype(**dict((str(k), v) for (k, v) in value.iteritems())) - for value in values] + if not PY3K: + # Same as above, unicode keys will blow up in **args, so we need to + # create a new 'values' dict with string keys + return [datatype(**dict((str(k), v) for (k, v) in value.items())) + for value in values] + else: + return [datatype(**value) for value in values] else: return values From dd588f8d28ef1eb931dbe55cdf752a1757499b7e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 13:47:11 +0000 Subject: [PATCH 034/129] Removed now unused build path hack in tests. --- tests/_setup.py | 6 ------ tests/test_charset_header.py | 2 -- tests/test_commits.py | 2 -- tests/test_date_handling.py | 2 -- tests/test_issues.py | 2 -- tests/test_organizations.py | 2 -- tests/test_pull_requests.py | 2 -- tests/test_regression.py | 2 -- tests/test_repositories.py | 2 -- tests/test_request.py | 2 -- tests/test_tz_aware_date_handling.py | 2 -- tests/test_unit.py | 2 -- tests/test_user.py | 2 -- tests/utils.py | 2 -- 14 files changed, 32 deletions(-) delete mode 100644 tests/_setup.py diff --git a/tests/_setup.py b/tests/_setup.py deleted file mode 100644 index c410274..0000000 --- a/tests/_setup.py +++ /dev/null @@ -1,6 +0,0 @@ -import sys - -# Forcibly insert path for `setup.py build` output, so that we import from the -# ``2to3`` converted sources. This is an ugly hack, but it saves an enormous -# amount of grief in handling Python 2 and 3. -sys.path.insert(0, 'build/lib') diff --git a/tests/test_charset_header.py b/tests/test_charset_header.py index 073e10c..b495bfc 100644 --- a/tests/test_charset_header.py +++ b/tests/test_charset_header.py @@ -1,5 +1,3 @@ -import _setup - from nose.tools import assert_equals from github2.request import charset_from_headers diff --git a/tests/test_commits.py b/tests/test_commits.py index 06f3b1c..b4eab13 100644 --- a/tests/test_commits.py +++ b/tests/test_commits.py @@ -1,5 +1,3 @@ -import _setup - from nose.tools import assert_equals import utils diff --git a/tests/test_date_handling.py b/tests/test_date_handling.py index 591bb2c..dcfea34 100644 --- a/tests/test_date_handling.py +++ b/tests/test_date_handling.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- -import _setup - from datetime import datetime as dt from nose.tools import assert_equals diff --git a/tests/test_issues.py b/tests/test_issues.py index 83e2822..245b6b9 100644 --- a/tests/test_issues.py +++ b/tests/test_issues.py @@ -1,5 +1,3 @@ -import _setup - from nose.tools import assert_equals import utils diff --git a/tests/test_organizations.py b/tests/test_organizations.py index 1425a07..f97b905 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -1,5 +1,3 @@ -import _setup - from nose.tools import (assert_equals, assert_true) import utils diff --git a/tests/test_pull_requests.py b/tests/test_pull_requests.py index 80cc540..2a453b0 100644 --- a/tests/test_pull_requests.py +++ b/tests/test_pull_requests.py @@ -1,5 +1,3 @@ -import _setup - from nose.tools import assert_equals import utils diff --git a/tests/test_regression.py b/tests/test_regression.py index 5438888..a2b235c 100644 --- a/tests/test_regression.py +++ b/tests/test_regression.py @@ -1,5 +1,3 @@ -import _setup - import httplib2 from nose.tools import assert_equals diff --git a/tests/test_repositories.py b/tests/test_repositories.py index d7f9c07..103045f 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -1,5 +1,3 @@ -import _setup - import datetime from nose.tools import assert_equals diff --git a/tests/test_request.py b/tests/test_request.py index a36086f..90849dc 100644 --- a/tests/test_request.py +++ b/tests/test_request.py @@ -1,5 +1,3 @@ -import _setup - import unittest from nose.tools import (assert_equals, assert_true) diff --git a/tests/test_tz_aware_date_handling.py b/tests/test_tz_aware_date_handling.py index c2e07c6..4e4f6eb 100644 --- a/tests/test_tz_aware_date_handling.py +++ b/tests/test_tz_aware_date_handling.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- -import _setup - from datetime import datetime as dt from dateutil.tz import tzutc diff --git a/tests/test_unit.py b/tests/test_unit.py index 9d6650b..f4b3452 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -1,7 +1,5 @@ # -*- coding: latin-1 -*- -import _setup - import datetime import unittest diff --git a/tests/test_user.py b/tests/test_user.py index 5fe4c5b..3b0f8c3 100644 --- a/tests/test_user.py +++ b/tests/test_user.py @@ -1,5 +1,3 @@ -import _setup - import datetime from nose.tools import (assert_equals, assert_false, assert_true) diff --git a/tests/utils.py b/tests/utils.py index d05e258..0657cfa 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,5 +1,3 @@ -import _setup - import os import sys import unittest From 355c17255ced730d5644beab4bf4fd4b81023c80 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 13:54:14 +0000 Subject: [PATCH 035/129] Remove library rebuild hack in tox config. --- tox.ini | 2 -- 1 file changed, 2 deletions(-) diff --git a/tox.ini b/tox.ini index 7a01449..531bac9 100644 --- a/tox.ini +++ b/tox.ini @@ -7,8 +7,6 @@ deps = nose coverage commands = - rm -rf build - {envpython} setup.py build nosetests {posargs:-vv} tests [testenv:rst] deps = From e221921a8e90ffda59c74349b4fc39df3922eafd Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 15:52:06 +0000 Subject: [PATCH 036/129] httplib.responses fix for Python 2.4 compatibility. Thanks to James Elkin for reporting. --- github2/request.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/github2/request.py b/github2/request.py index aea7405..a773f48 100644 --- a/github2/request.py +++ b/github2/request.py @@ -3,7 +3,12 @@ import re import time import httplib2 -from httplib import responses +try: + from httplib import responses +except ImportError: # For Python 2.4 + from BaseHTTPServer import BaseHTTPRequestHandler + responses = dict([(k, v[0]) + for k, v in BaseHTTPRequestHandler.responses.items()]) try: import json as simplejson # For Python 2.6 except ImportError: @@ -55,7 +60,7 @@ def __init__(self, message, content, code): self.message = message self.content = content self.code = code - if code: + if code and responses: self.code_reason = responses[code] else: self.code_reason = "" From d85343f8cc5d374b79191c27274a78b067f4ea19 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 14:11:42 +0000 Subject: [PATCH 037/129] Wrap print statement/function in scripts for compatibility. --- github2/bin/manage_collaborators.py | 23 ++++++++++++++++++++--- github2/bin/search_repos.py | 22 ++++++++++++++++++---- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/github2/bin/manage_collaborators.py b/github2/bin/manage_collaborators.py index ca59df5..821e89d 100755 --- a/github2/bin/manage_collaborators.py +++ b/github2/bin/manage_collaborators.py @@ -12,10 +12,27 @@ # BSD licensed import logging +import sys + from optparse import OptionParser + import github2.client +#: Running under Python 3 +PY3K = sys.version_info[0] == 3 and True or False + + +def print_(text): + """Python 2 & 3 compatible print function + + We support <2.6, so can't use __future__.print_function""" + if PY3K: + print(text) + else: + sys.stdout.write(text + '\n') + + def parse_commandline(): """Parse the comandline and return parsed options.""" @@ -72,7 +89,7 @@ def main(): if len(args) == 1: for repos in github.repos.list(options.account): fullreposname = github.project_for_user_repo(options.account, repos.name) - print "%s: %s" % (repos.name, ' '.join(github.repos.list_collaborators(fullreposname))) + print_("%s: %s" % (repos.name, ' '.join(github.repos.list_collaborators(fullreposname)))) elif len(args) == 2: command, collaborator = args for repos in github.repos.list(options.account): @@ -80,11 +97,11 @@ def main(): if collaborator in github.repos.list_collaborators(fullreposname): if command == 'remove': github.repos.remove_collaborator(repos.name, collaborator) - print "removed %r from %r" % (collaborator, repos.name) + print_("removed %r from %r" % (collaborator, repos.name)) else: if command == 'add': github.repos.add_collaborator(repos.name, collaborator) - print "added %r to %r" % (collaborator, repos.name) + print_("added %r to %r" % (collaborator, repos.name)) logging.shutdown() diff --git a/github2/bin/search_repos.py b/github2/bin/search_repos.py index 75b295c..c52be46 100755 --- a/github2/bin/search_repos.py +++ b/github2/bin/search_repos.py @@ -12,6 +12,20 @@ import github2.client +#: Running under Python 3 +PY3K = sys.version_info[0] == 3 and True or False + + +def print_(text): + """Python 2 & 3 compatible print function + + We support <2.6, so can't use __future__.print_function""" + if PY3K: + print(text) + else: + sys.stdout.write(text + '\n') + + def parse_commandline(): """Parse the comandline and return parsed options.""" @@ -47,14 +61,14 @@ def main(): repos = github.repos.search(term) if not repos: - print 'No repos found!' + print_('No repos found!') return_value = 255 else: for repo in repos: - print repo.project + print(repo.project) if repo.description: - print '\n'.join(wrap(repo.description, initial_indent=' ', - subsequent_indent=' ')) + print_('\n'.join(wrap(repo.description, initial_indent=' ', + subsequent_indent=' '))) logging.shutdown() return return_value From d9ba6658a4f6ecc10bf5cb5c73857dfe5914083b Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 14:31:24 +0000 Subject: [PATCH 038/129] =?UTF-8?q?Unicode=E2=86=92str=20kwargs=20hack=20o?= =?UTF-8?q?nly=20needed=20for=20Python=20<2.7.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- github2/core.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/github2/core.py b/github2/core.py index 36558a0..7b47d12 100644 --- a/github2/core.py +++ b/github2/core.py @@ -9,6 +9,9 @@ #: Running under Python 3 PY3K = sys.version_info[0] == 3 and True or False +#: Running under Python 2.7, or newer +PY27 = sys.version_info[:2] == 3 and True or False + GITHUB_DATE_FORMAT = "%Y/%m/%d %H:%M:%S %z" # We need to manually mangle the timezone for commit date formatting because it # uses -xx:xx format @@ -158,9 +161,9 @@ def get_value(self, *args, **kwargs): datatype = kwargs.pop("datatype", None) value = self.make_request(*args, **kwargs) if datatype: - if not PY3K: - # unicode keys are not accepted as kwargs by python, see: - #http://mail-archives.apache.org/mod_mbox/qpid-dev/200609.mbox/%3C1159389941.4505.10.camel@localhost.localdomain%3E + if not PY27: + # unicode keys are not accepted as kwargs by python, until 2.7: + # http://bugs.python.org/issue2646 # So we make a local dict with the same keys but as strings: return datatype(**dict((str(k), v) for (k, v) in value.items())) else: @@ -171,7 +174,7 @@ def get_values(self, *args, **kwargs): datatype = kwargs.pop("datatype", None) values = self.make_request(*args, **kwargs) if datatype: - if not PY3K: + if not PY27: # Same as above, unicode keys will blow up in **args, so we need to # create a new 'values' dict with string keys return [datatype(**dict((str(k), v) for (k, v) in value.items())) From 6d5f350585e8f340fa4cbc6de4769fbe3d7d7aa5 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 14:37:00 +0000 Subject: [PATCH 039/129] Use __name__ instead of func_name for compatibility with Python 3. --- github2/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github2/core.py b/github2/core.py index 7b47d12..61b6899 100644 --- a/github2/core.py +++ b/github2/core.py @@ -250,7 +250,7 @@ def __new__(cls, name, bases, attrs): for attr_name in attributes])) def _contribute_method(name, func): - func.func_name = name + func.__name__ = name attrs[name] = func def constructor(self, **kwargs): From c6afe2977483dfc598d11a322c9ba27bf5ad4e18 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 13 Dec 2011 20:04:38 +0000 Subject: [PATCH 040/129] No longer need to call 2to3 during build. --- setup.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/setup.py b/setup.py index 0abb26b..8613f1f 100755 --- a/setup.py +++ b/setup.py @@ -13,10 +13,8 @@ if sys.version_info[:2] < (2, 6): install_requires.append('simplejson >= 2.0.9') -extra = {} if sys.version_info >= (3,): install_requires.append('python-dateutil >= 2.0') - extra['use_2to3'] = True else: install_requires.append('python-dateutil < 2.0') @@ -64,5 +62,4 @@ "Topic :: Software Development", "Topic :: Software Development :: Libraries", ], - **extra ) From ab46a17eb0e4c6b49fe41aa60b232bd95c869e03 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 15 Dec 2011 20:39:02 +0000 Subject: [PATCH 041/129] Activat the Sphinx coverage extension. --- doc/conf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index 2f2b3bf..e54a0cc 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -28,7 +28,8 @@ # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ["sphinx.ext.%s" % ext - for ext in ["autodoc", "todo", "intersphinx", "viewcode"]] + \ + for ext in ["autodoc", "todo", "intersphinx", "viewcode", + "coverage"]] + \ ["sphinxcontrib.%s" % ext for ext in ["cheeseshop", ]] # Add any paths that contain templates here, relative to this directory. From 057e02b886cc3700d7e76ea1a88d0b73797deac4 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 15 Dec 2011 20:59:24 +0000 Subject: [PATCH 042/129] Added bugwarrior to 'in the wild' document. --- doc/wild.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/wild.rst b/doc/wild.rst index 5e20f7f..968358f 100644 --- a/doc/wild.rst +++ b/doc/wild.rst @@ -24,6 +24,14 @@ listed on this page. :PyPI page: :pypi:`bitbucket2github` +``bugwarrior`` +'''''''''''''' + + Pull tickets from github, bitbucket, and trac into `taskwarrior + `__ + +:PyPI page: :pypi:`bugwarrior` + ``forkfeed`` '''''''''''' From 3f476e6fa9f01d827afdb774c45f532c5aeea476 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 20 Dec 2011 02:39:01 +0000 Subject: [PATCH 043/129] Fixed rate limiting example in problems doc. --- doc/problems.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/problems.rst b/doc/problems.rst index 90021af..5fabddf 100644 --- a/doc/problems.rst +++ b/doc/problems.rst @@ -35,14 +35,14 @@ response from GitHub, here the user data of ``JNRowe``. Rate limiting ''''''''''''' -If rate limiting is enabled, with the ``requests_per_second`` when creating a -:class:`~github2.client.Github` object, then you'll see a ``WARNING`` level -message when a request has been delayed. +If rate limiting is enabled, with the ``requests_per_second`` parameter when +creating a :class:`~github2.client.Github` object, then you'll see a ``WARNING`` +level message when a request has been delayed. - >>> github = Github(requests_per_second=0.2, debug=True) + >>> github = Github(requests_per_second=0.2) >>> user = github.users.show("JNRowe") >>> user = github.users.show("JNRowe") - delaying API call 4.99773 + WARNING:github2.request:delaying API call 4.997032 second(s) Here we have defined a rate limit of one call every five seconds, and doing so has imposed an almost 5 second delay before completing the second request. From 62d95cca4eacfbd089796aaca23397903b14fc73 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 20 Dec 2011 02:39:43 +0000 Subject: [PATCH 044/129] Simplify testing of Python version. Also fixes an unnoticed stupid copy/paste bug. --- github2/core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/github2/core.py b/github2/core.py index 3308044..e2860cb 100644 --- a/github2/core.py +++ b/github2/core.py @@ -7,10 +7,10 @@ #: Running under Python 3 -PY3K = sys.version_info[0] == 3 and True or False +PY3K = sys.version_info[0] == 3 #: Running under Python 2.7, or newer -PY27 = sys.version_info[:2] == 3 and True or False +PY27 = sys.version_info[:2] >= (2, 7) GITHUB_DATE_FORMAT = "%Y/%m/%d %H:%M:%S %z" # We need to manually mangle the timezone for commit date formatting because it From 4b5edf4e349d7123d246c478d301023b1f38c9e6 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 20 Dec 2011 02:40:17 +0000 Subject: [PATCH 045/129] Don't repeatably call str.upper() when testing method name. --- github2/core.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/github2/core.py b/github2/core.py index e2860cb..cb75f9b 100644 --- a/github2/core.py +++ b/github2/core.py @@ -141,14 +141,14 @@ def make_request(self, command, *args, **kwargs): page = kwargs.pop("page", 1) if page and not page == 1: post_data["page"] = page - method = kwargs.get("method", "GET") - if method.upper() == "POST" or method.upper() == "GET" and post_data: + method = kwargs.get("method", "GET").upper() + if method == "POST" or method == "GET" and post_data: response = self.request.post(self.domain, command, *args, **post_data) - elif method.upper() == "PUT": + elif method == "PUT": response = self.request.put(self.domain, command, *args, **post_data) - elif method.upper() == "DELETE": + elif method == "DELETE": response = self.request.delete(self.domain, command, *args, **post_data) else: From 08480073f3e80655a7b97a6367b25389095aea14 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 20 Dec 2011 02:41:18 +0000 Subject: [PATCH 046/129] Correct docstring for teams.repositories. --- github2/teams.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github2/teams.py b/github2/teams.py index 859a40e..bd8c783 100644 --- a/github2/teams.py +++ b/github2/teams.py @@ -33,7 +33,7 @@ def members(self, team_id): datatype=User) def repositories(self, team_id): - """Get list of all team members + """Get list of all team repositories :param int team_id: team to get information for """ From 99a34823a34b63c55ece2ae95daf30145bdf4d54 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 20 Dec 2011 02:42:33 +0000 Subject: [PATCH 047/129] Added requires_auth decorator to team modifying methods. --- github2/teams.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/github2/teams.py b/github2/teams.py index bd8c783..1c5feda 100644 --- a/github2/teams.py +++ b/github2/teams.py @@ -1,4 +1,4 @@ -from github2.core import BaseData, GithubCommand, Attribute +from github2.core import BaseData, GithubCommand, Attribute, requires_auth from github2.repositories import Repository from github2.users import User @@ -40,6 +40,7 @@ def repositories(self, team_id): return self.get_values(str(team_id), "repositories", filter="repositories", datatype=Repository) + @requires_auth def add_project(self, team_id, project): """Add a project to a team @@ -52,6 +53,7 @@ def add_project(self, team_id, project): post_data={'name': project}, filter="repositories", datatype=Repository) + @requires_auth def remove_project(self, team_id, project): """Remove a project to a team From 5a6ff55d7675cbb3e9df6f18875caf848b65fbf7 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 20 Dec 2011 02:44:09 +0000 Subject: [PATCH 048/129] Very minor simplification of encode_authentication_data. --- github2/request.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/github2/request.py b/github2/request.py index d062a97..1b473fe 100644 --- a/github2/request.py +++ b/github2/request.py @@ -113,13 +113,12 @@ def __init__(self, username=None, api_token=None, url_prefix=None, ca_certs=digicert_ha_cert) def encode_authentication_data(self, extra_post_data): + post_data = {} if self.access_token: - post_data = {"access_token": self.access_token} + post_data["access_token"] = self.access_token elif self.username and self.api_token: - post_data = {"login": self.username, - "token": self.api_token} - else: - post_data = {} + post_data["login"] = self.username + post_data["token"] = self.api_token post_data.update(extra_post_data) return urlencode(post_data) From b0c12a731b59155c682aff644c9b3f64f36b3ab1 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 20 Dec 2011 04:41:13 +0000 Subject: [PATCH 049/129] Support the use of repeated keys in query strings. --- github2/request.py | 16 +++++--- tests/test_request.py | 85 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 80 insertions(+), 21 deletions(-) diff --git a/github2/request.py b/github2/request.py index d062a97..628aff5 100644 --- a/github2/request.py +++ b/github2/request.py @@ -113,14 +113,18 @@ def __init__(self, username=None, api_token=None, url_prefix=None, ca_certs=digicert_ha_cert) def encode_authentication_data(self, extra_post_data): + post_data = [] if self.access_token: - post_data = {"access_token": self.access_token} + post_data.append(("access_token", self.access_token)) elif self.username and self.api_token: - post_data = {"login": self.username, - "token": self.api_token} - else: - post_data = {} - post_data.update(extra_post_data) + post_data.append(("login", self.username)) + post_data.append(("token", self.api_token)) + for key, value in extra_post_data.items(): + if isinstance(value, list): + for elem in value: + post_data.append((key, elem)) + else: + post_data.append((key, value)) return urlencode(post_data) def get(self, *path_components): diff --git a/tests/test_request.py b/tests/test_request.py index 90849dc..031bc4f 100644 --- a/tests/test_request.py +++ b/tests/test_request.py @@ -1,31 +1,86 @@ import unittest -from nose.tools import (assert_equals, assert_true) +try: + from urllib.parse import parse_qs # For Python 3 +except ImportError: + try: + from urlparse import parse_qs + except ImportError: # For Python <2.6 + from cgi import parse_qs + +try: + from nose.tools import (assert_dict_contains_subset, assert_dict_equal) +except ImportError: # for Python <2.7 + import unittest2 + + _binding = unittest2.TestCase('run') + assert_dict_contains_subset = _binding.assertDictContainsSubset + assert_dict_equal = _binding.assertDictEqual + from github2 import request +def assert_params(first, second): + assert_dict_equal(first, parse_qs(second)) + + +def assert_params_contain(first, second): + assert_dict_contains_subset(first, parse_qs(second)) + + class TestAuthEncode(unittest.TestCase): """Test processing of authentication data""" def setUp(self): self.r = request.GithubRequest() def test_unauthenticated(self): - assert_equals('', self.r.encode_authentication_data({})) + assert_params({}, self.r.encode_authentication_data({})) def test_access_token(self): - self.r.access_token = 'hex string' - assert_equals('access_token=hex+string', - self.r.encode_authentication_data({})) - assert_true('access_token=hex+string' in - self.r.encode_authentication_data({'key': 'value'})) - self.r.access_token = None + try: + self.r.access_token = 'hex string' + assert_params({'access_token': ['hex string', ]}, + self.r.encode_authentication_data({})) + finally: + self.r.access_token = None def test_user_token(self): - self.r.username = 'user' - self.r.api_token = 'hex string' - assert_equals('login=user&token=hex+string', - self.r.encode_authentication_data({})) - assert_true('login=user&token=hex+string' in - self.r.encode_authentication_data({'key': 'value'})) - self.r.username = self.r.api_token = None + try: + self.r.username = 'user' + self.r.api_token = 'hex string' + token_params = {'login': ['user', ], 'token': ['hex string', ]} + assert_params(token_params, self.r.encode_authentication_data({})) + finally: + self.r.username = self.r.api_token = None + + +class TestParameterEncoding(unittest.TestCase): + def setUp(self): + self.r = request.GithubRequest() + self.params = { + 'key1': 'value1', + 'key2': 'value2', + } + + def test_no_parameters(self): + assert_params({}, self.r.encode_authentication_data({})) + + def test_parameters(self): + assert_params({'key1': ['value1', ], 'key2': ['value2', ]}, + self.r.encode_authentication_data(self.params)) + + def test_parameters_with_auth(self): + try: + self.r.username = 'user' + self.r.api_token = 'hex string' + assert_params({'key2': ['value2', ], 'login': ['user', ], + 'token': ['hex string', ], 'key1': ['value1', ]}, + self.r.encode_authentication_data(self.params)) + finally: + self.r.username = '' + self.r.api_token = '' + + def test_multivalue_parameters(self): + multivals = {'key': ['value1', 'value2']} + assert_params(multivals, self.r.encode_authentication_data(multivals)) From 05f4e79c8a48584b33883368a648dc40d67a126d Mon Sep 17 00:00:00 2001 From: James Rowe Date: Mon, 19 Dec 2011 20:54:11 +0000 Subject: [PATCH 050/129] Added method to add a new team. Thanks to Clint Savage, refs #69. --- github2/organizations.py | 18 +++++++++++++++++- ...-org,teams,6869b96ae6fbaa7511d92aa73803898b | 14 ++++++++++++++ ..._token=xxx,00192d3a6cc4fc297b5a9cb0742c3663 | 14 ++++++++++++++ tests/test_organizations.py | 17 +++++++++++++++++ 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 tests/data/github.com,api,v2,json,organizations,JNRowe-test-org,teams,6869b96ae6fbaa7511d92aa73803898b create mode 100644 tests/data/github.com,api,v2,json,teams,121678,repositories,access_token=xxx,00192d3a6cc4fc297b5a9cb0742c3663 diff --git a/github2/organizations.py b/github2/organizations.py index 25df990..0c8aa00 100644 --- a/github2/organizations.py +++ b/github2/organizations.py @@ -1,4 +1,5 @@ -from github2.core import BaseData, GithubCommand, Attribute, DateAttribute +from github2.core import (BaseData, GithubCommand, Attribute, DateAttribute, + requires_auth) from github2.repositories import Repository from github2.teams import Team from github2.users import User @@ -81,3 +82,18 @@ def teams(self, organization): """ return self.get_values(organization, 'teams', filter="teams", datatype=Team) + + @requires_auth + def add_team(self, organization, name, permission='pull', projects=None): + """Add a team to an organization + + :param str organization: organization to add team to + :param str team: name of team to add + :param str permission: permissions for team(push, pull or admin) + :param list projects: optional GitHub projects for this team + """ + team_data = {'team[name]': name, 'team[permission]': permission} + if projects: + team_data['team[repo_names][]'] = projects + return self.get_value(organization, 'teams', post_data=team_data, + method='POST', filter='team', datatype=Team) diff --git a/tests/data/github.com,api,v2,json,organizations,JNRowe-test-org,teams,6869b96ae6fbaa7511d92aa73803898b b/tests/data/github.com,api,v2,json,organizations,JNRowe-test-org,teams,6869b96ae6fbaa7511d92aa73803898b new file mode 100644 index 0000000..969ee88 --- /dev/null +++ b/tests/data/github.com,api,v2,json,organizations,JNRowe-test-org,teams,6869b96ae6fbaa7511d92aa73803898b @@ -0,0 +1,14 @@ +status: 200 +x-ratelimit-remaining: 60 +content-location: https://github.com/api/v2/json/organizations/JNRowe-test-org/teams +x-runtime: 20ms +content-length: 61 +server: nginx/1.0.4 +connection: keep-alive +x-ratelimit-limit: 58 +etag: "0ea8a446a00b4d7894676a34bd8d501f" +cache-control: private, max-age=0, must-revalidate +date: Mon, 19 Dec 2011 20:50:41 GMT +content-type: application/json; charset=utf-8 + +{"team":{"name":"team_pull","id":121678,"permission":"pull"}} diff --git a/tests/data/github.com,api,v2,json,teams,121678,repositories,access_token=xxx,00192d3a6cc4fc297b5a9cb0742c3663 b/tests/data/github.com,api,v2,json,teams,121678,repositories,access_token=xxx,00192d3a6cc4fc297b5a9cb0742c3663 new file mode 100644 index 0000000..c83a9c7 --- /dev/null +++ b/tests/data/github.com,api,v2,json,teams,121678,repositories,access_token=xxx,00192d3a6cc4fc297b5a9cb0742c3663 @@ -0,0 +1,14 @@ +status: 200 +x-ratelimit-remaining: 60 +content-location: https://github.com/api/v2/json/organizations/JNRowe-test-org/teams +x-runtime: 20ms +content-length: 676 +server: nginx/1.0.4 +connection: keep-alive +x-ratelimit-limit: 58 +etag: "397a2fcea970a6391b74eabcb62ed265" +cache-control: private, max-age=0, must-revalidate +date: Thu, 19 Dec 2011 20:50:41 GMT +content-type: application/json; charset=utf-8 + +{"repositories":[{"open_issues":0,"description":"","watchers":1,"forks":1,"has_issues":true,"has_downloads":true,"fork":false,"created_at":"2011/12/18 17:36:08 -0800","homepage":"","size":0,"private":false,"name":"test1","owner":"JNRowe-test-org","has_wiki":true,"url":"https://github.com/JNRowe-test-org/test1","organization":"JNRowe-test-org"},{"open_issues":0,"description":"","watchers":1,"forks":1,"has_issues":true,"has_downloads":true,"fork":false,"created_at":"2011/12/18 17:36:24 -0800","homepage":"","size":0,"private":false,"name":"test2","owner":"JNRowe-test-org","has_wiki":true,"url":"https://github.com/JNRowe-test-org/test2","organization":"JNRowe-test-org"}]} diff --git a/tests/test_organizations.py b/tests/test_organizations.py index f97b905..2f8d43f 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -29,3 +29,20 @@ def test_public_members(self): members = self.client.organizations.public_members('github') assert_equals(len(members), 35) assert_equals(members[2].name, 'Ben Burkert') + + +class OrganizationsEdits(utils.HttpMockAuthenticatedTestCase): + def test_add_team(self): + team = self.client.organizations.add_team('JNRowe-test-org', + 'test_pull', 'pull') + assert_equals(team.name, 'team_pull') + assert_equals(team.permission, 'pull') + + def test_add_team_with_repos(self): + projects = ['JNRowe-test-org/test1', 'JNRowe-test-org/test2'] + team = self.client.organizations.add_team('JNRowe-test-org', + 'test_push', 'push', projects) + + team_repos = self.client.teams.repositories(team.id) + assert_equals(['/'.join([x.organization, x.name]) for x in team_repos], + projects) From b77e3c91bf73b9dec9d69b43d8643f1490dd11b5 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Mon, 19 Dec 2011 20:55:58 +0000 Subject: [PATCH 051/129] Added method to add a new team member. Thanks to Clint Savage, refs #69. --- github2/teams.py | 13 ++++++++++++- ...121990,members,ef66ad4c5f8c1b21dc9bc8c54c9ec91e | 14 ++++++++++++++ tests/test_teams.py | 9 +++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 tests/data/github.com,api,v2,json,teams,121990,members,ef66ad4c5f8c1b21dc9bc8c54c9ec91e create mode 100644 tests/test_teams.py diff --git a/github2/teams.py b/github2/teams.py index 859a40e..175f1f6 100644 --- a/github2/teams.py +++ b/github2/teams.py @@ -1,4 +1,4 @@ -from github2.core import BaseData, GithubCommand, Attribute +from github2.core import BaseData, GithubCommand, Attribute, requires_auth from github2.repositories import Repository from github2.users import User @@ -32,6 +32,17 @@ def members(self, team_id): return self.get_values(str(team_id), "members", filter="users", datatype=User) + @requires_auth + def add_member(self, team_id, username): + """Add a new member to a team + + :param int team_id: team to add new member to + :param str username: GitHub username to add to team + """ + return self.get_values(str(team_id), 'members', method='POST', + post_data={'name': username}, filter='users', + datatype=User) + def repositories(self, team_id): """Get list of all team members diff --git a/tests/data/github.com,api,v2,json,teams,121990,members,ef66ad4c5f8c1b21dc9bc8c54c9ec91e b/tests/data/github.com,api,v2,json,teams,121990,members,ef66ad4c5f8c1b21dc9bc8c54c9ec91e new file mode 100644 index 0000000..10bd256 --- /dev/null +++ b/tests/data/github.com,api,v2,json,teams,121990,members,ef66ad4c5f8c1b21dc9bc8c54c9ec91e @@ -0,0 +1,14 @@ +status: 200 +x-ratelimit-remaining: 60 +content-location: https://github.com/api/v2/json/teams/121990/members +x-runtime: 20ms +content-length: 202 +server: nginx/1.0.4 +connection: keep-alive +x-ratelimit-limit: 58 +etag: "397a2fcea970a6391b74eabcb62ed265" +cache-control: private, max-age=0, must-revalidate +date: Thu, 19 Dec 2011 20:55:34 GMT +content-type: application/json; charset=utf-8 + +{"users":[{"name":"James Rowe","gravatar_id":"e40de1eb6e8a74cb96b3f07f3994f155","location":"Cambridge, UK","blog":"http://jnrowe.github.com/","type":"User","login":"JNRowe","email":"jnrowe@gmail.com"}]} diff --git a/tests/test_teams.py b/tests/test_teams.py new file mode 100644 index 0000000..85689aa --- /dev/null +++ b/tests/test_teams.py @@ -0,0 +1,9 @@ +from nose.tools import assert_equals + +import utils + + +class TeamEdits(utils.HttpMockAuthenticatedTestCase): + def test_add_member(self): + users = self.client.teams.add_member(121990, 'JNRowe') + assert_equals(users[0].login, 'JNRowe') From de1f059f7ff5b5a1f202c68441d748dd9e39baab Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 20 Dec 2011 05:51:50 +0000 Subject: [PATCH 052/129] Use system certificates database, if possible. Closes #68. --- doc/api/request.rst | 2 ++ github2/request.py | 28 ++++++++++++++++++++++++---- tests/utils.py | 2 +- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/doc/api/request.rst b/doc/api/request.rst index 395f39f..f58fd0a 100644 --- a/doc/api/request.rst +++ b/doc/api/request.rst @@ -10,6 +10,8 @@ Requests .. autodata:: GITHUB_URL +.. autodata:: SYSTEM_CERTS + .. autoexception:: GithubError .. autoclass:: GithubRequest diff --git a/github2/request.py b/github2/request.py index 1b473fe..abe3a11 100644 --- a/github2/request.py +++ b/github2/request.py @@ -1,8 +1,9 @@ import datetime import logging import re +import sys import time -import httplib2 + try: # For Python 3 from http.client import responses @@ -28,6 +29,8 @@ from cgi import parse_qs from urllib import urlencode, quote +import httplib2 + #: Hostname for API access GITHUB_URL = "https://github.com" @@ -35,6 +38,24 @@ #: Logger for requests module LOGGER = logging.getLogger('github2.request') +#: Whether github2 is using the system's certificates for SSL connections +SYSTEM_CERTS = not httplib2.CA_CERTS.startswith(path.dirname(httplib2.__file__)) +if not SYSTEM_CERTS and sys.platform.startswith('linux'): + for cert_file in ['/etc/ssl/certs/ca-certificates.crt', + '/etc/pki/tls/certs/ca-bundle.crt']: + if path.exists(cert_file): + httplib2.CA_CERTS = cert_file + SYSTEM_CERTS = True + break +elif not SYSTEM_CERTS and sys.platform.startswith('freebsd'): + if path.exists('/usr/local/share/certs/ca-root-nss.crt'): + httplib2.CA_CERTS = '/usr/local/share/certs/ca-root-nss.crt' + SYSTEM_CERTS = True +if SYSTEM_CERTS: + LOGGER.info('Using system certificates in %r', httplib2.CA_CERTS) +else: + LOGGER.warning('Using bundled certificates for HTTPS connections') + def charset_from_headers(headers): """Parse charset from headers @@ -105,12 +126,11 @@ def __init__(self, username=None, api_token=None, url_prefix=None, digicert_ha_cert = path.join(path.dirname(path.abspath(__file__)), "DigiCert_High_Assurance_EV_Root_CA.crt") if proxy_host is None: - self._http = httplib2.Http(cache=cache, ca_certs=digicert_ha_cert) + self._http = httplib2.Http(cache=cache) else: proxy_info = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, proxy_host, proxy_port) - self._http = httplib2.Http(proxy_info=proxy_info, cache=cache, - ca_certs=digicert_ha_cert) + self._http = httplib2.Http(proxy_info=proxy_info, cache=cache) def encode_authentication_data(self, extra_post_data): post_data = {} diff --git a/tests/utils.py b/tests/utils.py index 0657cfa..a1c32b4 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -25,7 +25,7 @@ class HttpMock(object): Implementation tests should never span network boundaries """ - def __init__(self, cache=None, timeout=None, proxy_info=None, ca_certs=None): + def __init__(self, cache=None, timeout=None, proxy_info=None): """Create a mock httplib.Http object .. attribute: called_with From d32273af8b67a671bab242c9808a309f07398108 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 20 Dec 2011 20:36:26 +0000 Subject: [PATCH 053/129] Fix for users unable to use system certificates. Regression that snuck in de1f059f7ff5b5a1f202c68441d748dd9e39baab. --- github2/request.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/github2/request.py b/github2/request.py index 3650265..21d73f0 100644 --- a/github2/request.py +++ b/github2/request.py @@ -123,14 +123,15 @@ def __init__(self, username=None, api_token=None, url_prefix=None, "api_version": self.api_version, "api_format": self.api_format, } - digicert_ha_cert = path.join(path.dirname(path.abspath(__file__)), - "DigiCert_High_Assurance_EV_Root_CA.crt") if proxy_host is None: self._http = httplib2.Http(cache=cache) else: proxy_info = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, proxy_host, proxy_port) self._http = httplib2.Http(proxy_info=proxy_info, cache=cache) + if not SYSTEM_CERTS: + self._http.ca_certs = path.join(path.dirname(path.abspath(__file__)), + "DigiCert_High_Assurance_EV_Root_CA.crt") def encode_authentication_data(self, extra_post_data): post_data = [] From ec5412d5ef15f841888f71676aeea2e1cb7cc206 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 21 Dec 2011 08:03:01 +0000 Subject: [PATCH 054/129] Added a link for finding the full history to NEWS. --- NEWS.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/NEWS.rst b/NEWS.rst index cebb8ac..2d98764 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -1,6 +1,11 @@ User-visible changes ==================== +This file lists only the most important changes that may be visible to users, +look at the `git repository`_ for the full project history. + +.. _git repository: https://github.com/ask/python-github2/ + .. contents:: 0.5.2 - 2011-09-02 From 98a96475f060b0a66fb5aa06258b1c8ce4d3c959 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 21 Dec 2011 08:09:26 +0000 Subject: [PATCH 055/129] Bumped version to 0.6.0. --- NEWS.rst | 6 ++++++ README.rst | 2 +- github2/__init__.py | 7 +++++-- github2/_version.py | 9 +++++++++ 4 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 github2/_version.py diff --git a/NEWS.rst b/NEWS.rst index 2d98764..54c693b 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -8,6 +8,12 @@ look at the `git repository`_ for the full project history. .. contents:: +0.6.0 - 2011-12-21 +------------------ + +* Now uses system certificates for SSL validation where possible +* Python 3 is supported directly, without a separate ``2to3`` build step + 0.5.2 - 2011-09-02 ------------------ diff --git a/README.rst b/README.rst index 0746644..804dc81 100644 --- a/README.rst +++ b/README.rst @@ -4,7 +4,7 @@ github2 - Github API v2 library for Python. :Authors: Ask Solem (askh@opera.com) -:Version: 0.5.2 +:Version: 0.6.0 This is a Python library implementing all of the features available in version 2 of the `Github API`_. diff --git a/github2/__init__.py b/github2/__init__.py index ce95e04..30d323e 100644 --- a/github2/__init__.py +++ b/github2/__init__.py @@ -1,7 +1,10 @@ "Github API v2 library for Python" -VERSION = (0, 5, 2) + +from github2 import _version + +VERSION = _version.tuple __author__ = "Ask Solem" __contact__ = "askh@opera.com" __homepage__ = "http://github.com/ask/python-github2" -__version__ = ".".join(map(str, VERSION)) +__version__ = _version.dotted diff --git a/github2/_version.py b/github2/_version.py new file mode 100644 index 0000000..bf9f4df --- /dev/null +++ b/github2/_version.py @@ -0,0 +1,9 @@ +# This is github2 version 0.6.0 (2011-12-21) +# pylint: disable=C0103, C0111, C0121, W0622 + +dotted = "0.6.0" +libtool = "6:20" +hex = 0x000600 +date = "2011-12-21" +tuple = (0, 6, 0) +web = "github/0.6.0" From 57450e7473303f28d9030e8897ed61f778977883 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 21 Dec 2011 11:56:48 +0000 Subject: [PATCH 056/129] Minor rewording in bugs doc. --- doc/bugs.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/bugs.rst b/doc/bugs.rst index 2226397..6105987 100644 --- a/doc/bugs.rst +++ b/doc/bugs.rst @@ -24,7 +24,7 @@ or a deficiency in the API. You can check which URLs your code is requesting by enabling :data:`~logging.DEBUG` level output in your logger, see the -:mod:`python:logging` for more information. +:mod:`python:logging` documentation for details. If the bug you've found is outside the reach of this project an issue should be opened in GitHub's `API support forum`_. It doesn't hurt to `report an issue`_ @@ -45,10 +45,10 @@ A good bug report will have the following: * A minimal test-case to reproduce the error * A list of solutions you've already tried -Simon Tatham has an excellent essay titled `How to Report Bugs Effectively`_, +Simon Tatham wrote aa fantastic essay titled `How to Report Bugs Effectively`_, with some excellent tips on filing good bug reports. -.. [#] The content of :data:`github2.__version__` if you're using an official +.. [#] The value of :data:`github2.__version__` if you're using an official release, or the output of :command:`git describe` if you're using the git repository directly. From baa6a04ac6d5d1c207796a8f9eaa0b8c4fbe9332 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 21 Dec 2011 11:57:17 +0000 Subject: [PATCH 057/129] Fixed broken Python 2.4 handling in github2.requests. --- github2/request.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/github2/request.py b/github2/request.py index 21d73f0..d3c25a2 100644 --- a/github2/request.py +++ b/github2/request.py @@ -8,11 +8,12 @@ # For Python 3 from http.client import responses except ImportError: # For Python 2.5-2.7 - from httplib import responses -except ImportError: # For Python 2.4 - from BaseHTTPServer import BaseHTTPRequestHandler - responses = dict([(k, v[0]) - for k, v in BaseHTTPRequestHandler.responses.items()]) + try: + from httplib import responses + except ImportError: # For Python 2.4 + from BaseHTTPServer import BaseHTTPRequestHandler + responses = dict([(k, v[0]) + for k, v in BaseHTTPRequestHandler.responses.items()]) try: import json as simplejson # For Python 2.6+ except ImportError: From 4c2b325f387794be21a6fb30113fcb89b9ddd413 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 14 Jan 2012 12:19:30 +0000 Subject: [PATCH 058/129] Skip unrecognised HTTP status lookups in HttpError. Closes #71, thanks to Ben Olive for the report. --- github2/request.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github2/request.py b/github2/request.py index d3c25a2..297a4f1 100644 --- a/github2/request.py +++ b/github2/request.py @@ -89,7 +89,7 @@ def __init__(self, message, content, code): self.message = message self.content = content self.code = code - if code and responses: + if code in responses: self.code_reason = responses[code] else: self.code_reason = "" From dcd608886996528f6b75a0f80324b9807f08847d Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 14 Jan 2012 12:20:06 +0000 Subject: [PATCH 059/129] Converted remaining warnings users to logging. --- github2/core.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/github2/core.py b/github2/core.py index cb75f9b..b15161f 100644 --- a/github2/core.py +++ b/github2/core.py @@ -1,11 +1,13 @@ +import logging import sys -from warnings import warn - from datetime import datetime from dateutil import (parser, tz) +#: Logger for core module +LOGGER = logging.getLogger('github2.core') + #: Running under Python 3 PY3K = sys.version_info[0] == 3 @@ -281,8 +283,9 @@ def __getitem__(self, key): This is here purely to maintain compatibility when switching ``dict`` responses to ``BaseData`` derived objects. """ - warn("Subscript access on %r is deprecated, use object attributes" - % self.__class__.__name__, DeprecationWarning) + LOGGER.warning("Subscript access on %r is deprecated, use object " + "attributes" % self.__class__.__name__, + DeprecationWarning) if not key in self._meta.keys(): raise KeyError(key) return getattr(self, key) @@ -292,8 +295,9 @@ def __setitem__(self, key, value): :see: ``BaseData.__getitem__`` """ - warn("Subscript access on %r is deprecated, use object attributes" - % self.__class__.__name__, DeprecationWarning) + LOGGER.warning("Subscript access on %r is deprecated, use object " + "attributes" % self.__class__.__name__, + DeprecationWarning) if not key in self._meta.keys(): raise KeyError(key) setattr(self, key, value) From e3a239a025e992932a2a5d21122f7159ae95e2e0 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 14 Jan 2012 12:26:00 +0000 Subject: [PATCH 060/129] Fixed silly DST straddling delay bug. Incredibly unlikely to occur, but annoying as hell if it did ;) --- github2/request.py | 4 ++-- tests/test_unit.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/github2/request.py b/github2/request.py index 297a4f1..3b6ba47 100644 --- a/github2/request.py +++ b/github2/request.py @@ -170,7 +170,7 @@ def delete(self, *path_components, **extra_post_data): def make_request(self, path, extra_post_data=None, method="GET"): if self.delay: - since_last = (datetime.datetime.now() - self.last_request) + since_last = (datetime.datetime.utcnow() - self.last_request) since_last_in_seconds = (since_last.days * 24 * 60 * 60) + since_last.seconds + (since_last.microseconds/1000000.0) if since_last_in_seconds < self.delay: duration = self.delay - since_last_in_seconds @@ -182,7 +182,7 @@ def make_request(self, path, extra_post_data=None, method="GET"): result = self.raw_request(url, extra_post_data, method=method) if self.delay: - self.last_request = datetime.datetime.now() + self.last_request = datetime.datetime.utcnow() return result def raw_request(self, url, extra_post_data, method="GET"): diff --git a/tests/test_unit.py b/tests/test_unit.py index b90a0bc..c72f3ef 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -28,9 +28,9 @@ def test_delays(self): """Test call delay is at least one second""" client = Github(requests_per_second=.5) client.users.show('defunkt') - start = datetime.datetime.now() + start = datetime.datetime.utcnow() client.users.show('mojombo') - end = datetime.datetime.now() + end = datetime.datetime.utcnow() delta = end - start delta_seconds = delta.days * 24 * 60 * 60 + delta.seconds From 61b572e516b2079f1eac12c9732b47bd71b0fc5c Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 14 Jan 2012 12:32:34 +0000 Subject: [PATCH 061/129] Scrubbed unused imports in tests. --- tests/test_repositories.py | 1 - tests/test_user.py | 2 -- 2 files changed, 3 deletions(-) diff --git a/tests/test_repositories.py b/tests/test_repositories.py index 001fe61..b55f4d5 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -2,7 +2,6 @@ from nose.tools import assert_equals -from github2.client import Github import utils diff --git a/tests/test_user.py b/tests/test_user.py index 3b0f8c3..d61794b 100644 --- a/tests/test_user.py +++ b/tests/test_user.py @@ -2,8 +2,6 @@ from nose.tools import (assert_equals, assert_false, assert_true) -from github2.client import Github - import utils From 6a4380053566e56d1dfd352a1f6de72f13ba17e5 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 14 Jan 2012 12:35:58 +0000 Subject: [PATCH 062/129] Bump copyright years. --- doc/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index e54a0cc..1fb7895 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -46,7 +46,7 @@ # General information about the project. project = u'github2' -copyright = u'2011, Ask Solem' +copyright = u'2009-2012, Ask Solem' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the From 405dbed3397a856ada37840148f6eee25d757a01 Mon Sep 17 00:00:00 2001 From: modocache Date: Thu, 19 Jan 2012 00:19:56 +0900 Subject: [PATCH 063/129] Added support for Github Enterprise hosts. Allows users to pass a parameter specifying the host to send requests to. Closes #72. --- AUTHORS | 1 + doc/api/client.rst | 8 ++++++++ github2/client.py | 5 +++-- github2/request.py | 10 +++++++--- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/AUTHORS b/AUTHORS index 66d4ec9..99f5070 100644 --- a/AUTHORS +++ b/AUTHORS @@ -28,3 +28,4 @@ Christopher MacGown Rok Garbas Ionuț Arțăriși Stéphane Angel +modocache diff --git a/doc/api/client.rst b/doc/api/client.rst index 4edc07b..4954148 100644 --- a/doc/api/client.rst +++ b/doc/api/client.rst @@ -50,4 +50,12 @@ given, is 8080:: >>> github = Github(username="ask", api_token=".......", ... proxy_host="my.proxy.com", proxy_port=9000) +You may specify a GitHub Enterprise URL by passing in the ``github_url`` +setting. If you do not specify ``github_url``, requests will be made to +https://github.com/. + + >>> from github2.client import Github + >>> github = Github(username="modocache", api_token=".......", + ... github_url="http://git.gree-dev.net/") + .. _OAuth service: http://develop.github.com/p/oauth.html diff --git a/github2/client.py b/github2/client.py index a26210d..f761b62 100644 --- a/github2/client.py +++ b/github2/client.py @@ -12,7 +12,7 @@ class Github(object): def __init__(self, username=None, api_token=None, requests_per_second=None, access_token=None, cache=None, proxy_host=None, - proxy_port=8080): + proxy_port=8080, github_url=None): """ An interface to GitHub's API: http://develop.github.com/ @@ -44,7 +44,8 @@ def __init__(self, username=None, api_token=None, requests_per_second=None, requests_per_second=requests_per_second, access_token=access_token, cache=cache, proxy_host=proxy_host, - proxy_port=proxy_port) + proxy_port=proxy_port, + github_url=github_url) self.issues = Issues(self.request) self.users = Users(self.request) self.repos = Repositories(self.request) diff --git a/github2/request.py b/github2/request.py index 3b6ba47..d3d2103 100644 --- a/github2/request.py +++ b/github2/request.py @@ -34,7 +34,7 @@ #: Hostname for API access -GITHUB_URL = "https://github.com" +DEFAULT_GITHUB_URL = "https://github.com" #: Logger for requests module LOGGER = logging.getLogger('github2.request') @@ -96,7 +96,6 @@ def __init__(self, message, content, code): class GithubRequest(object): - github_url = GITHUB_URL url_format = "%(github_url)s/api/%(api_version)s/%(api_format)s" api_version = "v2" api_format = "json" @@ -104,7 +103,8 @@ class GithubRequest(object): def __init__(self, username=None, api_token=None, url_prefix=None, requests_per_second=None, access_token=None, - cache=None, proxy_host=None, proxy_port=None): + cache=None, proxy_host=None, proxy_port=None, + github_url=None): """Make an API request. :see: :class:`github2.client.Github` @@ -113,6 +113,10 @@ def __init__(self, username=None, api_token=None, url_prefix=None, self.api_token = api_token self.access_token = access_token self.url_prefix = url_prefix + if github_url is None: + self.github_url = DEFAULT_GITHUB_URL + else: + self.github_url = github_url if requests_per_second is None: self.delay = 0 else: From 4bb1f50ce0bf7bd16966d0babce67e62194e31fa Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 18 Jan 2012 17:58:59 +0000 Subject: [PATCH 064/129] More silly little PEP-8 fixes. This is what pre-commit hooks supposed to be used for ;) --- github2/bin/manage_collaborators.py | 18 ++++++++++++------ github2/core.py | 10 ++++++---- tests/test_charset_header.py | 1 + tests/test_commits.py | 6 ++++-- tests/test_date_handling.py | 1 + tests/test_organizations.py | 3 ++- tests/test_pull_requests.py | 3 ++- tests/test_repositories.py | 6 ++++-- tests/test_tz_aware_date_handling.py | 2 +- 9 files changed, 33 insertions(+), 17 deletions(-) diff --git a/github2/bin/manage_collaborators.py b/github2/bin/manage_collaborators.py index 821e89d..3efafee 100755 --- a/github2/bin/manage_collaborators.py +++ b/github2/bin/manage_collaborators.py @@ -58,11 +58,14 @@ def parse_commandline(): if len(args) not in [1, 2]: parser.error('wrong number of arguments') if (len(args) == 1 and args[0] in ['add', 'remove']): - parser.error('%r needs a collaborator name as second parameter\n' % args[0]) + parser.error('%r needs a collaborator name as second parameter\n' + % args[0]) elif (len(args) == 1 and args[0] != 'list'): - parser.error('unknown command %r. Try "list", "add" or "remove"\n' % args[0]) + parser.error('unknown command %r. Try "list", "add" or "remove"\n' + % args[0]) if (len(args) == 2 and args[0] not in ['add', 'remove']): - parser.error('unknown command %r. Try "list", "add" or "remove"\n' % args[0]) + parser.error('unknown command %r. Try "list", "add" or "remove"\n' + % args[0]) if not options.login: parser.error('you must provide --login information\n') @@ -88,12 +91,15 @@ def main(): datefmt="%Y-%m-%dT%H:%M:%S") if len(args) == 1: for repos in github.repos.list(options.account): - fullreposname = github.project_for_user_repo(options.account, repos.name) - print_("%s: %s" % (repos.name, ' '.join(github.repos.list_collaborators(fullreposname)))) + fullreposname = github.project_for_user_repo(options.account, + repos.name) + collabs = github.repos.list_collaborators(fullreposname) + print_("%s: %s" % (repos.name, ' '.join(collabs))) elif len(args) == 2: command, collaborator = args for repos in github.repos.list(options.account): - fullreposname = github.project_for_user_repo(options.account, repos.name) + fullreposname = github.project_for_user_repo(options.account, + repos.name) if collaborator in github.repos.list_collaborators(fullreposname): if command == 'remove': github.repos.remove_collaborator(repos.name, collaborator) diff --git a/github2/core.py b/github2/core.py index b15161f..60da833 100644 --- a/github2/core.py +++ b/github2/core.py @@ -167,7 +167,8 @@ def get_value(self, *args, **kwargs): # unicode keys are not accepted as kwargs by python, until 2.7: # http://bugs.python.org/issue2646 # So we make a local dict with the same keys but as strings: - return datatype(**dict((str(k), v) for (k, v) in value.items())) + return datatype(**dict((str(k), v) + for (k, v) in value.items())) else: return datatype(**value) return value @@ -177,9 +178,10 @@ def get_values(self, *args, **kwargs): values = self.make_request(*args, **kwargs) if datatype: if not PY27: - # Same as above, unicode keys will blow up in **args, so we need to - # create a new 'values' dict with string keys - return [datatype(**dict((str(k), v) for (k, v) in value.items())) + # Same as above, unicode keys will blow up in **args, so we + # need to create a new 'values' dict with string keys + return [datatype(**dict((str(k), v) + for (k, v) in value.items())) for value in values] else: return [datatype(**value) for value in values] diff --git a/tests/test_charset_header.py b/tests/test_charset_header.py index b495bfc..40aff70 100644 --- a/tests/test_charset_header.py +++ b/tests/test_charset_header.py @@ -7,6 +7,7 @@ def no_match_test(): d = {} assert_equals("ascii", charset_from_headers(d)) + def utf_test(): d = {'content-type': 'application/json; charset=utf-8'} assert_equals("utf-8", charset_from_headers(d)) diff --git a/tests/test_commits.py b/tests/test_commits.py index 337bffb..5d4ee8e 100644 --- a/tests/test_commits.py +++ b/tests/test_commits.py @@ -8,6 +8,7 @@ class CommitProperties(utils.HttpMockTestCase): """Test commit property handling""" commit_id = '1c83cde9b5a7c396a01af1007fb7b88765b9ae45' + def test_commit(self): commit = self.client.commits.show('ask/python-github2', self.commit_id) assert_equals(commit.message, @@ -25,8 +26,8 @@ def test_commit(self): assert_equals(commit.committer['login'], 'JNRowe') assert_equals(commit.added, None) assert_equals(commit.removed, None) - assert_equals(commit.modified[0]['filename'], 'github2/bin/manage_collaborators.py') - + assert_equals(commit.modified[0]['filename'], + 'github2/bin/manage_collaborators.py') def test_repr(self): commit = self.client.commits.show('ask/python-github2', self.commit_id) @@ -36,6 +37,7 @@ def test_repr(self): class CommitsQueries(utils.HttpMockTestCase): """Test commit querying""" + def test_list(self): commits = self.client.commits.list('JNRowe/misc-overlay') assert_equals(len(commits), 35) diff --git a/tests/test_date_handling.py b/tests/test_date_handling.py index dcfea34..fabc8d5 100644 --- a/tests/test_date_handling.py +++ b/tests/test_date_handling.py @@ -114,6 +114,7 @@ def test_datetime_to_commitdate(): assert_equals(datetime_to_commitdate(dt(2011, 4, 9, 9, 53, 0)), '2011-04-09T09:53:00-07:00') + def test_isodate_to_datetime(): assert_equals(string_to_datetime('2011-05-22T00:24:15Z'), dt(2011, 5, 22, 0, 24, 15)) diff --git a/tests/test_organizations.py b/tests/test_organizations.py index dee751e..9f4e56b 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -63,7 +63,8 @@ def test_add_team(self): def test_add_team_with_repos(self): projects = ['JNRowe-test-org/test1', 'JNRowe-test-org/test2'] team = self.client.organizations.add_team('JNRowe-test-org', - 'test_push', 'push', projects) + 'test_push', 'push', + projects) team_repos = self.client.teams.repositories(team.id) assert_equals(['/'.join([x.organization, x.name]) for x in team_repos], diff --git a/tests/test_pull_requests.py b/tests/test_pull_requests.py index 129e502..50197ce 100644 --- a/tests/test_pull_requests.py +++ b/tests/test_pull_requests.py @@ -52,7 +52,8 @@ class PullRequestQueries(utils.HttpMockTestCase): def test_list(self): pull_requests = self.client.pull_requests.list('ask/python-github2') assert_equals(len(pull_requests), 1) - assert_equals(pull_requests[0].title, 'Pagination support for commits.') + assert_equals(pull_requests[0].title, + 'Pagination support for commits.') def test_list_with_page(self): pull_requests = self.client.pull_requests.list('robbyrussell/oh-my-zsh', diff --git a/tests/test_repositories.py b/tests/test_repositories.py index b55f4d5..fc5f6f4 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -95,12 +95,14 @@ def test_languages(self): def test_tags(self): tags = self.client.repos.tags('ask/python-github2') assert_equals(len(tags), 7) - assert_equals(tags['0.4.1'], '96b0a41dd249c521323700bc11a0a721a7c9e642') + assert_equals(tags['0.4.1'], + '96b0a41dd249c521323700bc11a0a721a7c9e642') def test_branches(self): branches = self.client.repos.branches('ask/python-github2') assert_equals(len(branches), 1) - assert_equals(branches['master'], '1c83cde9b5a7c396a01af1007fb7b88765b9ae45') + assert_equals(branches['master'], + '1c83cde9b5a7c396a01af1007fb7b88765b9ae45') def test_watchers(self): watchers = self.client.repos.watchers('ask/python-github2') diff --git a/tests/test_tz_aware_date_handling.py b/tests/test_tz_aware_date_handling.py index 4e4f6eb..ccc224f 100644 --- a/tests/test_tz_aware_date_handling.py +++ b/tests/test_tz_aware_date_handling.py @@ -16,7 +16,7 @@ def setup_module(): def teardown_module(): - """Disable timezone-aware datetime handling when finished with this module""" + """Disable timezone-aware datetime handling when tests have completed""" core.NAIVE = True From f6c908faa49bb013e529da2305674846e2bc440d Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 18 Jan 2012 18:00:09 +0000 Subject: [PATCH 065/129] Simplify delay time calculation. Would still be far easier timedelta.total_seconds(), but Python <2.7 compatibility denies us that luxury. --- github2/request.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/github2/request.py b/github2/request.py index d3d2103..2d4b584 100644 --- a/github2/request.py +++ b/github2/request.py @@ -175,10 +175,9 @@ def delete(self, *path_components, **extra_post_data): def make_request(self, path, extra_post_data=None, method="GET"): if self.delay: since_last = (datetime.datetime.utcnow() - self.last_request) - since_last_in_seconds = (since_last.days * 24 * 60 * 60) + since_last.seconds + (since_last.microseconds/1000000.0) - if since_last_in_seconds < self.delay: - duration = self.delay - since_last_in_seconds - LOGGER.warning("delaying API call %s second(s)", duration) + if since_last.days == 0 and since_last.seconds < self.delay: + duration = self.delay - since_last.seconds + LOGGER.warning("delaying API call %g second(s)", duration) time.sleep(duration) extra_post_data = extra_post_data or {} From 95af393c7ad04a5ef33d2aee29e8c0f504e187c9 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 18 Jan 2012 18:01:21 +0000 Subject: [PATCH 066/129] Added test for host URL propagation. --- tests/test_unit.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_unit.py b/tests/test_unit.py index c72f3ef..76c637a 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -22,6 +22,16 @@ def test_issue(self): assert_equals(str, type(repr(i))) +class HostSetting(unittest.TestCase): + def test_default_host(self): + client = Github() + assert_equals(client.request.github_url, 'https://github.com') + + def test_non_standard_host(self): + client = Github(github_url="http://git.gree-dev.net/") + assert_equals(client.request.github_url, 'http://git.gree-dev.net/') + + class RateLimits(utils.HttpMockTestCase): """Test API rate-limitting""" def test_delays(self): From 478e2a38ef13956c7902374c77d44c77adbb7168 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 18 Jan 2012 18:54:47 +0000 Subject: [PATCH 067/129] Don't override httplib2 certificates at module level. This creates problems when other parts of a runtime are using httplib2 with custom bundles. --- github2/request.py | 11 ++++++----- tests/utils.py | 3 ++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/github2/request.py b/github2/request.py index 2d4b584..0019623 100644 --- a/github2/request.py +++ b/github2/request.py @@ -45,17 +45,19 @@ for cert_file in ['/etc/ssl/certs/ca-certificates.crt', '/etc/pki/tls/certs/ca-bundle.crt']: if path.exists(cert_file): - httplib2.CA_CERTS = cert_file + CA_CERTS = cert_file SYSTEM_CERTS = True break elif not SYSTEM_CERTS and sys.platform.startswith('freebsd'): if path.exists('/usr/local/share/certs/ca-root-nss.crt'): - httplib2.CA_CERTS = '/usr/local/share/certs/ca-root-nss.crt' + CA_CERTS = '/usr/local/share/certs/ca-root-nss.crt' SYSTEM_CERTS = True if SYSTEM_CERTS: LOGGER.info('Using system certificates in %r', httplib2.CA_CERTS) else: LOGGER.warning('Using bundled certificates for HTTPS connections') + CA_CERTS = path.join(path.dirname(path.abspath(__file__)), + "DigiCert_High_Assurance_EV_Root_CA.crt") def charset_from_headers(headers): @@ -134,9 +136,8 @@ def __init__(self, username=None, api_token=None, url_prefix=None, proxy_info = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, proxy_host, proxy_port) self._http = httplib2.Http(proxy_info=proxy_info, cache=cache) - if not SYSTEM_CERTS: - self._http.ca_certs = path.join(path.dirname(path.abspath(__file__)), - "DigiCert_High_Assurance_EV_Root_CA.crt") + self._http.ca_certs = CA_CERTS + def encode_authentication_data(self, extra_post_data): post_data = [] diff --git a/tests/utils.py b/tests/utils.py index a1c32b4..cbd41cc 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -25,7 +25,8 @@ class HttpMock(object): Implementation tests should never span network boundaries """ - def __init__(self, cache=None, timeout=None, proxy_info=None): + def __init__(self, cache=None, timeout=None, proxy_info=None, + ca_certs=None): """Create a mock httplib.Http object .. attribute: called_with From a7e495f306fdf69ce81109b92e41f0014e104119 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 18 Jan 2012 18:56:25 +0000 Subject: [PATCH 068/129] Append 422 status to HTTP responses dict. --- github2/request.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/github2/request.py b/github2/request.py index 0019623..3066702 100644 --- a/github2/request.py +++ b/github2/request.py @@ -60,6 +60,11 @@ "DigiCert_High_Assurance_EV_Root_CA.crt") +# Common missing entries from the HTTP status code dict, basically anything +# GitHub reports that isn't basic HTTP/1.1. +responses[422] = 'Unprocessable Entity' + + def charset_from_headers(headers): """Parse charset from headers From 3bd621cddefc55acb34cf8d55ba58d5061b332ed Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 18 Jan 2012 19:05:34 +0000 Subject: [PATCH 069/129] Warn about bundled certs on creation not import. --- github2/request.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/github2/request.py b/github2/request.py index 3066702..5c9f555 100644 --- a/github2/request.py +++ b/github2/request.py @@ -52,10 +52,7 @@ if path.exists('/usr/local/share/certs/ca-root-nss.crt'): CA_CERTS = '/usr/local/share/certs/ca-root-nss.crt' SYSTEM_CERTS = True -if SYSTEM_CERTS: - LOGGER.info('Using system certificates in %r', httplib2.CA_CERTS) else: - LOGGER.warning('Using bundled certificates for HTTPS connections') CA_CERTS = path.join(path.dirname(path.abspath(__file__)), "DigiCert_High_Assurance_EV_Root_CA.crt") @@ -142,7 +139,10 @@ def __init__(self, username=None, api_token=None, url_prefix=None, proxy_host, proxy_port) self._http = httplib2.Http(proxy_info=proxy_info, cache=cache) self._http.ca_certs = CA_CERTS - + if SYSTEM_CERTS: + LOGGER.info('Using system certificates in %r', CA_CERTS) + else: + LOGGER.warning('Using bundled certificate for HTTPS connections') def encode_authentication_data(self, extra_post_data): post_data = [] From b08b9b78664bfbf462ca722f5b5dedca7e441631 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 18 Jan 2012 19:06:30 +0000 Subject: [PATCH 070/129] Added warning for unknown HTTP status. --- github2/request.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/github2/request.py b/github2/request.py index 5c9f555..d6190e2 100644 --- a/github2/request.py +++ b/github2/request.py @@ -96,7 +96,8 @@ def __init__(self, message, content, code): if code in responses: self.code_reason = responses[code] else: - self.code_reason = "" + self.code_reason = "" + LOGGER.warning('Unknown HTTP status %r, please file an issue', code) class GithubRequest(object): From 6f8131301bcb36f624f13b09f1b588c4c7cf4b14 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 9 Feb 2012 11:01:20 +0000 Subject: [PATCH 071/129] Ignore .pyo files. Test runner is completing a run with -O too now. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index de35dbe..ea2d6d3 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ .noseids .ropeproject/ .tox/ -*.pyc +*.py[co] *~ *.sqlite *.sqlite-journal From c22e2be078aefefba8113fc343e371b3d8e30ed4 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 9 Feb 2012 11:06:13 +0000 Subject: [PATCH 072/129] Added Repository source attribute. --- github2/repositories.py | 1 + tests/test_repositories.py | 1 + 2 files changed, 2 insertions(+) diff --git a/github2/repositories.py b/github2/repositories.py index cbd9ad4..89f8e57 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -24,6 +24,7 @@ class Repository(BaseData): has_issues = Attribute("If True, this repository has an issue tracker.") language = Attribute("Primary language for the repository.") parent = Attribute("The parent project of this fork.") + source = Attribute("The root project of this fork") def _project(self): return self.owner + "/" + self.name diff --git a/tests/test_repositories.py b/tests/test_repositories.py index fc5f6f4..63f39c0 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -48,6 +48,7 @@ def test_fork_properties(self): assert_equals(repo.forks, 0) assert_equals(repo.fork, True) assert_equals(repo.parent, 'ask/python-github2') + assert_equals(repo.source, 'ask/python-github2') class RepoQueries(utils.HttpMockTestCase): From 95cc0d93cc0b5ff6ba55ce9b1e9a6e647433611e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 9 Feb 2012 11:07:39 +0000 Subject: [PATCH 073/129] [QA] Silly typo. --- github2/request.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github2/request.py b/github2/request.py index d6190e2..b8588de 100644 --- a/github2/request.py +++ b/github2/request.py @@ -77,7 +77,7 @@ def charset_from_headers(headers): class GithubError(Exception): - """An error occured when making a request to the Github API.""" + """An error occurred when making a request to the Github API.""" class HttpError(RuntimeError): From 0f672e72a1e3e18ba5d843723d77cd2c39d980ff Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 10 Feb 2012 14:18:54 +0000 Subject: [PATCH 074/129] Added support for mangling SSH keys. Refs #73. --- doc/api/users.rst | 2 ++ github2/users.py | 35 +++++++++++++++++++ ...token=xxx,f95947b79ef9d668b2ebac9a591a2a36 | 16 +++++++++ tests/test_user.py | 4 +++ 4 files changed, 57 insertions(+) create mode 100644 tests/data/github.com,api,v2,json,user,keys,access_token=xxx,f95947b79ef9d668b2ebac9a591a2a36 diff --git a/doc/api/users.rst b/doc/api/users.rst index 36f086d..052092a 100644 --- a/doc/api/users.rst +++ b/doc/api/users.rst @@ -13,6 +13,8 @@ Users .. autoclass:: Users(type) +.. autoclass:: Key(type) + Examples -------- diff --git a/github2/users.py b/github2/users.py index 7dba3e6..f2282b2 100644 --- a/github2/users.py +++ b/github2/users.py @@ -7,6 +7,15 @@ enhanced_by_auth, requires_auth) +class Key(BaseData): + id = Attribute('The key id') + key = Attribute('The SSH key data') + title = Attribute('The title for the SSH key') + + def __repr__(self): + return "" % self.id + + class User(BaseData): id = Attribute("The user id") login = Attribute("The login username") @@ -102,3 +111,29 @@ def unfollow(self, other_user): :param str other_user: Github user name """ return self.get_values("unfollow", other_user, method="POST") + + @requires_auth + def list_keys(self): + """Get list of SSH keys for the authenticated user""" + return self.get_values('keys', filter='public_keys', datatype=Key) + + @requires_auth + def add_key(self, key, title=''): + """Add a SSH key for the authenticated user + + :param str key: SSH key identifier + :param str title: Optional title for the SSH key + """ + return self.get_values("key/add", + post_data={'key': key, 'title': title}, + method="POST", filter='public_keys', + datatype=Key) + + @requires_auth + def remove_key(self, key_id): + """Remove a SSH key for the authenticated user + + :param int key_id: SSH key's GitHub identifier + """ + return self.get_values('key/remove', post_data={'id': str(key_id)}, + filter='public_keys', datatype=Key) diff --git a/tests/data/github.com,api,v2,json,user,keys,access_token=xxx,f95947b79ef9d668b2ebac9a591a2a36 b/tests/data/github.com,api,v2,json,user,keys,access_token=xxx,f95947b79ef9d668b2ebac9a591a2a36 new file mode 100644 index 0000000..ef84a1d --- /dev/null +++ b/tests/data/github.com,api,v2,json,user,keys,access_token=xxx,f95947b79ef9d668b2ebac9a591a2a36 @@ -0,0 +1,16 @@ +status: 200 +x-ratelimit-remaining: 60 +content-location: https://github.com/api/v2/json/user/keys?access_token=xxx +-content-encoding: gzip +connection: keep-alive +content-length: 94 +server: nginx/1.0.4 +x-runtime: 7 +x-ratelimit-limit: 60 +etag: "1df3e8616495dcf01a4fb79fa450c544" +cache-control: private, max-age=0, must-revalidate +date: Fri, 10 Feb 2012 13:53:29 GMT +x-frame-options: deny +content-type: application/json; charset=utf-8 + +{"public_keys":[{"title":"My sekret key","id":1337,"key":"ssh-rsa DoYouSee key@example.com"}]} diff --git a/tests/test_user.py b/tests/test_user.py index d61794b..aff6ad5 100644 --- a/tests/test_user.py +++ b/tests/test_user.py @@ -62,6 +62,10 @@ def test_is_authenticated(self): user = self.client.users.show('') assert_true(user.is_authenticated() is True) + def test_list_keys(self): + keys = self.client.users.list_keys() + assert_equals(keys[0].id, 1337) + class AuthenticatedUserProperties(utils.HttpMockAuthenticatedTestCase): def test_private_data(self): From f2a0671d15a3de611f7df03c20b20bafb83fd0a4 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 10 Feb 2012 14:19:56 +0000 Subject: [PATCH 075/129] Fixed GITHUB_URL doc reference. Should have been fixed along with 405dbed3397a856ada37840148f6eee25d757a01, whoops. --- doc/api/request.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/request.rst b/doc/api/request.rst index f58fd0a..eb126ec 100644 --- a/doc/api/request.rst +++ b/doc/api/request.rst @@ -8,7 +8,7 @@ Requests of the :mod:`github2` package, but it is documented to aid contributors to the package. -.. autodata:: GITHUB_URL +.. autodata:: DEFAULT_GITHUB_URL .. autodata:: SYSTEM_CERTS From a8513b44f7db508323e7a6c6ad448646c84de9e0 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 10 Feb 2012 14:21:16 +0000 Subject: [PATCH 076/129] [QA] Fix wild spelling of 'authentication'. --- github2/users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github2/users.py b/github2/users.py index f2282b2..1cd5ac6 100644 --- a/github2/users.py +++ b/github2/users.py @@ -41,7 +41,7 @@ class User(BaseData): format="user") def is_authenticated(self): - """Test for user auththenication + """Test for user authentication :return bool: ``True`` if user is authenticated""" return self.plan is not None From 3221df99b027964d1b631204a49df67e4e48f8b7 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 10 Feb 2012 19:42:39 +0000 Subject: [PATCH 077/129] Correct decorated function signatures in Sphinx output. --- doc/conf.py | 13 +++++++++++++ github2/core.py | 1 + 2 files changed, 14 insertions(+) diff --git a/doc/conf.py b/doc/conf.py index 1fb7895..9675450 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -13,6 +13,8 @@ import sys, os +from sphinx.util import inspect + import cloud_sptheme as csp # If extensions (or modules to document with autodoc) are in another directory, @@ -229,3 +231,14 @@ intersphinx_mapping = { 'python': ('http://docs.python.org/', os.getenv('SPHINX_PYTHON_OBJECTS')) } + + +# Horrific nastiness to generate correct function signature for decorated +# objects. Close your eyes... Now! +orig_getargspec = inspect.getargspec +def getargspec(func): + if hasattr(func, '__orig_func__'): + return orig_getargspec(func.__orig_func__) + else: + return orig_getargspec(func) +inspect.getargspec = getargspec diff --git a/github2/core.py b/github2/core.py index 60da833..9898be0 100644 --- a/github2/core.py +++ b/github2/core.py @@ -113,6 +113,7 @@ def wrapper(self, *args, **kwargs): % f.__name__) return f(self, *args, **kwargs) wrapped = wrapper + wrapped.__orig_func__ = f wrapped.__name__ = f.__name__ wrapped.__doc__ = f.__doc__ + """\n.. warning:: Requires authentication""" wrapped.requires_auth = True From 7162ef26f636b2f1e34242ec619c73ef12c0c2c5 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 10 Feb 2012 19:46:04 +0000 Subject: [PATCH 078/129] [QA] Fix PEP-8 compliance in Sphinx config. --- doc/conf.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/doc/conf.py b/doc/conf.py index 9675450..ea950db 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -3,7 +3,8 @@ # python-github2 documentation build configuration file, created by # sphinx-quickstart on Mon Apr 11 16:16:25 2011. # -# This file is execfile()d with the current directory set to its containing dir. +# This file is execfile()d with the current directory set to its containing +# dir. # # Note that not all possible configuration values are present in this # autogenerated file. @@ -11,7 +12,8 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys, os +import os +import sys from sphinx.util import inspect @@ -22,13 +24,13 @@ # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('..')) -# -- General configuration ----------------------------------------------------- +# -- General configuration ---------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ["sphinx.ext.%s" % ext for ext in ["autodoc", "todo", "intersphinx", "viewcode", "coverage"]] + \ @@ -74,7 +76,8 @@ # directories to ignore when looking for source files. exclude_patterns = ['.build'] -# The reST default role (used for this markup: `text`) to use for all documents. +# The reST default role (used for this markup: `text`) to use for all +# documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. @@ -95,7 +98,7 @@ #modindex_common_prefix = [] -# -- Options for HTML output --------------------------------------------------- +# -- Options for HTML output -------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. @@ -177,7 +180,7 @@ htmlhelp_basename = 'github2doc' -# -- Options for LaTeX output -------------------------------------------------- +# -- Options for LaTeX output ------------------------------------------------- # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' @@ -186,7 +189,8 @@ #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). +# (source start file, target name, title, author, +# documentclass [howto/manual]). latex_documents = [ ('index', 'github2.tex', u'github2 Documentation', u'Ask Solem', 'manual'), @@ -216,7 +220,7 @@ #latex_domain_indices = True -# -- Options for manual page output -------------------------------------------- +# -- Options for manual page output ------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). @@ -236,6 +240,8 @@ # Horrific nastiness to generate correct function signature for decorated # objects. Close your eyes... Now! orig_getargspec = inspect.getargspec + + def getargspec(func): if hasattr(func, '__orig_func__'): return orig_getargspec(func.__orig_func__) From 34c28268c05180059f86a4fe9d523fb2e4efd584 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 10 Feb 2012 19:46:47 +0000 Subject: [PATCH 079/129] Report correct module in funcs decorated by requires_auth. --- github2/core.py | 1 + 1 file changed, 1 insertion(+) diff --git a/github2/core.py b/github2/core.py index 9898be0..6ae08bb 100644 --- a/github2/core.py +++ b/github2/core.py @@ -116,6 +116,7 @@ def wrapper(self, *args, **kwargs): wrapped.__orig_func__ = f wrapped.__name__ = f.__name__ wrapped.__doc__ = f.__doc__ + """\n.. warning:: Requires authentication""" + wrapped.__module__ = f.__module__ wrapped.requires_auth = True return wrapped From 6992c53d2cdc0466fa320f575d3344213a96c3f0 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 10 Feb 2012 19:57:22 +0000 Subject: [PATCH 080/129] Provide a fall back to CURL_CA_BUNDLE. This is only used if we can't discover a system certs location. --- doc/api/request.rst | 1 + github2/request.py | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/api/request.rst b/doc/api/request.rst index eb126ec..0dd71f2 100644 --- a/doc/api/request.rst +++ b/doc/api/request.rst @@ -11,6 +11,7 @@ Requests .. autodata:: DEFAULT_GITHUB_URL .. autodata:: SYSTEM_CERTS +.. autodata:: CURL_CERTS .. autoexception:: GithubError diff --git a/github2/request.py b/github2/request.py index b8588de..3965415 100644 --- a/github2/request.py +++ b/github2/request.py @@ -18,7 +18,7 @@ import json as simplejson # For Python 2.6+ except ImportError: import simplejson -from os import path +from os import (getenv, path) try: # For Python 3 from urllib.parse import (parse_qs, quote, urlencode, urlsplit, urlunsplit) @@ -41,6 +41,8 @@ #: Whether github2 is using the system's certificates for SSL connections SYSTEM_CERTS = not httplib2.CA_CERTS.startswith(path.dirname(httplib2.__file__)) +#: Whether github2 is using the cert's from the file given in $CURL_CA_BUNDLE +CURL_CERTS = False if not SYSTEM_CERTS and sys.platform.startswith('linux'): for cert_file in ['/etc/ssl/certs/ca-certificates.crt', '/etc/pki/tls/certs/ca-bundle.crt']: @@ -52,6 +54,9 @@ if path.exists('/usr/local/share/certs/ca-root-nss.crt'): CA_CERTS = '/usr/local/share/certs/ca-root-nss.crt' SYSTEM_CERTS = True +elif path.exists(getenv('CURL_CA_BUNDLE', '')): + CA_CERTS = getenv('CURL_CA_BUNDLE') + CURL_CERTS = True else: CA_CERTS = path.join(path.dirname(path.abspath(__file__)), "DigiCert_High_Assurance_EV_Root_CA.crt") @@ -142,6 +147,8 @@ def __init__(self, username=None, api_token=None, url_prefix=None, self._http.ca_certs = CA_CERTS if SYSTEM_CERTS: LOGGER.info('Using system certificates in %r', CA_CERTS) + elif CURL_CERTS: + LOGGER.info("Using cURL's certificates in %r", CA_CERTS) else: LOGGER.warning('Using bundled certificate for HTTPS connections') From 2afb1a566e16195e76cd30273fbfd14235c960f4 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 15 Feb 2012 15:23:53 +0000 Subject: [PATCH 081/129] Document the Github github_url parameter. --- github2/client.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/github2/client.py b/github2/client.py index f761b62..c585f3b 100644 --- a/github2/client.py +++ b/github2/client.py @@ -23,6 +23,8 @@ def __init__(self, username=None, api_token=None, requests_per_second=None, The ``cache`` and ``access_token`` parameters .. versionadded:: 0.4.0 The ``proxy_host`` and ``proxy_port`` parameters + .. versionadded:: 0.7.0 + The ``github_url`` parameter :param str username: your own GitHub username. :param str api_token: can be found at https://github.com/account @@ -38,6 +40,8 @@ def __init__(self, username=None, api_token=None, requests_per_second=None, :param str proxy_host: the hostname for the HTTP proxy, if needed. :param str proxy_port: the hostname for the HTTP proxy, if needed (will default to 8080 if a proxy_host is set and no port is set). + :param str github_url: the hostname to connect to, for GitHub + Enterprise support """ self.request = GithubRequest(username=username, api_token=api_token, From 0e768616e38faa5f03ef0dc2decc1bf00f4c9535 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 24 Feb 2012 16:34:06 +0000 Subject: [PATCH 082/129] Added github-issues-export to 'in the wild' document. Refs #74. --- doc/wild.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/wild.rst b/doc/wild.rst index 968358f..78b2298 100644 --- a/doc/wild.rst +++ b/doc/wild.rst @@ -56,6 +56,14 @@ listed on this page. :Git repository: https://github.com/kashifrazzaqui/github-issues +``github-issues-export`` +'''''''''''''''''''''''' + + Script to liberate issues from github issues in case you would like to have + your data free. + +:Git repository: https://github.com/mcepl/github-issues-export + ``github-plots`` '''''''''''''''' From 0a75e3788cd107178d4d9764d784bd86af0c4aef Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 28 Feb 2012 20:07:35 +0000 Subject: [PATCH 083/129] Initial documentation for the binding objects. Closes #70. --- doc/api/core.rst | 8 ++++---- github2/core.py | 42 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/doc/api/core.rst b/doc/api/core.rst index bb96daf..9b9e297 100644 --- a/doc/api/core.rst +++ b/doc/api/core.rst @@ -30,10 +30,10 @@ Core .. autofunction:: repr_string -.. autoclass:: GithubCommand(type) +.. autoclass:: GithubCommand -.. autoclass:: Attribute(type) +.. autoclass:: Attribute -.. autoclass:: DateAttribute(type) +.. autoclass:: DateAttribute(help, format) -.. autoclass:: BaseDataType(type) +.. autoclass:: BaseData() diff --git a/github2/core.py b/github2/core.py index 6ae08bb..ea5afcd 100644 --- a/github2/core.py +++ b/github2/core.py @@ -137,9 +137,24 @@ def enhanced_by_auth(f): class GithubCommand(object): def __init__(self, request): + """Main API binding interface + + :param github2.request.GithubRequest request: HTTP request handler + """ self.request = request def make_request(self, command, *args, **kwargs): + """Make an API request + + Various options are supported if they exist in ``kwargs``: + + * The value of a ``method`` argument will define the HTTP method + to perform for this request, the default is ``GET`` + * The value of a ``filter`` argument will restrict the response to that + data + * The value of a ``page`` argument will be used to fetch a specific + page of results, default of 1 is assumed if not given + """ filter = kwargs.get("filter") post_data = kwargs.get("post_data") or {} page = kwargs.pop("page", 1) @@ -162,6 +177,11 @@ def make_request(self, command, *args, **kwargs): return response def get_value(self, *args, **kwargs): + """Process a single-value response from the API + + If a ``datatype`` parameter is given it defines the + :class:`BaseData`-derived class we should build from the provided data + """ datatype = kwargs.pop("datatype", None) value = self.make_request(*args, **kwargs) if datatype: @@ -176,6 +196,10 @@ def get_value(self, *args, **kwargs): return value def get_values(self, *args, **kwargs): + """Process a multi-value response from the API + + :see: :meth:`get_value` + """ datatype = kwargs.pop("datatype", None) values = self.make_request(*args, **kwargs) if datatype: @@ -208,8 +232,11 @@ def bullet(title, text): class Attribute(object): - def __init__(self, help): + """Generic object attribute for use with :class:`BaseData` + + :param str help: Attribute description + """ self.help = help def to_python(self, value): @@ -228,6 +255,11 @@ class DateAttribute(Attribute): } def __init__(self, *args, **kwargs): + """Date handling attribute for use with :class:`BaseData` + + :param str format: The date format to support, see + :data:`convertor_for_format` for supported options + """ self.format = kwargs.pop("format", self.format) super(DateAttribute, self).__init__(*args, **kwargs) @@ -281,6 +313,12 @@ def iterate(self): # Ugly base class definition for Python 2 and 3 compatibility, where metaclass # syntax is incompatible class BaseData(BaseDataType('BaseData', (object, ), {})): + """Wrapper for API responses + + .. warning:: + Supports subscript attribute access purely for backwards compatibility, + you shouldn't rely on that functionality in new code + """ def __getitem__(self, key): """Access objects's attribute using subscript notation @@ -297,7 +335,7 @@ def __getitem__(self, key): def __setitem__(self, key, value): """Update object's attribute using subscript notation - :see: ``BaseData.__getitem__`` + :see: :meth:`BaseData.__getitem__` """ LOGGER.warning("Subscript access on %r is deprecated, use object " "attributes" % self.__class__.__name__, From f5b5440d10fea1b36d9ec8f9b6b8a3c87674a43f Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 28 Feb 2012 20:08:02 +0000 Subject: [PATCH 084/129] [QA] Missing word in contributing. --- doc/contributing.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/contributing.rst b/doc/contributing.rst index ad3f31c..8c3b47a 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -71,9 +71,9 @@ Many assertions, such as :meth:`~unittest.TestCase.assertIn` and The simple workaround is to evaluate an expression to test with :meth:`~unittest.TestCase.assertTrue` -The incredibly functions for skipping tests(:func:`~unittest.skip`) and marking -expected failures(:func:`~unittest.expectedFailure`) were only added in 2.7, and -unfortunately can't be used. +The incredibly useful functions for skipping tests(:func:`~unittest.skip`) and +marking expected failures(:func:`~unittest.expectedFailure`) were only added in +2.7, and unfortunately can't be used. .. todo:: Add topic branches and pull request usage examples, but most git users are From 915165b2a33cf17b25467b7b61f0c9d07ceb7bc4 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 28 Feb 2012 20:08:46 +0000 Subject: [PATCH 085/129] Added basic release building document. If you can't guess why this is here, then I'd be very surprised indeed. --- doc/index.rst | 1 + doc/release.rst | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 doc/release.rst diff --git a/doc/index.rst b/doc/index.rst index 8656174..fffa939 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -41,6 +41,7 @@ Contents bugs contributing wild + release license Indices and tables diff --git a/doc/release.rst b/doc/release.rst new file mode 100644 index 0000000..b7baf79 --- /dev/null +++ b/doc/release.rst @@ -0,0 +1,63 @@ +Release HOWTO +============= + +.. highlight:: sh + +.. + Much of this stuff is automated locally, but I'm describing the process for + other people who will not have access to the same release tools I use. The + first thing I recommend that you do is find/write a tool that allows you to + automate all of this, or you're going to miss important steps at some point. + +Test +---- + +In the general case tests can be run via :pypi:`nose`'s :pypi:`distribute` +integration:: + + $ ./setup.py nosetests + +When preparing a release it is important to check that :mod:`github2` works with +all currently supported Python versions, and that the documentation is correct. +To that end you can use :pypi:`tox` to run the full testsuite:: + + $ tox -v + +This will test :mod:`github2` with Python 2.4 → 3.2, check that the ``reST`` +syntax is valid and also that the :pypi:`sphinx` documentation builds correctly. +You can run a subset of these options too, see the ``tox`` documentation for +more information. + +Prepare release +--------------- + +With the tests passing, perform the following steps + +* Update the version data in :file:`github2/_version.py`, and also the + reference in :file:`README.rst` +* Update :file:`NEWS.rst`, if there are any user visible changes +* Commit the release notes and version changes +* Create a signed tag for the release +* Push the changes, including the new tag, to the GitHub repository + +Update PyPI +----------- + +.. + This is the section you're especially likely to get wrong at some point if you + try to handle all of this manually ;) + +Create and upload the new release tarballs to PyPI:: + + $ ./setup.py sdist --formats=bztar,gztar register upload --sign + +You should also update the hosted documentation too:: + + $ ./setup.py build_sphinx && ./setup.py upload_docs + +Fetch the uploaded tarballs, and check for errors. + +You should also perform test installations from PyPI, to check the experience +:mod:`github2` users will have. + +.. highlight:: python From f6db79af8670d0d5535ca4dd46b9c133285f3b6d Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 28 Feb 2012 20:11:32 +0000 Subject: [PATCH 086/129] [QA] Minor PEP-8 fixes. --- github2/core.py | 7 +++---- github2/organizations.py | 9 ++++++--- github2/pull_requests.py | 12 ++++++------ github2/request.py | 3 ++- tests/test_unit.py | 1 + 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/github2/core.py b/github2/core.py index 6ae08bb..fe171d1 100644 --- a/github2/core.py +++ b/github2/core.py @@ -248,12 +248,11 @@ def __new__(cls, name, bases, attrs): super_new = super(BaseDataType, cls).__new__ _meta = dict([(attr_name, attr_value) - for attr_name, attr_value in attrs.items() - if isinstance(attr_value, Attribute)]) + for attr_name, attr_value in attrs.items() + if isinstance(attr_value, Attribute)]) attrs["_meta"] = _meta attributes = _meta.keys() - attrs.update(dict([(attr_name, None) - for attr_name in attributes])) + attrs.update(dict([(attr_name, None) for attr_name in attributes])) def _contribute_method(name, func): func.__name__ = name diff --git a/github2/organizations.py b/github2/organizations.py index 0c8aa00..38eac83 100644 --- a/github2/organizations.py +++ b/github2/organizations.py @@ -17,10 +17,13 @@ class Organization(BaseData): company = Attribute("The organization's company name.") created_at = DateAttribute("The date the organization was created.", format="commit") - following_count = Attribute("Number of users the organization is following.") + following_count = Attribute("Number of users the organization is " + "following.") followers_count = Attribute("Number of users following this organization.") - public_gist_count = Attribute("Organization's number of active public gists.") - public_repo_count = Attribute("Organization's number of active repositories.") + public_gist_count = Attribute("Organization's number of active public " + "gists.") + public_repo_count = Attribute("Organization's number of active " + "repositories.") permission = Attribute("Permissions within this organization.") plan = Attribute("GitHub plan for this organization.") diff --git a/github2/pull_requests.py b/github2/pull_requests.py index 3573f75..b75d62e 100644 --- a/github2/pull_requests.py +++ b/github2/pull_requests.py @@ -22,14 +22,14 @@ class PullRequest(BaseData): patch_url = Attribute("The URL to the downloadable patch.") labels = Attribute("A list of labels attached to the pull request.") html_url = Attribute("The URL to the pull request.") - issue_created_at = DateAttribute("The date the issue for this pull request was opened.", - format='iso') - issue_updated_at = DateAttribute("The date the issue for this pull request was last updated.", - format='iso') + issue_created_at = DateAttribute("The date the issue for this pull " + "request was opened.", format='iso') + issue_updated_at = DateAttribute("The date the issue for this pull " + "request was last updated.", format='iso') created_at = DateAttribute("The date when this pull request was created.", format='iso') - updated_at = DateAttribute("The date when this pull request was last updated.", - format='iso') + updated_at = DateAttribute("The date when this pull request was last " + "updated.", format='iso') closed_at = DateAttribute("The date when this pull request was closed", format='iso') discussion = Attribute("Discussion thread for the pull request.") diff --git a/github2/request.py b/github2/request.py index 3965415..bee5846 100644 --- a/github2/request.py +++ b/github2/request.py @@ -102,7 +102,8 @@ def __init__(self, message, content, code): self.code_reason = responses[code] else: self.code_reason = "" - LOGGER.warning('Unknown HTTP status %r, please file an issue', code) + LOGGER.warning('Unknown HTTP status %r, please file an issue', + code) class GithubRequest(object): diff --git a/tests/test_unit.py b/tests/test_unit.py index 76c637a..2e985a7 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -75,6 +75,7 @@ def test_project_for_user_repo(): assert_equals(client.project_for_user_repo('JNRowe', 'misc-overlay'), 'JNRowe/misc-overlay') + def test_repr_string(): assert_equals(repr_string('test'), 'test') assert_equals(repr_string('abcdefghijklmnopqrst'), 'abcdefghijklmnopqrst') From 18eaf6163192d129ed09bd30b4e96f9c1894b4e0 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 28 Feb 2012 20:12:39 +0000 Subject: [PATCH 087/129] [QA] Added hints for flake8. --- github2/issues.py | 2 +- github2/request.py | 17 ++++++++--------- github2/users.py | 2 +- tests/test_request.py | 8 ++++---- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/github2/issues.py b/github2/issues.py index ae9723b..851f813 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -1,7 +1,7 @@ try: from urllib.parse import quote_plus # For Python 3 except ImportError: - from urllib import quote_plus + from urllib import quote_plus # NOQA from github2.core import (GithubCommand, BaseData, Attribute, DateAttribute, repr_string, requires_auth) diff --git a/github2/request.py b/github2/request.py index bee5846..c05394a 100644 --- a/github2/request.py +++ b/github2/request.py @@ -9,26 +9,25 @@ from http.client import responses except ImportError: # For Python 2.5-2.7 try: - from httplib import responses + from httplib import responses # NOQA except ImportError: # For Python 2.4 - from BaseHTTPServer import BaseHTTPRequestHandler - responses = dict([(k, v[0]) - for k, v in BaseHTTPRequestHandler.responses.items()]) + from BaseHTTPServer import BaseHTTPRequestHandler as _BHRH + responses = dict([(k, v[0]) for k, v in _BHRH.responses.items()]) # NOQA try: import json as simplejson # For Python 2.6+ except ImportError: - import simplejson + import simplejson # NOQA from os import (getenv, path) try: # For Python 3 from urllib.parse import (parse_qs, quote, urlencode, urlsplit, urlunsplit) except ImportError: - from urlparse import (urlsplit, urlunsplit) + from urlparse import (urlsplit, urlunsplit) # NOQA try: - from urlparse import parse_qs + from urlparse import parse_qs # NOQA except ImportError: - from cgi import parse_qs - from urllib import urlencode, quote + from cgi import parse_qs # NOQA + from urllib import urlencode, quote # NOQA import httplib2 diff --git a/github2/users.py b/github2/users.py index 1cd5ac6..ad40fc1 100644 --- a/github2/users.py +++ b/github2/users.py @@ -1,7 +1,7 @@ try: from urllib.parse import quote_plus # For Python 3 except ImportError: - from urllib import quote_plus + from urllib import quote_plus # NOQA from github2.core import (BaseData, GithubCommand, DateAttribute, Attribute, enhanced_by_auth, requires_auth) diff --git a/tests/test_request.py b/tests/test_request.py index 031bc4f..7c7f93b 100644 --- a/tests/test_request.py +++ b/tests/test_request.py @@ -4,9 +4,9 @@ from urllib.parse import parse_qs # For Python 3 except ImportError: try: - from urlparse import parse_qs + from urlparse import parse_qs # NOQA except ImportError: # For Python <2.6 - from cgi import parse_qs + from cgi import parse_qs # NOQA try: from nose.tools import (assert_dict_contains_subset, assert_dict_equal) @@ -14,8 +14,8 @@ import unittest2 _binding = unittest2.TestCase('run') - assert_dict_contains_subset = _binding.assertDictContainsSubset - assert_dict_equal = _binding.assertDictEqual + assert_dict_contains_subset = _binding.assertDictContainsSubset # NOQA + assert_dict_equal = _binding.assertDictEqual # NOQA from github2 import request From 04b24977b4a4aba96dd41a6a092cacd4641351ba Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 28 Feb 2012 20:14:48 +0000 Subject: [PATCH 088/129] Fixed Sphinx :see: uses to use domain refs. --- tests/test_tz_aware_date_handling.py | 2 +- tests/utils.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_tz_aware_date_handling.py b/tests/test_tz_aware_date_handling.py index ccc224f..5789593 100644 --- a/tests/test_tz_aware_date_handling.py +++ b/tests/test_tz_aware_date_handling.py @@ -23,7 +23,7 @@ def teardown_module(): def dt_utz(year, month, day, hour, minute, second): """Produce a UTC-anchored datetime object - :see: ``datetime.datetime`` + :see: :class:`datetime.datetime` """ return dt(year, month, day, hour, minute, second, tzinfo=tzutc()) diff --git a/tests/utils.py b/tests/utils.py index cbd41cc..78fb8c4 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -73,7 +73,7 @@ class HttpMockAuthenticatedTestCase(HttpMockTestCase): def setUp(self): """Prepare test fixtures - :see: ``HttpMockTestCase`` + :see: :class:`HttpMockTestCase` :attr:`client` is an authenticated :obj:`Github` object for easy use in tests. From 6724850616fcbb31b0c99b94ec4dfc1fdf470fb0 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 28 Feb 2012 20:18:09 +0000 Subject: [PATCH 089/129] Added ghsync/humble to 'in the wild' doc. --- doc/wild.rst | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/wild.rst b/doc/wild.rst index 78b2298..af21eed 100644 --- a/doc/wild.rst +++ b/doc/wild.rst @@ -48,6 +48,13 @@ listed on this page. :PyPI page: :pypi:`ghmiles` +``ghsync`` +'''''''''' + + GitHub Syncer. Clones or Pulls all GitHub repos. + +:PyPI page: :pypi:`ghsync` + ``github-issues`` ''''''''''''''''' @@ -81,6 +88,13 @@ listed on this page. .. _GitHub's issue tracker: http://github.com/blog/411-github-issue-tracker +``humble`` +'''''''''' + + Shows stats on a given GitHub user. + +:PyPI page: :pypi:`humble` + ``Repos.io`` '''''''''''' From d7b0cccbd67ba99e1f90aeb835014ee564ec6542 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 28 Feb 2012 20:27:09 +0000 Subject: [PATCH 090/129] Bumped version to 0.6.1. --- NEWS.rst | 11 +++++++++++ README.rst | 2 +- github2/_version.py | 14 +++++++------- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/NEWS.rst b/NEWS.rst index 54c693b..1f94908 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -8,6 +8,17 @@ look at the `git repository`_ for the full project history. .. contents:: +0.6.1 - 2012-02-28 +------------------ + +* Support for `GitHub:Enterprise`_ using the ``github_url`` parameter when + creating a client +* Adds SSH key management +* Support reading SSL certificates from the location set in ``CURL_CA_BUNDLE``, + if all else fails + +.. _GitHub:Enterprise: https://enterprise.github.com/ + 0.6.0 - 2011-12-21 ------------------ diff --git a/README.rst b/README.rst index 804dc81..67867b9 100644 --- a/README.rst +++ b/README.rst @@ -4,7 +4,7 @@ github2 - Github API v2 library for Python. :Authors: Ask Solem (askh@opera.com) -:Version: 0.6.0 +:Version: 0.6.1 This is a Python library implementing all of the features available in version 2 of the `Github API`_. diff --git a/github2/_version.py b/github2/_version.py index bf9f4df..0269a27 100644 --- a/github2/_version.py +++ b/github2/_version.py @@ -1,9 +1,9 @@ -# This is github2 version 0.6.0 (2011-12-21) +# This is github2 version 0.6.1 (2012-02-28) # pylint: disable=C0103, C0111, C0121, W0622 -dotted = "0.6.0" -libtool = "6:20" -hex = 0x000600 -date = "2011-12-21" -tuple = (0, 6, 0) -web = "github/0.6.0" +dotted = "0.6.1" +libtool = "6:21" +hex = 0x000601 +date = "2012-02-28" +tuple = (0, 6, 1) +web = "github2/0.6.1" From ddeb4bc60b89311c8e068f31b3e0df77bc27164c Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 6 Apr 2012 07:50:51 +0100 Subject: [PATCH 091/129] [QA] Removed contents directive from NEWS file. --- NEWS.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/NEWS.rst b/NEWS.rst index 1f94908..e7092fe 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -6,8 +6,6 @@ look at the `git repository`_ for the full project history. .. _git repository: https://github.com/ask/python-github2/ -.. contents:: - 0.6.1 - 2012-02-28 ------------------ From 3414c22d25a54624e554be5bdb8a6fb327ff27d7 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 6 Apr 2012 07:48:36 +0100 Subject: [PATCH 092/129] Added a warning to the intro docs for pending API switch-off. Wondering whether this needs an explicit "don't file bug reports" clause ;) --- README.rst | 12 ++++++++++++ doc/index.rst | 13 +++++++++++++ 2 files changed, 25 insertions(+) diff --git a/README.rst b/README.rst index 67867b9..3e6ab34 100644 --- a/README.rst +++ b/README.rst @@ -6,12 +6,24 @@ github2 - Github API v2 library for Python. Ask Solem (askh@opera.com) :Version: 0.6.1 +.. warning:: + + GitHub are planning to `switch off API v2`_ on 2012-05-01, you should + be looking to replace ``github2`` as soon as possible. + + Both remoteobjects_ and micromodels_ provide easy-to-use functionality for + creating bindings to remote APIs, and should significantly reduce the amount + of work needed in moving away from GitHub's API v2. + This is a Python library implementing all of the features available in version 2 of the `Github API`_. See the ``doc/`` directory for installation instructions and usage information. If you prefer you can also read the `documentation online`_. +.. _switch off API v2: https://github.com/blog/1090-github-api-moving-on +.. _remoteobjects: https://github.com/saymedia/remoteobjects +.. _micromodels: https://github.com/j4mie/micromodels .. _Github API: http://develop.github.com/ .. _documentation online: http://packages.python.org/github2 diff --git a/doc/index.rst b/doc/index.rst index fffa939..55814bf 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -13,6 +13,19 @@ ``github2`` - Github API v2 library for Python ============================================== +.. warning:: + + GitHub are planning to `switch off API v2`_ on 2012-05-01, you should + be looking to replace ``github2`` as soon as possible. + + Both remoteobjects_ and micromodels_ provide easy-to-use functionality for + creating bindings to remote APIs, and should significantly reduce the amount + of work needed in moving away from GitHub's API v2. + +.. _switch off API v2: https://github.com/blog/1090-github-api-moving-on +.. _remoteobjects: https://github.com/saymedia/remoteobjects +.. _micromodels: https://github.com/j4mie/micromodels + .. pypi-release:: github2 :prefix: Download :class: sidebar From 406dfb9700e33aae1189984d48a314617cb3a046 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 14 Apr 2012 08:56:13 +0100 Subject: [PATCH 093/129] Added cligh to 'in the wild' doc. --- doc/wild.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/wild.rst b/doc/wild.rst index af21eed..c66abab 100644 --- a/doc/wild.rst +++ b/doc/wild.rst @@ -32,6 +32,13 @@ listed on this page. :PyPI page: :pypi:`bugwarrior` +``cligh`` +''''''''' + + A simple command-line interface to the facilities of GitHub. + +:Git repository: https://github.com/CMB/cligh + ``forkfeed`` '''''''''''' From a1d4f6d8812866685ac55754336258563ae79b30 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 14 Apr 2012 08:58:29 +0100 Subject: [PATCH 094/129] Use 'project' for link references in wild doc. Didn't really like the 'Git repository' look. --- doc/wild.rst | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/doc/wild.rst b/doc/wild.rst index c66abab..8a49b96 100644 --- a/doc/wild.rst +++ b/doc/wild.rst @@ -15,14 +15,14 @@ listed on this page. Applause when a bug gets closed. Extra cheering for old bugs. -:PyPI page: :pypi:`applause` +:PyPI project: :pypi:`applause` ``bitbucket2github`` '''''''''''''''''''' Mirrors all public repos of a BitBucket account to GitHub and vice versa. -:PyPI page: :pypi:`bitbucket2github` +:PyPI project: :pypi:`bitbucket2github` ``bugwarrior`` '''''''''''''' @@ -30,14 +30,14 @@ listed on this page. Pull tickets from github, bitbucket, and trac into `taskwarrior `__ -:PyPI page: :pypi:`bugwarrior` +:PyPI project: :pypi:`bugwarrior` ``cligh`` ''''''''' A simple command-line interface to the facilities of GitHub. -:Git repository: https://github.com/CMB/cligh +:GitHub project: https://github.com/CMB/cligh ``forkfeed`` '''''''''''' @@ -45,7 +45,7 @@ listed on this page. Utility to build atom feeds for all commits in all forks of your projects on GitHub. -:PyPI page: :pypi:`forkfeed` +:PyPI project: :pypi:`forkfeed` ``ghmiles`` ''''''''''' @@ -53,14 +53,14 @@ listed on this page. ``ghmiles`` is a Python library that generates a milestone model from the issues in a GitHub repository. -:PyPI page: :pypi:`ghmiles` +:PyPI project: :pypi:`ghmiles` ``ghsync`` '''''''''' GitHub Syncer. Clones or Pulls all GitHub repos. -:PyPI page: :pypi:`ghsync` +:PyPI project: :pypi:`ghsync` ``github-issues`` ''''''''''''''''' @@ -68,7 +68,7 @@ listed on this page. github-issues allows you to create, close, show, list, and comment on issues on your github project - that's it. -:Git repository: https://github.com/kashifrazzaqui/github-issues +:GitHub project: https://github.com/kashifrazzaqui/github-issues ``github-issues-export`` '''''''''''''''''''''''' @@ -76,14 +76,14 @@ listed on this page. Script to liberate issues from github issues in case you would like to have your data free. -:Git repository: https://github.com/mcepl/github-issues-export +:GitHub project: https://github.com/mcepl/github-issues-export ``github-plots`` '''''''''''''''' Alternative plots from GitHub stats. -:PyPI page: :pypi:`github-plots` +:PyPI project: :pypi:`github-plots` ``hubugs`` '''''''''' @@ -91,7 +91,7 @@ listed on this page. ``hubugs`` is a very simple client for working with `GitHub's issue tracker`_. -:PyPI page: :pypi:`hubugs` +:PyPI project: :pypi:`hubugs` .. _GitHub's issue tracker: http://github.com/blog/411-github-issue-tracker @@ -100,7 +100,7 @@ listed on this page. Shows stats on a given GitHub user. -:PyPI page: :pypi:`humble` +:PyPI project: :pypi:`humble` ``Repos.io`` '''''''''''' @@ -109,7 +109,7 @@ listed on this page. repositories (your own, and watched/liked/followed ones) hosted by different providers (github, bitbucket) -:Git repository: https://github.com/twidi/Repos.io +:GitHub project: https://github.com/twidi/Repos.io ``roundabout`` '''''''''''''' @@ -117,7 +117,7 @@ listed on this page. ``Roundabout`` is a tool that automatically prevents code with failing tests from being merged into a github repository. -:Git repository: https://github.com/ChristopherMacGown/roundabout +:GitHub project: https://github.com/ChristopherMacGown/roundabout .. _open an issue: https://github.com/ask/python-github2/issues/ .. _project website: https://github.com/ask/python-github2/blob/master/doc/wild.rst From 7319f330c0bebba89b306f65da8faedeb5be9762 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 14 Apr 2012 09:04:16 +0100 Subject: [PATCH 095/129] Document automatic proxy config with httplib2-0.7.4. Closes #75. --- doc/api/client.rst | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/doc/api/client.rst b/doc/api/client.rst index 4954148..f1a9e0c 100644 --- a/doc/api/client.rst +++ b/doc/api/client.rst @@ -42,9 +42,14 @@ API calls are limited by github.com to 1 per second by default. To have the >>> github = Github(username="ask", api_token=".......", ... requests_per_second=1) -If you wish to use a HTTP proxy you can pass in the ``proxy_host`` and -``proxy_port`` settings to enable it. The default for ``proxy_port``, if not -given, is 8080:: +By default, :pypi:`httplib2 (0.7.4)` will use the proxies set in the +:envvar:`http_proxy` andr :envvar:`https_proxy` environment variables. This +means that well configured systems shouldn't need any manual configuration for +proxy support. + +If you wish to manually configure a HTTP proxy you can pass in the +``proxy_host`` and ``proxy_port`` settings to enable it. The default for +``proxy_port``, if not given, is 8080:: >>> from github2.client import Github >>> github = Github(username="ask", api_token=".......", From 4c67559dc0676a0fa7a3ac2044b66f5c33d71da9 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Mon, 30 Apr 2012 01:42:05 +0100 Subject: [PATCH 096/129] Fixed using bundled certs on supported OS. This would have failed in the case where an OS is supported, but the certs weren't available. --- github2/request.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github2/request.py b/github2/request.py index c05394a..9aea264 100644 --- a/github2/request.py +++ b/github2/request.py @@ -56,7 +56,7 @@ elif path.exists(getenv('CURL_CA_BUNDLE', '')): CA_CERTS = getenv('CURL_CA_BUNDLE') CURL_CERTS = True -else: +if not SYSTEM_CERTS and not CURL_CERTS: CA_CERTS = path.join(path.dirname(path.abspath(__file__)), "DigiCert_High_Assurance_EV_Root_CA.crt") From 6432fe9c638c0bd68d4bc60ff9f6fc169f584148 Mon Sep 17 00:00:00 2001 From: modocache Date: Mon, 30 Apr 2012 20:01:10 +0900 Subject: [PATCH 097/129] Change enterprise URL in docs. Closes #76. --- doc/api/client.rst | 2 +- tests/test_unit.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/api/client.rst b/doc/api/client.rst index f1a9e0c..b11eaa8 100644 --- a/doc/api/client.rst +++ b/doc/api/client.rst @@ -61,6 +61,6 @@ https://github.com/. >>> from github2.client import Github >>> github = Github(username="modocache", api_token=".......", - ... github_url="http://git.gree-dev.net/") + ... github_url="http://your-github-enterprise-url.com/") .. _OAuth service: http://develop.github.com/p/oauth.html diff --git a/tests/test_unit.py b/tests/test_unit.py index 2e985a7..7cd3113 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -28,8 +28,9 @@ def test_default_host(self): assert_equals(client.request.github_url, 'https://github.com') def test_non_standard_host(self): - client = Github(github_url="http://git.gree-dev.net/") - assert_equals(client.request.github_url, 'http://git.gree-dev.net/') + client = Github(github_url="http://your-github-enterprise-url.com/") + assert_equals(client.request.github_url, + 'http://your-github-enterprise-url.com/') class RateLimits(utils.HttpMockTestCase): From 6eeeef96f877d44a8e54a75846617fa5b225b313 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 11:33:54 +0100 Subject: [PATCH 098/129] Add per-file licensing info. Removes a -10 'packaging smell', and basically for free with ucopy ;) --- .ucopy.cfg | 21 ++++++++++++ AUTHORS | 49 ++++++++++++++++------------ doc/.templates/layout.html | 7 ++++ doc/api/client.rst | 8 +++++ doc/api/commit.rst | 6 ++++ doc/api/core.rst | 6 ++++ doc/api/index.rst | 6 ++++ doc/api/issues.rst | 6 ++++ doc/api/network.rst | 6 ++++ doc/api/object.rst | 6 ++++ doc/api/organizations.rst | 6 ++++ doc/api/pull_requests.rst | 6 ++++ doc/api/repos.rst | 6 ++++ doc/api/request.rst | 6 ++++ doc/api/teams.rst | 6 ++++ doc/api/users.rst | 6 ++++ doc/bugs.rst | 6 ++++ doc/contributing.rst | 6 ++++ doc/index.rst | 9 ++--- doc/install.rst | 7 ++++ doc/license.rst | 6 ++++ doc/problems.rst | 6 ++++ doc/quickstart.rst | 6 ++++ doc/release.rst | 6 ++++ doc/wild.rst | 7 ++++ examples/friend-or-follow.py | 5 +++ github2/__init__.py | 6 ++++ github2/bin/__init__.py | 4 +++ github2/bin/manage_collaborators.py | 7 ++-- github2/bin/search_repos.py | 4 +++ github2/client.py | 15 +++++++++ github2/commits.py | 9 +++++ github2/core.py | 13 ++++++++ github2/issues.py | 10 ++++++ github2/organizations.py | 7 ++++ github2/pull_requests.py | 9 +++++ github2/repositories.py | 17 ++++++++++ github2/request.py | 21 ++++++++++++ github2/teams.py | 6 ++++ github2/users.py | 9 +++++ setup.py | 10 ++++++ tests/test_charset_header.py | 5 +++ tests/test_commits.py | 5 +++ tests/test_date_handling.py | 4 +++ tests/test_issues.py | 5 +++ tests/test_organizations.py | 5 +++ tests/test_pull_requests.py | 5 +++ tests/test_regression.py | 5 +++ tests/test_repositories.py | 7 ++++ tests/test_request.py | 5 +++ tests/test_teams.py | 5 +++ tests/test_tz_aware_date_handling.py | 4 +++ tests/test_unit.py | 7 ++++ tests/test_user.py | 5 +++ tests/utils.py | 5 +++ 55 files changed, 413 insertions(+), 27 deletions(-) create mode 100644 .ucopy.cfg diff --git a/.ucopy.cfg b/.ucopy.cfg new file mode 100644 index 0000000..530185a --- /dev/null +++ b/.ucopy.cfg @@ -0,0 +1,21 @@ +[repo] +name = python-github2 +license-from = bsd-3 +vcs = git + +[files] +ignore-from = git +ignore-glob = COPYING, README.rst, .keep, test/data/github.com,api* + +[patch] +unicode = python + +[author-override] +Ask Solem = +Chris Vale = +Claudio B. = +Daniel Greenfeld = +Donald von Stufft = +Michael Basnight = +Sameer Al-Sakran = +Stéphane Angel = diff --git a/AUTHORS b/AUTHORS index 99f5070..5e14ae3 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,31 +1,38 @@ -Ask Solem -Mark Paschal -Donald von Stufft -Maximillian Dornseif +python-github2 was written by: + +Ask Solem + +with contributions from the following people: + +Adam Vandenberg Asheesh Laroia -Rick Harris -Cody Soyland -Fernando Perez -Evan Broder -Scott Torborg -Claudio B. +Barthelemy Dagenais Chris Vale -Adam Vandenberg -Kenneth Reitz +Christopher MacGown +Claudio B. +Cody Soyland Daniel Greenfeld +Donald von Stufft +Evan Broder +Fernando Perez +Ionuț Arțăriși +James Rowe +Jens Ohlig Jeremy Dunck Jonas Obrist -Sameer Al-Sakran -Vincent Driessen -James Rowe Josh Weinberg -Barthelemy Dagenais -Surajram Kumarave -broderboy -Patryk Zawadzki +Justin Quick +Kenneth Reitz +Mark Paschal +Maximillian Dornseif Michael Basnight -Christopher MacGown +Patryk Zawadzki +Rick Harris Rok Garbas -Ionuț Arțăriși +Sameer Al-Sakran +Scott Torborg Stéphane Angel +Surajram Kumaravel +Vincent Driessen +broderboy modocache diff --git a/doc/.templates/layout.html b/doc/.templates/layout.html index 3560b06..b251a03 100644 --- a/doc/.templates/layout.html +++ b/doc/.templates/layout.html @@ -1,3 +1,10 @@ +{# + Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, and is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. +#} {% extends "!layout.html" %} {% block extrahead %} diff --git a/doc/api/client.rst b/doc/api/client.rst index b11eaa8..1cf0ea9 100644 --- a/doc/api/client.rst +++ b/doc/api/client.rst @@ -1,3 +1,11 @@ +.. Copyright (C) 2011-2012 James Rowe + Michael Basnight + modocache + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. module:: github2.client Creating a client diff --git a/doc/api/commit.rst b/doc/api/commit.rst index e4a69bf..ffca1a2 100644 --- a/doc/api/commit.rst +++ b/doc/api/commit.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. module:: github2.commits Commit diff --git a/doc/api/core.rst b/doc/api/core.rst index 9b9e297..1e26d09 100644 --- a/doc/api/core.rst +++ b/doc/api/core.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. module:: github2.core Core diff --git a/doc/api/index.rst b/doc/api/index.rst index cbe2c5c..36fa3a0 100644 --- a/doc/api/index.rst +++ b/doc/api/index.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + API documentation ================= diff --git a/doc/api/issues.rst b/doc/api/issues.rst index 6ba740c..1f2dcfb 100644 --- a/doc/api/issues.rst +++ b/doc/api/issues.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. module:: github2.issues Issues diff --git a/doc/api/network.rst b/doc/api/network.rst index f07baa9..1d7312d 100644 --- a/doc/api/network.rst +++ b/doc/api/network.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. currentmodule:: github2.client Network diff --git a/doc/api/object.rst b/doc/api/object.rst index 79842c7..106b685 100644 --- a/doc/api/object.rst +++ b/doc/api/object.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. currentmodule:: github2.client Object diff --git a/doc/api/organizations.rst b/doc/api/organizations.rst index fc46950..b4fb0f6 100644 --- a/doc/api/organizations.rst +++ b/doc/api/organizations.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. module:: github2.organizations Organizations diff --git a/doc/api/pull_requests.rst b/doc/api/pull_requests.rst index 140a824..ee6f518 100644 --- a/doc/api/pull_requests.rst +++ b/doc/api/pull_requests.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. module:: github2.pull_requests Pull requests diff --git a/doc/api/repos.rst b/doc/api/repos.rst index 4f777ee..1d96337 100644 --- a/doc/api/repos.rst +++ b/doc/api/repos.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. module:: github2.repositories Repository diff --git a/doc/api/request.rst b/doc/api/request.rst index 0dd71f2..b3ffc49 100644 --- a/doc/api/request.rst +++ b/doc/api/request.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. module:: github2.request Requests diff --git a/doc/api/teams.rst b/doc/api/teams.rst index dc2102b..4e72746 100644 --- a/doc/api/teams.rst +++ b/doc/api/teams.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. module:: github2.teams Teams diff --git a/doc/api/users.rst b/doc/api/users.rst index 052092a..d9ac95d 100644 --- a/doc/api/users.rst +++ b/doc/api/users.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + .. module:: github2.users Users diff --git a/doc/bugs.rst b/doc/bugs.rst index 6105987..1c838a1 100644 --- a/doc/bugs.rst +++ b/doc/bugs.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, and is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + Reporting bugs ============== diff --git a/doc/contributing.rst b/doc/contributing.rst index 8c3b47a..ad846be 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, and is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + Contributing ============ diff --git a/doc/index.rst b/doc/index.rst index 55814bf..5b21867 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -1,7 +1,8 @@ -.. python-github2 documentation master file, created by - sphinx-quickstart on Mon Apr 11 16:16:25 2011. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, and is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. .. If you prefer you can also read the pre-built documentation at diff --git a/doc/install.rst b/doc/install.rst index 8d309ee..84b57de 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -1,3 +1,10 @@ +.. Copyright (C) 2011-2012 James Rowe + Michael Basnight + + This file is part of python-github2, and is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + Installation ------------ diff --git a/doc/license.rst b/doc/license.rst index 7e1c1b4..316b2ae 100644 --- a/doc/license.rst +++ b/doc/license.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, and is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + License ======= diff --git a/doc/problems.rst b/doc/problems.rst index 5fabddf..31d3052 100644 --- a/doc/problems.rst +++ b/doc/problems.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, and is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + Solving problems ================ diff --git a/doc/quickstart.rst b/doc/quickstart.rst index bb41f5e..2d3988f 100644 --- a/doc/quickstart.rst +++ b/doc/quickstart.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2011-2012 James Rowe + + This file is part of python-github2, and is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + Quickstart ========== diff --git a/doc/release.rst b/doc/release.rst index b7baf79..745d419 100644 --- a/doc/release.rst +++ b/doc/release.rst @@ -1,3 +1,9 @@ +.. Copyright (C) 2012 James Rowe + + This file is part of python-github2, and is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + Release HOWTO ============= diff --git a/doc/wild.rst b/doc/wild.rst index 8a49b96..07bd653 100644 --- a/doc/wild.rst +++ b/doc/wild.rst @@ -1,3 +1,10 @@ +.. Copyright (C) 2011-2012 James Rowe + Stéphane Angel + + This file is part of python-github2, and is licensed under the 3-clause BSD + License. See the LICENSE file in the top distribution directory for the full + license text. + In the wild ----------- diff --git a/examples/friend-or-follow.py b/examples/friend-or-follow.py index ccef96a..9a19b74 100644 --- a/examples/friend-or-follow.py +++ b/examples/friend-or-follow.py @@ -1,3 +1,8 @@ +# Copyright (C) 2010-2012 Ask Solem +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + import sys import optparse from subprocess import Popen, PIPE diff --git a/github2/__init__.py b/github2/__init__.py index 30d323e..cf56247 100644 --- a/github2/__init__.py +++ b/github2/__init__.py @@ -1,4 +1,10 @@ "Github API v2 library for Python" +# Copyright (C) 2009-2012 Ask Solem +# James Rowe +# Maximillian Dornseif +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. from github2 import _version diff --git a/github2/bin/__init__.py b/github2/bin/__init__.py index 792d600..6c5b974 100644 --- a/github2/bin/__init__.py +++ b/github2/bin/__init__.py @@ -1 +1,5 @@ # +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. diff --git a/github2/bin/manage_collaborators.py b/github2/bin/manage_collaborators.py index 3efafee..6e320fb 100755 --- a/github2/bin/manage_collaborators.py +++ b/github2/bin/manage_collaborators.py @@ -8,8 +8,11 @@ """ # Created by Maximillian Dornseif on 2009-12-31 for HUDORA. -# Copyright (c) 2009 HUDORA. All rights reserved. -# BSD licensed +# Copyright (C) 2009-2012 James Rowe +# Maximillian Dornseif +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. import logging import sys diff --git a/github2/bin/search_repos.py b/github2/bin/search_repos.py index c52be46..3064ff2 100755 --- a/github2/bin/search_repos.py +++ b/github2/bin/search_repos.py @@ -1,6 +1,10 @@ #! /usr/bin/env python # coding: utf-8 """github_search_repos - search for repositories on GitHub""" +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. import logging diff --git a/github2/client.py b/github2/client.py index c585f3b..122fdfa 100644 --- a/github2/client.py +++ b/github2/client.py @@ -1,3 +1,18 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2009-2012 Ask Solem +# Christopher MacGown +# Evan Broder +# James Rowe +# Jeremy Dunck +# Michael Basnight +# Patryk Zawadzki +# Surajram Kumaravel +# Vincent Driessen +# modocache +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from github2.request import GithubRequest from github2.issues import Issues from github2.repositories import Repositories diff --git a/github2/commits.py b/github2/commits.py index 8910937..f33a9e2 100644 --- a/github2/commits.py +++ b/github2/commits.py @@ -1,3 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2009-2012 Ask Solem +# James Rowe +# Stéphane Angel +# Vincent Driessen +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from github2.core import (BaseData, GithubCommand, Attribute, DateAttribute, repr_string) diff --git a/github2/core.py b/github2/core.py index 856a489..67587f5 100644 --- a/github2/core.py +++ b/github2/core.py @@ -1,3 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2009-2012 Ask Solem +# Fernando Perez +# James Rowe +# Mark Paschal +# Patryk Zawadzki +# Sameer Al-Sakran +# Stéphane Angel +# Vincent Driessen +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + import logging import sys diff --git a/github2/issues.py b/github2/issues.py index 851f813..217a154 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -1,3 +1,13 @@ +# Copyright (C) 2009-2012 Adam Vandenberg +# Ask Solem +# Barthelemy Dagenais +# Fernando Perez +# James Rowe +# Scott Torborg +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + try: from urllib.parse import quote_plus # For Python 3 except ImportError: diff --git a/github2/organizations.py b/github2/organizations.py index 38eac83..cd99c03 100644 --- a/github2/organizations.py +++ b/github2/organizations.py @@ -1,3 +1,10 @@ +# Copyright (C) 2011-2012 James Rowe +# Patryk Zawadzki +# Rok Garbas +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from github2.core import (BaseData, GithubCommand, Attribute, DateAttribute, requires_auth) from github2.repositories import Repository diff --git a/github2/pull_requests.py b/github2/pull_requests.py index b75d62e..3137002 100644 --- a/github2/pull_requests.py +++ b/github2/pull_requests.py @@ -1,3 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2010-2012 Christopher MacGown +# Ionuț Arțăriși +# James Rowe +# Stéphane Angel +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from github2.core import (BaseData, GithubCommand, Attribute, DateAttribute, repr_string) diff --git a/github2/repositories.py b/github2/repositories.py index 89f8e57..6d206bf 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -1,3 +1,20 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2009-2012 Ask Solem +# Claudio B. +# Daniel Greenfeld +# James Rowe +# Jens Ohlig +# Jeremy Dunck +# Jonas Obrist +# Kenneth Reitz +# Mark Paschal +# Maximillian Dornseif +# Sameer Al-Sakran +# Stéphane Angel +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from github2.core import (BaseData, GithubCommand, Attribute, DateAttribute, requires_auth) diff --git a/github2/request.py b/github2/request.py index 9aea264..7b400bf 100644 --- a/github2/request.py +++ b/github2/request.py @@ -1,3 +1,24 @@ +# Copyright (C) 2009-2012 Adam Vandenberg +# Asheesh Laroia +# Ask Solem +# Chris Vale +# Daniel Greenfeld +# Evan Broder +# James Rowe +# Jeremy Dunck +# Josh Weinberg +# Mark Paschal +# Maximillian Dornseif +# Michael Basnight +# Patryk Zawadzki +# Rick Harris +# Sameer Al-Sakran +# Vincent Driessen +# modocache +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + import datetime import logging import re diff --git a/github2/teams.py b/github2/teams.py index b46116f..2472cf3 100644 --- a/github2/teams.py +++ b/github2/teams.py @@ -1,3 +1,9 @@ +# Copyright (C) 2011-2012 James Rowe +# Patryk Zawadzki +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from github2.core import BaseData, GithubCommand, Attribute, requires_auth from github2.repositories import Repository from github2.users import User diff --git a/github2/users.py b/github2/users.py index ad40fc1..e2c9c58 100644 --- a/github2/users.py +++ b/github2/users.py @@ -1,3 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2009-2012 Ask Solem +# James Rowe +# Sameer Al-Sakran +# Stéphane Angel +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + try: from urllib.parse import quote_plus # For Python 3 except ImportError: diff --git a/setup.py b/setup.py index 8613f1f..06c56bb 100755 --- a/setup.py +++ b/setup.py @@ -1,5 +1,15 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# Copyright (C) 2009-2012 Ask Solem +# Cody Soyland +# Donald von Stufft +# James Rowe +# Maximillian Dornseif +# Michael Basnight +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + import codecs import sys diff --git a/tests/test_charset_header.py b/tests/test_charset_header.py index 40aff70..3b29635 100644 --- a/tests/test_charset_header.py +++ b/tests/test_charset_header.py @@ -1,3 +1,8 @@ +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from nose.tools import assert_equals from github2.request import charset_from_headers diff --git a/tests/test_commits.py b/tests/test_commits.py index 5d4ee8e..20ed487 100644 --- a/tests/test_commits.py +++ b/tests/test_commits.py @@ -1,3 +1,8 @@ +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from datetime import datetime from nose.tools import assert_equals diff --git a/tests/test_date_handling.py b/tests/test_date_handling.py index fabc8d5..855ccae 100644 --- a/tests/test_date_handling.py +++ b/tests/test_date_handling.py @@ -1,4 +1,8 @@ # -*- coding: utf-8 -*- +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. from datetime import datetime as dt diff --git a/tests/test_issues.py b/tests/test_issues.py index dfd693e..f82302b 100644 --- a/tests/test_issues.py +++ b/tests/test_issues.py @@ -1,3 +1,8 @@ +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from datetime import datetime from nose.tools import assert_equals diff --git a/tests/test_organizations.py b/tests/test_organizations.py index 9f4e56b..8571e23 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -1,3 +1,8 @@ +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from datetime import datetime from nose.tools import (assert_equals, assert_true) diff --git a/tests/test_pull_requests.py b/tests/test_pull_requests.py index 50197ce..9c2d35e 100644 --- a/tests/test_pull_requests.py +++ b/tests/test_pull_requests.py @@ -1,3 +1,8 @@ +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from datetime import datetime from nose.tools import assert_equals diff --git a/tests/test_regression.py b/tests/test_regression.py index a2b235c..cad7dc2 100644 --- a/tests/test_regression.py +++ b/tests/test_regression.py @@ -1,3 +1,8 @@ +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + import httplib2 from nose.tools import assert_equals diff --git a/tests/test_repositories.py b/tests/test_repositories.py index 63f39c0..1cdaab9 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -1,3 +1,10 @@ +# coding: utf-8 +# Copyright (C) 2011-2012 James Rowe +# Stéphane Angel +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + import datetime from nose.tools import assert_equals diff --git a/tests/test_request.py b/tests/test_request.py index 7c7f93b..0833c00 100644 --- a/tests/test_request.py +++ b/tests/test_request.py @@ -1,3 +1,8 @@ +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + import unittest try: diff --git a/tests/test_teams.py b/tests/test_teams.py index 85689aa..7333edd 100644 --- a/tests/test_teams.py +++ b/tests/test_teams.py @@ -1,3 +1,8 @@ +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + from nose.tools import assert_equals import utils diff --git a/tests/test_tz_aware_date_handling.py b/tests/test_tz_aware_date_handling.py index 5789593..6a501f0 100644 --- a/tests/test_tz_aware_date_handling.py +++ b/tests/test_tz_aware_date_handling.py @@ -1,4 +1,8 @@ # -*- coding: utf-8 -*- +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. from datetime import datetime as dt diff --git a/tests/test_unit.py b/tests/test_unit.py index 7cd3113..f17f9a0 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -1,4 +1,11 @@ # -*- coding: utf-8 -*- +# Copyright (C) 2010-2012 Adam Vandenberg +# James Rowe +# Jeremy Dunck +# modocache +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. import datetime import unittest diff --git a/tests/test_user.py b/tests/test_user.py index aff6ad5..33929db 100644 --- a/tests/test_user.py +++ b/tests/test_user.py @@ -1,3 +1,8 @@ +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + import datetime from nose.tools import (assert_equals, assert_false, assert_true) diff --git a/tests/utils.py b/tests/utils.py index 78fb8c4..598b068 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,3 +1,8 @@ +# Copyright (C) 2011-2012 James Rowe +# +# This file is part of python-github2, and is made available under the 3-clause +# BSD license. See LICENSE for the full details. + import os import sys import unittest From cd436188df09605ad35deef5e80caec0cc9ca6f2 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 11:39:18 +0100 Subject: [PATCH 099/129] [QA] Clean up the ignore list. --- .gitignore | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index ea2d6d3..241d83f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,17 @@ -.DS_Store -.coverage -.noseids -.ropeproject/ -.tox/ -*.py[co] -*~ -*.sqlite -*.sqlite-journal -settings_local.py -local_settings.py +*.egg-info/ + .*.sw[po] +*.py[co] + +build/ dist/ -*.egg-info doc/.build/ -build/ -locale/ +.ropeproject/ +.tox/ + +ChangeLog pip-log.txt + +.DS_Store +.coverage +.noseids From f5324acc71fda0792a1e7e54d7d9fb5c5aa1bb7e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 15:40:41 +0100 Subject: [PATCH 100/129] [QA] Use Git*H*ub for the service name. --- README.rst | 6 +++--- doc/index.rst | 8 ++++---- examples/friend-or-follow.py | 4 ++-- github2/client.py | 8 ++++---- github2/core.py | 6 +++--- github2/issues.py | 16 ++++++++-------- github2/pull_requests.py | 8 ++++---- github2/repositories.py | 24 ++++++++++++------------ github2/request.py | 4 ++-- github2/users.py | 20 ++++++++++---------- 10 files changed, 52 insertions(+), 52 deletions(-) diff --git a/README.rst b/README.rst index 3e6ab34..a266014 100644 --- a/README.rst +++ b/README.rst @@ -1,5 +1,5 @@ ================================================================================ -github2 - Github API v2 library for Python. +github2 - GitHub API v2 library for Python. ================================================================================ :Authors: @@ -16,7 +16,7 @@ github2 - Github API v2 library for Python. of work needed in moving away from GitHub's API v2. This is a Python library implementing all of the features available in version 2 -of the `Github API`_. +of the `GitHub API`_. See the ``doc/`` directory for installation instructions and usage information. If you prefer you can also read the `documentation online`_. @@ -24,7 +24,7 @@ If you prefer you can also read the `documentation online`_. .. _switch off API v2: https://github.com/blog/1090-github-api-moving-on .. _remoteobjects: https://github.com/saymedia/remoteobjects .. _micromodels: https://github.com/j4mie/micromodels -.. _Github API: http://develop.github.com/ +.. _GitHub API: http://develop.github.com/ .. _documentation online: http://packages.python.org/github2 License diff --git a/doc/index.rst b/doc/index.rst index 55814bf..93438c9 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -10,7 +10,7 @@ .. module:: github2 :synopsis: GitHub API v2 library for Python -``github2`` - Github API v2 library for Python +``github2`` - GitHub API v2 library for Python ============================================== .. warning:: @@ -31,15 +31,15 @@ :class: sidebar This is a Python library implementing all of the features available in version 2 -of the `Github API`_. +of the `GitHub API`_. -You should read the developer documentation for the `Github API`_ first. +You should read the developer documentation for the `GitHub API`_ first. :Git repository: https://github.com/ask/python-github2/ :Issue tracker: https://github.com/ask/python-github2/issues/ :Contributors: https://github.com/ask/python-github2/contributors/ -.. _Github API: http://develop.github.com/ +.. _GitHub API: http://develop.github.com/ Contents -------- diff --git a/examples/friend-or-follow.py b/examples/friend-or-follow.py index ccef96a..55b6b8d 100644 --- a/examples/friend-or-follow.py +++ b/examples/friend-or-follow.py @@ -10,10 +10,10 @@ OPTION_LIST = ( optparse.make_option('-t', '--api-token', default=None, action="store", dest="api_token", type="str", - help="Github API token. Default is to find this from git config"), + help="GitHub API token. Default is to find this from git config"), optparse.make_option('-u', '--api-user', default=None, action="store", dest="api_user", type="str", - help="Github Username. Default is to find this from git config"), + help="GitHub Username. Default is to find this from git config"), ) BY_LOWER = lambda value: value.lower() diff --git a/github2/client.py b/github2/client.py index c585f3b..a141879 100644 --- a/github2/client.py +++ b/github2/client.py @@ -59,7 +59,7 @@ def __init__(self, username=None, api_token=None, requests_per_second=None, self.pull_requests = PullRequests(self.request) def project_for_user_repo(self, user, repo): - """Return Github identifier for a user's repository + """Return GitHub identifier for a user's repository :param str user: repository owner :param str repo: repository name @@ -97,7 +97,7 @@ def get_tree(self, project, tree_sha): return tree.get("tree", []) def get_network_meta(self, project): - """Get Github metadata associated with a project + """Get GitHub metadata associated with a project :param str project: GitHub project """ @@ -106,10 +106,10 @@ def get_network_meta(self, project): "network_meta"]), {}) def get_network_data(self, project, nethash, start=None, end=None): - """Get chunk of Github network data + """Get chunk of GitHub network data :param str project: GitHub project - :param str nethash: identifier provided by ``get_network_meta`` + :param str nethash: identifier provided by :meth:`get_network_meta` :param int start: optional start point for data :param int stop: optional end point for data """ diff --git a/github2/core.py b/github2/core.py index 856a489..a83dd6d 100644 --- a/github2/core.py +++ b/github2/core.py @@ -59,7 +59,7 @@ def wrapper(datetime_): @_handle_naive_datetimes def datetime_to_ghdate(datetime_): - """Convert Python datetime to Github date string + """Convert Python datetime to GitHub date string :param datetime datetime_: datetime object to convert """ @@ -68,7 +68,7 @@ def datetime_to_ghdate(datetime_): @_handle_naive_datetimes def datetime_to_commitdate(datetime_): - """Convert Python datetime to Github date string + """Convert Python datetime to GitHub date string :param datetime datetime_: datetime object to convert """ @@ -80,7 +80,7 @@ def datetime_to_commitdate(datetime_): def datetime_to_isodate(datetime_): - """Convert Python datetime to Github date string + """Convert Python datetime to GitHub date string :param str datetime_: datetime object to convert diff --git a/github2/issues.py b/github2/issues.py index 851f813..ae6ef48 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -86,7 +86,7 @@ def show(self, project, number): """Get all the data for issue by issue-number. :param str project: GitHub project - :param int number: issue number in the Github database + :param int number: issue number in the GitHub database """ return self.get_value("show", project, str(number), filter="issue", datatype=Issue) @@ -108,7 +108,7 @@ def close(self, project, number): """Close an issue :param str project: GitHub project - :param int number: issue number in the Github database + :param int number: issue number in the GitHub database """ return self.get_value("close", project, str(number), filter="issue", datatype=Issue, method="POST") @@ -120,7 +120,7 @@ def reopen(self, project, number): .. versionadded:: 0.3.0 :param str project: GitHub project - :param int number: issue number in the Github database + :param int number: issue number in the GitHub database """ return self.get_value("reopen", project, str(number), filter="issue", datatype=Issue, method="POST") @@ -132,7 +132,7 @@ def edit(self, project, number, title, body): .. versionadded:: 0.3.0 :param str project: GitHub project - :param int number: issue number in the Github database + :param int number: issue number in the GitHub database :param str title: title for issue :param str body: body for issue """ @@ -146,7 +146,7 @@ def add_label(self, project, number, label): """Add a label to an issue :param str project: GitHub project - :param int number: issue number in the Github database + :param int number: issue number in the GitHub database :param str label: label to attach to issue """ return self.get_values("label/add", project, label, str(number), @@ -157,7 +157,7 @@ def remove_label(self, project, number, label): """Remove an existing label from an issue :param str project: GitHub project - :param int number: issue number in the Github database + :param int number: issue number in the GitHub database :param str label: label to remove from issue """ return self.get_values("label/remove", project, label, str(number), @@ -168,7 +168,7 @@ def comment(self, project, number, comment): """Comment on an issue. :param str project: GitHub project - :param int number: issue number in the Github database + :param int number: issue number in the GitHub database :param str comment: comment to attach to issue """ comment_data = {'comment': comment} @@ -180,7 +180,7 @@ def comments(self, project, number): """View comments on an issue. :param str project: GitHub project - :param int number: issue number in the Github database + :param int number: issue number in the GitHub database """ return self.get_values("comments", project, str(number), filter="comments", datatype=Comment) diff --git a/github2/pull_requests.py b/github2/pull_requests.py index b75d62e..fa13b48 100644 --- a/github2/pull_requests.py +++ b/github2/pull_requests.py @@ -53,7 +53,7 @@ def create(self, project, base, head, title=None, body=None, issue=None): issue. If an ``issue`` parameter is supplied the pull request is attached to that issue, else a new pull request is created. - :param str project: the Github project to send the pull request to + :param str project: the GitHub project to send the pull request to :param str base: branch changes should be pulled into :param str head: branch of the changes to be pulled :param str title: title for pull request @@ -78,8 +78,8 @@ def create(self, project, base, head, title=None, body=None, issue=None): def show(self, project, number): """Show a single pull request - :param str project: Github project - :param int number: pull request number in the Github database + :param str project: GitHub project + :param int number: pull request number in the GitHub database """ return self.get_value(project, str(number), filter="pull", datatype=PullRequest) @@ -87,7 +87,7 @@ def show(self, project, number): def list(self, project, state="open", page=1): """List all pull requests for a project - :param str project: Github project + :param str project: GitHub project :param str state: can be either ``open`` or ``closed`` :param int page: optional page number """ diff --git a/github2/repositories.py b/github2/repositories.py index 89f8e57..501ffbb 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -73,7 +73,7 @@ def list(self, user=None, page=1): logged-in user when ``user`` wasn't supplied. This functionality is brittle and will be removed in a future release! - :param str user: Github user name to list repositories for + :param str user: GitHub user name to list repositories for :param int page: optional page number """ user = user or self.request.username @@ -160,8 +160,8 @@ def list_collaborators(self, project): def add_collaborator(self, project, username): """Adds an add_collaborator to a repo - :param str project: Github project - :param str username: Github user to add as collaborator + :param str project: GitHub project + :param str username: GitHub user to add as collaborator """ return self.make_request("collaborators", project, "add", username, method="POST") @@ -170,8 +170,8 @@ def add_collaborator(self, project, username): def remove_collaborator(self, project, username): """Removes an add_collaborator from a repo - :param str project: Github project - :param str username: Github user to add as collaborator + :param str project: GitHub project + :param str username: GitHub user to add as collaborator """ return self.make_request("collaborators", project, "remove", username, method="POST") @@ -179,7 +179,7 @@ def remove_collaborator(self, project, username): def network(self, project): """Get network data for project - :param str project: Github project + :param str project: GitHub project """ return self.get_values("show", project, "network", filter="network", datatype=Repository) @@ -187,7 +187,7 @@ def network(self, project): def languages(self, project): """Get programming language data for project - :param str project: Github project + :param str project: GitHub project """ return self.get_values("show", project, "languages", filter="languages") @@ -195,28 +195,28 @@ def languages(self, project): def tags(self, project): """Get tags for project - :param str project: Github project + :param str project: GitHub project """ return self.get_values("show", project, "tags", filter="tags") def branches(self, project): """Get branch names for project - :param str project: Github project + :param str project: GitHub project """ return self.get_values("show", project, "branches", filter="branches") def watchers(self, project): """Get list of watchers for project - :param str project: Github project + :param str project: GitHub project """ return self.get_values("show", project, "watchers", filter="watchers") def watching(self, for_user=None, page=None): """Lists all the repos a user is watching - :param str for_user: optional Github user name to list repositories for + :param str for_user: optional GitHub user name to list repositories for :param int page: optional page number """ for_user = for_user or self.request.username @@ -226,7 +226,7 @@ def watching(self, for_user=None, page=None): def list_contributors(self, project): """Lists all the contributors in a project - :param str project: Github project + :param str project: GitHub project """ return self.get_values("show", project, "contributors", filter="contributors", datatype=User) diff --git a/github2/request.py b/github2/request.py index 9aea264..c05ea97 100644 --- a/github2/request.py +++ b/github2/request.py @@ -81,11 +81,11 @@ def charset_from_headers(headers): class GithubError(Exception): - """An error occurred when making a request to the Github API.""" + """An error occurred when making a request to the GitHub API.""" class HttpError(RuntimeError): - """A HTTP error occured when making a request to the Github API.""" + """A HTTP error occured when making a request to the GitHub API.""" def __init__(self, message, content, code): """Create a HttpError exception diff --git a/github2/users.py b/github2/users.py index ad40fc1..d6fd9ac 100644 --- a/github2/users.py +++ b/github2/users.py @@ -73,42 +73,42 @@ def search_by_email(self, query): @enhanced_by_auth def show(self, username): - """Get information on Github user + """Get information on GitHub user if ``username`` is ``None`` or an empty string information for the currently authenticated user is returned. - :param str username: Github user name + :param str username: GitHub user name """ return self.get_value("show", username, filter="user", datatype=User) def followers(self, username): - """Get list of Github user's followers + """Get list of GitHub user's followers - :param str username: Github user name + :param str username: GitHub user name """ return self.get_values("show", username, "followers", filter="users") def following(self, username): - """Get list of users a Github user is following + """Get list of users a GitHub user is following - :param str username: Github user name + :param str username: GitHub user name """ return self.get_values("show", username, "following", filter="users") @requires_auth def follow(self, other_user): - """Follow a Github user + """Follow a GitHub user - :param str other_user: Github user name + :param str other_user: GitHub user name """ return self.get_values("follow", other_user, method="POST") @requires_auth def unfollow(self, other_user): - """Unfollow a Github user + """Unfollow a GitHub user - :param str other_user: Github user name + :param str other_user: GitHub user name """ return self.get_values("unfollow", other_user, method="POST") From 71f17c902f8a90d2aaffa06c9e40cd521941716e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 15:41:05 +0100 Subject: [PATCH 101/129] [QA] Function notes come before param docs. --- github2/core.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/github2/core.py b/github2/core.py index a83dd6d..3aed7c1 100644 --- a/github2/core.py +++ b/github2/core.py @@ -82,9 +82,10 @@ def datetime_to_commitdate(datetime_): def datetime_to_isodate(datetime_): """Convert Python datetime to GitHub date string + .. note:: Supports naive and timezone-aware datetimes + :param str datetime_: datetime object to convert - .. note:: Supports naive and timezone-aware datetimes """ if not datetime_.tzinfo: datetime_ = datetime_.replace(tzinfo=tz.tzutc()) From 6dcda6be8047f1672ed598a141ef4e7ac7d3711e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 15:41:23 +0100 Subject: [PATCH 102/129] Fixed broken deprecated Sphinx directive. --- github2/repositories.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github2/repositories.py b/github2/repositories.py index 501ffbb..2d52fed 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -68,7 +68,7 @@ def pushable(self): def list(self, user=None, page=1): """Return a list of all repositories for a user. - .. deprecated: 0.4.0 + .. deprecated:: 0.4.0 Previous releases would attempt to display repositories for the logged-in user when ``user`` wasn't supplied. This functionality is brittle and will be removed in a future release! From 3a820369c94e9c521a7221cd12efca50abaa6ba1 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 15:47:16 +0100 Subject: [PATCH 103/129] [QA] Minor grammar fix in contributing doc. More fixes always welcome. --- doc/contributing.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/contributing.rst b/doc/contributing.rst index 8c3b47a..7c71bb2 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -4,9 +4,9 @@ Contributing Patches for :mod:`github2` are most welcome! Forks on GitHub_ and patches attached to issues are both great ways to -contribute. If you're comfortable with ``git`` using a fork hosted on GitHub is -probably the simpler solution, both for the package maintainers and you as a -contributor. +contribute. If you're comfortable with ``git`` then using a fork hosted on +GitHub is probably the simpler solution, both for the :mod:`github2` maintainers +and for you as a contributor. Following the simple guidelines below makes it easier to review and integrate your changes: From ec36b5772085c908d600f2171d622bfd690d7a2d Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 15:23:44 +0100 Subject: [PATCH 104/129] [QA] Follow PEP 257 whitespace rules. --- github2/bin/manage_collaborators.py | 4 ++- github2/bin/search_repos.py | 4 ++- github2/client.py | 10 +++++-- github2/commits.py | 2 ++ github2/core.py | 21 ++++++++++++++- github2/issues.py | 20 +++++++++++--- github2/organizations.py | 6 +++++ github2/pull_requests.py | 11 ++++++-- github2/repositories.py | 41 ++++++++++++++++++++++------- github2/request.py | 9 +++++-- github2/teams.py | 10 +++++++ github2/users.py | 22 +++++++++++----- 12 files changed, 131 insertions(+), 29 deletions(-) diff --git a/github2/bin/manage_collaborators.py b/github2/bin/manage_collaborators.py index 3efafee..5e585d2 100755 --- a/github2/bin/manage_collaborators.py +++ b/github2/bin/manage_collaborators.py @@ -26,7 +26,9 @@ def print_(text): """Python 2 & 3 compatible print function - We support <2.6, so can't use __future__.print_function""" + We support <2.6, so can't use __future__.print_function + + """ if PY3K: print(text) else: diff --git a/github2/bin/search_repos.py b/github2/bin/search_repos.py index c52be46..737caa2 100755 --- a/github2/bin/search_repos.py +++ b/github2/bin/search_repos.py @@ -19,7 +19,9 @@ def print_(text): """Python 2 & 3 compatible print function - We support <2.6, so can't use __future__.print_function""" + We support <2.6, so can't use __future__.print_function + + """ if PY3K: print(text) else: diff --git a/github2/client.py b/github2/client.py index a141879..7b3d8eb 100644 --- a/github2/client.py +++ b/github2/client.py @@ -13,8 +13,7 @@ class Github(object): def __init__(self, username=None, api_token=None, requests_per_second=None, access_token=None, cache=None, proxy_host=None, proxy_port=8080, github_url=None): - """ - An interface to GitHub's API: + """An interface to GitHub's API: http://develop.github.com/ .. versionadded:: 0.2.0 @@ -42,6 +41,7 @@ def __init__(self, username=None, api_token=None, requests_per_second=None, default to 8080 if a proxy_host is set and no port is set). :param str github_url: the hostname to connect to, for GitHub Enterprise support + """ self.request = GithubRequest(username=username, api_token=api_token, @@ -63,6 +63,7 @@ def project_for_user_repo(self, user, repo): :param str user: repository owner :param str repo: repository name + """ return "/".join([user, repo]) @@ -73,6 +74,7 @@ def get_all_blobs(self, project, tree_sha): :param str project: GitHub project :param str tree_sha: object ID of tree + """ blobs = self.request.get("blob/all", project, tree_sha) return blobs.get("blobs") @@ -83,6 +85,7 @@ def get_blob_info(self, project, tree_sha, path): :param str project: GitHub project :param str tree_sha: object ID of tree :param str path: path within tree to fetch blob for + """ blob = self.request.get("blob/show", project, tree_sha, path) return blob.get("blob") @@ -92,6 +95,7 @@ def get_tree(self, project, tree_sha): :param str project: GitHub project :param str tree_sha: object ID of tree + """ tree = self.request.get("tree/show", project, tree_sha) return tree.get("tree", []) @@ -100,6 +104,7 @@ def get_network_meta(self, project): """Get GitHub metadata associated with a project :param str project: GitHub project + """ return self.request.raw_request("/".join([self.request.github_url, project, @@ -112,6 +117,7 @@ def get_network_data(self, project, nethash, start=None, end=None): :param str nethash: identifier provided by :meth:`get_network_meta` :param int start: optional start point for data :param int stop: optional end point for data + """ data = {"nethash": nethash} if start: diff --git a/github2/commits.py b/github2/commits.py index 8910937..7030a40 100644 --- a/github2/commits.py +++ b/github2/commits.py @@ -39,6 +39,7 @@ def list(self, project, branch="master", file=None, page=1): :param str branch: branch name, or ``master`` if not given :param str file: optional file filter :param int page: optional page number + """ return self.get_values("list", project, branch, file, filter="commits", datatype=Commit, page=page) @@ -48,6 +49,7 @@ def show(self, project, sha): :param str project: project name :param str sha: commit id + """ return self.get_value("show", project, sha, filter="commit", datatype=Commit) diff --git a/github2/core.py b/github2/core.py index 3aed7c1..e783456 100644 --- a/github2/core.py +++ b/github2/core.py @@ -30,6 +30,7 @@ def string_to_datetime(string): """Convert a string to Python datetime :param str github_date: date string to parse + """ parsed = parser.parse(string) if NAIVE: @@ -41,6 +42,7 @@ def _handle_naive_datetimes(f): """Decorator to make datetime arguments use GitHub timezone :param func f: Function to wrap + """ def wrapper(datetime_): if not datetime_.tzinfo: @@ -62,6 +64,7 @@ def datetime_to_ghdate(datetime_): """Convert Python datetime to GitHub date string :param datetime datetime_: datetime object to convert + """ return datetime_.strftime(GITHUB_DATE_FORMAT) @@ -71,6 +74,7 @@ def datetime_to_commitdate(datetime_): """Convert Python datetime to GitHub date string :param datetime datetime_: datetime object to convert + """ date_without_tz = datetime_.strftime(COMMIT_DATE_FORMAT) utcoffset = GITHUB_TZ.utcoffset(datetime_) @@ -95,7 +99,8 @@ def datetime_to_isodate(datetime_): class AuthError(Exception): - """Requires authentication""" + + """Requires authentication.""" def requires_auth(f): @@ -105,6 +110,7 @@ def requires_auth(f): :param func f: Function to wrap :raises AuthError: If function called without an authenticated session + """ # When Python 2.4 support is dropped move straight to functools.wraps, # don't pass go and don't collect $200. @@ -129,6 +135,7 @@ def enhanced_by_auth(f): introspection. :param func f: Function to wrap + """ f.enhanced_by_auth = True f.__doc__ += """\n.. note:: This call is enhanced with authentication""" @@ -141,6 +148,7 @@ def __init__(self, request): """Main API binding interface :param github2.request.GithubRequest request: HTTP request handler + """ self.request = request @@ -155,6 +163,7 @@ def make_request(self, command, *args, **kwargs): data * The value of a ``page`` argument will be used to fetch a specific page of results, default of 1 is assumed if not given + """ filter = kwargs.get("filter") post_data = kwargs.get("post_data") or {} @@ -182,6 +191,7 @@ def get_value(self, *args, **kwargs): If a ``datatype`` parameter is given it defines the :class:`BaseData`-derived class we should build from the provided data + """ datatype = kwargs.pop("datatype", None) value = self.make_request(*args, **kwargs) @@ -200,6 +210,7 @@ def get_values(self, *args, **kwargs): """Process a multi-value response from the API :see: :meth:`get_value` + """ datatype = kwargs.pop("datatype", None) values = self.make_request(*args, **kwargs) @@ -221,6 +232,7 @@ def doc_generator(docstring, attributes): :param str docstring: docstring to augment :param dict attributes: attributes to add to docstring + """ docstring = docstring or "" @@ -237,6 +249,7 @@ def __init__(self, help): """Generic object attribute for use with :class:`BaseData` :param str help: Attribute description + """ self.help = help @@ -260,6 +273,7 @@ def __init__(self, *args, **kwargs): :param str format: The date format to support, see :data:`convertor_for_format` for supported options + """ self.format = kwargs.pop("format", self.format) super(DateAttribute, self).__init__(*args, **kwargs) @@ -318,12 +332,15 @@ class BaseData(BaseDataType('BaseData', (object, ), {})): .. warning:: Supports subscript attribute access purely for backwards compatibility, you shouldn't rely on that functionality in new code + """ + def __getitem__(self, key): """Access objects's attribute using subscript notation This is here purely to maintain compatibility when switching ``dict`` responses to ``BaseData`` derived objects. + """ LOGGER.warning("Subscript access on %r is deprecated, use object " "attributes" % self.__class__.__name__, @@ -336,6 +353,7 @@ def __setitem__(self, key, value): """Update object's attribute using subscript notation :see: :meth:`BaseData.__getitem__` + """ LOGGER.warning("Subscript access on %r is deprecated, use object " "attributes" % self.__class__.__name__, @@ -350,6 +368,7 @@ def repr_string(string): :param str string: string to operate on :return: string, with maximum length of 20 characters + """ if len(string) > 20: string = string[:17] + '...' diff --git a/github2/issues.py b/github2/issues.py index ae6ef48..ad7aa35 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -49,6 +49,7 @@ def search(self, project, term, state="open"): :param str project: GitHub project :param str term: term to search issues for :param str state: can be either ``open`` or ``closed``. + """ return self.get_values("search", project, state, quote_plus(term), filter="issues", datatype=Issue) @@ -58,6 +59,7 @@ def list(self, project, state="open"): :param str project: GitHub project :param str state: can be either ``open`` or ``closed``. + """ return self.get_values("list", project, state, filter="issues", datatype=Issue) @@ -69,6 +71,7 @@ def list_by_label(self, project, label): :param str project: GitHub project :param str label: a string representing a label (e.g., ``bug``). + """ return self.get_values("list", project, "label", label, filter="issues", datatype=Issue) @@ -79,6 +82,7 @@ def list_labels(self, project): .. versionadded:: 0.3.0 :param str project: GitHub project + """ return self.get_values("labels", project, filter="labels") @@ -86,7 +90,8 @@ def show(self, project, number): """Get all the data for issue by issue-number. :param str project: GitHub project - :param int number: issue number in the GitHub database + :param int number: issue number in the Github database + """ return self.get_value("show", project, str(number), filter="issue", datatype=Issue) @@ -98,6 +103,7 @@ def open(self, project, title, body): :param str project: GitHub project :param str title: title for issue :param str body: body for issue + """ issue_data = {"title": title, "body": body} return self.get_value("open", project, post_data=issue_data, @@ -108,7 +114,8 @@ def close(self, project, number): """Close an issue :param str project: GitHub project - :param int number: issue number in the GitHub database + :param int number: issue number in the Github database + """ return self.get_value("close", project, str(number), filter="issue", datatype=Issue, method="POST") @@ -120,7 +127,8 @@ def reopen(self, project, number): .. versionadded:: 0.3.0 :param str project: GitHub project - :param int number: issue number in the GitHub database + :param int number: issue number in the Github database + """ return self.get_value("reopen", project, str(number), filter="issue", datatype=Issue, method="POST") @@ -135,6 +143,7 @@ def edit(self, project, number, title, body): :param int number: issue number in the GitHub database :param str title: title for issue :param str body: body for issue + """ issue_data = {"title": title, "body": body} return self.get_value("edit", project, str(number), @@ -148,6 +157,7 @@ def add_label(self, project, number, label): :param str project: GitHub project :param int number: issue number in the GitHub database :param str label: label to attach to issue + """ return self.get_values("label/add", project, label, str(number), filter="labels", method="POST") @@ -159,6 +169,7 @@ def remove_label(self, project, number, label): :param str project: GitHub project :param int number: issue number in the GitHub database :param str label: label to remove from issue + """ return self.get_values("label/remove", project, label, str(number), filter="labels", method="POST") @@ -170,6 +181,7 @@ def comment(self, project, number, comment): :param str project: GitHub project :param int number: issue number in the GitHub database :param str comment: comment to attach to issue + """ comment_data = {'comment': comment} return self.get_value("comment", project, str(number), @@ -180,7 +192,7 @@ def comments(self, project, number): """View comments on an issue. :param str project: GitHub project - :param int number: issue number in the GitHub database + """ return self.get_values("comments", project, str(number), filter="comments", datatype=Comment) diff --git a/github2/organizations.py b/github2/organizations.py index 38eac83..8baa328 100644 --- a/github2/organizations.py +++ b/github2/organizations.py @@ -42,6 +42,7 @@ def show(self, organization): """Get information on organization :param str organization: organization to show + """ return self.get_value(organization, filter="organization", datatype=Organization) @@ -58,6 +59,7 @@ def repositories(self, organization=''): repositories for all organizations the authenticated user belongs to. :param: str organization: organization to list repositories for + """ return self.get_values(organization, 'repositories', filter="repositories", datatype=Repository) @@ -66,6 +68,7 @@ def public_repositories(self, organization): """Get list of public repositories in an organization :param str organization: organization to list public repositories for + """ return self.get_values(organization, 'public_repositories', filter="repositories", datatype=Repository) @@ -74,6 +77,7 @@ def public_members(self, organization): """Get list of public members in an organization :param str organization: organization to list members for + """ return self.get_values(organization, 'public_members', filter="users", datatype=User) @@ -82,6 +86,7 @@ def teams(self, organization): """Get list of teams in an organization :param str organization: organization to list teams for + """ return self.get_values(organization, 'teams', filter="teams", datatype=Team) @@ -94,6 +99,7 @@ def add_team(self, organization, name, permission='pull', projects=None): :param str team: name of team to add :param str permission: permissions for team(push, pull or admin) :param list projects: optional GitHub projects for this team + """ team_data = {'team[name]': name, 'team[permission]': permission} if projects: diff --git a/github2/pull_requests.py b/github2/pull_requests.py index fa13b48..9a0ba58 100644 --- a/github2/pull_requests.py +++ b/github2/pull_requests.py @@ -6,7 +6,9 @@ class PullRequest(BaseData): """Pull request encapsulation .. versionadded:: 0.5.0 + """ + state = Attribute("The pull request state") base = Attribute("The base repo") head = Attribute("The head of the pull request") @@ -43,7 +45,9 @@ class PullRequests(GithubCommand): """Operations on pull requests .. versionadded:: 0.5.0 + """ + domain = "pulls" def create(self, project, base, head, title=None, body=None, issue=None): @@ -59,6 +63,7 @@ def create(self, project, base, head, title=None, body=None, issue=None): :param str title: title for pull request :param str body: optional body for pull request :param str issue: existing issue to attach pull request to + """ post_data = {"base": base, "head": head} if issue: @@ -78,8 +83,9 @@ def create(self, project, base, head, title=None, body=None, issue=None): def show(self, project, number): """Show a single pull request - :param str project: GitHub project - :param int number: pull request number in the GitHub database + :param str project: Github project + :param int number: pull request number in the Github database + """ return self.get_value(project, str(number), filter="pull", datatype=PullRequest) @@ -90,6 +96,7 @@ def list(self, project, state="open", page=1): :param str project: GitHub project :param str state: can be either ``open`` or ``closed`` :param int page: optional page number + """ return self.get_values(project, state, filter="pulls", datatype=PullRequest, page=page) diff --git a/github2/repositories.py b/github2/repositories.py index 2d52fed..4f9b0cf 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -44,6 +44,7 @@ def search(self, query): Returns at most 100 repositories :param str query: term to search issues for + """ return self.get_values("search", query, filter="repositories", datatype=Repository) @@ -52,6 +53,7 @@ def show(self, project): """Get repository object for project. :param str project: GitHub project + """ return self.get_value("show", project, filter="repository", datatype=Repository) @@ -61,6 +63,7 @@ def pushable(self): """Return a list of repos you can push to that are not your own. .. versionadded:: 0.3.0 + """ return self.get_values("pushable", filter="repositories", datatype=Repository) @@ -75,6 +78,7 @@ def list(self, user=None, page=1): :param str user: GitHub user name to list repositories for :param int page: optional page number + """ user = user or self.request.username return self.get_values("show", user, filter="repositories", @@ -85,6 +89,7 @@ def watch(self, project): """Watch a project :param str project: GitHub project + """ return self.get_value("watch", project, filter='repository', datatype=Repository) @@ -94,6 +99,7 @@ def unwatch(self, project): """Unwatch a project :param str project: GitHub project + """ return self.get_value("unwatch", project, filter='repository', datatype=Repository) @@ -103,6 +109,7 @@ def fork(self, project): """Fork a project :param str project: GitHub project + """ return self.get_value("fork", project, filter="repository", datatype=Repository) @@ -115,6 +122,7 @@ def create(self, project, description=None, homepage=None, public=True): :param str description: optional project description :param str homepage: optional project homepage :param bool public: whether to make a public project + """ repo_data = {"name": project, "description": description, "homepage": homepage, "public": str(int(public))} @@ -126,6 +134,7 @@ def delete(self, project): """Delete a repository :param str project: project name to delete + """ # Two-step delete mechanism. We must echo the delete_token value back # to GitHub to actually delete a repository @@ -137,6 +146,7 @@ def set_private(self, project): """Mark repository as private :param str project: project name to set as private + """ return self.make_request("set/private", project) @@ -145,6 +155,7 @@ def set_public(self, project): """Mark repository as public :param str project: project name to set as public + """ return self.make_request("set/public", project) @@ -152,6 +163,7 @@ def list_collaborators(self, project): """Lists all the collaborators in a project :param str project: GitHub project + """ return self.get_values("show", project, "collaborators", filter="collaborators") @@ -160,8 +172,9 @@ def list_collaborators(self, project): def add_collaborator(self, project, username): """Adds an add_collaborator to a repo - :param str project: GitHub project - :param str username: GitHub user to add as collaborator + :param str project: Github project + :param str username: Github user to add as collaborator + """ return self.make_request("collaborators", project, "add", username, method="POST") @@ -170,8 +183,9 @@ def add_collaborator(self, project, username): def remove_collaborator(self, project, username): """Removes an add_collaborator from a repo - :param str project: GitHub project - :param str username: GitHub user to add as collaborator + :param str project: Github project + :param str username: Github user to add as collaborator + """ return self.make_request("collaborators", project, "remove", username, method="POST") @@ -179,7 +193,8 @@ def remove_collaborator(self, project, username): def network(self, project): """Get network data for project - :param str project: GitHub project + :param str project: Github project + """ return self.get_values("show", project, "network", filter="network", datatype=Repository) @@ -187,7 +202,8 @@ def network(self, project): def languages(self, project): """Get programming language data for project - :param str project: GitHub project + :param str project: Github project + """ return self.get_values("show", project, "languages", filter="languages") @@ -195,21 +211,24 @@ def languages(self, project): def tags(self, project): """Get tags for project - :param str project: GitHub project + :param str project: Github project + """ return self.get_values("show", project, "tags", filter="tags") def branches(self, project): """Get branch names for project - :param str project: GitHub project + :param str project: Github project + """ return self.get_values("show", project, "branches", filter="branches") def watchers(self, project): """Get list of watchers for project - :param str project: GitHub project + :param str project: Github project + """ return self.get_values("show", project, "watchers", filter="watchers") @@ -218,6 +237,7 @@ def watching(self, for_user=None, page=None): :param str for_user: optional GitHub user name to list repositories for :param int page: optional page number + """ for_user = for_user or self.request.username return self.get_values("watched", for_user, filter="repositories", @@ -226,7 +246,8 @@ def watching(self, for_user=None, page=None): def list_contributors(self, project): """Lists all the contributors in a project - :param str project: GitHub project + :param str project: Github project + """ return self.get_values("show", project, "contributors", filter="contributors", datatype=User) diff --git a/github2/request.py b/github2/request.py index c05ea97..12a9363 100644 --- a/github2/request.py +++ b/github2/request.py @@ -71,6 +71,7 @@ def charset_from_headers(headers): :param httplib2.Response headers: Request headers :return: Defined encoding, or default to ASCII + """ match = re.search("charset=([^ ;]+)", headers.get('content-type', "")) if match: @@ -81,17 +82,21 @@ def charset_from_headers(headers): class GithubError(Exception): - """An error occurred when making a request to the GitHub API.""" + + """An error occurred when making a request to the Github API.""" class HttpError(RuntimeError): - """A HTTP error occured when making a request to the GitHub API.""" + + """A HTTP error occured when making a request to the Github API.""" + def __init__(self, message, content, code): """Create a HttpError exception :param str message: Exception string :param str content: Full content of HTTP request :param int code: HTTP status code + """ self.args = (message, content, code) self.message = message diff --git a/github2/teams.py b/github2/teams.py index b46116f..c2c7945 100644 --- a/github2/teams.py +++ b/github2/teams.py @@ -4,7 +4,9 @@ class Team(BaseData): + """.. versionadded:: 0.4.0""" + id = Attribute("The team id") name = Attribute("Name of the team") permission = Attribute("Permissions of the team") @@ -14,13 +16,16 @@ def __repr__(self): class Teams(GithubCommand): + """.. versionadded:: 0.4.0""" + domain = "teams" def show(self, team_id): """Get information on team_id :param int team_id: team to get information for + """ return self.get_value(str(team_id), filter="team", datatype=Team) @@ -28,6 +33,7 @@ def members(self, team_id): """Get list of all team members :param int team_id: team to get information for + """ return self.get_values(str(team_id), "members", filter="users", datatype=User) @@ -38,6 +44,7 @@ def add_member(self, team_id, username): :param int team_id: team to add new member to :param str username: GitHub username to add to team + """ return self.get_values(str(team_id), 'members', method='POST', post_data={'name': username}, filter='users', @@ -47,6 +54,7 @@ def repositories(self, team_id): """Get list of all team repositories :param int team_id: team to get information for + """ return self.get_values(str(team_id), "repositories", filter="repositories", datatype=Repository) @@ -57,6 +65,7 @@ def add_project(self, team_id, project): :param int team_id: team to add repository to :param str project: GitHub project + """ if isinstance(project, Repository): project = project.project @@ -70,6 +79,7 @@ def remove_project(self, team_id, project): :param int team_id: team to remove project from :param str project: GitHub project + """ if isinstance(project, Repository): project = project.project diff --git a/github2/users.py b/github2/users.py index d6fd9ac..50b761e 100644 --- a/github2/users.py +++ b/github2/users.py @@ -43,7 +43,9 @@ class User(BaseData): def is_authenticated(self): """Test for user authentication - :return bool: ``True`` if user is authenticated""" + :return bool: ``True`` if user is authenticated + + """ return self.plan is not None def __repr__(self): @@ -60,6 +62,7 @@ def search(self, query): Returns at most 100 users :param str query: term to search for + """ return self.get_values("search", quote_plus(query), filter="users", datatype=User) @@ -68,6 +71,7 @@ def search_by_email(self, query): """Search for users by email address :param str query: email to search for + """ return self.get_value("email", query, filter="user", datatype=User) @@ -78,21 +82,23 @@ def show(self, username): if ``username`` is ``None`` or an empty string information for the currently authenticated user is returned. - :param str username: GitHub user name + """ return self.get_value("show", username, filter="user", datatype=User) def followers(self, username): """Get list of GitHub user's followers - :param str username: GitHub user name + :param str username: Github user name + """ return self.get_values("show", username, "followers", filter="users") def following(self, username): """Get list of users a GitHub user is following - :param str username: GitHub user name + :param str username: Github user name + """ return self.get_values("show", username, "following", filter="users") @@ -100,7 +106,8 @@ def following(self, username): def follow(self, other_user): """Follow a GitHub user - :param str other_user: GitHub user name + :param str other_user: Github user name + """ return self.get_values("follow", other_user, method="POST") @@ -108,7 +115,8 @@ def follow(self, other_user): def unfollow(self, other_user): """Unfollow a GitHub user - :param str other_user: GitHub user name + :param str other_user: Github user name + """ return self.get_values("unfollow", other_user, method="POST") @@ -123,6 +131,7 @@ def add_key(self, key, title=''): :param str key: SSH key identifier :param str title: Optional title for the SSH key + """ return self.get_values("key/add", post_data={'key': key, 'title': title}, @@ -134,6 +143,7 @@ def remove_key(self, key_id): """Remove a SSH key for the authenticated user :param int key_id: SSH key's GitHub identifier + """ return self.get_values('key/remove', post_data={'id': str(key_id)}, filter='public_keys', datatype=Key) From d4441b921c83437bd65cf62df6170224dc6e6fee Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 15:28:50 +0100 Subject: [PATCH 105/129] [QA] Use PEP 257 punctuation guidelines. --- github2/bin/manage_collaborators.py | 6 ++--- github2/bin/search_repos.py | 6 ++--- github2/client.py | 12 ++++----- github2/commits.py | 4 +-- github2/core.py | 40 ++++++++++++++--------------- github2/issues.py | 16 ++++++------ github2/organizations.py | 14 +++++----- github2/pull_requests.py | 10 ++++---- github2/repositories.py | 34 ++++++++++++------------ github2/request.py | 4 +-- github2/teams.py | 12 ++++----- github2/users.py | 22 ++++++++-------- 12 files changed, 90 insertions(+), 90 deletions(-) diff --git a/github2/bin/manage_collaborators.py b/github2/bin/manage_collaborators.py index 5e585d2..79da700 100755 --- a/github2/bin/manage_collaborators.py +++ b/github2/bin/manage_collaborators.py @@ -24,7 +24,7 @@ def print_(text): - """Python 2 & 3 compatible print function + """Python 2 & 3 compatible print function. We support <2.6, so can't use __future__.print_function @@ -36,7 +36,7 @@ def print_(text): def parse_commandline(): - """Parse the comandline and return parsed options.""" + """Parse the command line and return parsed options.""" parser = OptionParser() parser.description = __doc__ @@ -75,7 +75,7 @@ def parse_commandline(): def main(): - """This implements the actual program functionality""" + """Implement the actual program functionality.""" options, args = parse_commandline() diff --git a/github2/bin/search_repos.py b/github2/bin/search_repos.py index 737caa2..895d874 100755 --- a/github2/bin/search_repos.py +++ b/github2/bin/search_repos.py @@ -17,7 +17,7 @@ def print_(text): - """Python 2 & 3 compatible print function + """Python 2 & 3 compatible print function. We support <2.6, so can't use __future__.print_function @@ -29,7 +29,7 @@ def print_(text): def parse_commandline(): - """Parse the comandline and return parsed options.""" + """Parse the command line and return parsed options.""" parser = OptionParser() parser.description = __doc__ @@ -48,7 +48,7 @@ def parse_commandline(): def main(): - """This implements the actual program functionality""" + """Implement the actual program functionality.""" return_value = 0 options, term = parse_commandline() diff --git a/github2/client.py b/github2/client.py index 7b3d8eb..0296be4 100644 --- a/github2/client.py +++ b/github2/client.py @@ -59,7 +59,7 @@ def __init__(self, username=None, api_token=None, requests_per_second=None, self.pull_requests = PullRequests(self.request) def project_for_user_repo(self, user, repo): - """Return GitHub identifier for a user's repository + """Return Github identifier for a user's repository. :param str user: repository owner :param str repo: repository name @@ -68,7 +68,7 @@ def project_for_user_repo(self, user, repo): return "/".join([user, repo]) def get_all_blobs(self, project, tree_sha): - """Get a list of all blobs for a specific tree + """Get a list of all blobs for a specific tree. .. versionadded:: 0.3.0 @@ -80,7 +80,7 @@ def get_all_blobs(self, project, tree_sha): return blobs.get("blobs") def get_blob_info(self, project, tree_sha, path): - """Get the blob for a file within a specific tree + """Get the blob for a file within a specific tree. :param str project: GitHub project :param str tree_sha: object ID of tree @@ -91,7 +91,7 @@ def get_blob_info(self, project, tree_sha, path): return blob.get("blob") def get_tree(self, project, tree_sha): - """Get tree information for a specifc tree + """Get tree information for a specifc tree. :param str project: GitHub project :param str tree_sha: object ID of tree @@ -101,7 +101,7 @@ def get_tree(self, project, tree_sha): return tree.get("tree", []) def get_network_meta(self, project): - """Get GitHub metadata associated with a project + """Get Github metadata associated with a project. :param str project: GitHub project @@ -111,7 +111,7 @@ def get_network_meta(self, project): "network_meta"]), {}) def get_network_data(self, project, nethash, start=None, end=None): - """Get chunk of GitHub network data + """Get chunk of Github network data. :param str project: GitHub project :param str nethash: identifier provided by :meth:`get_network_meta` diff --git a/github2/commits.py b/github2/commits.py index 7030a40..2bfd152 100644 --- a/github2/commits.py +++ b/github2/commits.py @@ -28,7 +28,7 @@ class Commits(GithubCommand): domain = "commits" def list(self, project, branch="master", file=None, page=1): - """List commits on a project + """List commits on a project. .. warning:: Not all projects use ``master`` as their default branch, you can @@ -45,7 +45,7 @@ def list(self, project, branch="master", file=None, page=1): datatype=Commit, page=page) def show(self, project, sha): - """Get a specific commit + """Get a specific commit. :param str project: project name :param str sha: commit id diff --git a/github2/core.py b/github2/core.py index e783456..9329e5e 100644 --- a/github2/core.py +++ b/github2/core.py @@ -27,7 +27,7 @@ def string_to_datetime(string): - """Convert a string to Python datetime + """Convert a string to Python datetime. :param str github_date: date string to parse @@ -39,7 +39,7 @@ def string_to_datetime(string): def _handle_naive_datetimes(f): - """Decorator to make datetime arguments use GitHub timezone + """Decorator to make datetime arguments use GitHub timezone. :param func f: Function to wrap @@ -61,7 +61,7 @@ def wrapper(datetime_): @_handle_naive_datetimes def datetime_to_ghdate(datetime_): - """Convert Python datetime to GitHub date string + """Convert Python datetime to Github date string. :param datetime datetime_: datetime object to convert @@ -71,7 +71,7 @@ def datetime_to_ghdate(datetime_): @_handle_naive_datetimes def datetime_to_commitdate(datetime_): - """Convert Python datetime to GitHub date string + """Convert Python datetime to Github date string. :param datetime datetime_: datetime object to convert @@ -84,12 +84,11 @@ def datetime_to_commitdate(datetime_): def datetime_to_isodate(datetime_): - """Convert Python datetime to GitHub date string - - .. note:: Supports naive and timezone-aware datetimes + """Convert Python datetime to Github date string. :param str datetime_: datetime object to convert + .. note:: Supports naive and timezone-aware datetimes """ if not datetime_.tzinfo: datetime_ = datetime_.replace(tzinfo=tz.tzutc()) @@ -104,7 +103,7 @@ class AuthError(Exception): def requires_auth(f): - """Decorate to check a function call for authentication + """Decorate to check a function call for authentication. Sets a ``requires_auth`` attribute on functions, for use in introspection. @@ -129,7 +128,7 @@ def wrapper(self, *args, **kwargs): def enhanced_by_auth(f): - """Decorator to mark a function as enhanced by authentication + """Decorator to mark a function as enhanced by authentication. Sets a ``enhanced_by_auth`` attribute on functions, for use in introspection. @@ -145,7 +144,7 @@ def enhanced_by_auth(f): class GithubCommand(object): def __init__(self, request): - """Main API binding interface + """Main API binding interface. :param github2.request.GithubRequest request: HTTP request handler @@ -153,7 +152,7 @@ def __init__(self, request): self.request = request def make_request(self, command, *args, **kwargs): - """Make an API request + """Make an API request. Various options are supported if they exist in ``kwargs``: @@ -187,7 +186,7 @@ def make_request(self, command, *args, **kwargs): return response def get_value(self, *args, **kwargs): - """Process a single-value response from the API + """Process a single-value response from the API. If a ``datatype`` parameter is given it defines the :class:`BaseData`-derived class we should build from the provided data @@ -207,7 +206,7 @@ def get_value(self, *args, **kwargs): return value def get_values(self, *args, **kwargs): - """Process a multi-value response from the API + """Process a multi-value response from the API. :see: :meth:`get_value` @@ -228,7 +227,7 @@ def get_values(self, *args, **kwargs): def doc_generator(docstring, attributes): - """Utility function to augment BaseDataType docstring + """Utility function to augment BaseDataType docstring. :param str docstring: docstring to augment :param dict attributes: attributes to add to docstring @@ -246,7 +245,7 @@ def bullet(title, text): class Attribute(object): def __init__(self, help): - """Generic object attribute for use with :class:`BaseData` + """Generic object attribute for use with :class:`BaseData`. :param str help: Attribute description @@ -269,7 +268,7 @@ class DateAttribute(Attribute): } def __init__(self, *args, **kwargs): - """Date handling attribute for use with :class:`BaseData` + """Date handling attribute for use with :class:`BaseData`. :param str format: The date format to support, see :data:`convertor_for_format` for supported options @@ -327,7 +326,8 @@ def iterate(self): # Ugly base class definition for Python 2 and 3 compatibility, where metaclass # syntax is incompatible class BaseData(BaseDataType('BaseData', (object, ), {})): - """Wrapper for API responses + + """Wrapper for API responses. .. warning:: Supports subscript attribute access purely for backwards compatibility, @@ -336,7 +336,7 @@ class BaseData(BaseDataType('BaseData', (object, ), {})): """ def __getitem__(self, key): - """Access objects's attribute using subscript notation + """Access objects's attribute using subscript notation. This is here purely to maintain compatibility when switching ``dict`` responses to ``BaseData`` derived objects. @@ -350,7 +350,7 @@ def __getitem__(self, key): return getattr(self, key) def __setitem__(self, key, value): - """Update object's attribute using subscript notation + """Update object's attribute using subscript notation. :see: :meth:`BaseData.__getitem__` @@ -364,7 +364,7 @@ def __setitem__(self, key, value): def repr_string(string): - """Shorten string for use in repr() output + """Shorten string for use in repr() output. :param str string: string to operate on :return: string, with maximum length of 20 characters diff --git a/github2/issues.py b/github2/issues.py index ad7aa35..0f72908 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -48,7 +48,7 @@ def search(self, project, term, state="open"): :param str project: GitHub project :param str term: term to search issues for - :param str state: can be either ``open`` or ``closed``. + :param str state: can be either ``open`` or ``closed`` """ return self.get_values("search", project, state, quote_plus(term), @@ -58,7 +58,7 @@ def list(self, project, state="open"): """Get all issues for project with given state. :param str project: GitHub project - :param str state: can be either ``open`` or ``closed``. + :param str state: can be either ``open`` or ``closed`` """ return self.get_values("list", project, state, filter="issues", @@ -70,7 +70,7 @@ def list_by_label(self, project, label): .. versionadded:: 0.3.0 :param str project: GitHub project - :param str label: a string representing a label (e.g., ``bug``). + :param str label: a string representing a label (e.g., ``bug``) """ return self.get_values("list", project, "label", label, @@ -111,7 +111,7 @@ def open(self, project, title, body): @requires_auth def close(self, project, number): - """Close an issue + """Close an issue. :param str project: GitHub project :param int number: issue number in the Github database @@ -122,7 +122,7 @@ def close(self, project, number): @requires_auth def reopen(self, project, number): - """Reopen a closed issue + """Reopen a closed issue. .. versionadded:: 0.3.0 @@ -135,7 +135,7 @@ def reopen(self, project, number): @requires_auth def edit(self, project, number, title, body): - """Edit an existing issue + """Edit an existing issue. .. versionadded:: 0.3.0 @@ -152,7 +152,7 @@ def edit(self, project, number, title, body): @requires_auth def add_label(self, project, number, label): - """Add a label to an issue + """Add a label to an issue. :param str project: GitHub project :param int number: issue number in the GitHub database @@ -164,7 +164,7 @@ def add_label(self, project, number, label): @requires_auth def remove_label(self, project, number, label): - """Remove an existing label from an issue + """Remove an existing label from an issue. :param str project: GitHub project :param int number: issue number in the GitHub database diff --git a/github2/organizations.py b/github2/organizations.py index 8baa328..263990b 100644 --- a/github2/organizations.py +++ b/github2/organizations.py @@ -39,7 +39,7 @@ class Organizations(GithubCommand): domain = "organizations" def show(self, organization): - """Get information on organization + """Get information on organization. :param str organization: organization to show @@ -48,12 +48,12 @@ def show(self, organization): datatype=Organization) def list(self): - """Get list of all of your organizations""" + """Get list of all of your organizations.""" return self.get_values('', filter="organizations", datatype=Organization) def repositories(self, organization=''): - """Get list of all repositories in an organization + """Get list of all repositories in an organization. If organization is not given, or is empty, then this will list repositories for all organizations the authenticated user belongs to. @@ -65,7 +65,7 @@ def repositories(self, organization=''): filter="repositories", datatype=Repository) def public_repositories(self, organization): - """Get list of public repositories in an organization + """Get list of public repositories in an organization. :param str organization: organization to list public repositories for @@ -74,7 +74,7 @@ def public_repositories(self, organization): filter="repositories", datatype=Repository) def public_members(self, organization): - """Get list of public members in an organization + """Get list of public members in an organization. :param str organization: organization to list members for @@ -83,7 +83,7 @@ def public_members(self, organization): datatype=User) def teams(self, organization): - """Get list of teams in an organization + """Get list of teams in an organization. :param str organization: organization to list teams for @@ -93,7 +93,7 @@ def teams(self, organization): @requires_auth def add_team(self, organization, name, permission='pull', projects=None): - """Add a team to an organization + """Add a team to an organization. :param str organization: organization to add team to :param str team: name of team to add diff --git a/github2/pull_requests.py b/github2/pull_requests.py index 9a0ba58..bc82814 100644 --- a/github2/pull_requests.py +++ b/github2/pull_requests.py @@ -3,7 +3,7 @@ class PullRequest(BaseData): - """Pull request encapsulation + """Pull request encapsulation. .. versionadded:: 0.5.0 @@ -42,7 +42,7 @@ def __repr__(self): class PullRequests(GithubCommand): - """Operations on pull requests + """Operations on pull requests. .. versionadded:: 0.5.0 @@ -51,7 +51,7 @@ class PullRequests(GithubCommand): domain = "pulls" def create(self, project, base, head, title=None, body=None, issue=None): - """Create a new pull request + """Create a new pull request. Pull requests can be created from scratch, or attached to an existing issue. If an ``issue`` parameter is supplied the pull request is @@ -81,7 +81,7 @@ def create(self, project, base, head, title=None, body=None, issue=None): filter="pull", datatype=PullRequest) def show(self, project, number): - """Show a single pull request + """Show a single pull request. :param str project: Github project :param int number: pull request number in the Github database @@ -91,7 +91,7 @@ def show(self, project, number): datatype=PullRequest) def list(self, project, state="open", page=1): - """List all pull requests for a project + """List all pull requests for a project. :param str project: GitHub project :param str state: can be either ``open`` or ``closed`` diff --git a/github2/repositories.py b/github2/repositories.py index 4f9b0cf..8a2b82e 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -86,7 +86,7 @@ def list(self, user=None, page=1): @requires_auth def watch(self, project): - """Watch a project + """Watch a project. :param str project: GitHub project @@ -96,7 +96,7 @@ def watch(self, project): @requires_auth def unwatch(self, project): - """Unwatch a project + """Unwatch a project. :param str project: GitHub project @@ -106,7 +106,7 @@ def unwatch(self, project): @requires_auth def fork(self, project): - """Fork a project + """Fork a project. :param str project: GitHub project @@ -116,7 +116,7 @@ def fork(self, project): @requires_auth def create(self, project, description=None, homepage=None, public=True): - """Create a repository + """Create a repository. :param str project: new project name :param str description: optional project description @@ -131,7 +131,7 @@ def create(self, project, description=None, homepage=None, public=True): @requires_auth def delete(self, project): - """Delete a repository + """Delete a repository. :param str project: project name to delete @@ -143,7 +143,7 @@ def delete(self, project): @requires_auth def set_private(self, project): - """Mark repository as private + """Mark repository as private. :param str project: project name to set as private @@ -152,7 +152,7 @@ def set_private(self, project): @requires_auth def set_public(self, project): - """Mark repository as public + """Mark repository as public. :param str project: project name to set as public @@ -160,7 +160,7 @@ def set_public(self, project): return self.make_request("set/public", project) def list_collaborators(self, project): - """Lists all the collaborators in a project + """Lists all the collaborators in a project. :param str project: GitHub project @@ -170,7 +170,7 @@ def list_collaborators(self, project): @requires_auth def add_collaborator(self, project, username): - """Adds an add_collaborator to a repo + """Adds an add_collaborator to a repo. :param str project: Github project :param str username: Github user to add as collaborator @@ -181,7 +181,7 @@ def add_collaborator(self, project, username): @requires_auth def remove_collaborator(self, project, username): - """Removes an add_collaborator from a repo + """Removes an add_collaborator from a repo. :param str project: Github project :param str username: Github user to add as collaborator @@ -191,7 +191,7 @@ def remove_collaborator(self, project, username): username, method="POST") def network(self, project): - """Get network data for project + """Get network data for project. :param str project: Github project @@ -200,7 +200,7 @@ def network(self, project): datatype=Repository) def languages(self, project): - """Get programming language data for project + """Get programming language data for project. :param str project: Github project @@ -209,7 +209,7 @@ def languages(self, project): filter="languages") def tags(self, project): - """Get tags for project + """Get tags for project. :param str project: Github project @@ -217,7 +217,7 @@ def tags(self, project): return self.get_values("show", project, "tags", filter="tags") def branches(self, project): - """Get branch names for project + """Get branch names for project. :param str project: Github project @@ -225,7 +225,7 @@ def branches(self, project): return self.get_values("show", project, "branches", filter="branches") def watchers(self, project): - """Get list of watchers for project + """Get list of watchers for project. :param str project: Github project @@ -233,7 +233,7 @@ def watchers(self, project): return self.get_values("show", project, "watchers", filter="watchers") def watching(self, for_user=None, page=None): - """Lists all the repos a user is watching + """Lists all the repos a user is watching. :param str for_user: optional GitHub user name to list repositories for :param int page: optional page number @@ -244,7 +244,7 @@ def watching(self, for_user=None, page=None): datatype=Repository, page=page) def list_contributors(self, project): - """Lists all the contributors in a project + """Lists all the contributors in a project. :param str project: Github project diff --git a/github2/request.py b/github2/request.py index 12a9363..8ccfe39 100644 --- a/github2/request.py +++ b/github2/request.py @@ -67,7 +67,7 @@ def charset_from_headers(headers): - """Parse charset from headers + """Parse charset from headers. :param httplib2.Response headers: Request headers :return: Defined encoding, or default to ASCII @@ -91,7 +91,7 @@ class HttpError(RuntimeError): """A HTTP error occured when making a request to the Github API.""" def __init__(self, message, content, code): - """Create a HttpError exception + """Create a HttpError exception. :param str message: Exception string :param str content: Full content of HTTP request diff --git a/github2/teams.py b/github2/teams.py index c2c7945..0feb720 100644 --- a/github2/teams.py +++ b/github2/teams.py @@ -22,7 +22,7 @@ class Teams(GithubCommand): domain = "teams" def show(self, team_id): - """Get information on team_id + """Get information on team_id. :param int team_id: team to get information for @@ -30,7 +30,7 @@ def show(self, team_id): return self.get_value(str(team_id), filter="team", datatype=Team) def members(self, team_id): - """Get list of all team members + """Get list of all team members. :param int team_id: team to get information for @@ -40,7 +40,7 @@ def members(self, team_id): @requires_auth def add_member(self, team_id, username): - """Add a new member to a team + """Add a new member to a team. :param int team_id: team to add new member to :param str username: GitHub username to add to team @@ -51,7 +51,7 @@ def add_member(self, team_id, username): datatype=User) def repositories(self, team_id): - """Get list of all team repositories + """Get list of all team repositories. :param int team_id: team to get information for @@ -61,7 +61,7 @@ def repositories(self, team_id): @requires_auth def add_project(self, team_id, project): - """Add a project to a team + """Add a project to a team. :param int team_id: team to add repository to :param str project: GitHub project @@ -75,7 +75,7 @@ def add_project(self, team_id, project): @requires_auth def remove_project(self, team_id, project): - """Remove a project to a team + """Remove a project to a team. :param int team_id: team to remove project from :param str project: GitHub project diff --git a/github2/users.py b/github2/users.py index 50b761e..65d7702 100644 --- a/github2/users.py +++ b/github2/users.py @@ -41,7 +41,7 @@ class User(BaseData): format="user") def is_authenticated(self): - """Test for user authentication + """Test for user authentication. :return bool: ``True`` if user is authenticated @@ -56,7 +56,7 @@ class Users(GithubCommand): domain = "user" def search(self, query): - """Search for users + """Search for users. .. warning: Returns at most 100 users @@ -68,7 +68,7 @@ def search(self, query): datatype=User) def search_by_email(self, query): - """Search for users by email address + """Search for users by email address. :param str query: email to search for @@ -77,7 +77,7 @@ def search_by_email(self, query): @enhanced_by_auth def show(self, username): - """Get information on GitHub user + """Get information on Github user. if ``username`` is ``None`` or an empty string information for the currently authenticated user is returned. @@ -87,7 +87,7 @@ def show(self, username): return self.get_value("show", username, filter="user", datatype=User) def followers(self, username): - """Get list of GitHub user's followers + """Get list of Github user's followers. :param str username: Github user name @@ -95,7 +95,7 @@ def followers(self, username): return self.get_values("show", username, "followers", filter="users") def following(self, username): - """Get list of users a GitHub user is following + """Get list of users a Github user is following. :param str username: Github user name @@ -104,7 +104,7 @@ def following(self, username): @requires_auth def follow(self, other_user): - """Follow a GitHub user + """Follow a Github user. :param str other_user: Github user name @@ -113,7 +113,7 @@ def follow(self, other_user): @requires_auth def unfollow(self, other_user): - """Unfollow a GitHub user + """Unfollow a Github user. :param str other_user: Github user name @@ -122,12 +122,12 @@ def unfollow(self, other_user): @requires_auth def list_keys(self): - """Get list of SSH keys for the authenticated user""" + """Get list of SSH keys for the authenticated user.""" return self.get_values('keys', filter='public_keys', datatype=Key) @requires_auth def add_key(self, key, title=''): - """Add a SSH key for the authenticated user + """Add a SSH key for the authenticated user. :param str key: SSH key identifier :param str title: Optional title for the SSH key @@ -140,7 +140,7 @@ def add_key(self, key, title=''): @requires_auth def remove_key(self, key_id): - """Remove a SSH key for the authenticated user + """Remove a SSH key for the authenticated user. :param int key_id: SSH key's GitHub identifier From 4902ffc5f29675e138e055f6beef8d28bd625430 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 15:30:24 +0100 Subject: [PATCH 106/129] [QA] Use imperative form as per PEP 257. --- github2/repositories.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/github2/repositories.py b/github2/repositories.py index 8a2b82e..c515955 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -160,7 +160,7 @@ def set_public(self, project): return self.make_request("set/public", project) def list_collaborators(self, project): - """Lists all the collaborators in a project. + """List all the collaborators in a project. :param str project: GitHub project @@ -170,7 +170,7 @@ def list_collaborators(self, project): @requires_auth def add_collaborator(self, project, username): - """Adds an add_collaborator to a repo. + """Add an add_collaborator to a repo. :param str project: Github project :param str username: Github user to add as collaborator @@ -181,7 +181,7 @@ def add_collaborator(self, project, username): @requires_auth def remove_collaborator(self, project, username): - """Removes an add_collaborator from a repo. + """Remove a collaborator from a repo. :param str project: Github project :param str username: Github user to add as collaborator @@ -233,7 +233,7 @@ def watchers(self, project): return self.get_values("show", project, "watchers", filter="watchers") def watching(self, for_user=None, page=None): - """Lists all the repos a user is watching. + """List all the repos a user is watching. :param str for_user: optional GitHub user name to list repositories for :param int page: optional page number @@ -244,7 +244,7 @@ def watching(self, for_user=None, page=None): datatype=Repository, page=page) def list_contributors(self, project): - """Lists all the contributors in a project. + """List all the contributors in a project. :param str project: Github project From e3ef6bc59d77adaaa358aa78d3c9b891852e1bb9 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 15:31:49 +0100 Subject: [PATCH 107/129] Added some more missing docstrings. --- github2/client.py | 5 +++-- github2/commits.py | 6 ++++++ github2/core.py | 14 +++++++++++--- github2/issues.py | 9 +++++++++ github2/organizations.py | 16 ++++++++++++++-- github2/pull_requests.py | 6 ++++-- github2/repositories.py | 5 +++++ github2/request.py | 11 +++++++---- github2/teams.py | 12 ++++++++++-- github2/users.py | 9 +++++++++ 10 files changed, 78 insertions(+), 15 deletions(-) diff --git a/github2/client.py b/github2/client.py index 0296be4..5cf8d7e 100644 --- a/github2/client.py +++ b/github2/client.py @@ -10,11 +10,12 @@ class Github(object): + """Interface to GitHub's API v2.""" + def __init__(self, username=None, api_token=None, requests_per_second=None, access_token=None, cache=None, proxy_host=None, proxy_port=8080, github_url=None): - """An interface to GitHub's API: - http://develop.github.com/ + """Setup GitHub API object. .. versionadded:: 0.2.0 The ``requests_per_second`` parameter diff --git a/github2/commits.py b/github2/commits.py index 2bfd152..a04892f 100644 --- a/github2/commits.py +++ b/github2/commits.py @@ -3,6 +3,9 @@ class Commit(BaseData): + + """Commit container.""" + message = Attribute("Commit message.") parents = Attribute("List of parents for this commit.") url = Attribute("Canonical URL for this commit.") @@ -25,6 +28,9 @@ def __repr__(self): class Commits(GithubCommand): + + """GitHub API commits functionality.""" + domain = "commits" def list(self, project, branch="master", file=None, page=1): diff --git a/github2/core.py b/github2/core.py index 9329e5e..807aa93 100644 --- a/github2/core.py +++ b/github2/core.py @@ -143,8 +143,10 @@ def enhanced_by_auth(f): class GithubCommand(object): + """Main API binding interface.""" + def __init__(self, request): - """Main API binding interface. + """Setup command object. :param github2.request.GithubRequest request: HTTP request handler @@ -244,8 +246,11 @@ def bullet(title, text): class Attribute(object): + + """Generic object attribute for use with :class:`BaseData`.""" + def __init__(self, help): - """Generic object attribute for use with :class:`BaseData`. + """Setup Attribute object. :param str help: Attribute description @@ -259,6 +264,9 @@ def to_python(self, value): class DateAttribute(Attribute): + + """Date handling attribute for use with :class:`BaseData`.""" + format = "github" converter_for_format = { "github": datetime_to_ghdate, @@ -268,7 +276,7 @@ class DateAttribute(Attribute): } def __init__(self, *args, **kwargs): - """Date handling attribute for use with :class:`BaseData`. + """Setup DateAttribute object. :param str format: The date format to support, see :data:`convertor_for_format` for supported options diff --git a/github2/issues.py b/github2/issues.py index 0f72908..89dcf17 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -8,6 +8,9 @@ class Issue(BaseData): + + """Issue container.""" + position = Attribute("The position of this issue in a list.") number = Attribute("The issue number (unique for project).") votes = Attribute("Number of votes for this issue.") @@ -28,6 +31,9 @@ def __repr__(self): class Comment(BaseData): + + """Comment container.""" + created_at = DateAttribute("The date this comment was created.") updated_at = DateAttribute("The date when this comment was last updated.") body = Attribute("The full text of this comment.") @@ -39,6 +45,9 @@ def __repr__(self): class Issues(GithubCommand): + + """GitHub API issues functionality.""" + domain = "issues" def search(self, project, term, state="open"): diff --git a/github2/organizations.py b/github2/organizations.py index 263990b..3ac66c1 100644 --- a/github2/organizations.py +++ b/github2/organizations.py @@ -6,7 +6,13 @@ class Organization(BaseData): - """.. versionadded:: 0.4.0""" + + """Organization container. + + .. versionadded:: 0.4.0 + + """ + id = Attribute("The organization id.") name = Attribute("The full name of the organization.") blog = Attribute("The organization's blog.") @@ -35,7 +41,13 @@ def __repr__(self): class Organizations(GithubCommand): - """.. versionadded:: 0.4.0""" + + """GitHub API organizations functionality. + + .. versionadded:: 0.4.0 + + """ + domain = "organizations" def show(self, organization): diff --git a/github2/pull_requests.py b/github2/pull_requests.py index bc82814..b168b66 100644 --- a/github2/pull_requests.py +++ b/github2/pull_requests.py @@ -3,7 +3,8 @@ class PullRequest(BaseData): - """Pull request encapsulation. + + """Pull request container. .. versionadded:: 0.5.0 @@ -42,7 +43,8 @@ def __repr__(self): class PullRequests(GithubCommand): - """Operations on pull requests. + + """GitHub API pull request functionality. .. versionadded:: 0.5.0 diff --git a/github2/repositories.py b/github2/repositories.py index c515955..10f07a0 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -5,6 +5,9 @@ class Repository(BaseData): + + """Repository container.""" + name = Attribute("Name of repository.") description = Attribute("Repository description.") forks = Attribute("Number of forks of this repository.") @@ -35,6 +38,8 @@ def __repr__(self): class Repositories(GithubCommand): + """GitHub API repository functionality.""" + domain = "repos" def search(self, query): diff --git a/github2/request.py b/github2/request.py index 8ccfe39..6dcb371 100644 --- a/github2/request.py +++ b/github2/request.py @@ -111,6 +111,13 @@ def __init__(self, message, content, code): class GithubRequest(object): + + """Make an API request. + + :see: :class:`github2.client.Github` + + """ + url_format = "%(github_url)s/api/%(api_version)s/%(api_format)s" api_version = "v2" api_format = "json" @@ -120,10 +127,6 @@ def __init__(self, username=None, api_token=None, url_prefix=None, requests_per_second=None, access_token=None, cache=None, proxy_host=None, proxy_port=None, github_url=None): - """Make an API request. - - :see: :class:`github2.client.Github` - """ self.username = username self.api_token = api_token self.access_token = access_token diff --git a/github2/teams.py b/github2/teams.py index 0feb720..7c44e86 100644 --- a/github2/teams.py +++ b/github2/teams.py @@ -5,7 +5,11 @@ class Team(BaseData): - """.. versionadded:: 0.4.0""" + """Team container. + + .. versionadded:: 0.4.0 + + """ id = Attribute("The team id") name = Attribute("Name of the team") @@ -17,7 +21,11 @@ def __repr__(self): class Teams(GithubCommand): - """.. versionadded:: 0.4.0""" + """GitHub API teams functionality. + + .. versionadded:: 0.4.0 + + """ domain = "teams" diff --git a/github2/users.py b/github2/users.py index 65d7702..4ea8c2d 100644 --- a/github2/users.py +++ b/github2/users.py @@ -8,6 +8,9 @@ class Key(BaseData): + + """SSH key container.""" + id = Attribute('The key id') key = Attribute('The SSH key data') title = Attribute('The title for the SSH key') @@ -17,6 +20,9 @@ def __repr__(self): class User(BaseData): + + """GitHub user container.""" + id = Attribute("The user id") login = Attribute("The login username") name = Attribute("The users full name") @@ -53,6 +59,9 @@ def __repr__(self): class Users(GithubCommand): + + """GitHub API user functionality.""" + domain = "user" def search(self, query): From 031018edaccd4dcee233f2dcebf7fb6d7e5261ad Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 15:32:46 +0100 Subject: [PATCH 108/129] Use class docstring with autodoc. --- doc/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index ea950db..d74babe 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -229,7 +229,7 @@ [u'Ask Solem'], 1) ] -autoclass_content = "init" +autoclass_content = "class" autodoc_default_flags = ['members', ] intersphinx_mapping = { From 862d52238f34d614aca939b8d042b8eddd65f321 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 20:39:28 +0100 Subject: [PATCH 109/129] Added pip requirements files. --- extra/requirements-doc.txt | 4 ++++ extra/requirements-py25.txt | 2 ++ extra/requirements-py3.txt | 2 ++ extra/requirements-test.txt | 3 +++ extra/requirements.txt | 2 ++ 5 files changed, 13 insertions(+) create mode 100644 extra/requirements-doc.txt create mode 100644 extra/requirements-py25.txt create mode 100644 extra/requirements-py3.txt create mode 100644 extra/requirements-test.txt create mode 100644 extra/requirements.txt diff --git a/extra/requirements-doc.txt b/extra/requirements-doc.txt new file mode 100644 index 0000000..709ee46 --- /dev/null +++ b/extra/requirements-doc.txt @@ -0,0 +1,4 @@ +-r requirements.txt +cloud_sptheme>=1.2 +sphinx>=1.1 +sphinxcontrib-cheeseshop diff --git a/extra/requirements-py25.txt b/extra/requirements-py25.txt new file mode 100644 index 0000000..33f97ee --- /dev/null +++ b/extra/requirements-py25.txt @@ -0,0 +1,2 @@ +-r requirements.txt +simplejson>=2.0.9 diff --git a/extra/requirements-py3.txt b/extra/requirements-py3.txt new file mode 100644 index 0000000..457b3fb --- /dev/null +++ b/extra/requirements-py3.txt @@ -0,0 +1,2 @@ +httplib2>=0.7.0 +python-dateutil>=2.0 diff --git a/extra/requirements-test.txt b/extra/requirements-test.txt new file mode 100644 index 0000000..c8d6b88 --- /dev/null +++ b/extra/requirements-test.txt @@ -0,0 +1,3 @@ +-r requirements.txt +coverage>=3.5 +nose>=1.1.2 diff --git a/extra/requirements.txt b/extra/requirements.txt new file mode 100644 index 0000000..57c76c4 --- /dev/null +++ b/extra/requirements.txt @@ -0,0 +1,2 @@ +httplib2>=0.7.0 +python-dateutil<2.0 From 3f60faf6f6969b23206b9ee19a46986d1fbd823b Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 19:34:48 +0100 Subject: [PATCH 110/129] Use nose.tools.eq_ instead of assert_equals. --- tests/test_charset_header.py | 6 +- tests/test_commits.py | 62 +++---- tests/test_date_handling.py | 258 ++++++++++++-------------- tests/test_issues.py | 72 ++++---- tests/test_organizations.py | 52 +++--- tests/test_pull_requests.py | 69 ++++--- tests/test_regression.py | 8 +- tests/test_repositories.py | 103 +++++------ tests/test_teams.py | 4 +- tests/test_tz_aware_date_handling.py | 266 +++++++++++++-------------- tests/test_unit.py | 30 +-- tests/test_user.py | 59 +++--- 12 files changed, 473 insertions(+), 516 deletions(-) diff --git a/tests/test_charset_header.py b/tests/test_charset_header.py index 3b29635..2786673 100644 --- a/tests/test_charset_header.py +++ b/tests/test_charset_header.py @@ -3,16 +3,16 @@ # This file is part of python-github2, and is made available under the 3-clause # BSD license. See LICENSE for the full details. -from nose.tools import assert_equals +from nose.tools import eq_ from github2.request import charset_from_headers def no_match_test(): d = {} - assert_equals("ascii", charset_from_headers(d)) + eq_("ascii", charset_from_headers(d)) def utf_test(): d = {'content-type': 'application/json; charset=utf-8'} - assert_equals("utf-8", charset_from_headers(d)) + eq_("utf-8", charset_from_headers(d)) diff --git a/tests/test_commits.py b/tests/test_commits.py index 20ed487..33f037c 100644 --- a/tests/test_commits.py +++ b/tests/test_commits.py @@ -5,7 +5,7 @@ from datetime import datetime -from nose.tools import assert_equals +from nose.tools import eq_ import utils @@ -16,28 +16,25 @@ class CommitProperties(utils.HttpMockTestCase): def test_commit(self): commit = self.client.commits.show('ask/python-github2', self.commit_id) - assert_equals(commit.message, - 'Added cache support to manage_collaborators.') - assert_equals(commit.parents, - [{"id": '7d1c855d2f44a55e4b90b40017be697cf70cb4a0'}]) - assert_equals(commit.url, - '/ask/python-github2/commit/%s' % self.commit_id) - assert_equals(commit.author['login'], 'JNRowe') - assert_equals(commit.id, self.commit_id) - assert_equals(commit.committed_date, - datetime(2011, 6, 6, 16, 13, 50)) - assert_equals(commit.authored_date, datetime(2011, 6, 6, 16, 13, 50)) - assert_equals(commit.tree, 'f48fcc1a0b8ea97f3147dc42cf7cdb6683493e94') - assert_equals(commit.committer['login'], 'JNRowe') - assert_equals(commit.added, None) - assert_equals(commit.removed, None) - assert_equals(commit.modified[0]['filename'], - 'github2/bin/manage_collaborators.py') + eq_(commit.message, 'Added cache support to manage_collaborators.') + eq_(commit.parents, + [{"id": '7d1c855d2f44a55e4b90b40017be697cf70cb4a0'}]) + eq_(commit.url, '/ask/python-github2/commit/%s' % self.commit_id) + eq_(commit.author['login'], 'JNRowe') + eq_(commit.id, self.commit_id) + eq_(commit.committed_date, datetime(2011, 6, 6, 16, 13, 50)) + eq_(commit.authored_date, datetime(2011, 6, 6, 16, 13, 50)) + eq_(commit.tree, 'f48fcc1a0b8ea97f3147dc42cf7cdb6683493e94') + eq_(commit.committer['login'], 'JNRowe') + eq_(commit.added, None) + eq_(commit.removed, None) + eq_(commit.modified[0]['filename'], + 'github2/bin/manage_collaborators.py') def test_repr(self): commit = self.client.commits.show('ask/python-github2', self.commit_id) - assert_equals(repr(commit), - '' % self.commit_id[:8]) + eq_(repr(commit), + '' % self.commit_id[:8]) class CommitsQueries(utils.HttpMockTestCase): @@ -45,32 +42,27 @@ class CommitsQueries(utils.HttpMockTestCase): def test_list(self): commits = self.client.commits.list('JNRowe/misc-overlay') - assert_equals(len(commits), 35) - assert_equals(commits[0].id, - '4de0834d58b37ef3020c49df43c95649217a2def') + eq_(len(commits), 35) + eq_(commits[0].id, '4de0834d58b37ef3020c49df43c95649217a2def') def test_list_with_page(self): commits = self.client.commits.list('JNRowe/jnrowe-misc', page=2) - assert_equals(len(commits), 35) - assert_equals(commits[0].id, - '1f5ad2c3206bafc4aca9e6ce50f5c605befdb3d6') + eq_(len(commits), 35) + eq_(commits[0].id, '1f5ad2c3206bafc4aca9e6ce50f5c605befdb3d6') def test_list_with_branch(self): commits = self.client.commits.list('JNRowe/misc-overlay', 'gh-pages') - assert_equals(len(commits), 35) - assert_equals(commits[0].id, - '025148bdaa6fb6bdac9c3522d481fadf1c0a456f') + eq_(len(commits), 35) + eq_(commits[0].id, '025148bdaa6fb6bdac9c3522d481fadf1c0a456f') def test_list_with_file(self): commits = self.client.commits.list('JNRowe/misc-overlay', file='Makefile') - assert_equals(len(commits), 35) - assert_equals(commits[0].id, - 'fc12b924d34dc38c8ce76d27a866221faa88cb72') + eq_(len(commits), 35) + eq_(commits[0].id, 'fc12b924d34dc38c8ce76d27a866221faa88cb72') def test_list_with_branch_and_file(self): commits = self.client.commits.list('JNRowe/misc-overlay', 'gh-pages', 'packages/dev-python.html') - assert_equals(len(commits), 35) - assert_equals(commits[0].id, - '025148bdaa6fb6bdac9c3522d481fadf1c0a456f') + eq_(len(commits), 35) + eq_(commits[0].id, '025148bdaa6fb6bdac9c3522d481fadf1c0a456f') diff --git a/tests/test_date_handling.py b/tests/test_date_handling.py index 855ccae..b696a74 100644 --- a/tests/test_date_handling.py +++ b/tests/test_date_handling.py @@ -6,7 +6,7 @@ from datetime import datetime as dt -from nose.tools import assert_equals +from nose.tools import eq_ from github2.core import (datetime_to_ghdate, datetime_to_commitdate, datetime_to_isodate, string_to_datetime) @@ -16,154 +16,138 @@ # naïve datetime objects used in the current code base def test_ghdate_to_datetime(): - assert_equals(string_to_datetime('2011/05/22 00:24:15 -0700'), - dt(2011, 5, 22, 0, 24, 15)) - - assert_equals(string_to_datetime('2009/04/18 13:04:09 -0700'), - dt(2009, 4, 18, 13, 4, 9)) - #assert_equals(string_to_datetime('2009/11/12 21:15:17 -0800'), - # dt(2009, 11, 12, 21, 15, 17)) - #assert_equals(string_to_datetime('2009/11/12 21:16:20 -0800'), - # dt(2009, 11, 12, 21, 16, 20)) - assert_equals(string_to_datetime('2010/04/17 17:24:29 -0700'), - dt(2010, 4, 17, 17, 24, 29)) - assert_equals(string_to_datetime('2010/05/18 06:10:36 -0700'), - dt(2010, 5, 18, 6, 10, 36)) - assert_equals(string_to_datetime('2010/05/25 21:59:37 -0700'), - dt(2010, 5, 25, 21, 59, 37)) - assert_equals(string_to_datetime('2010/05/26 17:08:41 -0700'), - dt(2010, 5, 26, 17, 8, 41)) - assert_equals(string_to_datetime('2010/06/20 06:13:37 -0700'), - dt(2010, 6, 20, 6, 13, 37)) - assert_equals(string_to_datetime('2010/07/28 12:56:51 -0700'), - dt(2010, 7, 28, 12, 56, 51)) - assert_equals(string_to_datetime('2010/09/20 21:32:49 -0700'), - dt(2010, 9, 20, 21, 32, 49)) + eq_(string_to_datetime('2011/05/22 00:24:15 -0700'), + dt(2011, 5, 22, 0, 24, 15)) + + eq_(string_to_datetime('2009/04/18 13:04:09 -0700'), + dt(2009, 4, 18, 13, 4, 9)) + #eq_(string_to_datetime('2009/11/12 21:15:17 -0800'), + # dt(2009, 11, 12, 21, 15, 17)) + #eq_(string_to_datetime('2009/11/12 21:16:20 -0800'), + # dt(2009, 11, 12, 21, 16, 20)) + eq_(string_to_datetime('2010/04/17 17:24:29 -0700'), + dt(2010, 4, 17, 17, 24, 29)) + eq_(string_to_datetime('2010/05/18 06:10:36 -0700'), + dt(2010, 5, 18, 6, 10, 36)) + eq_(string_to_datetime('2010/05/25 21:59:37 -0700'), + dt(2010, 5, 25, 21, 59, 37)) + eq_(string_to_datetime('2010/05/26 17:08:41 -0700'), + dt(2010, 5, 26, 17, 8, 41)) + eq_(string_to_datetime('2010/06/20 06:13:37 -0700'), + dt(2010, 6, 20, 6, 13, 37)) + eq_(string_to_datetime('2010/07/28 12:56:51 -0700'), + dt(2010, 7, 28, 12, 56, 51)) + eq_(string_to_datetime('2010/09/20 21:32:49 -0700'), + dt(2010, 9, 20, 21, 32, 49)) def test_datetime_to_ghdate(): - assert_equals(datetime_to_ghdate(dt(2011, 5, 22, 0, 24, 15)), - '2011/05/22 00:24:15 -0700') - - assert_equals(datetime_to_ghdate(dt(2009, 4, 18, 20, 4, 9)), - '2009/04/18 20:04:09 -0700') - #assert_equals(datetime_to_ghdate(dt(2009, 11, 13, 4, 15, 17)), - # '2009/11/13 04:15:17 -0800') - #assert_equals(datetime_to_ghdate(dt(2009, 11, 13, 4, 16, 20)), - # '2009/11/13 04:16:20 -0800') - assert_equals(datetime_to_ghdate(dt(2010, 4, 18, 0, 24, 29)), - '2010/04/18 00:24:29 -0700') - assert_equals(datetime_to_ghdate(dt(2010, 5, 18, 13, 10, 36)), - '2010/05/18 13:10:36 -0700') - assert_equals(datetime_to_ghdate(dt(2010, 5, 26, 5, 59, 37)), - '2010/05/26 05:59:37 -0700') - assert_equals(datetime_to_ghdate(dt(2010, 5, 27, 0, 8, 41)), - '2010/05/27 00:08:41 -0700') - assert_equals(datetime_to_ghdate(dt(2010, 6, 20, 13, 13, 37)), - '2010/06/20 13:13:37 -0700') - assert_equals(datetime_to_ghdate(dt(2010, 7, 28, 19, 56, 51)), - '2010/07/28 19:56:51 -0700') - assert_equals(datetime_to_ghdate(dt(2010, 9, 21, 4, 32, 49)), - '2010/09/21 04:32:49 -0700') + eq_(datetime_to_ghdate(dt(2011, 5, 22, 0, 24, 15)), + '2011/05/22 00:24:15 -0700') + + eq_(datetime_to_ghdate(dt(2009, 4, 18, 20, 4, 9)), + '2009/04/18 20:04:09 -0700') + #eq_(datetime_to_ghdate(dt(2009, 11, 13, 4, 15, 17)), + # '2009/11/13 04:15:17 -0800') + #eq_(datetime_to_ghdate(dt(2009, 11, 13, 4, 16, 20)), + # '2009/11/13 04:16:20 -0800') + eq_(datetime_to_ghdate(dt(2010, 4, 18, 0, 24, 29)), + '2010/04/18 00:24:29 -0700') + eq_(datetime_to_ghdate(dt(2010, 5, 18, 13, 10, 36)), + '2010/05/18 13:10:36 -0700') + eq_(datetime_to_ghdate(dt(2010, 5, 26, 5, 59, 37)), + '2010/05/26 05:59:37 -0700') + eq_(datetime_to_ghdate(dt(2010, 5, 27, 0, 8, 41)), + '2010/05/27 00:08:41 -0700') + eq_(datetime_to_ghdate(dt(2010, 6, 20, 13, 13, 37)), + '2010/06/20 13:13:37 -0700') + eq_(datetime_to_ghdate(dt(2010, 7, 28, 19, 56, 51)), + '2010/07/28 19:56:51 -0700') + eq_(datetime_to_ghdate(dt(2010, 9, 21, 4, 32, 49)), + '2010/09/21 04:32:49 -0700') def test_commitdate_to_datetime(): - assert_equals(string_to_datetime('2011-05-22T00:24:15-07:00'), - dt(2011, 5, 22, 0, 24, 15)) - - assert_equals(string_to_datetime('2011-04-09T10:07:30-07:00'), - dt(2011, 4, 9, 10, 7, 30)) - #assert_equals(string_to_datetime('2011-02-19T07:16:11-08:00'), - # dt(2011, 2, 19, 7, 16, 11)) - #assert_equals(string_to_datetime('2010-12-21T12:34:27-08:00'), - # dt(2010, 12, 21, 12, 34, 27)) - assert_equals(string_to_datetime('2011-04-09T10:20:05-07:00'), - dt(2011, 4, 9, 10, 20, 5)) - assert_equals(string_to_datetime('2011-04-09T10:05:58-07:00'), - dt(2011, 4, 9, 10, 5, 58)) - assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'), - dt(2011, 4, 9, 9, 53, 0)) - assert_equals(string_to_datetime('2011-04-09T10:00:21-07:00'), - dt(2011, 4, 9, 10, 0, 21)) - #assert_equals(string_to_datetime('2010-12-16T15:10:59-08:00'), - # dt(2010, 12, 16, 15, 10, 59)) - assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'), - dt(2011, 4, 9, 9, 53, 0)) - assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'), - dt(2011, 4, 9, 9, 53, 0)) + eq_(string_to_datetime('2011-05-22T00:24:15-07:00'), + dt(2011, 5, 22, 0, 24, 15)) + + eq_(string_to_datetime('2011-04-09T10:07:30-07:00'), + dt(2011, 4, 9, 10, 7, 30)) + #eq_(string_to_datetime('2011-02-19T07:16:11-08:00'), + # dt(2011, 2, 19, 7, 16, 11)) + #eq_(string_to_datetime('2010-12-21T12:34:27-08:00'), + # dt(2010, 12, 21, 12, 34, 27)) + eq_(string_to_datetime('2011-04-09T10:20:05-07:00'), + dt(2011, 4, 9, 10, 20, 5)) + eq_(string_to_datetime('2011-04-09T10:05:58-07:00'), + dt(2011, 4, 9, 10, 5, 58)) + eq_(string_to_datetime('2011-04-09T09:53:00-07:00'), + dt(2011, 4, 9, 9, 53, 0)) + eq_(string_to_datetime('2011-04-09T10:00:21-07:00'), + dt(2011, 4, 9, 10, 0, 21)) + #eq_(string_to_datetime('2010-12-16T15:10:59-08:00'), + # dt(2010, 12, 16, 15, 10, 59)) + eq_(string_to_datetime('2011-04-09T09:53:00-07:00'), + dt(2011, 4, 9, 9, 53, 0)) + eq_(string_to_datetime('2011-04-09T09:53:00-07:00'), + dt(2011, 4, 9, 9, 53, 0)) def test_datetime_to_commitdate(): - assert_equals(datetime_to_commitdate(dt(2011, 5, 22, 0, 24, 15)), - '2011-05-22T00:24:15-07:00') - - assert_equals(datetime_to_commitdate(dt(2011, 4, 9, 10, 7, 30)), - '2011-04-09T10:07:30-07:00') - #assert_equals(datetime_to_commitdate(dt(2011, 2, 19, 7, 16, 11)), - # '2011-02-19T07:16:11-08:00') - #assert_equals(datetime_to_commitdate(dt(2010, 12, 21, 12, 34, 27)), - # '2010-12-21T12:34:27-08:00') - assert_equals(datetime_to_commitdate(dt(2011, 4, 9, 10, 20, 5)), - '2011-04-09T10:20:05-07:00') - assert_equals(datetime_to_commitdate(dt(2011, 4, 9, 10, 5, 58)), - '2011-04-09T10:05:58-07:00') - assert_equals(datetime_to_commitdate(dt(2011, 4, 9, 9, 53, 0)), - '2011-04-09T09:53:00-07:00') - assert_equals(datetime_to_commitdate(dt(2011, 4, 9, 10, 0, 21)), - '2011-04-09T10:00:21-07:00') - #assert_equals(datetime_to_commitdate(dt(2010, 12, 16, 15, 10, 59)), - # '2010-12-16T15:10:59-08:00') - assert_equals(datetime_to_commitdate(dt(2011, 4, 9, 9, 53, 0)), - '2011-04-09T09:53:00-07:00') - assert_equals(datetime_to_commitdate(dt(2011, 4, 9, 9, 53, 0)), - '2011-04-09T09:53:00-07:00') + eq_(datetime_to_commitdate(dt(2011, 5, 22, 0, 24, 15)), + '2011-05-22T00:24:15-07:00') + + eq_(datetime_to_commitdate(dt(2011, 4, 9, 10, 7, 30)), + '2011-04-09T10:07:30-07:00') + #eq_(datetime_to_commitdate(dt(2011, 2, 19, 7, 16, 11)), + # '2011-02-19T07:16:11-08:00') + #eq_(datetime_to_commitdate(dt(2010, 12, 21, 12, 34, 27)), + # '2010-12-21T12:34:27-08:00') + eq_(datetime_to_commitdate(dt(2011, 4, 9, 10, 20, 5)), + '2011-04-09T10:20:05-07:00') + eq_(datetime_to_commitdate(dt(2011, 4, 9, 10, 5, 58)), + '2011-04-09T10:05:58-07:00') + eq_(datetime_to_commitdate(dt(2011, 4, 9, 9, 53, 0)), + '2011-04-09T09:53:00-07:00') + eq_(datetime_to_commitdate(dt(2011, 4, 9, 10, 0, 21)), + '2011-04-09T10:00:21-07:00') + #eq_(datetime_to_commitdate(dt(2010, 12, 16, 15, 10, 59)), + # '2010-12-16T15:10:59-08:00') + eq_(datetime_to_commitdate(dt(2011, 4, 9, 9, 53, 0)), + '2011-04-09T09:53:00-07:00') + eq_(datetime_to_commitdate(dt(2011, 4, 9, 9, 53, 0)), + '2011-04-09T09:53:00-07:00') def test_isodate_to_datetime(): - assert_equals(string_to_datetime('2011-05-22T00:24:15Z'), - dt(2011, 5, 22, 0, 24, 15)) - assert_equals(string_to_datetime('2011-04-09T10:07:30Z'), - dt(2011, 4, 9, 10, 7, 30)) - assert_equals(string_to_datetime('2011-02-19T07:16:11Z'), - dt(2011, 2, 19, 7, 16, 11)) - assert_equals(string_to_datetime('2010-12-21T12:34:27Z'), - dt(2010, 12, 21, 12, 34, 27)) - assert_equals(string_to_datetime('2011-04-09T10:20:05Z'), - dt(2011, 4, 9, 10, 20, 5)) - assert_equals(string_to_datetime('2011-04-09T10:05:58Z'), - dt(2011, 4, 9, 10, 5, 58)) - assert_equals(string_to_datetime('2011-04-09T09:53:00Z'), - dt(2011, 4, 9, 9, 53, 0)) - assert_equals(string_to_datetime('2011-04-09T10:00:21Z'), - dt(2011, 4, 9, 10, 0, 21)) - assert_equals(string_to_datetime('2010-12-16T15:10:59Z'), - dt(2010, 12, 16, 15, 10, 59)) - assert_equals(string_to_datetime('2011-04-09T09:53:00Z'), - dt(2011, 4, 9, 9, 53, 0)) - assert_equals(string_to_datetime('2011-04-09T09:53:00Z'), - dt(2011, 4, 9, 9, 53, 0)) + eq_(string_to_datetime('2011-05-22T00:24:15Z'), dt(2011, 5, 22, 0, 24, 15)) + eq_(string_to_datetime('2011-04-09T10:07:30Z'), dt(2011, 4, 9, 10, 7, 30)) + eq_(string_to_datetime('2011-02-19T07:16:11Z'), dt(2011, 2, 19, 7, 16, 11)) + eq_(string_to_datetime('2010-12-21T12:34:27Z'), + dt(2010, 12, 21, 12, 34, 27)) + eq_(string_to_datetime('2011-04-09T10:20:05Z'), dt(2011, 4, 9, 10, 20, 5)) + eq_(string_to_datetime('2011-04-09T10:05:58Z'), dt(2011, 4, 9, 10, 5, 58)) + eq_(string_to_datetime('2011-04-09T09:53:00Z'), dt(2011, 4, 9, 9, 53, 0)) + eq_(string_to_datetime('2011-04-09T10:00:21Z'), dt(2011, 4, 9, 10, 0, 21)) + eq_(string_to_datetime('2010-12-16T15:10:59Z'), + dt(2010, 12, 16, 15, 10, 59)) + eq_(string_to_datetime('2011-04-09T09:53:00Z'), dt(2011, 4, 9, 9, 53, 0)) + eq_(string_to_datetime('2011-04-09T09:53:00Z'), dt(2011, 4, 9, 9, 53, 0)) def test_datetime_to_isodate(): - assert_equals(datetime_to_isodate(dt(2011, 5, 22, 0, 24, 15)), - '2011-05-22T00:24:15Z') - assert_equals(datetime_to_isodate(dt(2011, 4, 9, 10, 7, 30)), - '2011-04-09T10:07:30Z') - assert_equals(datetime_to_isodate(dt(2011, 2, 19, 7, 16, 11)), - '2011-02-19T07:16:11Z') - assert_equals(datetime_to_isodate(dt(2010, 12, 21, 12, 34, 27)), - '2010-12-21T12:34:27Z') - assert_equals(datetime_to_isodate(dt(2011, 4, 9, 10, 20, 5)), - '2011-04-09T10:20:05Z') - assert_equals(datetime_to_isodate(dt(2011, 4, 9, 10, 5, 58)), - '2011-04-09T10:05:58Z') - assert_equals(datetime_to_isodate(dt(2011, 4, 9, 9, 53, 0)), - '2011-04-09T09:53:00Z') - assert_equals(datetime_to_isodate(dt(2011, 4, 9, 10, 0, 21)), - '2011-04-09T10:00:21Z') - assert_equals(datetime_to_isodate(dt(2010, 12, 16, 15, 10, 59)), - '2010-12-16T15:10:59Z') - assert_equals(datetime_to_isodate(dt(2011, 4, 9, 9, 53, 0)), - '2011-04-09T09:53:00Z') - assert_equals(datetime_to_isodate(dt(2011, 4, 9, 9, 53, 0)), - '2011-04-09T09:53:00Z') + eq_(datetime_to_isodate(dt(2011, 5, 22, 0, 24, 15)), + '2011-05-22T00:24:15Z') + eq_(datetime_to_isodate(dt(2011, 4, 9, 10, 7, 30)), '2011-04-09T10:07:30Z') + eq_(datetime_to_isodate(dt(2011, 2, 19, 7, 16, 11)), + '2011-02-19T07:16:11Z') + eq_(datetime_to_isodate(dt(2010, 12, 21, 12, 34, 27)), + '2010-12-21T12:34:27Z') + eq_(datetime_to_isodate(dt(2011, 4, 9, 10, 20, 5)), '2011-04-09T10:20:05Z') + eq_(datetime_to_isodate(dt(2011, 4, 9, 10, 5, 58)), '2011-04-09T10:05:58Z') + eq_(datetime_to_isodate(dt(2011, 4, 9, 9, 53, 0)), '2011-04-09T09:53:00Z') + eq_(datetime_to_isodate(dt(2011, 4, 9, 10, 0, 21)), '2011-04-09T10:00:21Z') + eq_(datetime_to_isodate(dt(2010, 12, 16, 15, 10, 59)), + '2010-12-16T15:10:59Z') + eq_(datetime_to_isodate(dt(2011, 4, 9, 9, 53, 0)), '2011-04-09T09:53:00Z') + eq_(datetime_to_isodate(dt(2011, 4, 9, 9, 53, 0)), '2011-04-09T09:53:00Z') diff --git a/tests/test_issues.py b/tests/test_issues.py index f82302b..2abf495 100644 --- a/tests/test_issues.py +++ b/tests/test_issues.py @@ -5,7 +5,7 @@ from datetime import datetime -from nose.tools import assert_equals +from nose.tools import eq_ import utils @@ -13,44 +13,42 @@ class Issue(utils.HttpMockTestCase): def test_properties(self): issue = self.client.issues.show('ask/python-github2', 24) - assert_equals(issue.position, 24.0) - assert_equals(issue.number, 24) - assert_equals(issue.votes, 0) - assert_equals(len(issue.body), 164) - assert_equals(issue.title, 'Pagination support for commits.') - assert_equals(issue.user, 'svetlyak40wt') - assert_equals(issue.state, 'open') - assert_equals(issue.labels, []) - assert_equals(issue.created_at, datetime(2010, 12, 8, 23, 50, 26)) - assert_equals(issue.closed_at, None) - assert_equals(issue.updated_at, datetime(2011, 1, 4, 16, 26, 7)) - assert_equals(issue.diff_url, - 'https://github.com/ask/python-github2/pull/24.diff') - assert_equals(issue.patch_url, - 'https://github.com/ask/python-github2/pull/24.patch') - assert_equals(issue.pull_request_url, - 'https://github.com/ask/python-github2/pull/24') + eq_(issue.position, 24.0) + eq_(issue.number, 24) + eq_(issue.votes, 0) + eq_(len(issue.body), 164) + eq_(issue.title, 'Pagination support for commits.') + eq_(issue.user, 'svetlyak40wt') + eq_(issue.state, 'open') + eq_(issue.labels, []) + eq_(issue.created_at, datetime(2010, 12, 8, 23, 50, 26)) + eq_(issue.closed_at, None) + eq_(issue.updated_at, datetime(2011, 1, 4, 16, 26, 7)) + eq_(issue.diff_url, + 'https://github.com/ask/python-github2/pull/24.diff') + eq_(issue.patch_url, + 'https://github.com/ask/python-github2/pull/24.patch') + eq_(issue.pull_request_url, + 'https://github.com/ask/python-github2/pull/24') def test_issue_repr(self): issue = self.client.issues.show('ask/python-github2', 24) - assert_equals(repr(issue), - '') + eq_(repr(issue), '') class Comment(utils.HttpMockTestCase): def test_properties(self): comments = self.client.issues.comments('ask/python-github2', 24) comment = comments[0] - assert_equals(comment.created_at, datetime(2010, 12, 9, 22, 37, 26)) - assert_equals(comment.updated_at, datetime(2010, 12, 9, 22, 37, 26)) - assert_equals(len(comment.body), 267) - assert_equals(comment.id, 601871) - assert_equals(comment.user, 'nvie') + eq_(comment.created_at, datetime(2010, 12, 9, 22, 37, 26)) + eq_(comment.updated_at, datetime(2010, 12, 9, 22, 37, 26)) + eq_(len(comment.body), 267) + eq_(comment.id, 601871) + eq_(comment.user, 'nvie') def test_comment_repr(self): comments = self.client.issues.comments('ask/python-github2', 24) - assert_equals(repr(comments[1]), - '') + eq_(repr(comments[1]), '') class IssueQueries(utils.HttpMockTestCase): @@ -58,25 +56,25 @@ class IssueQueries(utils.HttpMockTestCase): def test_search(self): issues = self.client.issues.search('ask/python-github2', 'timezone', 'closed') - assert_equals(len(issues), 2) - assert_equals(issues[1].number, 39) + eq_(len(issues), 2) + eq_(issues[1].number, 39) def test_list(self): issues = self.client.issues.list('ask/python-github2') - assert_equals(len(issues), 4) - assert_equals(issues[-1].number, 58) + eq_(len(issues), 4) + eq_(issues[-1].number, 58) def test_list_with_state(self): issues = self.client.issues.list('ask/python-github2', "closed") - assert_equals(len(issues), 55) - assert_equals(issues[0].number, 59) + eq_(len(issues), 55) + eq_(issues[0].number, 59) def test_issue_labels(self): labels = self.client.issues.list_labels('JNRowe/misc-overlay') - assert_equals(len(labels), 4) - assert_equals(labels[0], 'feature') + eq_(len(labels), 4) + eq_(labels[0], 'feature') def test_list_by_label(self): issues = self.client.issues.list_by_label('JNRowe/misc-overlay', 'bug') - assert_equals(len(issues), 30) - assert_equals(issues[-1].number, 328) + eq_(len(issues), 30) + eq_(issues[-1].number, 328) diff --git a/tests/test_organizations.py b/tests/test_organizations.py index 8571e23..399d450 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -5,7 +5,7 @@ from datetime import datetime -from nose.tools import (assert_equals, assert_true) +from nose.tools import (eq_, assert_true) import utils @@ -13,23 +13,21 @@ class OrganizationProperties(utils.HttpMockTestCase): def test_properties(self): organization = self.client.organizations.show('github') - assert_equals(organization.id, 9919) - assert_equals(organization.name, 'GitHub') - assert_equals(organization.blog, 'https://github.com/about') - assert_equals(organization.location, 'San Francisco, CA') - assert_equals(organization.gravatar_id, - '61024896f291303615bcd4f7a0dcfb74') - assert_equals(organization.login, 'github') - assert_equals(organization.email, 'support@github.com') - assert_equals(organization.company, None) - assert_equals(organization.created_at, - datetime(2008, 5, 10, 21, 37, 31)) - assert_equals(organization.following_count, 0) - assert_equals(organization.followers_count, 591) - assert_equals(organization.public_gist_count, 0) - assert_equals(organization.public_repo_count, 31) - assert_equals(organization.permission, None) - assert_equals(organization.plan, None) + eq_(organization.id, 9919) + eq_(organization.name, 'GitHub') + eq_(organization.blog, 'https://github.com/about') + eq_(organization.location, 'San Francisco, CA') + eq_(organization.gravatar_id, '61024896f291303615bcd4f7a0dcfb74') + eq_(organization.login, 'github') + eq_(organization.email, 'support@github.com') + eq_(organization.company, None) + eq_(organization.created_at, datetime(2008, 5, 10, 21, 37, 31)) + eq_(organization.following_count, 0) + eq_(organization.followers_count, 591) + eq_(organization.public_gist_count, 0) + eq_(organization.public_repo_count, 31) + eq_(organization.permission, None) + eq_(organization.plan, None) def test_is_authenticated(self): organization = self.client.organizations.show('github') @@ -41,29 +39,28 @@ def test_is_authenticated(self): class Organization(utils.HttpMockTestCase): def test_repr(self): organization = self.client.organizations.show('github') - assert_equals(repr(organization), - '') + eq_(repr(organization), '') class OrganizationQueries(utils.HttpMockTestCase): """Test organisation querying""" def test_public_repositories(self): repos = self.client.organizations.public_repositories('github') - assert_equals(len(repos), 31) - assert_equals(repos[2].name, 'hubahuba') + eq_(len(repos), 31) + eq_(repos[2].name, 'hubahuba') def test_public_members(self): members = self.client.organizations.public_members('github') - assert_equals(len(members), 35) - assert_equals(members[2].name, 'Ben Burkert') + eq_(len(members), 35) + eq_(members[2].name, 'Ben Burkert') class OrganizationsEdits(utils.HttpMockAuthenticatedTestCase): def test_add_team(self): team = self.client.organizations.add_team('JNRowe-test-org', 'test_pull', 'pull') - assert_equals(team.name, 'team_pull') - assert_equals(team.permission, 'pull') + eq_(team.name, 'team_pull') + eq_(team.permission, 'pull') def test_add_team_with_repos(self): projects = ['JNRowe-test-org/test1', 'JNRowe-test-org/test2'] @@ -72,5 +69,4 @@ def test_add_team_with_repos(self): projects) team_repos = self.client.teams.repositories(team.id) - assert_equals(['/'.join([x.organization, x.name]) for x in team_repos], - projects) + eq_(['/'.join([x.organization, x.name]) for x in team_repos], projects) diff --git a/tests/test_pull_requests.py b/tests/test_pull_requests.py index 9c2d35e..efe486c 100644 --- a/tests/test_pull_requests.py +++ b/tests/test_pull_requests.py @@ -5,7 +5,7 @@ from datetime import datetime -from nose.tools import assert_equals +from nose.tools import eq_ import utils @@ -13,55 +13,48 @@ class PullRequest(utils.HttpMockTestCase): def test_properties(self): pull_request = self.client.pull_requests.show('ask/python-github2', 39) - assert_equals(pull_request.state, 'closed') - assert_equals(pull_request.base['sha'], + eq_(pull_request.state, 'closed') + eq_(pull_request.base['sha'], '0786a96c80afad7bbd0747df590f649eaa46ca04') - assert_equals(pull_request.head['sha'], + eq_(pull_request.head['sha'], '5438e41d9c390f53089ed3fa0842831fafc73d8e') - assert_equals(pull_request.issue_user['login'], 'JNRowe') - assert_equals(pull_request.user['login'], 'JNRowe') - assert_equals(pull_request.title, 'Datetime timezone handling.') - assert_equals(len(pull_request.body), 1442) - assert_equals(pull_request.position, 39.0) - assert_equals(pull_request.number, 39.0) - assert_equals(pull_request.votes, 0) - assert_equals(pull_request.comments, 4) - assert_equals(pull_request.diff_url, - 'https://github.com/ask/python-github2/pull/39.diff') - assert_equals(pull_request.patch_url, - 'https://github.com/ask/python-github2/pull/39.patch') - assert_equals(pull_request.labels, []) - assert_equals(pull_request.html_url, - 'https://github.com/ask/python-github2/pull/39') - assert_equals(pull_request.issue_created_at, - datetime(2011, 4, 18, 15, 25, 47)) - assert_equals(pull_request.issue_updated_at, - datetime(2011, 6, 23, 9, 33, 57)) - assert_equals(pull_request.created_at, - datetime(2011, 6, 20, 16, 51, 24)) - assert_equals(pull_request.updated_at, - datetime(2011, 6, 23, 9, 28, 42)) - assert_equals(pull_request.closed_at, - datetime(2011, 6, 23, 9, 33, 57)) - assert_equals(len(pull_request.discussion), 13) - assert_equals(pull_request.mergeable, True) + eq_(pull_request.issue_user['login'], 'JNRowe') + eq_(pull_request.user['login'], 'JNRowe') + eq_(pull_request.title, 'Datetime timezone handling.') + eq_(len(pull_request.body), 1442) + eq_(pull_request.position, 39.0) + eq_(pull_request.number, 39.0) + eq_(pull_request.votes, 0) + eq_(pull_request.comments, 4) + eq_(pull_request.diff_url, + 'https://github.com/ask/python-github2/pull/39.diff') + eq_(pull_request.patch_url, + 'https://github.com/ask/python-github2/pull/39.patch') + eq_(pull_request.labels, []) + eq_(pull_request.html_url, + 'https://github.com/ask/python-github2/pull/39') + eq_(pull_request.issue_created_at, datetime(2011, 4, 18, 15, 25, 47)) + eq_(pull_request.issue_updated_at, datetime(2011, 6, 23, 9, 33, 57)) + eq_(pull_request.created_at, datetime(2011, 6, 20, 16, 51, 24)) + eq_(pull_request.updated_at, datetime(2011, 6, 23, 9, 28, 42)) + eq_(pull_request.closed_at, datetime(2011, 6, 23, 9, 33, 57)) + eq_(len(pull_request.discussion), 13) + eq_(pull_request.mergeable, True) def test_repr(self): pull_request = self.client.pull_requests.show('ask/python-github2', 39) - assert_equals(repr(pull_request), - '') + eq_(repr(pull_request), '') class PullRequestQueries(utils.HttpMockTestCase): """Test pull request querying""" def test_list(self): pull_requests = self.client.pull_requests.list('ask/python-github2') - assert_equals(len(pull_requests), 1) - assert_equals(pull_requests[0].title, - 'Pagination support for commits.') + eq_(len(pull_requests), 1) + eq_(pull_requests[0].title, 'Pagination support for commits.') def test_list_with_page(self): pull_requests = self.client.pull_requests.list('robbyrussell/oh-my-zsh', page=2) - assert_equals(len(pull_requests), 52) - assert_equals(pull_requests[1].title, 'Added my own custom theme') + eq_(len(pull_requests), 52) + eq_(pull_requests[1].title, 'Added my own custom theme') diff --git a/tests/test_regression.py b/tests/test_regression.py index cad7dc2..d5ff091 100644 --- a/tests/test_regression.py +++ b/tests/test_regression.py @@ -5,7 +5,7 @@ import httplib2 -from nose.tools import assert_equals +from nose.tools import eq_ from github2.client import Github @@ -21,8 +21,8 @@ def test_issue_50(): client = Github(proxy_host="my.proxy.com", proxy_port=9000) setup_args = client.request._http.called_with - assert_equals(type(setup_args['proxy_info']), httplib2.ProxyInfo) - assert_equals(setup_args['proxy_info'].proxy_host, 'my.proxy.com') - assert_equals(setup_args['proxy_info'].proxy_port, 9000) + eq_(type(setup_args['proxy_info']), httplib2.ProxyInfo) + eq_(setup_args['proxy_info'].proxy_host, 'my.proxy.com') + eq_(setup_args['proxy_info'].proxy_port, 9000) utils.unset_http_mock() diff --git a/tests/test_repositories.py b/tests/test_repositories.py index 1cdaab9..39017df 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -7,7 +7,7 @@ import datetime -from nose.tools import assert_equals +from nose.tools import eq_ import utils @@ -15,7 +15,7 @@ class Repo(utils.HttpMockTestCase): def test_repr(self): repo = self.client.repos.show('JNRowe/misc-overlay') - assert_equals(repr(repo), '') + eq_(repr(repo), '') class RepoProperties(utils.HttpMockTestCase): @@ -23,103 +23,98 @@ class RepoProperties(utils.HttpMockTestCase): def test_repo(self): repo = self.client.repos.show('JNRowe/misc-overlay') - assert_equals(repo.name, 'misc-overlay') - assert_equals(repo.description, - 'Gentoo overlay -- miscellaneous packages') - assert_equals(repo.url, 'https://github.com/JNRowe/misc-overlay') - assert_equals(repo.owner, 'JNRowe') - assert_equals(repo.homepage, 'http://jnrowe.github.com/misc-overlay/') + eq_(repo.name, 'misc-overlay') + eq_(repo.description, 'Gentoo overlay -- miscellaneous packages') + eq_(repo.url, 'https://github.com/JNRowe/misc-overlay') + eq_(repo.owner, 'JNRowe') + eq_(repo.homepage, 'http://jnrowe.github.com/misc-overlay/') - assert_equals(repo.project, 'JNRowe/misc-overlay') + eq_(repo.project, 'JNRowe/misc-overlay') def test_meta(self): repo = self.client.repos.show('JNRowe/misc-overlay') - assert_equals(repo.forks, 0) - assert_equals(repo.watchers, 5) - assert_equals(repo.private, False) - assert_equals(repo.fork, False) - assert_equals(repo.master_branch, None) - assert_equals(repo.integration_branch, None) - assert_equals(repo.open_issues, 13) - assert_equals(repo.created_at, - datetime.datetime(2009, 5, 2, 7, 32, 50)) - assert_equals(repo.pushed_at, - datetime.datetime(2011, 8, 11, 11, 46, 23)) - assert_equals(repo.has_downloads, True) - assert_equals(repo.has_wiki, True) - assert_equals(repo.has_issues, True) - assert_equals(repo.language, 'Python') + eq_(repo.forks, 0) + eq_(repo.watchers, 5) + eq_(repo.private, False) + eq_(repo.fork, False) + eq_(repo.master_branch, None) + eq_(repo.integration_branch, None) + eq_(repo.open_issues, 13) + eq_(repo.created_at, datetime.datetime(2009, 5, 2, 7, 32, 50)) + eq_(repo.pushed_at, datetime.datetime(2011, 8, 11, 11, 46, 23)) + eq_(repo.has_downloads, True) + eq_(repo.has_wiki, True) + eq_(repo.has_issues, True) + eq_(repo.language, 'Python') def test_fork_properties(self): repo = self.client.repos.show('JNRowe/python-github2') - assert_equals(repo.forks, 0) - assert_equals(repo.fork, True) - assert_equals(repo.parent, 'ask/python-github2') - assert_equals(repo.source, 'ask/python-github2') + eq_(repo.forks, 0) + eq_(repo.fork, True) + eq_(repo.parent, 'ask/python-github2') + eq_(repo.source, 'ask/python-github2') class RepoQueries(utils.HttpMockTestCase): """Test repository querying""" def test_search(self): repos = self.client.repos.search('surfraw') - assert_equals(len(repos), 8) - assert_equals(repos[0].owner, 'JNRowe') + eq_(len(repos), 8) + eq_(repos[0].owner, 'JNRowe') def test_list(self): repos = self.client.repos.list('JNRowe') - assert_equals(len(repos), 48) - assert_equals(repos[0].name, 'bfm') + eq_(len(repos), 48) + eq_(repos[0].name, 'bfm') def test_list_with_page(self): repos = self.client.repos.list('tekkub', page=2) - assert_equals(len(repos), 37) - assert_equals(repos[0].name, 'OhSnap') + eq_(len(repos), 37) + eq_(repos[0].name, 'OhSnap') def test_watching(self): repos = self.client.repos.watching('JNRowe') - assert_equals(len(repos), 90) - assert_equals(repos[0].name, 'nerdtree') + eq_(len(repos), 90) + eq_(repos[0].name, 'nerdtree') def test_watching_with_page(self): repos = self.client.repos.watching('tekkub', page=2) - assert_equals(len(repos), 39) - assert_equals(repos[0].name, 'Buffoon') + eq_(len(repos), 39) + eq_(repos[0].name, 'Buffoon') def test_contributors(self): contributors = self.client.repos.list_contributors('ask/python-github2') - assert_equals(len(contributors), 29) - assert_equals(contributors[1].name, 'Ask Solem Hoel') + eq_(len(contributors), 29) + eq_(contributors[1].name, 'Ask Solem Hoel') def test_list_collaborators(self): collaborators = self.client.repos.list_collaborators('ask/python-github2') - assert_equals(len(collaborators), 4) - assert_equals(collaborators[2], 'JNRowe') + eq_(len(collaborators), 4) + eq_(collaborators[2], 'JNRowe') def test_languages(self): languages = self.client.repos.languages('JNRowe/misc-overlay') - assert_equals(len(languages), 2) - assert_equals(languages['Python'], 11194) + eq_(len(languages), 2) + eq_(languages['Python'], 11194) def test_tags(self): tags = self.client.repos.tags('ask/python-github2') - assert_equals(len(tags), 7) - assert_equals(tags['0.4.1'], - '96b0a41dd249c521323700bc11a0a721a7c9e642') + eq_(len(tags), 7) + eq_(tags['0.4.1'], '96b0a41dd249c521323700bc11a0a721a7c9e642') def test_branches(self): branches = self.client.repos.branches('ask/python-github2') - assert_equals(len(branches), 1) - assert_equals(branches['master'], - '1c83cde9b5a7c396a01af1007fb7b88765b9ae45') + eq_(len(branches), 1) + eq_(branches['master'], '1c83cde9b5a7c396a01af1007fb7b88765b9ae45') def test_watchers(self): watchers = self.client.repos.watchers('ask/python-github2') - assert_equals(len(watchers), 143) - assert_equals(watchers[0], 'ask') + eq_(len(watchers), 143) + eq_(watchers[0], 'ask') class AuthenticatedRepoQueries(utils.HttpMockAuthenticatedTestCase): def test_pushable(self): repos = self.client.repos.pushable() - assert_equals(len(repos), 1) - assert_equals(repos[0].name, 'python-github2') + eq_(len(repos), 1) + eq_(repos[0].name, 'python-github2') diff --git a/tests/test_teams.py b/tests/test_teams.py index 7333edd..cd18166 100644 --- a/tests/test_teams.py +++ b/tests/test_teams.py @@ -3,7 +3,7 @@ # This file is part of python-github2, and is made available under the 3-clause # BSD license. See LICENSE for the full details. -from nose.tools import assert_equals +from nose.tools import eq_ import utils @@ -11,4 +11,4 @@ class TeamEdits(utils.HttpMockAuthenticatedTestCase): def test_add_member(self): users = self.client.teams.add_member(121990, 'JNRowe') - assert_equals(users[0].login, 'JNRowe') + eq_(users[0].login, 'JNRowe') diff --git a/tests/test_tz_aware_date_handling.py b/tests/test_tz_aware_date_handling.py index 6a501f0..77302ba 100644 --- a/tests/test_tz_aware_date_handling.py +++ b/tests/test_tz_aware_date_handling.py @@ -7,7 +7,7 @@ from datetime import datetime as dt from dateutil.tz import tzutc -from nose.tools import assert_equals +from nose.tools import eq_ from github2 import core from github2.core import (datetime_to_ghdate, datetime_to_commitdate, @@ -33,150 +33,150 @@ def dt_utz(year, month, day, hour, minute, second): def test_ghdate_to_datetime(): - assert_equals(string_to_datetime('2011/05/22 00:24:15 -0700'), - dt_utz(2011, 5, 22, 7, 24, 15)) - assert_equals(string_to_datetime('2009/04/18 13:04:09 -0700'), - dt_utz(2009, 4, 18, 20, 4, 9)) - assert_equals(string_to_datetime('2009/11/12 21:15:17 -0800'), - dt_utz(2009, 11, 13, 5, 15, 17)) - assert_equals(string_to_datetime('2009/11/12 21:16:20 -0800'), - dt_utz(2009, 11, 13, 5, 16, 20)) - assert_equals(string_to_datetime('2010/04/17 17:24:29 -0700'), - dt_utz(2010, 4, 18, 0, 24, 29)) - assert_equals(string_to_datetime('2010/05/18 06:10:36 -0700'), - dt_utz(2010, 5, 18, 13, 10, 36)) - assert_equals(string_to_datetime('2010/05/25 21:59:37 -0700'), - dt_utz(2010, 5, 26, 4, 59, 37)) - assert_equals(string_to_datetime('2010/05/26 17:08:41 -0700'), - dt_utz(2010, 5, 27, 0, 8, 41)) - assert_equals(string_to_datetime('2010/06/20 06:13:37 -0700'), - dt_utz(2010, 6, 20, 13, 13, 37)) - assert_equals(string_to_datetime('2010/07/28 12:56:51 -0700'), - dt_utz(2010, 7, 28, 19, 56, 51)) - assert_equals(string_to_datetime('2010/09/20 21:32:49 -0700'), - dt_utz(2010, 9, 21, 4, 32, 49)) + eq_(string_to_datetime('2011/05/22 00:24:15 -0700'), + dt_utz(2011, 5, 22, 7, 24, 15)) + eq_(string_to_datetime('2009/04/18 13:04:09 -0700'), + dt_utz(2009, 4, 18, 20, 4, 9)) + eq_(string_to_datetime('2009/11/12 21:15:17 -0800'), + dt_utz(2009, 11, 13, 5, 15, 17)) + eq_(string_to_datetime('2009/11/12 21:16:20 -0800'), + dt_utz(2009, 11, 13, 5, 16, 20)) + eq_(string_to_datetime('2010/04/17 17:24:29 -0700'), + dt_utz(2010, 4, 18, 0, 24, 29)) + eq_(string_to_datetime('2010/05/18 06:10:36 -0700'), + dt_utz(2010, 5, 18, 13, 10, 36)) + eq_(string_to_datetime('2010/05/25 21:59:37 -0700'), + dt_utz(2010, 5, 26, 4, 59, 37)) + eq_(string_to_datetime('2010/05/26 17:08:41 -0700'), + dt_utz(2010, 5, 27, 0, 8, 41)) + eq_(string_to_datetime('2010/06/20 06:13:37 -0700'), + dt_utz(2010, 6, 20, 13, 13, 37)) + eq_(string_to_datetime('2010/07/28 12:56:51 -0700'), + dt_utz(2010, 7, 28, 19, 56, 51)) + eq_(string_to_datetime('2010/09/20 21:32:49 -0700'), + dt_utz(2010, 9, 21, 4, 32, 49)) def test_datetime_to_ghdate(): - assert_equals(datetime_to_ghdate(dt_utz(2011, 5, 22, 7, 24, 15)), - '2011/05/22 00:24:15 -0700') - assert_equals(datetime_to_ghdate(dt_utz(2009, 4, 18, 20, 4, 9)), - '2009/04/18 13:04:09 -0700') - assert_equals(datetime_to_ghdate(dt_utz(2009, 11, 13, 4, 15, 17)), - '2009/11/12 20:15:17 -0800') - assert_equals(datetime_to_ghdate(dt_utz(2009, 11, 13, 4, 16, 20)), - '2009/11/12 20:16:20 -0800') - assert_equals(datetime_to_ghdate(dt_utz(2010, 4, 18, 0, 24, 29)), - '2010/04/17 17:24:29 -0700') - assert_equals(datetime_to_ghdate(dt_utz(2010, 5, 18, 13, 10, 36)), - '2010/05/18 06:10:36 -0700') - assert_equals(datetime_to_ghdate(dt_utz(2010, 5, 26, 5, 59, 37)), - '2010/05/25 22:59:37 -0700') - assert_equals(datetime_to_ghdate(dt_utz(2010, 5, 27, 0, 8, 41)), - '2010/05/26 17:08:41 -0700') - assert_equals(datetime_to_ghdate(dt_utz(2010, 6, 20, 13, 13, 37)), - '2010/06/20 06:13:37 -0700') - assert_equals(datetime_to_ghdate(dt_utz(2010, 7, 28, 19, 56, 51)), - '2010/07/28 12:56:51 -0700') - assert_equals(datetime_to_ghdate(dt_utz(2010, 9, 21, 4, 32, 49)), - '2010/09/20 21:32:49 -0700') + eq_(datetime_to_ghdate(dt_utz(2011, 5, 22, 7, 24, 15)), + '2011/05/22 00:24:15 -0700') + eq_(datetime_to_ghdate(dt_utz(2009, 4, 18, 20, 4, 9)), + '2009/04/18 13:04:09 -0700') + eq_(datetime_to_ghdate(dt_utz(2009, 11, 13, 4, 15, 17)), + '2009/11/12 20:15:17 -0800') + eq_(datetime_to_ghdate(dt_utz(2009, 11, 13, 4, 16, 20)), + '2009/11/12 20:16:20 -0800') + eq_(datetime_to_ghdate(dt_utz(2010, 4, 18, 0, 24, 29)), + '2010/04/17 17:24:29 -0700') + eq_(datetime_to_ghdate(dt_utz(2010, 5, 18, 13, 10, 36)), + '2010/05/18 06:10:36 -0700') + eq_(datetime_to_ghdate(dt_utz(2010, 5, 26, 5, 59, 37)), + '2010/05/25 22:59:37 -0700') + eq_(datetime_to_ghdate(dt_utz(2010, 5, 27, 0, 8, 41)), + '2010/05/26 17:08:41 -0700') + eq_(datetime_to_ghdate(dt_utz(2010, 6, 20, 13, 13, 37)), + '2010/06/20 06:13:37 -0700') + eq_(datetime_to_ghdate(dt_utz(2010, 7, 28, 19, 56, 51)), + '2010/07/28 12:56:51 -0700') + eq_(datetime_to_ghdate(dt_utz(2010, 9, 21, 4, 32, 49)), + '2010/09/20 21:32:49 -0700') def test_commitdate_to_datetime(): - assert_equals(string_to_datetime('2011-05-22T00:24:15-07:00'), - dt_utz(2011, 5, 22, 7, 24, 15)) - assert_equals(string_to_datetime('2011-04-09T10:07:30-07:00'), - dt_utz(2011, 4, 9, 17, 7, 30)) - assert_equals(string_to_datetime('2011-02-19T07:16:11-08:00'), - dt_utz(2011, 2, 19, 15, 16, 11)) - assert_equals(string_to_datetime('2010-12-21T12:34:27-08:00'), - dt_utz(2010, 12, 21, 20, 34, 27)) - assert_equals(string_to_datetime('2011-04-09T10:20:05-07:00'), - dt_utz(2011, 4, 9, 17, 20, 5)) - assert_equals(string_to_datetime('2011-04-09T10:05:58-07:00'), - dt_utz(2011, 4, 9, 17, 5, 58)) - assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'), - dt_utz(2011, 4, 9, 16, 53, 0)) - assert_equals(string_to_datetime('2011-04-09T10:00:21-07:00'), - dt_utz(2011, 4, 9, 17, 0, 21)) - assert_equals(string_to_datetime('2010-12-16T15:10:59-08:00'), - dt_utz(2010, 12, 16, 23, 10, 59)) - assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'), - dt_utz(2011, 4, 9, 16, 53, 0)) - assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'), - dt_utz(2011, 4, 9, 16, 53, 0)) + eq_(string_to_datetime('2011-05-22T00:24:15-07:00'), + dt_utz(2011, 5, 22, 7, 24, 15)) + eq_(string_to_datetime('2011-04-09T10:07:30-07:00'), + dt_utz(2011, 4, 9, 17, 7, 30)) + eq_(string_to_datetime('2011-02-19T07:16:11-08:00'), + dt_utz(2011, 2, 19, 15, 16, 11)) + eq_(string_to_datetime('2010-12-21T12:34:27-08:00'), + dt_utz(2010, 12, 21, 20, 34, 27)) + eq_(string_to_datetime('2011-04-09T10:20:05-07:00'), + dt_utz(2011, 4, 9, 17, 20, 5)) + eq_(string_to_datetime('2011-04-09T10:05:58-07:00'), + dt_utz(2011, 4, 9, 17, 5, 58)) + eq_(string_to_datetime('2011-04-09T09:53:00-07:00'), + dt_utz(2011, 4, 9, 16, 53, 0)) + eq_(string_to_datetime('2011-04-09T10:00:21-07:00'), + dt_utz(2011, 4, 9, 17, 0, 21)) + eq_(string_to_datetime('2010-12-16T15:10:59-08:00'), + dt_utz(2010, 12, 16, 23, 10, 59)) + eq_(string_to_datetime('2011-04-09T09:53:00-07:00'), + dt_utz(2011, 4, 9, 16, 53, 0)) + eq_(string_to_datetime('2011-04-09T09:53:00-07:00'), + dt_utz(2011, 4, 9, 16, 53, 0)) def test_datetime_to_commitdate(): - assert_equals(datetime_to_commitdate(dt_utz(2011, 5, 22, 7, 24, 15)), - '2011-05-22T00:24:15-07:00') - assert_equals(datetime_to_commitdate(dt_utz(2011, 4, 9, 17, 7, 30)), - '2011-04-09T10:07:30-07:00') - assert_equals(datetime_to_commitdate(dt_utz(2011, 2, 19, 15, 16, 11)), - '2011-02-19T07:16:11-08:00') - assert_equals(datetime_to_commitdate(dt_utz(2010, 12, 21, 20, 34, 27)), - '2010-12-21T12:34:27-08:00') - assert_equals(datetime_to_commitdate(dt_utz(2011, 4, 9, 17, 20, 5)), - '2011-04-09T10:20:05-07:00') - assert_equals(datetime_to_commitdate(dt_utz(2011, 4, 9, 17, 5, 58)), - '2011-04-09T10:05:58-07:00') - assert_equals(datetime_to_commitdate(dt_utz(2011, 4, 9, 16, 53, 0)), - '2011-04-09T09:53:00-07:00') - assert_equals(datetime_to_commitdate(dt_utz(2011, 4, 9, 17, 0, 21)), - '2011-04-09T10:00:21-07:00') - assert_equals(datetime_to_commitdate(dt_utz(2010, 12, 16, 23, 10, 59)), - '2010-12-16T15:10:59-08:00') - assert_equals(datetime_to_commitdate(dt_utz(2011, 4, 9, 16, 53, 0)), - '2011-04-09T09:53:00-07:00') - assert_equals(datetime_to_commitdate(dt_utz(2011, 4, 9, 16, 53, 0)), - '2011-04-09T09:53:00-07:00') + eq_(datetime_to_commitdate(dt_utz(2011, 5, 22, 7, 24, 15)), + '2011-05-22T00:24:15-07:00') + eq_(datetime_to_commitdate(dt_utz(2011, 4, 9, 17, 7, 30)), + '2011-04-09T10:07:30-07:00') + eq_(datetime_to_commitdate(dt_utz(2011, 2, 19, 15, 16, 11)), + '2011-02-19T07:16:11-08:00') + eq_(datetime_to_commitdate(dt_utz(2010, 12, 21, 20, 34, 27)), + '2010-12-21T12:34:27-08:00') + eq_(datetime_to_commitdate(dt_utz(2011, 4, 9, 17, 20, 5)), + '2011-04-09T10:20:05-07:00') + eq_(datetime_to_commitdate(dt_utz(2011, 4, 9, 17, 5, 58)), + '2011-04-09T10:05:58-07:00') + eq_(datetime_to_commitdate(dt_utz(2011, 4, 9, 16, 53, 0)), + '2011-04-09T09:53:00-07:00') + eq_(datetime_to_commitdate(dt_utz(2011, 4, 9, 17, 0, 21)), + '2011-04-09T10:00:21-07:00') + eq_(datetime_to_commitdate(dt_utz(2010, 12, 16, 23, 10, 59)), + '2010-12-16T15:10:59-08:00') + eq_(datetime_to_commitdate(dt_utz(2011, 4, 9, 16, 53, 0)), + '2011-04-09T09:53:00-07:00') + eq_(datetime_to_commitdate(dt_utz(2011, 4, 9, 16, 53, 0)), + '2011-04-09T09:53:00-07:00') def test_isodate_to_datetime(): - assert_equals(string_to_datetime('2011-05-22T00:24:15Z'), - dt_utz(2011, 5, 22, 0, 24, 15)) - assert_equals(string_to_datetime('2011-04-09T10:07:30Z'), - dt_utz(2011, 4, 9, 10, 7, 30)) - assert_equals(string_to_datetime('2011-02-19T07:16:11Z'), - dt_utz(2011, 2, 19, 7, 16, 11)) - assert_equals(string_to_datetime('2010-12-21T12:34:27Z'), - dt_utz(2010, 12, 21, 12, 34, 27)) - assert_equals(string_to_datetime('2011-04-09T10:20:05Z'), - dt_utz(2011, 4, 9, 10, 20, 5)) - assert_equals(string_to_datetime('2011-04-09T10:05:58Z'), - dt_utz(2011, 4, 9, 10, 5, 58)) - assert_equals(string_to_datetime('2011-04-09T09:53:00Z'), - dt_utz(2011, 4, 9, 9, 53, 0)) - assert_equals(string_to_datetime('2011-04-09T10:00:21Z'), - dt_utz(2011, 4, 9, 10, 0, 21)) - assert_equals(string_to_datetime('2010-12-16T15:10:59Z'), - dt_utz(2010, 12, 16, 15, 10, 59)) - assert_equals(string_to_datetime('2011-04-09T09:53:00Z'), - dt_utz(2011, 4, 9, 9, 53, 0)) - assert_equals(string_to_datetime('2011-04-09T09:53:00Z'), - dt_utz(2011, 4, 9, 9, 53, 0)) + eq_(string_to_datetime('2011-05-22T00:24:15Z'), + dt_utz(2011, 5, 22, 0, 24, 15)) + eq_(string_to_datetime('2011-04-09T10:07:30Z'), + dt_utz(2011, 4, 9, 10, 7, 30)) + eq_(string_to_datetime('2011-02-19T07:16:11Z'), + dt_utz(2011, 2, 19, 7, 16, 11)) + eq_(string_to_datetime('2010-12-21T12:34:27Z'), + dt_utz(2010, 12, 21, 12, 34, 27)) + eq_(string_to_datetime('2011-04-09T10:20:05Z'), + dt_utz(2011, 4, 9, 10, 20, 5)) + eq_(string_to_datetime('2011-04-09T10:05:58Z'), + dt_utz(2011, 4, 9, 10, 5, 58)) + eq_(string_to_datetime('2011-04-09T09:53:00Z'), + dt_utz(2011, 4, 9, 9, 53, 0)) + eq_(string_to_datetime('2011-04-09T10:00:21Z'), + dt_utz(2011, 4, 9, 10, 0, 21)) + eq_(string_to_datetime('2010-12-16T15:10:59Z'), + dt_utz(2010, 12, 16, 15, 10, 59)) + eq_(string_to_datetime('2011-04-09T09:53:00Z'), + dt_utz(2011, 4, 9, 9, 53, 0)) + eq_(string_to_datetime('2011-04-09T09:53:00Z'), + dt_utz(2011, 4, 9, 9, 53, 0)) def test_datetime_to_isodate(): - assert_equals(datetime_to_isodate(dt_utz(2011, 5, 22, 0, 24, 15)), - '2011-05-22T00:24:15Z') - assert_equals(datetime_to_isodate(dt_utz(2011, 4, 9, 10, 7, 30)), - '2011-04-09T10:07:30Z') - assert_equals(datetime_to_isodate(dt_utz(2011, 2, 19, 7, 16, 11)), - '2011-02-19T07:16:11Z') - assert_equals(datetime_to_isodate(dt_utz(2010, 12, 21, 12, 34, 27)), - '2010-12-21T12:34:27Z') - assert_equals(datetime_to_isodate(dt_utz(2011, 4, 9, 10, 20, 5)), - '2011-04-09T10:20:05Z') - assert_equals(datetime_to_isodate(dt_utz(2011, 4, 9, 10, 5, 58)), - '2011-04-09T10:05:58Z') - assert_equals(datetime_to_isodate(dt_utz(2011, 4, 9, 9, 53, 0)), - '2011-04-09T09:53:00Z') - assert_equals(datetime_to_isodate(dt_utz(2011, 4, 9, 10, 0, 21)), - '2011-04-09T10:00:21Z') - assert_equals(datetime_to_isodate(dt_utz(2010, 12, 16, 15, 10, 59)), - '2010-12-16T15:10:59Z') - assert_equals(datetime_to_isodate(dt_utz(2011, 4, 9, 9, 53, 0)), - '2011-04-09T09:53:00Z') - assert_equals(datetime_to_isodate(dt_utz(2011, 4, 9, 9, 53, 0)), - '2011-04-09T09:53:00Z') + eq_(datetime_to_isodate(dt_utz(2011, 5, 22, 0, 24, 15)), + '2011-05-22T00:24:15Z') + eq_(datetime_to_isodate(dt_utz(2011, 4, 9, 10, 7, 30)), + '2011-04-09T10:07:30Z') + eq_(datetime_to_isodate(dt_utz(2011, 2, 19, 7, 16, 11)), + '2011-02-19T07:16:11Z') + eq_(datetime_to_isodate(dt_utz(2010, 12, 21, 12, 34, 27)), + '2010-12-21T12:34:27Z') + eq_(datetime_to_isodate(dt_utz(2011, 4, 9, 10, 20, 5)), + '2011-04-09T10:20:05Z') + eq_(datetime_to_isodate(dt_utz(2011, 4, 9, 10, 5, 58)), + '2011-04-09T10:05:58Z') + eq_(datetime_to_isodate(dt_utz(2011, 4, 9, 9, 53, 0)), + '2011-04-09T09:53:00Z') + eq_(datetime_to_isodate(dt_utz(2011, 4, 9, 10, 0, 21)), + '2011-04-09T10:00:21Z') + eq_(datetime_to_isodate(dt_utz(2010, 12, 16, 15, 10, 59)), + '2010-12-16T15:10:59Z') + eq_(datetime_to_isodate(dt_utz(2011, 4, 9, 9, 53, 0)), + '2011-04-09T09:53:00Z') + eq_(datetime_to_isodate(dt_utz(2011, 4, 9, 9, 53, 0)), + '2011-04-09T09:53:00Z') diff --git a/tests/test_unit.py b/tests/test_unit.py index f17f9a0..1769751 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -10,7 +10,7 @@ import datetime import unittest -from nose.tools import (assert_equals, assert_true) +from nose.tools import (eq_, assert_true) from github2.core import repr_string from github2.issues import Issue @@ -26,18 +26,18 @@ def test_issue(self): """Issues can have non-ASCII characters in the title.""" title = 'abcdé' i = Issue(title=title) - assert_equals(str, type(repr(i))) + eq_(str, type(repr(i))) class HostSetting(unittest.TestCase): def test_default_host(self): client = Github() - assert_equals(client.request.github_url, 'https://github.com') + eq_(client.request.github_url, 'https://github.com') def test_non_standard_host(self): client = Github(github_url="http://your-github-enterprise-url.com/") - assert_equals(client.request.github_url, - 'http://your-github-enterprise-url.com/') + eq_(client.request.github_url, + 'http://your-github-enterprise-url.com/') class RateLimits(utils.HttpMockTestCase): @@ -70,21 +70,21 @@ class BaseDataDict(utils.HttpMockTestCase): """Test __getitem__ availability on objects""" def test_getitem(self): user = self.client.users.show('defunkt') - assert_equals(user['blog'], user.blog) - assert_equals(user['company'], user.company) - assert_equals(user['email'], user.email) - assert_equals(user['location'], user.location) - assert_equals(user['login'], user.login) - assert_equals(user['name'], user.name) + eq_(user['blog'], user.blog) + eq_(user['company'], user.company) + eq_(user['email'], user.email) + eq_(user['location'], user.location) + eq_(user['login'], user.login) + eq_(user['name'], user.name) def test_project_for_user_repo(): client = Github() - assert_equals(client.project_for_user_repo('JNRowe', 'misc-overlay'), + eq_(client.project_for_user_repo('JNRowe', 'misc-overlay'), 'JNRowe/misc-overlay') def test_repr_string(): - assert_equals(repr_string('test'), 'test') - assert_equals(repr_string('abcdefghijklmnopqrst'), 'abcdefghijklmnopqrst') - assert_equals(repr_string('abcdefghijklmnopqrstu'), 'abcdefghijklmnopq...') + eq_(repr_string('test'), 'test') + eq_(repr_string('abcdefghijklmnopqrst'), 'abcdefghijklmnopqrst') + eq_(repr_string('abcdefghijklmnopqrstu'), 'abcdefghijklmnopq...') diff --git a/tests/test_user.py b/tests/test_user.py index 33929db..0d80359 100644 --- a/tests/test_user.py +++ b/tests/test_user.py @@ -5,7 +5,7 @@ import datetime -from nose.tools import (assert_equals, assert_false, assert_true) +from nose.tools import (eq_, assert_false, assert_true) import utils @@ -14,29 +14,28 @@ class UserProperties(utils.HttpMockTestCase): """Test user property handling""" def test_user(self): user = self.client.users.show('defunkt') - assert_equals(user.blog, 'http://chriswanstrath.com/') - assert_equals(user.company, 'GitHub') - assert_equals(user.email, 'chris@wanstrath.com') - assert_equals(user.location, 'San Francisco') - assert_equals(user.login, 'defunkt') - assert_equals(user.name, 'Chris Wanstrath') + eq_(user.blog, 'http://chriswanstrath.com/') + eq_(user.company, 'GitHub') + eq_(user.email, 'chris@wanstrath.com') + eq_(user.location, 'San Francisco') + eq_(user.login, 'defunkt') + eq_(user.name, 'Chris Wanstrath') def test_meta(self): user = self.client.users.show('defunkt') - assert_equals(user.created_at, - datetime.datetime(2007, 10, 19, 22, 24, 19)) - assert_equals(user.followers_count, 3402) - assert_equals(user.following_count, 212) - assert_equals(user.gravatar_id, 'b8dbb1987e8e5318584865f880036796') - assert_equals(user.id, 2) - assert_equals(user.public_gist_count, 278) - assert_equals(user.public_repo_count, 93) + eq_(user.created_at, datetime.datetime(2007, 10, 19, 22, 24, 19)) + eq_(user.followers_count, 3402) + eq_(user.following_count, 212) + eq_(user.gravatar_id, 'b8dbb1987e8e5318584865f880036796') + eq_(user.id, 2) + eq_(user.public_gist_count, 278) + eq_(user.public_repo_count, 93) def test_followers(self): - assert_equals(len(self.client.users.followers('defunkt')), 3402) + eq_(len(self.client.users.followers('defunkt')), 3402) def test_following(self): - assert_equals(len(self.client.users.following('defunkt')), 212) + eq_(len(self.client.users.following('defunkt')), 212) def test_is_not_authenticated(self): user = self.client.users.show('defunkt') @@ -46,12 +45,12 @@ def test_is_not_authenticated(self): class UserQueries(utils.HttpMockTestCase): """Test user querying """ def test_search(self): - assert_equals(repr(self.client.users.search('James Rowe')), - '[, ]') + eq_(repr(self.client.users.search('James Rowe')), + '[, ]') def test_search_by_email(self): user = self.client.users.search_by_email('jnrowe@gmail.com') - assert_equals(repr(user), '') + eq_(repr(user), '') class AuthenticatedUserMethods(utils.HttpMockAuthenticatedTestCase): @@ -69,21 +68,21 @@ def test_is_authenticated(self): def test_list_keys(self): keys = self.client.users.list_keys() - assert_equals(keys[0].id, 1337) + eq_(keys[0].id, 1337) class AuthenticatedUserProperties(utils.HttpMockAuthenticatedTestCase): def test_private_data(self): user = self.client.users.show('') - assert_equals(user.total_private_repo_count, 0) - assert_equals(user.collaborators, 0) - assert_equals(user.disk_usage, 66069) - assert_equals(user.owned_private_repo_count, 0) - assert_equals(user.private_gist_count, 7) + eq_(user.total_private_repo_count, 0) + eq_(user.collaborators, 0) + eq_(user.disk_usage, 66069) + eq_(user.owned_private_repo_count, 0) + eq_(user.private_gist_count, 7) def test_plan_data(self): user = self.client.users.show('') - assert_equals(user.plan['name'], "free") - assert_equals(user.plan['collaborators'], 0) - assert_equals(user.plan['space'], 307200) - assert_equals(user.plan['private_repos'], 0) + eq_(user.plan['name'], "free") + eq_(user.plan['collaborators'], 0) + eq_(user.plan['space'], 307200) + eq_(user.plan['private_repos'], 0) From 01fdd82966c044e17b8f786369197203ec8b8b8a Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 19:38:26 +0100 Subject: [PATCH 111/129] Use nose.tools.ok_ instead of assert_true. --- tests/test_organizations.py | 6 +++--- tests/test_unit.py | 10 +++++----- tests/test_user.py | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/test_organizations.py b/tests/test_organizations.py index 399d450..e2ddc77 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -5,7 +5,7 @@ from datetime import datetime -from nose.tools import (eq_, assert_true) +from nose.tools import (eq_, ok_) import utils @@ -31,9 +31,9 @@ def test_properties(self): def test_is_authenticated(self): organization = self.client.organizations.show('github') - assert_true(organization.is_authenticated() is False) + ok_(organization.is_authenticated() is False) organization = self.client.organizations.show('fake_org_with_auth') - assert_true(organization.is_authenticated() is True) + ok_(organization.is_authenticated() is True) class Organization(utils.HttpMockTestCase): diff --git a/tests/test_unit.py b/tests/test_unit.py index 1769751..ce93198 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -10,7 +10,7 @@ import datetime import unittest -from nose.tools import (eq_, assert_true) +from nose.tools import (eq_, ok_) from github2.core import repr_string from github2.issues import Issue @@ -53,9 +53,9 @@ def test_delays(self): delta = end - start delta_seconds = delta.days * 24 * 60 * 60 + delta.seconds - assert_true(delta_seconds >= 2, - "Expected .5 reqs per second to require a 2 second delay " - "between calls.") + ok_(delta_seconds >= 2, + "Expected .5 reqs per second to require a 2 second delay between " + "calls.") class BaseDataIter(utils.HttpMockTestCase): @@ -63,7 +63,7 @@ class BaseDataIter(utils.HttpMockTestCase): def test_iter(self): commit_id = '1c83cde9b5a7c396a01af1007fb7b88765b9ae45' commit = self.client.commits.show('ask/python-github2', commit_id) - assert_true('__iter__' in dir(commit)) + ok_('__iter__' in dir(commit)) class BaseDataDict(utils.HttpMockTestCase): diff --git a/tests/test_user.py b/tests/test_user.py index 0d80359..61fbc5c 100644 --- a/tests/test_user.py +++ b/tests/test_user.py @@ -5,7 +5,7 @@ import datetime -from nose.tools import (eq_, assert_false, assert_true) +from nose.tools import (eq_, assert_false, ok_) import utils @@ -39,7 +39,7 @@ def test_following(self): def test_is_not_authenticated(self): user = self.client.users.show('defunkt') - assert_true(user.is_authenticated() is False) + ok_(user.is_authenticated() is False) class UserQueries(utils.HttpMockTestCase): @@ -56,7 +56,7 @@ def test_search_by_email(self): class AuthenticatedUserMethods(utils.HttpMockAuthenticatedTestCase): def test_follow(self): result = self.client.users.follow('defunkt') - assert_true('defunkt' in result['users']) + ok_('defunkt' in result['users']) def test_unfollow(self): result = self.client.users.unfollow('defunkt') @@ -64,7 +64,7 @@ def test_unfollow(self): def test_is_authenticated(self): user = self.client.users.show('') - assert_true(user.is_authenticated() is True) + ok_(user.is_authenticated() is True) def test_list_keys(self): keys = self.client.users.list_keys() From bb968da0cc90dd60cf1709341a4b760d93a8405c Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 19:42:00 +0100 Subject: [PATCH 112/129] [QA] PEP 257 fixes to tests. --- tests/test_commits.py | 5 ++++- tests/test_issues.py | 4 +++- tests/test_regression.py | 2 +- tests/test_repositories.py | 4 +++- tests/test_request.py | 4 +++- tests/test_tz_aware_date_handling.py | 7 ++++--- tests/test_unit.py | 15 +++++++++++---- tests/test_user.py | 8 ++++++-- tests/utils.py | 14 +++++++++----- 9 files changed, 44 insertions(+), 19 deletions(-) diff --git a/tests/test_commits.py b/tests/test_commits.py index 33f037c..b27fbd3 100644 --- a/tests/test_commits.py +++ b/tests/test_commits.py @@ -11,7 +11,9 @@ class CommitProperties(utils.HttpMockTestCase): - """Test commit property handling""" + + """Test commit property handling.""" + commit_id = '1c83cde9b5a7c396a01af1007fb7b88765b9ae45' def test_commit(self): @@ -38,6 +40,7 @@ def test_repr(self): class CommitsQueries(utils.HttpMockTestCase): + """Test commit querying""" def test_list(self): diff --git a/tests/test_issues.py b/tests/test_issues.py index 2abf495..67cbff7 100644 --- a/tests/test_issues.py +++ b/tests/test_issues.py @@ -52,7 +52,9 @@ def test_comment_repr(self): class IssueQueries(utils.HttpMockTestCase): - """Test issue querying""" + + """Test issue querying.""" + def test_search(self): issues = self.client.issues.search('ask/python-github2', 'timezone', 'closed') diff --git a/tests/test_regression.py b/tests/test_regression.py index d5ff091..d9de696 100644 --- a/tests/test_regression.py +++ b/tests/test_regression.py @@ -13,7 +13,7 @@ def test_issue_50(): - """Erroneous init of ``Http`` with proxy setup + """Erroneous init of ``Http`` with proxy setup. See https://github.com/ask/python-github2/pull/50 """ diff --git a/tests/test_repositories.py b/tests/test_repositories.py index 39017df..8abbc30 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -19,7 +19,9 @@ def test_repr(self): class RepoProperties(utils.HttpMockTestCase): - """Test repository property handling""" + + """Test repository property handling.""" + def test_repo(self): repo = self.client.repos.show('JNRowe/misc-overlay') diff --git a/tests/test_request.py b/tests/test_request.py index 0833c00..529de26 100644 --- a/tests/test_request.py +++ b/tests/test_request.py @@ -35,7 +35,9 @@ def assert_params_contain(first, second): class TestAuthEncode(unittest.TestCase): - """Test processing of authentication data""" + + """Test processing of authentication data.""" + def setUp(self): self.r = request.GithubRequest() diff --git a/tests/test_tz_aware_date_handling.py b/tests/test_tz_aware_date_handling.py index 77302ba..c2b152f 100644 --- a/tests/test_tz_aware_date_handling.py +++ b/tests/test_tz_aware_date_handling.py @@ -15,19 +15,20 @@ def setup_module(): - """Enable timezone-aware datetime handling for this module's tests""" + """Enable timezone-aware datetime handling for this module's tests.""" core.NAIVE = False def teardown_module(): - """Disable timezone-aware datetime handling when tests have completed""" + """Disable timezone-aware datetime handling when tests have completed.""" core.NAIVE = True def dt_utz(year, month, day, hour, minute, second): - """Produce a UTC-anchored datetime object + """Produce a UTC-anchored datetime object. :see: :class:`datetime.datetime` + """ return dt(year, month, day, hour, minute, second, tzinfo=tzutc()) diff --git a/tests/test_unit.py b/tests/test_unit.py index ce93198..2095952 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -20,6 +20,7 @@ class ReprTests(unittest.TestCase): + """__repr__ must return strings, not unicode objects.""" def test_issue(self): @@ -41,9 +42,11 @@ def test_non_standard_host(self): class RateLimits(utils.HttpMockTestCase): - """Test API rate-limitting""" + + """Test API rate-limitting.""" + def test_delays(self): - """Test call delay is at least one second""" + """Test call delay is at least one second.""" client = Github(requests_per_second=.5) client.users.show('defunkt') start = datetime.datetime.utcnow() @@ -59,7 +62,9 @@ def test_delays(self): class BaseDataIter(utils.HttpMockTestCase): - """Test iter availability of objects""" + + """Test iter availability of objects.""" + def test_iter(self): commit_id = '1c83cde9b5a7c396a01af1007fb7b88765b9ae45' commit = self.client.commits.show('ask/python-github2', commit_id) @@ -67,7 +72,9 @@ def test_iter(self): class BaseDataDict(utils.HttpMockTestCase): - """Test __getitem__ availability on objects""" + + """Test __getitem__ availability on objects.""" + def test_getitem(self): user = self.client.users.show('defunkt') eq_(user['blog'], user.blog) diff --git a/tests/test_user.py b/tests/test_user.py index 61fbc5c..c2fab11 100644 --- a/tests/test_user.py +++ b/tests/test_user.py @@ -11,7 +11,9 @@ class UserProperties(utils.HttpMockTestCase): - """Test user property handling""" + + """Test user property handling.""" + def test_user(self): user = self.client.users.show('defunkt') eq_(user.blog, 'http://chriswanstrath.com/') @@ -43,7 +45,9 @@ def test_is_not_authenticated(self): class UserQueries(utils.HttpMockTestCase): - """Test user querying """ + + """Test user querying.""" + def test_search(self): eq_(repr(self.client.users.search('James Rowe')), '[, ]') diff --git a/tests/utils.py b/tests/utils.py index 598b068..1b38949 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -25,9 +25,10 @@ class HttpMock(object): - """Simple Http mock that returns saved entries + """Simple Http mock that returns saved entries. + + Implementation tests should never span network boundaries. - Implementation tests should never span network boundaries """ def __init__(self, cache=None, timeout=None, proxy_info=None, @@ -55,33 +56,36 @@ def request(self, uri, method='GET', body=None, headers=None, class HttpMockTestCase(unittest.TestCase): def setUp(self): - """Prepare test fixtures + """Prepare test fixtures. `httplib2.Http` is patched to return cached entries via :class:`HttpMock`. :attr:`client` is an unauthenticated :obj:`Github` object for easy use in tests. + """ httplib2.Http = HttpMock self.client = Github() def tearDown(self): - """Remove test fixtures + """Remove test fixtures. `httplib2.Http` is returned to its original state. + """ httplib2.Http = ORIG_HTTP_OBJECT class HttpMockAuthenticatedTestCase(HttpMockTestCase): def setUp(self): - """Prepare test fixtures + """Prepare test fixtures. :see: :class:`HttpMockTestCase` :attr:`client` is an authenticated :obj:`Github` object for easy use in tests. + """ httplib2.Http = HttpMock self.client = Github(access_token='xxx') From 0010b09bb1d4b71ef98b55c67bbe8249557df394 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 19:42:29 +0100 Subject: [PATCH 113/129] Mark rate limit test with 'slow' attribute. --- tests/test_unit.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_unit.py b/tests/test_unit.py index 2095952..5a5b55c 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -11,6 +11,7 @@ import unittest from nose.tools import (eq_, ok_) +from nose.plugins.attrib import attr from github2.core import repr_string from github2.issues import Issue @@ -45,6 +46,7 @@ class RateLimits(utils.HttpMockTestCase): """Test API rate-limitting.""" + @attr('slow') def test_delays(self): """Test call delay is at least one second.""" client = Github(requests_per_second=.5) From e1b7047a1439346c1d5a83cb497b0c1478cfd73d Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 19:43:10 +0100 Subject: [PATCH 114/129] Rewrite issue 50 test without using Http mock. --- tests/test_regression.py | 14 ++++---------- tests/utils.py | 11 ++--------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/tests/test_regression.py b/tests/test_regression.py index d9de696..b5fee60 100644 --- a/tests/test_regression.py +++ b/tests/test_regression.py @@ -9,20 +9,14 @@ from github2.client import Github -import utils - def test_issue_50(): """Erroneous init of ``Http`` with proxy setup. See https://github.com/ask/python-github2/pull/50 """ - utils.set_http_mock() - client = Github(proxy_host="my.proxy.com", proxy_port=9000) - setup_args = client.request._http.called_with - eq_(type(setup_args['proxy_info']), httplib2.ProxyInfo) - eq_(setup_args['proxy_info'].proxy_host, 'my.proxy.com') - eq_(setup_args['proxy_info'].proxy_port, 9000) - - utils.unset_http_mock() + proxy_info = client.request._http.proxy_info + eq_(type(proxy_info), httplib2.ProxyInfo) + eq_(proxy_info.proxy_host, 'my.proxy.com') + eq_(proxy_info.proxy_port, 9000) diff --git a/tests/utils.py b/tests/utils.py index 1b38949..e66284b 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -31,15 +31,8 @@ class HttpMock(object): """ - def __init__(self, cache=None, timeout=None, proxy_info=None, - ca_certs=None): - """Create a mock httplib.Http object - - .. attribute: called_with - - ``locals()`` during ``__init__``, for testing call spec - """ - self.called_with = locals() + def __init__(self, *args, **kwargs): + pass def request(self, uri, method='GET', body=None, headers=None, redirections=5, connection_type=None): From 6035cc3784543650fa8c9a731908c1b49d327cb4 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 19:45:03 +0100 Subject: [PATCH 115/129] Http mocking switched to use mock.Mock object. --- extra/requirements-test.txt | 1 + tests/utils.py | 58 +++++++++++++------------------------ 2 files changed, 21 insertions(+), 38 deletions(-) diff --git a/extra/requirements-test.txt b/extra/requirements-test.txt index c8d6b88..d271169 100644 --- a/extra/requirements-test.txt +++ b/extra/requirements-test.txt @@ -1,3 +1,4 @@ -r requirements.txt coverage>=3.5 +mock>=0.7.1 nose>=1.1.2 diff --git a/tests/utils.py b/tests/utils.py index e66284b..313836e 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -11,6 +11,8 @@ import httplib2 +from mock import Mock + from github2.client import Github from github2.request import charset_from_headers @@ -19,32 +21,26 @@ bytes = lambda x, enc: x -HTTP_DATA_DIR = "tests/data/" - -ORIG_HTTP_OBJECT = httplib2.Http +ORIG_REQUEST_METHOD = httplib2.Http.request -class HttpMock(object): - """Simple Http mock that returns saved entries. +def request_mock(uri, method='GET', body=None, headers=None, + redirections=5, connection_type=None): + """Http mock side effect that returns saved entries. Implementation tests should never span network boundaries. """ - def __init__(self, *args, **kwargs): - pass - - def request(self, uri, method='GET', body=None, headers=None, - redirections=5, connection_type=None): - file = os.path.join(HTTP_DATA_DIR, httplib2.safename(uri)) - if os.path.exists(file): - response = message_from_file(open(file)) - headers = httplib2.Response(response) - body = bytes(response.get_payload(), charset_from_headers(headers)) - return (headers, body) - else: - return (httplib2.Response({"status": "404"}), - "Resource %r unavailable from test data store" % file) + file = os.path.join("tests/data", httplib2.safename(uri)) + if os.path.exists(file): + response = message_from_file(open(file)) + headers = httplib2.Response(response) + body = bytes(response.get_payload(), charset_from_headers(headers)) + return (headers, body) + else: + return (httplib2.Response({"status": "404"}), + "Resource %r unavailable from test data store" % file) class HttpMockTestCase(unittest.TestCase): @@ -58,7 +54,8 @@ def setUp(self): in tests. """ - httplib2.Http = HttpMock + httplib2.Http.request = Mock(spec_set=httplib2.Http.request, + side_effect=request_mock) self.client = Github() def tearDown(self): @@ -67,7 +64,7 @@ def tearDown(self): `httplib2.Http` is returned to its original state. """ - httplib2.Http = ORIG_HTTP_OBJECT + httplib2.Http.request = ORIG_REQUEST_METHOD class HttpMockAuthenticatedTestCase(HttpMockTestCase): @@ -80,21 +77,6 @@ def setUp(self): in tests. """ - httplib2.Http = HttpMock + httplib2.Http.request = Mock(spec_set=httplib2.Http.request, + side_effect=request_mock) self.client = Github(access_token='xxx') - - -def set_http_mock(): - """Function to enable ``Http`` mock - - This is useful in simple `nose`-compliant test functions - """ - httplib2.Http = HttpMock - - -def unset_http_mock(): - """Function to disable ``Http`` mock - - :see: :func:`set_http_mock` - """ - httplib2.Http = ORIG_HTTP_OBJECT From 62472a34b18636219c286e2b9770ed8b4cfae5c6 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 20:48:07 +0100 Subject: [PATCH 116/129] Added test for requires_auth decorator. --- tests/test_unit.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/test_unit.py b/tests/test_unit.py index 5a5b55c..988d8d6 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -10,10 +10,10 @@ import datetime import unittest -from nose.tools import (eq_, ok_) +from nose.tools import (eq_, ok_, raises) from nose.plugins.attrib import attr -from github2.core import repr_string +from github2.core import (AuthError, repr_string, requires_auth) from github2.issues import Issue from github2.client import Github @@ -97,3 +97,12 @@ def test_repr_string(): eq_(repr_string('test'), 'test') eq_(repr_string('abcdefghijklmnopqrst'), 'abcdefghijklmnopqrst') eq_(repr_string('abcdefghijklmnopqrstu'), 'abcdefghijklmnopq...') + + +class RequiresAuth(utils.HttpMockTestCase): + @raises(AuthError) + def test_no_auth(self): + f = lambda: None + f.__doc__ = 'test func' + wrapped = requires_auth(f) + wrapped(self.client) From fd2a2ba8196a7150fa90cb882fd6806265bc8f3e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 20:59:13 +0100 Subject: [PATCH 117/129] Added BaseData dict key failure test. --- tests/test_unit.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_unit.py b/tests/test_unit.py index 988d8d6..50312d0 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -86,6 +86,11 @@ def test_getitem(self): eq_(user['login'], user.login) eq_(user['name'], user.name) + @raises(KeyError) + def test_getitem_failure(self): + user = self.client.users.show('defunkt') + ok_(user['invalid_key']) + def test_project_for_user_repo(): client = Github() From fbe6e453a5d828c9317642f5647ea47e32da4670 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 21:07:25 +0100 Subject: [PATCH 118/129] Added BaseData dict setting tests. --- tests/test_unit.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/test_unit.py b/tests/test_unit.py index 50312d0..d49dc38 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -75,7 +75,7 @@ def test_iter(self): class BaseDataDict(utils.HttpMockTestCase): - """Test __getitem__ availability on objects.""" + """Test dict compatibility on objects.""" def test_getitem(self): user = self.client.users.show('defunkt') @@ -91,6 +91,16 @@ def test_getitem_failure(self): user = self.client.users.show('defunkt') ok_(user['invalid_key']) + def test_setitem(self): + user = self.client.users.show('defunkt') + user['blog'] = 'http://example.com' + eq_(user['blog'], 'http://example.com') + + @raises(KeyError) + def test_setitem_failure(self): + user = self.client.users.show('defunkt') + user['invalid_key'] = 'test' + def test_project_for_user_repo(): client = Github() From 5c60b01d58359da94c11c4e8cd016050185a8fa8 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 21:54:45 +0100 Subject: [PATCH 119/129] Use mock for sleep in rate limit tests. --- tests/test_unit.py | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/tests/test_unit.py b/tests/test_unit.py index d49dc38..104256d 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -7,11 +7,10 @@ # This file is part of python-github2, and is made available under the 3-clause # BSD license. See LICENSE for the full details. -import datetime import unittest +from mock import patch from nose.tools import (eq_, ok_, raises) -from nose.plugins.attrib import attr from github2.core import (AuthError, repr_string, requires_auth) from github2.issues import Issue @@ -44,23 +43,17 @@ def test_non_standard_host(self): class RateLimits(utils.HttpMockTestCase): - """Test API rate-limitting.""" + """Test API rate-limiting.""" - @attr('slow') - def test_delays(self): - """Test call delay is at least one second.""" + @patch('github2.request.time.sleep') + def test_delays(self, sleep): + """Test calls in quick succession are delayed.""" client = Github(requests_per_second=.5) client.users.show('defunkt') - start = datetime.datetime.utcnow() client.users.show('mojombo') - end = datetime.datetime.utcnow() - delta = end - start - delta_seconds = delta.days * 24 * 60 * 60 + delta.seconds - - ok_(delta_seconds >= 2, - "Expected .5 reqs per second to require a 2 second delay between " - "calls.") + # 0.5 requests per second, means a two second delay + sleep.assert_called_once_with(2.0) class BaseDataIter(utils.HttpMockTestCase): From 614d8b25f49af6d29ad77aa529a0e7cb09b41bb8 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 21:56:30 +0100 Subject: [PATCH 120/129] Fix BaseData dict compat logging. --- github2/core.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/github2/core.py b/github2/core.py index f1629fd..86d4788 100644 --- a/github2/core.py +++ b/github2/core.py @@ -364,8 +364,7 @@ def __getitem__(self, key): """ LOGGER.warning("Subscript access on %r is deprecated, use object " - "attributes" % self.__class__.__name__, - DeprecationWarning) + "attributes" % self.__class__.__name__) if not key in self._meta.keys(): raise KeyError(key) return getattr(self, key) @@ -377,8 +376,7 @@ def __setitem__(self, key, value): """ LOGGER.warning("Subscript access on %r is deprecated, use object " - "attributes" % self.__class__.__name__, - DeprecationWarning) + "attributes" % self.__class__.__name__) if not key in self._meta.keys(): raise KeyError(key) setattr(self, key, value) From 32a076965d578fb62208939e9b8f5711df1e3e9e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 16 May 2012 21:57:55 +0100 Subject: [PATCH 121/129] Handle symlinked certificate bundles for httplib2, --- github2/request.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/github2/request.py b/github2/request.py index 31afa78..1314c77 100644 --- a/github2/request.py +++ b/github2/request.py @@ -59,8 +59,12 @@ #: Logger for requests module LOGGER = logging.getLogger('github2.request') +# Fetch actual path for httplib2's default cert bundle, for distributions that +# symlink their system certs +_HTTPLIB2_BUNDLE = path.realpath(path.dirname(httplib2.CA_CERTS)) #: Whether github2 is using the system's certificates for SSL connections -SYSTEM_CERTS = not httplib2.CA_CERTS.startswith(path.dirname(httplib2.__file__)) +SYSTEM_CERTS = not _HTTPLIB2_BUNDLE.startswith(path.dirname(httplib2.__file__)) +CA_CERTS = None #: Whether github2 is using the cert's from the file given in $CURL_CA_BUNDLE CURL_CERTS = False if not SYSTEM_CERTS and sys.platform.startswith('linux'): From 55d92f3268163c3bef902bdb06be706993dd33b5 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 23 May 2012 05:52:51 +0100 Subject: [PATCH 122/129] Updated dependency information for dateutil-2.1 support. This has become quite messy, to the point that I had a little look for a hackable replacement. --- doc/install.rst | 5 +++-- extra/requirements-py25.txt | 5 +++-- extra/requirements-py3.txt | 2 -- extra/requirements.txt | 4 ++-- setup.py | 10 +++++++--- 5 files changed, 15 insertions(+), 11 deletions(-) delete mode 100644 extra/requirements-py3.txt diff --git a/doc/install.rst b/doc/install.rst index 84b57de..7eb1aa6 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -33,5 +33,6 @@ handling [#]_. :pypi:`simplejson` is also required when using :mod:`github2` with Python 2.4 or 2.5. If you install via :pypi:`pip` or :pypi:`easy_install ` the dependencies should be installed automatically for you. -.. [#] You must use :pypi:`python-dateutil` 1.x when working with Python 2.x, - the latest 2.x releases are for Python 3.x installations only. +.. [#] You must use :pypi:`python-dateutil` 1.x when working with Python 2.5 or + earlier, the latest 2.x releases are for Python 2.6 and newer + installations only. diff --git a/extra/requirements-py25.txt b/extra/requirements-py25.txt index 33f97ee..45bfac5 100644 --- a/extra/requirements-py25.txt +++ b/extra/requirements-py25.txt @@ -1,2 +1,3 @@ --r requirements.txt -simplejson>=2.0.9 +httplib2 >= 0.7.0 +python-dateutil < 2.0, >= 2.1 +simplejson >= 2.0.9 diff --git a/extra/requirements-py3.txt b/extra/requirements-py3.txt deleted file mode 100644 index 457b3fb..0000000 --- a/extra/requirements-py3.txt +++ /dev/null @@ -1,2 +0,0 @@ -httplib2>=0.7.0 -python-dateutil>=2.0 diff --git a/extra/requirements.txt b/extra/requirements.txt index 57c76c4..5115300 100644 --- a/extra/requirements.txt +++ b/extra/requirements.txt @@ -1,2 +1,2 @@ -httplib2>=0.7.0 -python-dateutil<2.0 +httplib2 >= 0.7.0 +python-dateutil < 2.0 diff --git a/setup.py b/setup.py index 06c56bb..72073f5 100755 --- a/setup.py +++ b/setup.py @@ -23,10 +23,14 @@ if sys.version_info[:2] < (2, 6): install_requires.append('simplejson >= 2.0.9') -if sys.version_info >= (3,): - install_requires.append('python-dateutil >= 2.0') -else: +# dateutil supports python 2.x in dateutil-1, python 3.x in dateutil-2.0 and +# python 2.6+ in dateutil-2.1. Exciting… +if sys.version_info[:2] <= (2, 5): install_requires.append('python-dateutil < 2.0') +elif sys.version_info < (3, ): + install_requires.append('python-dateutil < 2.0, >= 2.1') +else: + install_requires.append('python-dateutil > 2.0') long_description = (codecs.open('README.rst', "r", "utf-8").read() + "\n" + codecs.open('NEWS.rst', "r", "utf-8").read()) From a77c23a85a1f2eacebd0697608bbe510e3ee775c Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 23 May 2012 07:52:17 +0100 Subject: [PATCH 123/129] Fixed simplejson dependency for Python 2.4. Recent versions of simplejson no longer support Python 2.4. --- setup.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 72073f5..b72d775 100755 --- a/setup.py +++ b/setup.py @@ -19,8 +19,12 @@ install_requires = ['httplib2 >= 0.7.0', ] -# simplejson is included in the standard library since Python 2.6 as json. -if sys.version_info[:2] < (2, 6): + +# simplejson is included in the standard library since Python 2.6 as json +if sys.version_info < (2, 5): + # 2.1 drops support for 2.4 + install_requires.append('simplejson >= 2.0.9, < 2.1') +elif sys.version_info[:2] < (2, 6): install_requires.append('simplejson >= 2.0.9') # dateutil supports python 2.x in dateutil-1, python 3.x in dateutil-2.0 and From bad4e74bf58ad3d4c964070a54304a67ff8b4b09 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 23 May 2012 07:52:46 +0100 Subject: [PATCH 124/129] Re-sync dependencies in tox config. --- tox.ini | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tox.ini b/tox.ini index 531bac9..ffb9775 100644 --- a/tox.ini +++ b/tox.ini @@ -6,8 +6,28 @@ envlist = py24, py25, py26, py27, py31, py32, rst, sphinx deps = nose coverage + mock commands = nosetests {posargs:-vv} tests +# When tox 1.4 is released use substitution to remove all the duplication. +[testenv:py24] +deps = + nose + coverage + mock + unittest2 +[testenv:py25] +deps = + nose + coverage + mock + unittest2 +[testenv:py26] +deps = + nose + coverage + mock + unittest2 [testenv:rst] deps = docutils From 46020575a632f1a4b78c878c84d40e1400ccd42c Mon Sep 17 00:00:00 2001 From: James Rowe Date: Mon, 11 Jun 2012 13:08:14 +0100 Subject: [PATCH 125/129] Rewording of the API v3 migration note. There has been a reprieve for the API v2 switch-off, and the note from 3414c22d25a54624e554be5bdb8a6fb327ff27d7 is no longer as urgent. --- README.rst | 5 ++--- doc/index.rst | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/README.rst b/README.rst index a266014..b3897ef 100644 --- a/README.rst +++ b/README.rst @@ -8,8 +8,8 @@ github2 - GitHub API v2 library for Python. .. warning:: - GitHub are planning to `switch off API v2`_ on 2012-05-01, you should - be looking to replace ``github2`` as soon as possible. + GitHub have marked API v2 as deprecated, you should be looking to replace + your usage of ``github2`` in the near future. Both remoteobjects_ and micromodels_ provide easy-to-use functionality for creating bindings to remote APIs, and should significantly reduce the amount @@ -21,7 +21,6 @@ of the `GitHub API`_. See the ``doc/`` directory for installation instructions and usage information. If you prefer you can also read the `documentation online`_. -.. _switch off API v2: https://github.com/blog/1090-github-api-moving-on .. _remoteobjects: https://github.com/saymedia/remoteobjects .. _micromodels: https://github.com/j4mie/micromodels .. _GitHub API: http://develop.github.com/ diff --git a/doc/index.rst b/doc/index.rst index d909c02..963e6a2 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -16,14 +16,13 @@ .. warning:: - GitHub are planning to `switch off API v2`_ on 2012-05-01, you should - be looking to replace ``github2`` as soon as possible. + GitHub have marked API v2 as deprecated, you should be looking to replace + your usage of ``github2`` in the near future. Both remoteobjects_ and micromodels_ provide easy-to-use functionality for creating bindings to remote APIs, and should significantly reduce the amount of work needed in moving away from GitHub's API v2. -.. _switch off API v2: https://github.com/blog/1090-github-api-moving-on .. _remoteobjects: https://github.com/saymedia/remoteobjects .. _micromodels: https://github.com/j4mie/micromodels From 8647c559ceb9b0ecd3af68e728e36fb2de4b6ab2 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Mon, 11 Jun 2012 13:09:34 +0100 Subject: [PATCH 126/129] Minor fixes to quickstart doc. This makes the usage far closer to what a user would expect in an interactive session. --- doc/quickstart.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/quickstart.rst b/doc/quickstart.rst index 2d3988f..ff54b29 100644 --- a/doc/quickstart.rst +++ b/doc/quickstart.rst @@ -13,6 +13,7 @@ package. Create an unauthenticated client object:: + >>> from github2.client import Github >>> github = Github() .. note:: @@ -28,6 +29,7 @@ Read the description of the ``python-github2`` project:: >>> repo = github.repos.show("ask/python-github2") >>> repo.description + u'github client in python, with issues support.' We can take advantage of Python's :func:`dir` to explore the package a little more:: From 698394fa0d5e03ca43a02dccd4ce6a2f553576f5 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Mon, 11 Jun 2012 13:22:19 +0100 Subject: [PATCH 127/129] Include ChangeLog in sdist generated tarballs. --- MANIFEST.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MANIFEST.in b/MANIFEST.in index ac52cc3..e77f35d 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,6 @@ recursive-include examples * + +include ChangeLog include NEWS.rst include README.rst include AUTHORS From 587f415607426a1eb1ab8e13f8ea0031525d3de6 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Mon, 11 Jun 2012 13:46:39 +0100 Subject: [PATCH 128/129] Bumped version to 0.6.2. --- NEWS.rst | 6 ++++++ README.rst | 2 +- github2/_version.py | 14 +++++++------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/NEWS.rst b/NEWS.rst index e7092fe..eaa874c 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -6,6 +6,12 @@ look at the `git repository`_ for the full project history. .. _git repository: https://github.com/ask/python-github2/ +0.6.2 - 2012-06-11 +------------------ + +* Updated dependencies to handle recent ``python-dateutil`` releases +* Fixed ``simplejson`` dependencies for Python 2.4 + 0.6.1 - 2012-02-28 ------------------ diff --git a/README.rst b/README.rst index b3897ef..a91633f 100644 --- a/README.rst +++ b/README.rst @@ -4,7 +4,7 @@ github2 - GitHub API v2 library for Python. :Authors: Ask Solem (askh@opera.com) -:Version: 0.6.1 +:Version: 0.6.2 .. warning:: diff --git a/github2/_version.py b/github2/_version.py index 0269a27..6e26b1f 100644 --- a/github2/_version.py +++ b/github2/_version.py @@ -1,9 +1,9 @@ -# This is github2 version 0.6.1 (2012-02-28) +# This is github2 version 0.6.2 (2012-06-11) # pylint: disable=C0103, C0111, C0121, W0622 -dotted = "0.6.1" -libtool = "6:21" -hex = 0x000601 -date = "2012-02-28" -tuple = (0, 6, 1) -web = "github2/0.6.1" +dotted = "0.6.2" +libtool = "6:22" +hex = 0x000602 +date = "2012-06-11" +tuple = (0, 6, 2) +web = "github2/0.6.2" From 4287019520643e2fcd46c9c5b3aac439cdc35b88 Mon Sep 17 00:00:00 2001 From: Tim Gates Date: Tue, 20 Jul 2021 07:48:23 +1000 Subject: [PATCH 129/129] docs: Fix a few typos (#82) There are small typos in: - github2/client.py - github2/request.py Fixes: - Should read `specific` rather than `specifc`. - Should read `occurred` rather than `occured`. --- github2/client.py | 2 +- github2/request.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/github2/client.py b/github2/client.py index 56b5dcd..d0a3f2b 100644 --- a/github2/client.py +++ b/github2/client.py @@ -107,7 +107,7 @@ def get_blob_info(self, project, tree_sha, path): return blob.get("blob") def get_tree(self, project, tree_sha): - """Get tree information for a specifc tree. + """Get tree information for a specific tree. :param str project: GitHub project :param str tree_sha: object ID of tree diff --git a/github2/request.py b/github2/request.py index 1314c77..5961471 100644 --- a/github2/request.py +++ b/github2/request.py @@ -113,7 +113,7 @@ class GithubError(Exception): class HttpError(RuntimeError): - """A HTTP error occured when making a request to the GitHub API.""" + """A HTTP error occurred when making a request to the GitHub API.""" def __init__(self, message, content, code): """Create a HttpError exception.