From 17c7a3e7c578175197b201c7c0729edb1736f4de Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Mon, 18 Jun 2012 12:51:29 -0700 Subject: [PATCH 1/4] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bba5978ae8..f5cb328889 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ github-api - 1.29 + 1.30-SNAPSHOT GitHub API for Java http://github-api.kohsuke.org/ GitHub API for Java From 9fd34aec7fe9fa1359418c92b0a14526f837a4a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Thieriot?= Date: Sun, 12 Aug 2012 12:25:14 +0200 Subject: [PATCH 2/4] Paging GHPullRequests getter and allow to transform iterator to a list --- .../java/org/kohsuke/github/GHOrganization.java | 2 +- .../java/org/kohsuke/github/GHRepository.java | 17 ++++++++++++----- .../java/org/kohsuke/github/PagedIterator.java | 15 ++++++++++++++- src/test/java/org/kohsuke/AppTest.java | 13 +++++++++++++ 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GHOrganization.java b/src/main/java/org/kohsuke/github/GHOrganization.java index f15626370c..884e165b32 100644 --- a/src/main/java/org/kohsuke/github/GHOrganization.java +++ b/src/main/java/org/kohsuke/github/GHOrganization.java @@ -129,7 +129,7 @@ public List getRepositoriesWithOpenPullRequests() throws IOExcepti public List getPullRequests() throws IOException { List all = new ArrayList(); for (GHRepository r : getRepositoriesWithOpenPullRequests()) { - all.addAll(r.getPullRequests(GHIssueState.OPEN)); + all.addAll(r.getPullRequests(GHIssueState.OPEN).iterator().asList()); } return all; } diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index 6ff0553580..811209656c 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -359,11 +359,18 @@ public GHPullRequest getPullRequest(int i) throws IOException { /** * Retrieves all the pull requests of a particular state. */ - 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)); + public PagedIterable getPullRequests(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/PagedIterator.java b/src/main/java/org/kohsuke/github/PagedIterator.java index 74c197aa2e..60cffa9019 100644 --- a/src/main/java/org/kohsuke/github/PagedIterator.java +++ b/src/main/java/org/kohsuke/github/PagedIterator.java @@ -1,5 +1,6 @@ package org.kohsuke.github; +import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; @@ -8,7 +9,8 @@ * Iterator over a pagenated data source. * * Aside from the normal iterator operation, this method exposes {@link #nextPage()} - * that allows the caller to retrieve items per page. + * that allows the caller to retrieve items per page and {@link #asList()} + * that allows the caller to retrieve all items at once. * * @author Kohsuke Kawaguchi */ @@ -61,4 +63,15 @@ public List nextPage() { pos = 0; return r; } + + /** + * Gets a list of all items + */ + public List asList() { + List r = new ArrayList(); + for(Iterator i = this; i.hasNext();) { + r.addAll(nextPage()); + } + return r; + } } diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index 120ef0e7c1..b79ce584f2 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,17 @@ 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()); + PagedIterator i = r.getPullRequests(GHIssueState.CLOSED).iterator(); + List prs = i.asList(); + assertNotNull(prs); + assertTrue(prs.size() > 0); + assertFalse(i.hasNext()); + } + public void testRepoPermissions() throws Exception { GitHub gh = GitHub.connect(); GHRepository r = gh.getOrganization("jenkinsci").getRepository("jenkins"); From 8f95c4f1790f282ede2a07995f3ebe2407f9dae3 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 28 Aug 2012 09:39:49 -0700 Subject: [PATCH 3/4] Massaging the pull request 15. - we need to maintain the binary compatibility, so I reverted getPullRequests and added listPullRequests that exposes PagedIterable. - Made PagedIterator expose asList. --- .../org/kohsuke/github/GHOrganization.java | 2 +- .../java/org/kohsuke/github/GHRepository.java | 13 ++++++++++-- .../org/kohsuke/github/PagedIterable.java | 20 +++++++++++++++++-- .../org/kohsuke/github/PagedIterator.java | 15 +------------- src/test/java/org/kohsuke/AppTest.java | 3 +-- 5 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GHOrganization.java b/src/main/java/org/kohsuke/github/GHOrganization.java index 884e165b32..f15626370c 100644 --- a/src/main/java/org/kohsuke/github/GHOrganization.java +++ b/src/main/java/org/kohsuke/github/GHOrganization.java @@ -129,7 +129,7 @@ public List getRepositoriesWithOpenPullRequests() throws IOExcepti public List getPullRequests() throws IOException { List all = new ArrayList(); for (GHRepository r : getRepositoriesWithOpenPullRequests()) { - all.addAll(r.getPullRequests(GHIssueState.OPEN).iterator().asList()); + all.addAll(r.getPullRequests(GHIssueState.OPEN)); } return all; } diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index 811209656c..15877e2bd7 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -358,8 +358,17 @@ public GHPullRequest getPullRequest(int i) throws IOException { /** * Retrieves all the pull requests of a particular state. + * + * @see #listPullRequests(GHIssueState) */ - public PagedIterable getPullRequests(final GHIssueState state) { + public List getPullRequests(GHIssueState state) throws IOException { + 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)) { @@ -369,7 +378,7 @@ protected void wrapUp(GHPullRequest[] 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/main/java/org/kohsuke/github/PagedIterator.java b/src/main/java/org/kohsuke/github/PagedIterator.java index 60cffa9019..74c197aa2e 100644 --- a/src/main/java/org/kohsuke/github/PagedIterator.java +++ b/src/main/java/org/kohsuke/github/PagedIterator.java @@ -1,6 +1,5 @@ package org.kohsuke.github; -import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; @@ -9,8 +8,7 @@ * Iterator over a pagenated data source. * * Aside from the normal iterator operation, this method exposes {@link #nextPage()} - * that allows the caller to retrieve items per page and {@link #asList()} - * that allows the caller to retrieve all items at once. + * that allows the caller to retrieve items per page. * * @author Kohsuke Kawaguchi */ @@ -63,15 +61,4 @@ public List nextPage() { pos = 0; return r; } - - /** - * Gets a list of all items - */ - public List asList() { - List r = new ArrayList(); - for(Iterator i = this; i.hasNext();) { - r.addAll(nextPage()); - } - return r; - } } diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index b79ce584f2..1b93cee1d1 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -70,11 +70,10 @@ public void testFetchPullRequestAsList() throws Exception { GitHub gh = GitHub.connect(); GHRepository r = gh.getOrganization("symfony").getRepository("symfony-docs"); assertEquals("master", r.getMasterBranch()); - PagedIterator i = r.getPullRequests(GHIssueState.CLOSED).iterator(); + PagedIterable i = r.listPullRequests(GHIssueState.CLOSED); List prs = i.asList(); assertNotNull(prs); assertTrue(prs.size() > 0); - assertFalse(i.hasNext()); } public void testRepoPermissions() throws Exception { From dafb50d6a9c65b5b87702c4bd5385050dd072746 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 28 Aug 2012 09:43:14 -0700 Subject: [PATCH 4/4] [maven-release-plugin] prepare release github-api-1.30 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f5cb328889..965f1b2294 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ github-api - 1.30-SNAPSHOT + 1.30 GitHub API for Java http://github-api.kohsuke.org/ GitHub API for Java