From 4188758d8488addeb7fb15c110842f3a9185f2e7 Mon Sep 17 00:00:00 2001 From: endeavor85 Date: Sun, 24 Nov 2013 02:54:18 -0600 Subject: [PATCH] Use `PagedIterator` to retrieve repository issues. Overcomes default 30 item page size limit. --- .../java/org/kohsuke/github/GHRepository.java | 19 ++++++++++++++++++- src/test/java/org/kohsuke/AppTest.java | 6 ++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index dc897dfa68..f1a3100a46 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -143,7 +143,24 @@ public GHIssueBuilder createIssue(String title) { } public List getIssues(GHIssueState state) throws IOException { - return Arrays.asList(GHIssue.wrap(root.retrieve().to("/repos/" + owner.login + "/" + name + "/issues?state=" + state.toString().toLowerCase(), GHIssue[].class), this)); + return listIssues(state).asList(); + } + + /** + * Lists up all the issues in this repository. + */ + public PagedIterable listIssues(final GHIssueState state) { + return new PagedIterable() { + public PagedIterator iterator() { + return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("issues?state="+state.toString().toLowerCase(Locale.ENGLISH)), GHIssue[].class)) { + @Override + protected void wrapUp(GHIssue[] page) { + for (GHIssue c : page) + c.wrap(GHRepository.this); + } + }; + } + }; } public GHReleaseBuilder createRelease(String tag) { diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index 2fbdf02cde..64908e7a87 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -79,6 +79,12 @@ public void testCreateIssue() throws IOException { o.close(); } + public void testGetIssues() throws Exception { + List closedIssues = gitHub.getUser("kohsuke").getRepository("github-api").getIssues(GHIssueState.CLOSED); + // prior to using PagedIterable GHRepository.getIssues(GHIssueState) would only retrieve 30 issues + assertTrue(closedIssues.size() > 30); + } + public void testRateLimit() throws IOException { System.out.println(gitHub.getRateLimit()); }