diff --git a/pom.xml b/pom.xml
index bba5978ae8..965f1b2294 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
github-api
- 1.29
+ 1.30
GitHub API for Java
http://github-api.kohsuke.org/
GitHub API for Java
diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java
index 6ff0553580..15877e2bd7 100644
--- a/src/main/java/org/kohsuke/github/GHRepository.java
+++ b/src/main/java/org/kohsuke/github/GHRepository.java
@@ -358,12 +358,28 @@ public GHPullRequest getPullRequest(int i) throws IOException {
/**
* Retrieves all the pull requests of a particular state.
+ *
+ * @see #listPullRequests(GHIssueState)
*/
public List getPullRequests(GHIssueState state) throws IOException {
- GHPullRequest[] r = root.retrieveWithAuth("/repos/" + owner.login + '/' + name + "/pulls?state=" + state.name().toLowerCase(Locale.ENGLISH), GHPullRequest[].class);
- for (GHPullRequest p : r)
- p.wrapUp(this);
- return new ArrayList(Arrays.asList(r));
+ return listPullRequests(state).asList();
+ }
+
+ /**
+ * Retrieves all the pull requests of a particular state.
+ */
+ public PagedIterable listPullRequests(final GHIssueState state) {
+ return new PagedIterable() {
+ public PagedIterator iterator() {
+ return new PagedIterator(root.retrievePaged(String.format("/repos/%s/%s/pulls?state=%s", owner.login,name,state.name().toLowerCase(Locale.ENGLISH)), GHPullRequest[].class, false)) {
+ @Override
+ protected void wrapUp(GHPullRequest[] page) {
+ for (GHPullRequest pr : page)
+ pr.wrap(GHRepository.this);
+ }
+ };
+ }
+ };
}
/**
diff --git a/src/main/java/org/kohsuke/github/PagedIterable.java b/src/main/java/org/kohsuke/github/PagedIterable.java
index 2470ca7297..7cbfe6dc3d 100644
--- a/src/main/java/org/kohsuke/github/PagedIterable.java
+++ b/src/main/java/org/kohsuke/github/PagedIterable.java
@@ -1,8 +1,24 @@
package org.kohsuke.github;
+import java.util.ArrayList;
+import java.util.List;
+
/**
+ * {@link Iterable} that returns {@link PagedIterator}
+ *
* @author Kohsuke Kawaguchi
*/
-public interface PagedIterable extends Iterable {
- PagedIterator iterator();
+public abstract class PagedIterable implements Iterable {
+ public abstract PagedIterator iterator();
+
+ /**
+ * Eagerly walk {@link Iterable} and return the result in a list.
+ */
+ public List asList() {
+ List r = new ArrayList();
+ for(PagedIterator i = iterator(); i.hasNext();) {
+ r.addAll(i.nextPage());
+ }
+ return r;
+ }
}
diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java
index 120ef0e7c1..1b93cee1d1 100644
--- a/src/test/java/org/kohsuke/AppTest.java
+++ b/src/test/java/org/kohsuke/AppTest.java
@@ -14,11 +14,13 @@
import org.kohsuke.github.GHMyself;
import org.kohsuke.github.GHOrganization;
import org.kohsuke.github.GHOrganization.Permission;
+import org.kohsuke.github.GHPullRequest;
import org.kohsuke.github.GHRepository;
import org.kohsuke.github.GHTeam;
import org.kohsuke.github.GHUser;
import org.kohsuke.github.GitHub;
import org.kohsuke.github.PagedIterable;
+import org.kohsuke.github.PagedIterator;
import java.io.IOException;
import java.net.URL;
@@ -64,6 +66,16 @@ public void testFetchPullRequest() throws Exception {
r.getPullRequests(GHIssueState.OPEN);
}
+ public void testFetchPullRequestAsList() throws Exception {
+ GitHub gh = GitHub.connect();
+ GHRepository r = gh.getOrganization("symfony").getRepository("symfony-docs");
+ assertEquals("master", r.getMasterBranch());
+ PagedIterable i = r.listPullRequests(GHIssueState.CLOSED);
+ List prs = i.asList();
+ assertNotNull(prs);
+ assertTrue(prs.size() > 0);
+ }
+
public void testRepoPermissions() throws Exception {
GitHub gh = GitHub.connect();
GHRepository r = gh.getOrganization("jenkinsci").getRepository("jenkins");