Compare commits

...

17 Commits

Author SHA1 Message Date
Kohsuke Kawaguchi
3606f412b3 [maven-release-plugin] prepare release github-api-1.44 2013-09-07 13:32:15 +01:00
Kohsuke Kawaguchi
6e0e94094b Massaging the changes 2013-09-07 13:29:23 +01:00
Kohsuke Kawaguchi
976960f495 Merge pull request #42 from paulbutenko/master
Commit's short info model
2013-09-07 05:25:58 -07:00
Kohsuke Kawaguchi
d2f2f3b2d3 Merge pull request #44 from stephenc/is-anonymous
Provide a way to determine if the connection is anonymous
2013-09-07 05:18:29 -07:00
Kohsuke Kawaguchi
2da7c45840 Merge pull request #43 from stephenc/master
GHMyself should allow accessing the private repos and orgs too
2013-09-07 05:18:00 -07:00
Stephen Connolly
fb078de627 Provide a way to determine if the connection is anonymous 2013-08-29 14:33:04 +01:00
Stephen Connolly
da46b7fddb GHMyself should allow accessing the private repos and orgs too 2013-08-29 14:29:58 +01:00
Paul Butenko
c4e0729b7d GHCOmpare reverted, getCommit changed to getCommitShortInfo 2013-08-17 01:09:55 +03:00
Paul Butenko
eee9f0ace5 Original formating restored 2013-08-17 00:48:42 +03:00
Paul Butenko
d0692458a3 New model for short info of the commit was added 2013-08-17 00:41:45 +03:00
Kohsuke Kawaguchi
c96e6c7c92 [maven-release-plugin] prepare for next development iteration 2013-07-06 22:26:45 -07:00
Kohsuke Kawaguchi
4956278f17 [maven-release-plugin] prepare release github-api-1.43 2013-07-06 22:26:39 -07:00
Kohsuke Kawaguchi
5858a86624 using the latest 2013-07-06 22:24:21 -07:00
Kohsuke Kawaguchi
c87d178a6a added a method that matches the convention elsewhere. 2013-07-06 17:49:56 -07:00
Kohsuke Kawaguchi
6fc872b1fd this is no longer efficient 2013-07-06 17:49:46 -07:00
Kohsuke Kawaguchi
589c5783a0 "myself" only makes sense when there's a credential 2013-05-24 12:01:56 -07:00
Kohsuke Kawaguchi
40165628d6 [maven-release-plugin] prepare for next development iteration 2013-05-07 11:09:20 -07:00
7 changed files with 150 additions and 7 deletions

View File

@@ -3,11 +3,11 @@
<parent> <parent>
<groupId>org.kohsuke</groupId> <groupId>org.kohsuke</groupId>
<artifactId>pom</artifactId> <artifactId>pom</artifactId>
<version>4</version> <version>6</version>
</parent> </parent>
<artifactId>github-api</artifactId> <artifactId>github-api</artifactId>
<version>1.42</version> <version>1.44</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>

View File

@@ -5,6 +5,7 @@ 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;
/** /**
@@ -16,6 +17,55 @@ import java.util.List;
*/ */
public class GHCommit { public class GHCommit {
private GHRepository owner; private GHRepository owner;
private ShortInfo commit;
/**
* Short summary of this commit.
*/
public static class ShortInfo {
private GHAuthor author;
private GHAuthor committer;
private String message;
private int comment_count;
public GHAuthor getAuthor() {
return author;
}
public GHAuthor getCommitter() {
return committer;
}
/**
* Commit message.
*/
public String getMessage() {
return message;
}
public int getCommentCount() {
return comment_count;
}
}
public static class GHAuthor {
private String name,email,date;
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public Date getDate() {
return GitHub.parseDate(date);
}
}
public static class Stats { public static class Stats {
int total,additions,deletions; int total,additions,deletions;
@@ -110,8 +160,14 @@ public class GHCommit {
Stats stats; Stats stats;
List<Parent> parents; List<Parent> parents;
User author,committer; User author,committer;
/** public ShortInfo getCommitShortInfo() {
return commit;
}
/**
* The repository that contains the commit. * The repository that contains the commit.
*/ */
public GHRepository getOwner() { public GHRepository getOwner() {

View File

@@ -3,7 +3,12 @@ package org.kohsuke.github;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/** /**
* Represents the account that's logging into GitHub. * Represents the account that's logging into GitHub.
@@ -35,7 +40,50 @@ public class GHMyself extends GHUser {
public List<GHKey> getPublicKeys() throws IOException { public List<GHKey> getPublicKeys() throws IOException {
return Collections.unmodifiableList(Arrays.asList(root.retrieve().to("/user/keys", GHKey[].class))); return Collections.unmodifiableList(Arrays.asList(root.retrieve().to("/user/keys", GHKey[].class)));
} }
/**
* Gets the organization that this user belongs to.
*/
public GHPersonSet<GHOrganization> getAllOrganizations() throws IOException {
GHPersonSet<GHOrganization> orgs = new GHPersonSet<GHOrganization>();
Set<String> names = new HashSet<String>();
for (GHOrganization o : root.retrieve().to("/user/orgs", GHOrganization[].class)) {
if (names.add(o.getLogin())) // in case of rumoured duplicates in the data
orgs.add(root.getOrganization(o.getLogin()));
}
return orgs;
}
/**
* Gets the all repositories this user owns (public and private).
*/
public synchronized Map<String,GHRepository> getAllRepositories() throws IOException {
Map<String,GHRepository> repositories = new TreeMap<String, GHRepository>();
for (GHRepository r : listAllRepositories()) {
repositories.put(r.getName(),r);
}
return Collections.unmodifiableMap(repositories);
}
/**
* Lists up all repositories this user owns (public and private).
*
* Unlike {@link #getAllRepositories()}, this does not wait until all the repositories are returned.
*/
public PagedIterable<GHRepository> listAllRepositories() {
return new PagedIterable<GHRepository>() {
public PagedIterator<GHRepository> iterator() {
return new PagedIterator<GHRepository>(root.retrieve().asIterator("/user/repos", GHRepository[].class)) {
@Override
protected void wrapUp(GHRepository[] page) {
for (GHRepository c : page)
c.wrap(root);
}
};
}
};
}
// public void addEmails(Collection<String> emails) throws IOException { // public void addEmails(Collection<String> emails) throws IOException {
//// new Requester(root,ApiVersion.V3).withCredential().to("/user/emails"); //// new Requester(root,ApiVersion.V3).withCredential().to("/user/emails");
// root.retrieveWithAuth3() // root.retrieveWithAuth3()

View File

@@ -130,10 +130,13 @@ public class GHOrganization extends GHPerson {
/** /**
* List up repositories that has some open pull requests. * List up repositories that has some open pull requests.
*
* This used to be an efficient method that didn't involve traversing every repository, but now
* it doesn't do any optimization.
*/ */
public List<GHRepository> getRepositoriesWithOpenPullRequests() throws IOException { public List<GHRepository> getRepositoriesWithOpenPullRequests() throws IOException {
List<GHRepository> r = new ArrayList<GHRepository>(); List<GHRepository> r = new ArrayList<GHRepository>();
for (GHRepository repository : root.retrieve().to("/orgs/" + login + "/repos", GHRepository[].class)) { for (GHRepository repository : listRepositories()) {
repository.wrap(root); repository.wrap(root);
List<GHPullRequest> pullRequests = repository.getPullRequests(GHIssueState.OPEN); List<GHPullRequest> pullRequests = repository.getPullRequests(GHIssueState.OPEN);
if (pullRequests.size() > 0) { if (pullRequests.size() > 0) {

View File

@@ -54,6 +54,25 @@ public abstract class GHPerson {
return Collections.unmodifiableMap(repositories); return Collections.unmodifiableMap(repositories);
} }
/**
* Lists up all the repositories.
*
* Unlike {@link #getRepositories()}, this does not wait until all the repositories are returned.
*/
public PagedIterable<GHRepository> listRepositories() {
return new PagedIterable<GHRepository>() {
public PagedIterator<GHRepository> iterator() {
return new PagedIterator<GHRepository>(root.retrieve().asIterator("/users/" + login + "/repos", GHRepository[].class)) {
@Override
protected void wrapUp(GHRepository[] page) {
for (GHRepository c : page)
c.wrap(root);
}
};
}
};
}
/** /**
* Loads repository list in a pagenated fashion. * Loads repository list in a pagenated fashion.
* *
@@ -63,6 +82,9 @@ public abstract class GHPerson {
* *
* Every {@link Iterator#next()} call results in I/O. Exceptions that occur during the processing is wrapped * Every {@link Iterator#next()} call results in I/O. Exceptions that occur during the processing is wrapped
* into {@link Error}. * into {@link Error}.
*
* @deprecated
* Use {@link #listRepositories()}
*/ */
public synchronized Iterable<List<GHRepository>> iterateRepositories(final int pageSize) { public synchronized Iterable<List<GHRepository>> iterateRepositories(final int pageSize) {
return new Iterable<List<GHRepository>>() { return new Iterable<List<GHRepository>>() {

View File

@@ -123,7 +123,7 @@ public class GitHub {
} }
} }
if (login==null) if (login==null && encodedAuthorization!=null)
login = getMyself().getLogin(); login = getMyself().getLogin();
this.login = login; this.login = login;
} }
@@ -192,8 +192,16 @@ public class GitHub {
return new GitHub(null,null,null); return new GitHub(null,null,null);
} }
/**
* Is this an anonymous connection
* @return {@code true} if operations that require authentication will fail.
*/
public boolean isAnonymous() {
return login==null && encodedAuthorization==null;
}
/*package*/ void requireCredential() { /*package*/ void requireCredential() {
if (login==null && encodedAuthorization==null) if (isAnonymous())
throw new IllegalStateException("This operation requires a credential but none is given to the GitHub constructor"); throw new IllegalStateException("This operation requires a credential but none is given to the GitHub constructor");
} }

View File

@@ -332,6 +332,12 @@ public class AppTest extends TestCase {
assertEquals("oops!",state.getDescription()); assertEquals("oops!",state.getDescription());
assertEquals("http://jenkins-ci.org/",state.getTargetUrl()); assertEquals("http://jenkins-ci.org/",state.getTargetUrl());
} }
public void testCommitShortInfo() throws Exception {
GHCommit commit = gitHub.getUser("kohsuke").getRepository("test").getCommit("c77360d6f2ff2c2e6dd11828ad5dccf72419fa1b");
assertEquals(commit.getCommitShortInfo().getAuthor().getName(), "Kohsuke Kawaguchi");
assertEquals(commit.getCommitShortInfo().getMessage(), "Added a file");
}
public void testPullRequestPopulate() throws Exception { public void testPullRequestPopulate() throws Exception {
GHRepository r = gitHub.getUser("kohsuke").getRepository("github-api"); GHRepository r = gitHub.getUser("kohsuke").getRepository("github-api");