Compare commits

..

18 Commits

Author SHA1 Message Date
Kohsuke Kawaguchi
83a718c9db [maven-release-plugin] prepare release github-api-1.47 2013-11-27 11:57:35 -08:00
Kohsuke Kawaguchi
2abf03ccb7 Minor doc improvement 2013-11-27 11:52:47 -08:00
Kohsuke Kawaguchi
a59810a487 Merge pull request #56 from endeavor85/master
Use `PagedIterator<GHIssue>` to retrieve repository issues
2013-11-27 11:49:44 -08:00
Kohsuke Kawaguchi
9cc9e06ad1 Merge pull request #58 from rtholmes/master
Add support for PULL_REQUEST_REVIEW_COMMENT event types.
2013-11-27 11:49:17 -08:00
reid holmes
0108a0c146 Add support for PULL_REQUEST_REVIEW_COMMENT event types. 2013-11-26 15:13:36 -05:00
endeavor85
4188758d84 Use PagedIterator<GHIssue> to retrieve repository issues. Overcomes
default 30 item page size limit.
2013-11-24 02:54:18 -06:00
Kohsuke Kawaguchi
2144100f81 [maven-release-plugin] prepare for next development iteration 2013-11-13 13:05:29 -08:00
Kohsuke Kawaguchi
8a61e04be6 [maven-release-plugin] prepare release github-api-1.46 2013-11-13 13:05:24 -08:00
Kohsuke Kawaguchi
eaeb083891 Perhaps this will help resolve? 2013-11-12 13:13:18 -08:00
Kohsuke Kawaguchi
25e117b412 oops 2013-11-12 12:47:37 -08:00
Kohsuke Kawaguchi
6b7ceed1a5 Short cut 2013-11-12 12:45:39 -08:00
Kohsuke Kawaguchi
0533fc98a2 bumped up to a newer version 2013-11-12 12:21:17 -08:00
Kohsuke Kawaguchi
edde3ab2fb added one more field based on observations 2013-11-12 12:17:57 -08:00
Kohsuke Kawaguchi
ec20e518be adding a new payload implementation for PushEvent 2013-11-12 12:14:34 -08:00
Kohsuke Kawaguchi
930a582afa Unified various different instances of the "author" class 2013-11-12 12:10:33 -08:00
Kohsuke Kawaguchi
7536eeea54 V2 code no longer needed 2013-11-12 12:01:49 -08:00
Kohsuke Kawaguchi
d940d43907 added more event support 2013-11-12 11:52:40 -08:00
Kohsuke Kawaguchi
3ad3dd9493 [maven-release-plugin] prepare for next development iteration 2013-11-09 15:19:27 -08:00
14 changed files with 259 additions and 65 deletions

13
pom.xml
View File

@@ -7,7 +7,7 @@
</parent> </parent>
<artifactId>github-api</artifactId> <artifactId>github-api</artifactId>
<version>1.45</version> <version>1.47</version>
<name>GitHub API for Java</name> <name>GitHub API for Java</name>
<url>http://github-api.kohsuke.org/</url> <url>http://github-api.kohsuke.org/</url>
<description>GitHub API for Java</description> <description>GitHub API for Java</description>
@@ -34,7 +34,7 @@
<plugin> <plugin>
<groupId>com.infradna.tool</groupId> <groupId>com.infradna.tool</groupId>
<artifactId>bridge-method-injector</artifactId> <artifactId>bridge-method-injector</artifactId>
<version>1.2</version> <version>1.8</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>
@@ -76,7 +76,7 @@
<dependency> <dependency>
<groupId>com.infradna.tool</groupId> <groupId>com.infradna.tool</groupId>
<artifactId>bridge-method-annotation</artifactId> <artifactId>bridge-method-annotation</artifactId>
<version>1.4</version> <version>1.8</version>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@@ -98,6 +98,12 @@
<url>http://repo.jenkins-ci.org/public/</url> <url>http://repo.jenkins-ci.org/public/</url>
</repository> </repository>
</repositories> </repositories>
<pluginRepositories>
<pluginRepository>
<id>repo.jenkins-ci.org</id>
<url>http://repo.jenkins-ci.org/public/</url>
</pluginRepository>
</pluginRepositories>
<reporting> <reporting>
<plugins> <plugins>
@@ -107,4 +113,5 @@
</plugin> </plugin>
</plugins> </plugins>
</reporting> </reporting>
</project> </project>

View File

@@ -1,11 +1,12 @@
package org.kohsuke.github; package org.kohsuke.github;
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.AbstractList; import java.util.AbstractList;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@@ -31,11 +32,13 @@ public class GHCommit {
private int comment_count; private int comment_count;
public GHAuthor getAuthor() { @WithBridgeMethods(value=GHAuthor.class,castRequired=true)
public GitUser getAuthor() {
return author; return author;
} }
public GHAuthor getCommitter() { @WithBridgeMethods(value=GHAuthor.class,castRequired=true)
public GitUser getCommitter() {
return committer; return committer;
} }
@@ -50,21 +53,11 @@ public class GHCommit {
return comment_count; return comment_count;
} }
} }
public static class GHAuthor {
private String name,email,date;
public String getName() { /**
return name; * @deprecated Use {@link GitUser} instead.
} */
public static class GHAuthor extends GitUser {
public String getEmail() {
return email;
}
public Date getDate() {
return GitHub.parseDate(date);
}
} }
public static class Stats { public static class Stats {

View File

@@ -31,11 +31,11 @@ package org.kohsuke.github;
public class GHCommitPointer { public class GHCommitPointer {
private String ref, sha, label; private String ref, sha, label;
private GHUser user; private GHUser user;
private GHRepository repository/*V2*/,repo/*V3*/; private GHRepository repo;
/** /**
* This points to the user who owns * This points to the user who owns
* the {@link #repository}. * the {@link #getRepository()}.
*/ */
public GHUser getUser() { public GHUser getUser() {
return user; return user;
@@ -45,7 +45,7 @@ public class GHCommitPointer {
* The repository that contains the commit. * The repository that contains the commit.
*/ */
public GHRepository getRepository() { public GHRepository getRepository() {
return repo!=null ? repo : repository; return repo;
} }
/** /**
@@ -72,6 +72,5 @@ public class GHCommitPointer {
void wrapUp(GitHub root) { void wrapUp(GitHub root) {
if (user!=null) user.root = root; if (user!=null) user.root = root;
if (repo!=null) repo.wrap(root); if (repo!=null) repo.wrap(root);
if (repository!=null) repository.wrap(root);
} }
} }

View File

@@ -1,5 +1,7 @@
package org.kohsuke.github; package org.kohsuke.github;
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
import java.net.URL; import java.net.URL;
import java.util.Date; import java.util.Date;
@@ -109,11 +111,13 @@ public class GHCompare {
return message; return message;
} }
public User getAuthor() { @WithBridgeMethods(value=User.class,castRequired=true)
public GitUser getAuthor() {
return author; return author;
} }
public User getCommitter() { @WithBridgeMethods(value=User.class,castRequired=true)
public GitUser getCommitter() {
return committer; return committer;
} }
@@ -134,23 +138,13 @@ public class GHCompare {
} }
} }
public static class User { /**
private String name, email, date; * @deprecated use {@link GitUser} instead.
*/
public String getName() { public static class User extends GitUser {
return name;
}
public String getEmail() {
return email;
}
public Date getDate() {
return GitHub.parseDate(date);
}
} }
public static enum Status { public static enum Status {
behind, ahead, identical; behind, ahead, identical
} }
} }

View File

@@ -6,6 +6,7 @@ package org.kohsuke.github;
* See http://developer.github.com/v3/events/types/ * See http://developer.github.com/v3/events/types/
* *
* @author Kohsuke Kawaguchi * @author Kohsuke Kawaguchi
* @see GHEventInfo
*/ */
public enum GHEvent { public enum GHEvent {
COMMIT_COMMENT, COMMIT_COMMENT,
@@ -22,6 +23,7 @@ public enum GHEvent {
MEMBER, MEMBER,
PUBLIC, PUBLIC,
PULL_REQUEST, PULL_REQUEST,
PULL_REQUEST_REVIEW_COMMENT,
PUSH, PUSH,
TEAM_ADD, TEAM_ADD,
WATCH WATCH

View File

@@ -63,6 +63,13 @@ public class GHEventInfo {
return root.getUser(actor.getLogin()); return root.getUser(actor.getLogin());
} }
/**
* Quick way to just get the actor of the login.
*/
public String getActorLogin() throws IOException {
return actor.getLogin();
}
public GHOrganization getOrganization() throws IOException { public GHOrganization getOrganization() throws IOException {
return (org==null || org.getLogin()==null) ? null : root.getOrganization(org.getLogin()); return (org==null || org.getLogin()==null) ? null : root.getOrganization(org.getLogin());
} }

View File

@@ -1,6 +1,7 @@
package org.kohsuke.github; package org.kohsuke.github;
import java.io.Reader; import java.io.Reader;
import java.util.List;
/** /**
* Base type for types used in databinding of the event payload. * Base type for types used in databinding of the event payload.
@@ -8,6 +9,7 @@ import java.io.Reader;
* @see GitHub#parseEventPayload(Reader, Class) * @see GitHub#parseEventPayload(Reader, Class)
* @see GHEventInfo#getPayload(Class) * @see GHEventInfo#getPayload(Class)
*/ */
@SuppressWarnings("UnusedDeclaration")
public abstract class GHEventPayload { public abstract class GHEventPayload {
protected GitHub root; protected GitHub root;
@@ -21,7 +23,7 @@ public abstract class GHEventPayload {
/** /**
* A pull request status has changed. * A pull request status has changed.
* *
* @see http://developer.github.com/v3/activity/events/types/#pullrequestevent * @see <a href="http://developer.github.com/v3/activity/events/types/#pullrequestevent">authoritative source</a>
*/ */
public static class PullRequest extends GHEventPayload { public static class PullRequest extends GHEventPayload {
private String action; private String action;
@@ -61,7 +63,7 @@ public abstract class GHEventPayload {
/** /**
* A comment was added to an issue * A comment was added to an issue
* *
* @see http://developer.github.com/v3/activity/events/types/#issuecommentevent * @see <a href="http://developer.github.com/v3/activity/events/types/#issuecommentevent">authoritative source</a>
*/ */
public static class IssueComment extends GHEventPayload { public static class IssueComment extends GHEventPayload {
private String action; private String action;
@@ -105,4 +107,88 @@ public abstract class GHEventPayload {
comment.wrapUp(issue); comment.wrapUp(issue);
} }
} }
/**
* A commit was pushed.
*
* @see <a href="http://developer.github.com/v3/activity/events/types/#pushevent">authoritative source</a>
*/
public static class Push extends GHEventPayload {
private String head, before;
private String ref;
private int size;
private List<PushCommit> commits;
/**
* The SHA of the HEAD commit on the repository
*/
public String getHead() {
return head;
}
/**
* This is undocumented, but it looks like this captures the commit that the ref was pointing to
* before the push.
*/
public String getBefore() {
return before;
}
/**
* The full Git ref that was pushed. Example: “refs/heads/master”
*/
public String getRef() {
return ref;
}
/**
* The number of commits in the push.
* Is this always the same as {@code getCommits().size()}?
*/
public int getSize() {
return size;
}
/**
* The list of pushed commits.
*/
public List<PushCommit> getCommits() {
return commits;
}
/**
* Commit in a push
*/
public static class PushCommit {
private GitUser author;
private String url, sha, message;
private boolean distinct;
public GitUser getAuthor() {
return author;
}
/**
* Points to the commit API resource.
*/
public String getUrl() {
return url;
}
public String getSha() {
return sha;
}
public String getMessage() {
return message;
}
/**
* Whether this commit is distinct from any that have been pushed before.
*/
public boolean isDistinct() {
return distinct;
}
}
}
} }

View File

@@ -156,4 +156,21 @@ public class GHOrganization extends GHPerson {
} }
return all; return all;
} }
/**
* Lists events performed by a user (this includes private events if the caller is authenticated.
*/
public PagedIterable<GHEventInfo> listEvents() throws IOException {
return new PagedIterable<GHEventInfo>() {
public PagedIterator<GHEventInfo> iterator() {
return new PagedIterator<GHEventInfo>(root.retrieve().asIterator(String.format("/orgs/%s/events", login), GHEventInfo[].class)) {
@Override
protected void wrapUp(GHEventInfo[] page) {
for (GHEventInfo c : page)
c.wrapUp(root);
}
};
}
};
}
} }

View File

@@ -135,6 +135,11 @@ public abstract class GHPerson {
} }
} }
/**
* Lists events for an organization or an user.
*/
public abstract PagedIterable<GHEventInfo> listEvents() throws IOException;
/** /**
* Gravatar ID of this user, like 0cb9832a01c22c083390f3c5dcb64105 * Gravatar ID of this user, like 0cb9832a01c22c083390f3c5dcb64105
* *

View File

@@ -23,8 +23,9 @@
*/ */
package org.kohsuke.github; package org.kohsuke.github;
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
import java.net.URL; import java.net.URL;
import java.util.Date;
/** /**
* Commit detail inside a {@link GHPullRequest}. * Commit detail inside a {@link GHPullRequest}.
@@ -33,25 +34,12 @@ import java.util.Date;
*/ */
public class GHPullRequestCommitDetail { public class GHPullRequestCommitDetail {
public static class Authorship { /**
String name; * @deprecated Use {@link GitUser}
String email; */
String date; public static class Authorship extends GitUser {}
public String getName() { public static class Tree {
return name;
}
public String getEmail() {
return email;
}
public Date getDate() {
return GitHub.parseDate(date);
}
}
public static class Tree {
String sha; String sha;
String url; String url;
@@ -72,11 +60,13 @@ public class GHPullRequestCommitDetail {
String url; String url;
int comment_count; int comment_count;
public Authorship getAuthor() { @WithBridgeMethods(value=Authorship.class,castRequired=true)
public GitUser getAuthor() {
return author; return author;
} }
public Authorship getCommitter() { @WithBridgeMethods(value=Authorship.class,castRequired=true)
public GitUser getCommitter() {
return committer; return committer;
} }

View File

@@ -143,7 +143,24 @@ public class GHRepository {
} }
public List<GHIssue> getIssues(GHIssueState state) throws IOException { public List<GHIssue> 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<GHIssue> listIssues(final GHIssueState state) {
return new PagedIterable<GHIssue>() {
public PagedIterator<GHIssue> iterator() {
return new PagedIterator<GHIssue>(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) { public GHReleaseBuilder createRelease(String tag) {
@@ -528,6 +545,22 @@ public class GHRepository {
.to(String.format("/repos/%s/%s/statuses/%s",owner.login,this.name,sha1),GHCommitStatus.class).wrapUp(root); .to(String.format("/repos/%s/%s/statuses/%s",owner.login,this.name,sha1),GHCommitStatus.class).wrapUp(root);
} }
/**
* Lists repository events.
*/
public PagedIterable<GHEventInfo> listEvents() throws IOException {
return new PagedIterable<GHEventInfo>() {
public PagedIterator<GHEventInfo> iterator() {
return new PagedIterator<GHEventInfo>(root.retrieve().asIterator(String.format("/repos/%s/%s/events", owner.login, name), GHEventInfo[].class)) {
@Override
protected void wrapUp(GHEventInfo[] page) {
for (GHEventInfo c : page)
c.wrapUp(root);
}
};
}
};
}
/** /**
* *

View File

@@ -103,6 +103,23 @@ public class GHUser extends GHPerson {
return orgs; return orgs;
} }
/**
* Lists events performed by a user (this includes private events if the caller is authenticated.
*/
public PagedIterable<GHEventInfo> listEvents() throws IOException {
return new PagedIterable<GHEventInfo>() {
public PagedIterator<GHEventInfo> iterator() {
return new PagedIterator<GHEventInfo>(root.retrieve().asIterator(String.format("/users/%s/events", login), GHEventInfo[].class)) {
@Override
protected void wrapUp(GHEventInfo[] page) {
for (GHEventInfo c : page)
c.wrapUp(root);
}
};
}
};
}
@Override @Override
public String toString() { public String toString() {
return "User:"+login; return "User:"+login;

View File

@@ -0,0 +1,38 @@
package org.kohsuke.github;
import java.util.Date;
/**
* Represents a user in Git who authors/commits a commit.
*
* In contrast, {@link GHUser} is an user of GitHub. Because Git allows a person to
* use multiple e-mail addresses and names when creating a commit, there's generally
* no meaningful mapping between {@link GHUser} and {@link GitUser}.
*
* @author Kohsuke Kawaguchi
*/
public class GitUser {
private String name, email, date;
/**
* Human readable name of the user, such as "Kohsuke Kawaguchi"
*/
public String getName() {
return name;
}
/**
* E-mail address, such as "foo@example.com"
*/
public String getEmail() {
return email;
}
/**
* This field doesn't appear to be consistently available in all the situations where this class
* is used.
*/
public Date getDate() {
return GitHub.parseDate(date);
}
}

View File

@@ -79,6 +79,12 @@ public class AppTest extends TestCase {
o.close(); o.close();
} }
public void testGetIssues() throws Exception {
List<GHIssue> 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 { public void testRateLimit() throws IOException {
System.out.println(gitHub.getRateLimit()); System.out.println(gitHub.getRateLimit());
} }