diff --git a/pom.xml b/pom.xml
index 4847f4885c..805080b06e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
github-api
- 1.71
+ 1.72
GitHub API for Java
http://github-api.kohsuke.org/
GitHub API for Java
@@ -16,7 +16,7 @@
scm:git:git@github.com/kohsuke/${project.artifactId}.git
scm:git:ssh://git@github.com/kohsuke/${project.artifactId}.git
http://${project.artifactId}.kohsuke.org/
- github-api-1.71
+ github-api-1.72
diff --git a/src/main/java/org/kohsuke/github/GHCommit.java b/src/main/java/org/kohsuke/github/GHCommit.java
index b45683f2d2..a350eeb535 100644
--- a/src/main/java/org/kohsuke/github/GHCommit.java
+++ b/src/main/java/org/kohsuke/github/GHCommit.java
@@ -192,21 +192,24 @@ public GHRepository getOwner() {
/**
* Number of lines added + removed.
*/
- public int getLinesChanged() {
+ public int getLinesChanged() throws IOException {
+ populate();
return stats.total;
}
/**
* Number of lines added.
*/
- public int getLinesAdded() {
+ public int getLinesAdded() throws IOException {
+ populate();
return stats.additions;
}
/**
* Number of lines removed.
*/
- public int getLinesDeleted() {
+ public int getLinesDeleted() throws IOException {
+ populate();
return stats.deletions;
}
@@ -223,7 +226,8 @@ public String getSHA1() {
* @return
* Can be empty but never null.
*/
- public List getFiles() {
+ public List getFiles() throws IOException {
+ populate();
return files!=null ? Collections.unmodifiableList(files) : Collections.emptyList();
}
@@ -273,8 +277,8 @@ private GHUser resolveUser(User author) throws IOException {
*/
public PagedIterable listComments() {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(owner.root.retrieve().asIterator(String.format("/repos/%s/%s/commits/%s/comments", owner.getOwnerName(), owner.getName(), sha), GHCommitComment[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(owner.root.retrieve().asIterator(String.format("/repos/%s/%s/commits/%s/comments", owner.getOwnerName(), owner.getName(), sha), GHCommitComment[].class, pageSize)) {
@Override
protected void wrapUp(GHCommitComment[] page) {
for (GHCommitComment c : page)
@@ -301,7 +305,7 @@ public GHCommitComment createComment(String body, String path, Integer line, Int
}
public GHCommitComment createComment(String body) throws IOException {
- return createComment(body,null,null,null);
+ return createComment(body, null, null, null);
}
/**
@@ -318,6 +322,14 @@ public GHCommitStatus getLastStatus() throws IOException {
return owner.getLastCommitStatus(sha);
}
+ /**
+ * Some of the fields are not always filled in when this object is retrieved as a part of another API call.
+ */
+ void populate() throws IOException {
+ if (files==null && stats==null)
+ owner.root.retrieve().to(owner.getApiTailUrl("commits/" + sha), this);
+ }
+
GHCommit wrapUp(GHRepository owner) {
this.owner = owner;
return this;
diff --git a/src/main/java/org/kohsuke/github/GHCommitQueryBuilder.java b/src/main/java/org/kohsuke/github/GHCommitQueryBuilder.java
index 6d0a7ae995..bac8c89ee6 100644
--- a/src/main/java/org/kohsuke/github/GHCommitQueryBuilder.java
+++ b/src/main/java/org/kohsuke/github/GHCommitQueryBuilder.java
@@ -92,8 +92,8 @@ public GHCommitQueryBuilder until(long timestamp) {
*/
public PagedIterable list() {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(req.asIterator(repo.getApiTailUrl("commits"), GHCommit[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(req.asIterator(repo.getApiTailUrl("commits"), GHCommit[].class, pageSize)) {
protected void wrapUp(GHCommit[] page) {
for (GHCommit c : page)
c.wrapUp(repo);
diff --git a/src/main/java/org/kohsuke/github/GHContent.java b/src/main/java/org/kohsuke/github/GHContent.java
index c79e00e384..8955505219 100644
--- a/src/main/java/org/kohsuke/github/GHContent.java
+++ b/src/main/java/org/kohsuke/github/GHContent.java
@@ -152,8 +152,8 @@ public PagedIterable listDirectoryContent() throws IOException {
throw new IllegalStateException(path+" is not a directory");
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(url, GHContent[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(url, GHContent[].class, pageSize)) {
@Override
protected void wrapUp(GHContent[] page) {
GHContent.wrap(page, repository);
diff --git a/src/main/java/org/kohsuke/github/GHDeploymentStatusBuilder.java b/src/main/java/org/kohsuke/github/GHDeploymentStatusBuilder.java
index b1ecf8918c..18cf5464ac 100644
--- a/src/main/java/org/kohsuke/github/GHDeploymentStatusBuilder.java
+++ b/src/main/java/org/kohsuke/github/GHDeploymentStatusBuilder.java
@@ -12,7 +12,7 @@ public GHDeploymentStatusBuilder(GHRepository repo, int deploymentId, GHDeployme
this.repo = repo;
this.deploymentId = deploymentId;
this.builder = new Requester(repo.root);
- this.builder.with("state",state.toString().toLowerCase(Locale.ENGLISH));
+ this.builder.with("state",state);
}
public GHDeploymentStatusBuilder description(String description) {
diff --git a/src/main/java/org/kohsuke/github/GHDirection.java b/src/main/java/org/kohsuke/github/GHDirection.java
new file mode 100644
index 0000000000..0db172dccf
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHDirection.java
@@ -0,0 +1,10 @@
+package org.kohsuke.github;
+
+/**
+ * Sort direction
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public enum GHDirection {
+ ASC, DESC
+}
diff --git a/src/main/java/org/kohsuke/github/GHEventInfo.java b/src/main/java/org/kohsuke/github/GHEventInfo.java
index 9772cba16e..0268924ea2 100644
--- a/src/main/java/org/kohsuke/github/GHEventInfo.java
+++ b/src/main/java/org/kohsuke/github/GHEventInfo.java
@@ -18,6 +18,7 @@ public class GHEventInfo {
// we don't want to expose Jackson dependency to the user. This needs databinding
private ObjectNode payload;
+ private long id;
private String created_at;
private String type;
@@ -54,6 +55,10 @@ public GHEvent getType() {
return this;
}
+ public long getId() {
+ return id;
+ }
+
public Date getCreatedAt() {
return GitHub.parseDate(created_at);
}
diff --git a/src/main/java/org/kohsuke/github/GHGist.java b/src/main/java/org/kohsuke/github/GHGist.java
index f608af3da6..eb105b40c6 100644
--- a/src/main/java/org/kohsuke/github/GHGist.java
+++ b/src/main/java/org/kohsuke/github/GHGist.java
@@ -140,8 +140,8 @@ public GHGist fork() throws IOException {
public PagedIterable listForks() {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("forks"), GHGist[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("forks"), GHGist[].class, pageSize)) {
@Override
protected void wrapUp(GHGist[] page) {
try {
diff --git a/src/main/java/org/kohsuke/github/GHIssue.java b/src/main/java/org/kohsuke/github/GHIssue.java
index d45e49b935..39e5c24b70 100644
--- a/src/main/java/org/kohsuke/github/GHIssue.java
+++ b/src/main/java/org/kohsuke/github/GHIssue.java
@@ -205,8 +205,8 @@ public List getComments() throws IOException {
*/
public PagedIterable listComments() throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(getIssuesApiRoute() + "/comments", GHIssueComment[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(getIssuesApiRoute() + "/comments", GHIssueComment[].class, pageSize)) {
protected void wrapUp(GHIssueComment[] page) {
for (GHIssueComment c : page)
c.wrapUp(GHIssue.this);
diff --git a/src/main/java/org/kohsuke/github/GHIssueSearchBuilder.java b/src/main/java/org/kohsuke/github/GHIssueSearchBuilder.java
index c3054b1067..ff574025c0 100644
--- a/src/main/java/org/kohsuke/github/GHIssueSearchBuilder.java
+++ b/src/main/java/org/kohsuke/github/GHIssueSearchBuilder.java
@@ -42,7 +42,7 @@ public GHIssueSearchBuilder isMerged() {
}
public GHIssueSearchBuilder sort(Sort sort) {
- req.with("sort",sort.toString().toLowerCase(Locale.ENGLISH));
+ req.with("sort",sort);
return this;
}
diff --git a/src/main/java/org/kohsuke/github/GHIssueState.java b/src/main/java/org/kohsuke/github/GHIssueState.java
index d0af550ead..ec3cf10d24 100644
--- a/src/main/java/org/kohsuke/github/GHIssueState.java
+++ b/src/main/java/org/kohsuke/github/GHIssueState.java
@@ -24,7 +24,11 @@
package org.kohsuke.github;
+/**
+ * @see GHPullRequestQueryBuilder#state(GHIssueState)
+ */
public enum GHIssueState {
OPEN,
- CLOSED
+ CLOSED,
+ ALL
}
\ No newline at end of file
diff --git a/src/main/java/org/kohsuke/github/GHMyself.java b/src/main/java/org/kohsuke/github/GHMyself.java
index 74ba96189d..c7ae80dd79 100644
--- a/src/main/java/org/kohsuke/github/GHMyself.java
+++ b/src/main/java/org/kohsuke/github/GHMyself.java
@@ -158,9 +158,8 @@ public PagedIterable listRepositories(final int pageSize) {
*/
public PagedIterable listRepositories(final int pageSize, final RepositoryListFilter repoType) {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator("/user/repos?per_page=" + pageSize +
- "&type=" + repoType.name().toLowerCase(Locale.ENGLISH), GHRepository[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().with("type",repoType).asIterator("/user/repos", GHRepository[].class, pageSize)) {
@Override
protected void wrapUp(GHRepository[] page) {
for (GHRepository c : page)
@@ -168,7 +167,7 @@ protected void wrapUp(GHRepository[] page) {
}
};
}
- };
+ }.withPageSize(pageSize);
}
/**
diff --git a/src/main/java/org/kohsuke/github/GHOrganization.java b/src/main/java/org/kohsuke/github/GHOrganization.java
index b39cc6b98b..83c8a0474a 100644
--- a/src/main/java/org/kohsuke/github/GHOrganization.java
+++ b/src/main/java/org/kohsuke/github/GHOrganization.java
@@ -57,8 +57,8 @@ public Map getTeams() throws IOException {
*/
public PagedIterable listTeams() throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(String.format("/orgs/%s/teams", login), GHTeam[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(String.format("/orgs/%s/teams", login), GHTeam[].class, pageSize)) {
@Override
protected void wrapUp(GHTeam[] page) {
for (GHTeam c : page)
@@ -150,9 +150,9 @@ public PagedIterable listMembersWithFilter(String filter) throws IOExcep
private PagedIterable listMembers(final String suffix, final String filter) throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
+ public PagedIterator _iterator(int pageSize) {
String filterParams = (filter == null) ? "" : ("?filter=" + filter);
- return new PagedIterator(root.retrieve().asIterator(String.format("/orgs/%s/%s%s", login, suffix, filterParams), GHUser[].class)) {
+ return new PagedIterator(root.retrieve().asIterator(String.format("/orgs/%s/%s%s", login, suffix, filterParams), GHUser[].class, pageSize)) {
@Override
protected void wrapUp(GHUser[] users) {
GHUser.wrap(users, root);
@@ -175,7 +175,7 @@ public enum Permission { ADMIN, PUSH, PULL }
* Creates a new team and assigns the repositories.
*/
public GHTeam createTeam(String name, Permission p, Collection repositories) throws IOException {
- Requester post = new Requester(root).with("name", name).with("permission", p.name().toLowerCase(Locale.ENGLISH));
+ Requester post = new Requester(root).with("name", name).with("permission", p);
List repo_names = new ArrayList();
for (GHRepository r : repositories) {
repo_names.add(r.getName());
@@ -222,8 +222,8 @@ public List getPullRequests() throws IOException {
*/
public PagedIterable listEvents() throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(String.format("/orgs/%s/events", login), GHEventInfo[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(String.format("/orgs/%s/events", login), GHEventInfo[].class, pageSize)) {
@Override
protected void wrapUp(GHEventInfo[] page) {
for (GHEventInfo c : page)
@@ -244,8 +244,8 @@ protected void wrapUp(GHEventInfo[] page) {
@Override
public PagedIterable listRepositories(final int pageSize) {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator("/orgs/" + login + "/repos?per_page=" + pageSize, GHRepository[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator("/orgs/" + login + "/repos?per_page=" + pageSize, GHRepository[].class, pageSize)) {
@Override
protected void wrapUp(GHRepository[] page) {
for (GHRepository c : page)
diff --git a/src/main/java/org/kohsuke/github/GHPerson.java b/src/main/java/org/kohsuke/github/GHPerson.java
index 1a9a0f1575..e9a750f2cc 100644
--- a/src/main/java/org/kohsuke/github/GHPerson.java
+++ b/src/main/java/org/kohsuke/github/GHPerson.java
@@ -76,8 +76,8 @@ public PagedIterable listRepositories() {
*/
public PagedIterable listRepositories(final int pageSize) {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator("/users/" + login + "/repos?per_page=" + pageSize, GHRepository[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator("/users/" + login + "/repos?per_page=" + pageSize, GHRepository[].class, pageSize)) {
@Override
protected void wrapUp(GHRepository[] page) {
for (GHRepository c : page)
@@ -104,7 +104,7 @@ protected void wrapUp(GHRepository[] page) {
public synchronized Iterable> iterateRepositories(final int pageSize) {
return new Iterable>() {
public Iterator> iterator() {
- final Iterator pager = root.retrieve().asIterator("/users/" + login + "/repos?per_page="+pageSize,GHRepository[].class);
+ final Iterator pager = root.retrieve().asIterator("/users/" + login + "/repos?per_page="+pageSize,GHRepository[].class, pageSize);
return new Iterator>() {
public boolean hasNext() {
diff --git a/src/main/java/org/kohsuke/github/GHPullRequest.java b/src/main/java/org/kohsuke/github/GHPullRequest.java
index 5604d2355e..dd3d93b758 100644
--- a/src/main/java/org/kohsuke/github/GHPullRequest.java
+++ b/src/main/java/org/kohsuke/github/GHPullRequest.java
@@ -210,9 +210,9 @@ private void populate() throws IOException {
*/
public PagedIterable listFiles() {
return new PagedIterable() {
- public PagedIterator iterator() {
+ public PagedIterator _iterator(int pageSize) {
return new PagedIterator(root.retrieve().asIterator(String.format("%s/files", getApiURL()),
- GHPullRequestFileDetail[].class)) {
+ GHPullRequestFileDetail[].class, pageSize)) {
@Override
protected void wrapUp(GHPullRequestFileDetail[] page) {
}
@@ -226,9 +226,9 @@ protected void wrapUp(GHPullRequestFileDetail[] page) {
*/
public PagedIterable listReviewComments() throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
+ public PagedIterator _iterator(int pageSize) {
return new PagedIterator(root.retrieve().asIterator(getApiRoute() + "/comments",
- GHPullRequestReviewComment[].class)) {
+ GHPullRequestReviewComment[].class, pageSize)) {
protected void wrapUp(GHPullRequestReviewComment[] page) {
for (GHPullRequestReviewComment c : page)
c.wrapUp(GHPullRequest.this);
@@ -243,10 +243,10 @@ protected void wrapUp(GHPullRequestReviewComment[] page) {
*/
public PagedIterable listCommits() {
return new PagedIterable() {
- public PagedIterator iterator() {
+ public PagedIterator _iterator(int pageSize) {
return new PagedIterator(root.retrieve().asIterator(
String.format("%s/commits", getApiURL()),
- GHPullRequestCommitDetail[].class)) {
+ GHPullRequestCommitDetail[].class, pageSize)) {
@Override
protected void wrapUp(GHPullRequestCommitDetail[] page) {
for (GHPullRequestCommitDetail c : page)
diff --git a/src/main/java/org/kohsuke/github/GHPullRequestQueryBuilder.java b/src/main/java/org/kohsuke/github/GHPullRequestQueryBuilder.java
new file mode 100644
index 0000000000..141cf4d681
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHPullRequestQueryBuilder.java
@@ -0,0 +1,58 @@
+package org.kohsuke.github;
+
+/**
+ * Lists up pull requests with some filtering and sorting.
+ *
+ * @author Kohsuke Kawaguchi
+ * @see GHRepository#queryPullRequests()
+ */
+public class GHPullRequestQueryBuilder extends GHQueryBuilder {
+ private final GHRepository repo;
+
+ /*package*/ GHPullRequestQueryBuilder(GHRepository repo) {
+ super(repo.root);
+ this.repo = repo;
+ }
+
+ public GHPullRequestQueryBuilder state(GHIssueState state) {
+ req.with("state",state);
+ return this;
+ }
+
+ public GHPullRequestQueryBuilder head(String head) {
+ req.with("head",head);
+ return this;
+ }
+
+ public GHPullRequestQueryBuilder base(String base) {
+ req.with("base",base);
+ return this;
+ }
+
+ public GHPullRequestQueryBuilder sort(Sort sort) {
+ req.with("sort",sort);
+ return this;
+ }
+
+ public enum Sort { CREATED, UPDATED, POPULARITY, LONG_RUNNING }
+
+ public GHPullRequestQueryBuilder direction(GHDirection d) {
+ req.with("direction",d);
+ return this;
+ }
+
+ @Override
+ public PagedIterable list() {
+ return new PagedIterable() {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(req.asIterator(repo.getApiTailUrl("pulls"), GHPullRequest[].class, pageSize)) {
+ @Override
+ protected void wrapUp(GHPullRequest[] page) {
+ for (GHPullRequest pr : page)
+ pr.wrapUp(repo);
+ }
+ };
+ }
+ };
+ }
+}
diff --git a/src/main/java/org/kohsuke/github/GHQueryBuilder.java b/src/main/java/org/kohsuke/github/GHQueryBuilder.java
new file mode 100644
index 0000000000..bb85fbbe95
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHQueryBuilder.java
@@ -0,0 +1,21 @@
+package org.kohsuke.github;
+
+/**
+ * Used to specify filters, sort order, etc for listing items in a collection.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public abstract class GHQueryBuilder {
+ protected final GitHub root;
+ protected final Requester req;
+
+ /*package*/ GHQueryBuilder(GitHub root) {
+ this.root = root;
+ this.req = root.retrieve();
+ }
+
+ /**
+ * Start listing items by using the settings built up on this object.
+ */
+ public abstract PagedIterable list();
+}
diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java
index 917be54d7f..b024814625 100644
--- a/src/main/java/org/kohsuke/github/GHRepository.java
+++ b/src/main/java/org/kohsuke/github/GHRepository.java
@@ -36,7 +36,6 @@
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
-import java.nio.charset.Charset;
import java.util.*;
import static java.util.Arrays.asList;
@@ -76,8 +75,8 @@ public GHDeploymentBuilder createDeployment(String ref) {
public PagedIterable getDeploymentStatuses(final int id) {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("deployments")+"/"+id+"/statuses", GHDeploymentStatus[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("deployments")+"/"+id+"/statuses", GHDeploymentStatus[].class, pageSize)) {
@Override
protected void wrapUp(GHDeploymentStatus[] page) {
for (GHDeploymentStatus c : page)
@@ -92,8 +91,8 @@ public PagedIterable listDeployments(String sha,String ref,String
List params = Arrays.asList(getParam("sha", sha), getParam("ref", ref), getParam("task", task), getParam("environment", environment));
final String deploymentsUrl = getApiTailUrl("deployments") + "?"+ join(params,"&");
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(deploymentsUrl, GHDeployment[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(deploymentsUrl, GHDeployment[].class, pageSize)) {
@Override
protected void wrapUp(GHDeployment[] page) {
for (GHDeployment c : page)
@@ -229,11 +228,10 @@ public List getIssues(GHIssueState state) throws IOException {
public List getIssues(GHIssueState state, GHMilestone milestone) throws IOException {
return Arrays.asList(GHIssue.wrap(root.retrieve()
- .to(getApiTailUrl(String.format("issues?state=%s&milestone=%s",
- state.toString().toLowerCase(Locale.ENGLISH),
- milestone == null ? "none" : "" + milestone.getNumber())),
- GHIssue[].class
- ), this));
+ .with("state", state)
+ .with("milestone", milestone == null ? "none" : "" + milestone.getNumber())
+ .to(getApiTailUrl("issues"),
+ GHIssue[].class), this));
}
/**
@@ -241,8 +239,8 @@ public List getIssues(GHIssueState state, GHMilestone milestone) throws
*/
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)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().with("state",state).asIterator(getApiTailUrl("issues"), GHIssue[].class, pageSize)) {
@Override
protected void wrapUp(GHIssue[] page) {
for (GHIssue c : page)
@@ -281,8 +279,8 @@ public List getReleases() throws IOException {
public PagedIterable listReleases() throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("releases"), GHRelease[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("releases"), GHRelease[].class, pageSize)) {
@Override
protected void wrapUp(GHRelease[] page) {
for (GHRelease c : page)
@@ -295,8 +293,8 @@ protected void wrapUp(GHRelease[] page) {
public PagedIterable listTags() throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("tags"), GHTag[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("tags"), GHTag[].class, pageSize)) {
@Override
protected void wrapUp(GHTag[] page) {
for (GHTag c : page)
@@ -416,9 +414,9 @@ public GHPersonSet getCollaborators() throws IOException {
*/
public PagedIterable listCollaborators() throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
+ public PagedIterator _iterator(int pageSize) {
- return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("collaborators"), GHUser[].class)) {
+ return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("collaborators"), GHUser[].class, pageSize)) {
@Override
protected void wrapUp(GHUser[] users) {
@@ -539,7 +537,7 @@ public void delete() throws IOException {
/**
* Sort orders for listing forks
*/
- public static enum ForkSort { NEWEST, OLDEST, STARGAZERS }
+ public enum ForkSort { NEWEST, OLDEST, STARGAZERS }
/**
* Lists all the direct forks of this repository, sorted by
@@ -556,12 +554,8 @@ public PagedIterable listForks() {
*/
public PagedIterable listForks(final ForkSort sort) {
return new PagedIterable() {
- public PagedIterator iterator() {
- String sortParam = "";
- if (sort != null) {
- sortParam = "?sort=" + sort.toString().toLowerCase(Locale.ENGLISH);
- }
- return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("forks" + sortParam), GHRepository[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().with("sort",sort).asIterator(getApiTailUrl("forks"), GHRepository[].class, pageSize)) {
@Override
protected void wrapUp(GHRepository[] page) {
for (GHRepository c : page) {
@@ -618,24 +612,24 @@ public GHPullRequest getPullRequest(int i) throws IOException {
* @see #listPullRequests(GHIssueState)
*/
public List getPullRequests(GHIssueState state) throws IOException {
- return listPullRequests(state).asList();
+ return queryPullRequests().state(state).list().asList();
}
/**
* Retrieves all the pull requests of a particular state.
+ *
+ * @deprecated
+ * Use {@link #queryPullRequests()}
*/
- public PagedIterable listPullRequests(final GHIssueState state) {
- return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("pulls?state="+state.name().toLowerCase(Locale.ENGLISH)), GHPullRequest[].class)) {
- @Override
- protected void wrapUp(GHPullRequest[] page) {
- for (GHPullRequest pr : page)
- pr.wrapUp(GHRepository.this);
- }
- };
- }
- };
+ public PagedIterable listPullRequests(GHIssueState state) {
+ return queryPullRequests().state(state).list();
+ }
+
+ /**
+ * Retrieves pull requests.
+ */
+ public GHPullRequestQueryBuilder queryPullRequests() {
+ return new GHPullRequestQueryBuilder(this);
}
/**
@@ -715,7 +709,7 @@ public GHCompare getCompare(GHBranch id1, GHBranch id2) throws IOException {
* @throws IOException on failure communicating with GitHub
*/
public GHRef[] getRefs() throws IOException {
- return GHRef.wrap(root.retrieve().to(String.format("/repos/%s/%s/git/refs", owner.login, name), GHRef[].class),root);
+ return GHRef.wrap(root.retrieve().to(String.format("/repos/%s/%s/git/refs", owner.login, name), GHRef[].class), root);
}
/**
@@ -786,8 +780,8 @@ public GHCommit getCommit(String sha1) throws IOException {
*/
public PagedIterable listCommits() {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/commits", owner.login, name), GHCommit[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/commits", owner.login, name), GHCommit[].class, pageSize)) {
protected void wrapUp(GHCommit[] page) {
for (GHCommit c : page)
c.wrapUp(GHRepository.this);
@@ -809,8 +803,8 @@ public GHCommitQueryBuilder queryCommits() {
*/
public PagedIterable listCommitComments() {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/comments", owner.login, name), GHCommitComment[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/comments", owner.login, name), GHCommitComment[].class, pageSize)) {
@Override
protected void wrapUp(GHCommitComment[] page) {
for (GHCommitComment c : page)
@@ -826,8 +820,8 @@ protected void wrapUp(GHCommitComment[] page) {
*/
public PagedIterable listCommitStatuses(final String sha1) throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/statuses/%s", owner.login, name, sha1), GHCommitStatus[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/statuses/%s", owner.login, name, sha1), GHCommitStatus[].class, pageSize)) {
@Override
protected void wrapUp(GHCommitStatus[] page) {
for (GHCommitStatus c : page)
@@ -858,7 +852,7 @@ public GHCommitStatus getLastCommitStatus(String sha1) throws IOException {
*/
public GHCommitStatus createCommitStatus(String sha1, GHCommitState state, String targetUrl, String description, String context) throws IOException {
return new Requester(root)
- .with("state", state.name().toLowerCase(Locale.ENGLISH))
+ .with("state", state)
.with("target_url", targetUrl)
.with("description", description)
.with("context", context)
@@ -869,7 +863,7 @@ public GHCommitStatus createCommitStatus(String sha1, GHCommitState state, Strin
* @see #createCommitStatus(String, GHCommitState,String,String,String)
*/
public GHCommitStatus createCommitStatus(String sha1, GHCommitState state, String targetUrl, String description) throws IOException {
- return createCommitStatus(sha1, state, targetUrl, description,null);
+ return createCommitStatus(sha1, state, targetUrl, description, null);
}
/**
@@ -877,8 +871,8 @@ public GHCommitStatus createCommitStatus(String sha1, GHCommitState state, Strin
*/
public PagedIterable listEvents() throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/events", owner.login, name), GHEventInfo[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/events", owner.login, name), GHEventInfo[].class, pageSize)) {
@Override
protected void wrapUp(GHEventInfo[] page) {
for (GHEventInfo c : page)
@@ -896,8 +890,8 @@ protected void wrapUp(GHEventInfo[] page) {
*/
public PagedIterable listLabels() throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("labels"), GHLabel[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("labels"), GHLabel[].class, pageSize)) {
@Override
protected void wrapUp(GHLabel[] page) {
for (GHLabel c : page)
@@ -915,7 +909,7 @@ public GHLabel getLabel(String name) throws IOException {
public GHLabel createLabel(String name, String color) throws IOException {
return root.retrieve().method("POST")
.with("name",name)
- .with("color",color)
+ .with("color", color)
.to(getApiTailUrl("labels"), GHLabel.class).wrapUp(this);
}
@@ -925,9 +919,20 @@ public GHLabel createLabel(String name, String color) throws IOException {
* https://developer.github.com/v3/activity/watching/
*/
public PagedIterable listSubscribers() {
+ return listUsers("subscribers");
+ }
+
+ /**
+ * Lists all the users who have starred this repo.
+ */
+ public PagedIterable listStargazers() {
+ return listUsers("stargazers");
+ }
+
+ private PagedIterable listUsers(final String suffix) {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("subscribers"), GHUser[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(getApiTailUrl(suffix), GHUser[].class, pageSize)) {
protected void wrapUp(GHUser[] page) {
for (GHUser c : page)
c.wrapUp(root);
@@ -1078,8 +1083,8 @@ public Map getMilestones() throws IOException {
*/
public PagedIterable listMilestones(final GHIssueState state) {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("milestones?state="+state.toString().toLowerCase(Locale.ENGLISH)), GHMilestone[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().with("state",state).asIterator(getApiTailUrl("milestones"), GHMilestone[].class, pageSize)) {
@Override
protected void wrapUp(GHMilestone[] page) {
for (GHMilestone c : page)
@@ -1251,8 +1256,8 @@ public GHSubscription getSubscription() throws IOException {
public PagedIterable listContributors() throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("contributors"), Contributor[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(getApiTailUrl("contributors"), Contributor[].class, pageSize)) {
@Override
protected void wrapUp(Contributor[] page) {
for (Contributor c : page)
diff --git a/src/main/java/org/kohsuke/github/GHRepositorySearchBuilder.java b/src/main/java/org/kohsuke/github/GHRepositorySearchBuilder.java
index cbcbb9e19d..8d30aaaf6b 100644
--- a/src/main/java/org/kohsuke/github/GHRepositorySearchBuilder.java
+++ b/src/main/java/org/kohsuke/github/GHRepositorySearchBuilder.java
@@ -58,7 +58,7 @@ public GHRepositorySearchBuilder stars(String v) {
}
public GHRepositorySearchBuilder sort(Sort sort) {
- req.with("sort",sort.toString().toLowerCase(Locale.ENGLISH));
+ req.with("sort",sort);
return this;
}
diff --git a/src/main/java/org/kohsuke/github/GHSearchBuilder.java b/src/main/java/org/kohsuke/github/GHSearchBuilder.java
index 766c6a319f..17c2db85b8 100644
--- a/src/main/java/org/kohsuke/github/GHSearchBuilder.java
+++ b/src/main/java/org/kohsuke/github/GHSearchBuilder.java
@@ -10,9 +10,7 @@
*
* @author Kohsuke Kawaguchi
*/
-public abstract class GHSearchBuilder {
- protected final GitHub root;
- protected final Requester req;
+public abstract class GHSearchBuilder extends GHQueryBuilder {
protected final List terms = new ArrayList();
/**
@@ -21,15 +19,14 @@ public abstract class GHSearchBuilder {
private final Class extends SearchResult> receiverType;
/*package*/ GHSearchBuilder(GitHub root, Class extends SearchResult> receiverType) {
- this.root = root;
- this.req = root.retrieve();
+ super(root);
this.receiverType = receiverType;
}
/**
* Search terms.
*/
- public GHSearchBuilder q(String term) {
+ public GHQueryBuilder q(String term) {
terms.add(term);
return this;
}
@@ -37,11 +34,12 @@ public GHSearchBuilder q(String term) {
/**
* Performs the search.
*/
+ @Override
public PagedSearchIterable list() {
return new PagedSearchIterable(root) {
- public PagedIterator iterator() {
+ public PagedIterator _iterator(int pageSize) {
req.set("q", StringUtils.join(terms, " "));
- return new PagedIterator(adapt(req.asIterator(getApiUrl(), receiverType))) {
+ return new PagedIterator(adapt(req.asIterator(getApiUrl(), receiverType, pageSize))) {
protected void wrapUp(T[] page) {
// SearchResult.getItems() should do it
}
diff --git a/src/main/java/org/kohsuke/github/GHTeam.java b/src/main/java/org/kohsuke/github/GHTeam.java
index 7213f327c9..cf7dd1fc91 100644
--- a/src/main/java/org/kohsuke/github/GHTeam.java
+++ b/src/main/java/org/kohsuke/github/GHTeam.java
@@ -52,8 +52,8 @@ public int getId() {
*/
public PagedIterable listMembers() throws IOException {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(org.root.retrieve().asIterator(api("/members"), GHUser[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(org.root.retrieve().asIterator(api("/members"), GHUser[].class, pageSize)) {
@Override
protected void wrapUp(GHUser[] page) {
GHUser.wrap(page, org.root);
@@ -89,8 +89,8 @@ public Map getRepositories() throws IOException {
public PagedIterable listRepositories() {
return new PagedIterable() {
- public PagedIterator iterator() {
- return new PagedIterator(org.root.retrieve().asIterator(api("/repos"), GHRepository[].class)) {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(org.root.retrieve().asIterator(api("/repos"), GHRepository[].class, pageSize)) {
@Override
protected void wrapUp(GHRepository[] page) {
for (GHRepository r : page)
diff --git a/src/main/java/org/kohsuke/github/GHUser.java b/src/main/java/org/kohsuke/github/GHUser.java
index 2242f4a6e4..319908cbae 100644
--- a/src/main/java/org/kohsuke/github/GHUser.java
+++ b/src/main/java/org/kohsuke/github/GHUser.java
@@ -26,7 +26,6 @@
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
import java.io.IOException;
-import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
@@ -56,8 +55,14 @@ public void unfollow() throws IOException {
*/
@WithBridgeMethods(Set.class)
public GHPersonSet getFollows() throws IOException {
- GHUser[] followers = root.retrieve().to("/users/" + login + "/following", GHUser[].class);
- return new GHPersonSet(Arrays.asList(wrap(followers,root)));
+ return new GHPersonSet(listFollows().asList());
+ }
+
+ /**
+ * Lists the users that this user is following
+ */
+ public PagedIterable listFollows() {
+ return listUser("following");
}
/**
@@ -65,8 +70,26 @@ public GHPersonSet getFollows() throws IOException {
*/
@WithBridgeMethods(Set.class)
public GHPersonSet getFollowers() throws IOException {
- GHUser[] followers = root.retrieve().to("/users/" + login + "/followers", GHUser[].class);
- return new GHPersonSet(Arrays.asList(wrap(followers,root)));
+ return new GHPersonSet(listFollowers().asList());
+ }
+
+ /**
+ * Lists the users who are following this user.
+ */
+ public PagedIterable listFollowers() {
+ return listUser("followers");
+ }
+
+ private PagedIterable listUser(final String suffix) {
+ return new PagedIterable() {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(getApiTailUrl(suffix), GHUser[].class, pageSize)) {
+ protected void wrapUp(GHUser[] page) {
+ GHUser.wrap(page,root);
+ }
+ };
+ }
+ };
}
/**
@@ -75,9 +98,20 @@ public GHPersonSet