Compare commits

..

34 Commits

Author SHA1 Message Date
Kohsuke Kawaguchi
a37ade13cd [maven-release-plugin] prepare release github-api-1.52 2014-05-09 18:39:29 -07:00
Kohsuke Kawaguchi
1e0129f2d8 A few more properties while we are at it 2014-05-09 18:36:46 -07:00
Kohsuke Kawaguchi
2e1d4381b0 looks like this property was renamed 2014-05-09 18:34:51 -07:00
Kohsuke Kawaguchi
a409b4f49c Merge branch 'pull-86'
Conflicts:
	src/main/java/org/kohsuke/github/GHOrganization.java
	src/main/java/org/kohsuke/github/Requester.java
	src/test/java/org/kohsuke/AppTest.java
2014-05-09 18:30:59 -07:00
Kohsuke Kawaguchi
926776204b Implemented the builder pattern to my liking 2014-05-09 18:28:34 -07:00
Kohsuke Kawaguchi
bba490127d Merge branch 'pull-87' 2014-05-09 17:59:30 -07:00
Kohsuke Kawaguchi
80672c43c0 Restored backward compatibility 2014-05-09 17:59:22 -07:00
Kohsuke Kawaguchi
926e0ea0e5 added more tests.
Looks like org APIs only work for owners of the org
2014-05-09 17:55:53 -07:00
Kohsuke Kawaguchi
6da169cd56 a convenience method 2014-05-09 17:54:24 -07:00
Kohsuke Kawaguchi
aaf10aa118 added a test 2014-05-09 17:53:08 -07:00
Kohsuke Kawaguchi
145bdacf13 Added a method to list up teams 2014-05-09 17:50:19 -07:00
Kohsuke Kawaguchi
51309efd46 Graceful error handling 2014-05-09 17:43:27 -07:00
Kohsuke Kawaguchi
60fe143b07 detect the common problem
If the caller tries to parse a pull event into a pull_request event, we'd choke with NPE. This change avoids that.
2014-04-30 13:27:37 -07:00
Kelly Campbell
3f921b69f6 Fix bug in GHMyself.getEmails due to API change 2014-04-25 22:55:45 -04:00
vr100
d2ac81d7ba Using builder pattern to list commits in a repo 2014-04-23 09:45:11 +05:30
Kohsuke Kawaguchi
ec664ab6a2 Merge pull request #83 from antonkrasov/master
add tarball_url and zipball_url to GHRelease
2014-04-19 11:50:39 -07:00
Anton Krasov
8818bf8cf0 add tarball_url and zipball_url to GHRelease 2014-04-18 17:28:51 +03:00
Kohsuke Kawaguchi
cc53e0c8ff [maven-release-plugin] prepare for next development iteration 2014-04-13 08:58:53 -07:00
Kohsuke Kawaguchi
8353499d18 [maven-release-plugin] prepare release github-api-1.51 2014-04-13 08:58:49 -07:00
Kohsuke Kawaguchi
d2c5994616 I always get this confused 2014-04-13 08:57:48 -07:00
Kohsuke Kawaguchi
500b9097f7 doc improvement 2014-04-13 08:53:00 -07:00
Kohsuke Kawaguchi
7993266e6e This is also useful for setting timeout 2014-04-13 08:51:58 -07:00
Kohsuke Kawaguchi
74090103a9 doc improvement 2014-04-13 08:48:16 -07:00
Kohsuke Kawaguchi
a18cde2340 Abstracted away HTTP connector and added OkHttp implementation for convenience 2014-04-13 08:46:21 -07:00
Kohsuke Kawaguchi
ee98e97876 Merge pull request #80 from rtyley/remove-member-of-org
Add support for removing a user from an Organisation
2014-04-13 08:22:23 -07:00
Kohsuke Kawaguchi
ff63bafd72 Merge pull request #82 from prazanna/master
Cast url.openConnection() to HttpURLConnection instead of HttpsURLConnec...
2014-04-13 08:22:00 -07:00
Prasanna Rajaperumal
3f8c8be77a Cast url.openConnection() to HttpURLConnection instead of HttpsURLConnection. Useful for enterprise githubs which does not have https set up. 2014-04-09 18:13:10 -07:00
Roberto Tyley
769cdc73e7 Add support for removing a user from an Organisation 2014-04-02 18:47:50 +01:00
Kohsuke Kawaguchi
cef8f74c00 Added LICENSE 2014-04-02 09:31:02 -07:00
Kohsuke Kawaguchi
9f5ab709de [maven-release-plugin] prepare for next development iteration 2014-03-28 10:59:51 -07:00
vr100
9c02f918c1 In order to handle http based github enterprise vm url, changing https to http 2014-03-26 09:23:26 +05:30
vr100
15c5c9615e Added pagesize parameter to 'Get commits by author and branch' api 2014-03-20 15:00:34 +05:30
vr100
0b74692d62 change in comment 2014-03-19 11:38:03 +05:30
vr100
8f24f55eb7 Added apis to list commits by author and list the repos of an organization (including the private ones) 2014-03-19 11:06:11 +05:30
17 changed files with 471 additions and 23 deletions

22
LICENSE.txt Normal file
View File

@@ -0,0 +1,22 @@
Copyright (c) 2011- Kohsuke Kawaguchi and other contributors
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

15
pom.xml
View File

@@ -7,7 +7,7 @@
</parent>
<artifactId>github-api</artifactId>
<version>1.50</version>
<version>1.52</version>
<name>GitHub API for Java</name>
<url>http://github-api.kohsuke.org/</url>
<description>GitHub API for Java</description>
@@ -92,6 +92,12 @@
<version>3.1.0.201310021548-r</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp</groupId>
<artifactId>okhttp</artifactId>
<version>1.5.3</version>
<optional>true</optional>
</dependency>
</dependencies>
<repositories>
<repository>
@@ -115,4 +121,11 @@
</plugins>
</reporting>
<licenses>
<license>
<name>The MIT license</name>
<url>http://www.opensource.org/licenses/mit-license.php</url>
<distribution>repo</distribution>
</license>
</licenses>
</project>

View File

@@ -0,0 +1,105 @@
package org.kohsuke.github;
import java.util.Date;
/**
* Builds up query for listing commits.
*
* <p>
* Call various methods that set the filter criteria, then {@link #list()} method to actually list up the commit.
*
* <pre>
* GHRepository r = ...;
* for (GHCommit c : r.queryCommits().since(x).until(y).author("kohsuke")) {
* ...
* }
* </pre>
*
* @author Kohsuke Kawaguchi
* @see GHRepository#queryCommits()
*/
public class GHCommitQueryBuilder {
private final Requester req;
private final GHRepository repo;
/*package*/ GHCommitQueryBuilder(GHRepository repo) {
this.repo = repo;
this.req = repo.root.retrieve(); // requester to build up
}
/**
* GItHub login or email address by which to filter by commit author.
*/
public GHCommitQueryBuilder author(String author) {
req.with("author",author);
return this;
}
/**
* Only commits containing this file path will be returned.
*/
public GHCommitQueryBuilder path(String path) {
req.with("path",path);
return this;
}
/**
* Specifies the SHA1 commit / tag / branch / etc to start listing commits from.
*
*/
public GHCommitQueryBuilder from(String ref) {
req.with("sha",ref);
return this;
}
public GHCommitQueryBuilder pageSize(int pageSize) {
req.with("per_page",pageSize);
return this;
}
/**
* Only commits after this date will be returned
*/
public GHCommitQueryBuilder since(Date dt) {
req.with("since",GitHub.printDate(dt));
return this;
}
/**
* Only commits after this date will be returned
*/
public GHCommitQueryBuilder since(long timestamp) {
return since(new Date(timestamp));
}
/**
* Only commits before this date will be returned
*/
public GHCommitQueryBuilder until(Date dt) {
req.with("until",GitHub.printDate(dt));
return this;
}
/**
* Only commits before this date will be returned
*/
public GHCommitQueryBuilder until(long timestamp) {
return until(new Date(timestamp));
}
/**
* Lists up the commits with the criteria built so far.
*/
public PagedIterable<GHCommit> list() {
return new PagedIterable<GHCommit>() {
public PagedIterator<GHCommit> iterator() {
return new PagedIterator<GHCommit>(req.asIterator(repo.getApiTailUrl("commits"), GHCommit[].class)) {
protected void wrapUp(GHCommit[] page) {
for (GHCommit c : page)
c.wrapUp(repo);
}
};
}
};
}
}

View File

@@ -0,0 +1,69 @@
/*
* The MIT License
*
* Copyright (c) 2010, Kohsuke Kawaguchi
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.kohsuke.github;
/**
* Represents an email of GitHub.
*
* @author Kelly Campbell
*/
public class GHEmail {
protected String email;
protected boolean primary;
protected boolean verified;
public String getEmail() {
return email;
}
public boolean isPrimary() {
return primary;
}
public boolean isVerified() {
return verified;
}
@Override
public String toString() {
return "Email:"+email;
}
@Override
public int hashCode() {
return email.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof GHEmail) {
GHEmail that = (GHEmail) obj;
return this.email.equals(that.email);
}
return false;
}
}

View File

@@ -51,6 +51,8 @@ public abstract class GHEventPayload {
@Override
void wrapUp(GitHub root) {
super.wrapUp(root);
if (pull_request==null)
throw new IllegalStateException("Expected pull_request payload, but got something else. Maybe we've got another type of event?");
if (repository!=null) {
repository.wrap(root);
pull_request.wrap(repository);

View File

@@ -1,6 +1,7 @@
package org.kohsuke.github;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
@@ -16,18 +17,31 @@ import java.util.TreeMap;
* @author Kohsuke Kawaguchi
*/
public class GHMyself extends GHUser {
/**
* @deprecated
* Use {@link #getEmails2()}
*/
public List<String> getEmails() throws IOException {
List<GHEmail> src = getEmails2();
List<String> r = new ArrayList<String>(src.size());
for (GHEmail e : src) {
r.add(e.getEmail());
}
return r;
}
/**
* Returns the read-only list of e-mail addresses configured for you.
*
* This corresponds to the stuff you configure in https://github.com/settings/emails,
* and not to be confused with {@link #getEmail()} that shows your public e-mail address
* set in https://github.com/settings/profile
*
*
* @return
* Always non-null.
*/
public List<String> getEmails() throws IOException {
String[] addresses = root.retrieve().to("/user/emails", String[].class);
public List<GHEmail> getEmails2() throws IOException {
GHEmail[] addresses = root.retrieve().to("/user/emails", GHEmail[].class);
return Collections.unmodifiableList(Arrays.asList(addresses));
}

View File

@@ -23,10 +23,15 @@ public class GHOrganization extends GHPerson {
* Newly created repository.
*/
public GHRepository createRepository(String name, String description, String homepage, String team, boolean isPublic) throws IOException {
return createRepository(name,description,homepage,getTeams().get(team),isPublic);
GHTeam t = getTeams().get(team);
if (t==null)
throw new IllegalArgumentException("No such team: "+team);
return createRepository(name,description,homepage,t,isPublic);
}
public GHRepository createRepository(String name, String description, String homepage, GHTeam team, boolean isPublic) throws IOException {
if (team==null)
throw new IllegalArgumentException("Invalid team");
// such API doesn't exist, so fall back to HTML scraping
return new Requester(root)
.with("name", name).with("description", description).with("homepage", homepage)
@@ -37,14 +42,41 @@ public class GHOrganization extends GHPerson {
* Teams by their names.
*/
public Map<String,GHTeam> getTeams() throws IOException {
GHTeam[] teams = root.retrieve().to("/orgs/" + login + "/teams", GHTeam[].class);
Map<String,GHTeam> r = new TreeMap<String, GHTeam>();
for (GHTeam t : teams) {
r.put(t.getName(),t.wrapUp(this));
for (GHTeam t : listTeams()) {
r.put(t.getName(),t);
}
return r;
}
/**
* List up all the teams.
*/
public PagedIterable<GHTeam> listTeams() throws IOException {
return new PagedIterable<GHTeam>() {
public PagedIterator<GHTeam> iterator() {
return new PagedIterator<GHTeam>(root.retrieve().asIterator(String.format("/orgs/%s/teams", login), GHTeam[].class)) {
@Override
protected void wrapUp(GHTeam[] page) {
for (GHTeam c : page)
c.wrapUp(GHOrganization.this);
}
};
}
};
}
/**
* Finds a team that has the given name in its {@link GHTeam#getName()}
*/
public GHTeam getTeamByName(String name) throws IOException {
for (GHTeam t : listTeams()) {
if(t.getName().equals(name))
return t;
}
return null;
}
/**
* Checks if this organization has the specified user as a member.
*/
@@ -57,6 +89,14 @@ public class GHOrganization extends GHPerson {
}
}
/**
* Remove a member of the organisation - which will remove them from
* all teams, and remove their access to the organizations repositories.
*/
public void remove(GHUser user) throws IOException {
root.retrieve().method("DELETE").to("/orgs/" + login + "/members/" + user.getLogin());
}
/**
* Checks if this organization has the specified user as a public member.
*/

View File

@@ -33,6 +33,7 @@ import java.util.Locale;
* A pull request.
*
* @author Kohsuke Kawaguchi
* @see GHRepository#getPullRequest(int)
*/
@SuppressWarnings({"UnusedDeclaration"})
public class GHPullRequest extends GHIssue {

View File

@@ -32,6 +32,8 @@ public class GHRelease {
private boolean prerelease;
private Date created_at;
private Date published_at;
private String tarball_url;
private String zipball_url;
public String getAssetsUrl() {
return assets_url;
@@ -153,6 +155,22 @@ public class GHRelease {
this.url = url;
}
public String getZipballUrl() {
return zipball_url;
}
public void setZipballUrl(String zipballUrl) {
this.zipball_url = zipballUrl;
}
public String getTarballUrl() {
return tarball_url;
}
public void setTarballUrl(String tarballUrl) {
this.tarball_url = tarballUrl;
}
GHRelease wrap(GHRepository owner) {
this.owner = owner;
this.root = owner.root;

View File

@@ -63,11 +63,11 @@ public class GHRepository {
private boolean has_issues, has_wiki, fork, has_downloads;
@JsonProperty("private")
private boolean _private;
private int watchers,forks,open_issues,size;
private int watchers,forks,open_issues,size,network_count,subscribers_count;
private String created_at, pushed_at;
private Map<Integer,GHMilestone> milestones = new HashMap<Integer, GHMilestone>();
private String master_branch,language;
private String default_branch,language;
private Map<String,GHCommit> commits = new HashMap<String, GHCommit>();
private GHRepoPermission permissions;
@@ -153,8 +153,9 @@ public class GHRepository {
public List<GHIssue> getIssues(GHIssueState state, GHMilestone milestone) throws IOException {
return Arrays.asList(GHIssue.wrap(root.retrieve()
.to(String.format("/repos/%s/%s/issues?state=%s&milestone=%s", owner.login, name,
state.toString().toLowerCase(), milestone == null ? "none" : "" + milestone.getNumber()),
GHIssue[].class), this));
state.toString().toLowerCase(), milestone == null ? "none" : "" + milestone.getNumber()),
GHIssue[].class
), this));
}
/**
@@ -219,6 +220,14 @@ public class GHRepository {
return open_issues;
}
public int getNetworkCount() {
return network_count;
}
public int getSubscribersCount() {
return subscribers_count;
}
/**
*
* @return
@@ -239,7 +248,7 @@ public class GHRepository {
* This field is null until the user explicitly configures the master branch.
*/
public String getMasterBranch() {
return master_branch;
return default_branch;
}
public int getSize() {
@@ -498,6 +507,13 @@ public class GHRepository {
};
}
/**
* Search commits by specifying filters through a builder pattern.
*/
public GHCommitQueryBuilder queryCommits() {
return new GHCommitQueryBuilder(this);
}
/**
* Lists up all the commit comments in this repository.
*/

View File

@@ -68,6 +68,8 @@ public class GitHub {
private final String apiUrl;
private HttpConnector connector = HttpConnector.DEFAULT;
/**
* Connects to GitHub.com
*/
@@ -201,6 +203,17 @@ public class GitHub {
return login==null && encodedAuthorization==null;
}
public HttpConnector getConnector() {
return connector;
}
/**
* Sets the custom connector used to make requests to GitHub.
*/
public void setConnector(HttpConnector connector) {
this.connector = connector;
}
/*package*/ void requireCredential() {
if (isAnonymous())
throw new IllegalStateException("This operation requires a credential but none is given to the GitHub constructor");
@@ -392,6 +405,10 @@ public class GitHub {
throw new IllegalStateException("Unable to parse the timestamp: "+timestamp);
}
/*package*/ static String printDate(Date dt) {
return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(dt);
}
/*package*/ static final ObjectMapper MAPPER = new ObjectMapper();
private static final String[] TIME_FORMATS = {"yyyy/MM/dd HH:mm:ss ZZZZ","yyyy-MM-dd'T'HH:mm:ss'Z'"};

View File

@@ -0,0 +1,29 @@
package org.kohsuke.github;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* Pluggability for customizing HTTP request behaviors or using altogether different library.
*
* <p>
* For example, you can implement this to st custom timeouts.
*
* @author Kohsuke Kawaguchi
*/
public interface HttpConnector {
/**
* Opens a connection to the given URL.
*/
HttpURLConnection connect(URL url) throws IOException;
/**
* Default implementation that uses {@link URL#openConnection()}.
*/
HttpConnector DEFAULT = new HttpConnector() {
public HttpURLConnection connect(URL url) throws IOException {
return (HttpURLConnection) url.openConnection();
}
};
}

View File

@@ -23,20 +23,21 @@
*/
package org.kohsuke.github;
import org.apache.commons.io.IOUtils;
import static org.kohsuke.github.GitHub.MAPPER;
import javax.net.ssl.HttpsURLConnection;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.InterruptedIOException;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -48,7 +49,7 @@ import java.util.NoSuchElementException;
import java.util.Set;
import java.util.zip.GZIPInputStream;
import static org.kohsuke.github.GitHub.MAPPER;
import org.apache.commons.io.IOUtils;
/**
* A builder pattern for making HTTP call and parsing its output.
@@ -209,9 +210,23 @@ class Requester {
*
* Every iterator call reports a new batch.
*/
/*package*/ <T> Iterator<T> asIterator(final String tailApiUrl, final Class<T> type) {
/*package*/ <T> Iterator<T> asIterator(String _tailApiUrl, final Class<T> type) {
method("GET");
if (!args.isEmpty()) throw new IllegalStateException();
if (!args.isEmpty()) {
boolean first=true;
try {
for (Entry a : args) {
_tailApiUrl += first ? '?' : '&';
first = false;
_tailApiUrl += URLEncoder.encode(a.key,"UTF-8")+'='+URLEncoder.encode(a.value.toString(),"UTF-8");
}
} catch (UnsupportedEncodingException e) {
throw new AssertionError(e); // UTF-8 is mandatory
}
}
final String tailApiUrl = _tailApiUrl;
return new Iterator<T>() {
/**
@@ -294,7 +309,7 @@ class Requester {
private HttpURLConnection setupConnection(URL url) throws IOException {
HttpsURLConnection uc = (HttpsURLConnection) url.openConnection();
HttpURLConnection uc = root.getConnector().connect(url);
// if the authentication is needed but no credential is given, try it anyway (so that some calls
// that do work with anonymous access in the reduced form should still work.)

View File

@@ -0,0 +1,31 @@
package org.kohsuke.github.extras;
import com.squareup.okhttp.OkHttpClient;
import org.kohsuke.github.HttpConnector;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* {@link HttpConnector} for {@link OkHttpClient}.
*
* Unlike {@link #DEFAULT}, OkHttp does response caching.
* Making a conditional request against GitHubAPI and receiving a 304
* response does not count against the rate limit.
* See http://developer.github.com/v3/#conditional-requests
*
* @author Roberto Tyley
* @author Kohsuke Kawaguchi
*/
public class OkHttpConnector implements HttpConnector {
private final OkHttpClient client;
public OkHttpConnector(OkHttpClient client) {
this.client = client;
}
public HttpURLConnection connect(URL url) throws IOException {
return client.open(url);
}
}

View File

@@ -7,6 +7,8 @@ operations that act on them as defined as methods (such as `GHUser.follow()`), a
are used in favor of using string handle (such as `GHUser.isMemberOf(GHOrganization)` instead of
`GHUser.isMemberOf(String)`)
The library supports both github.com and GitHub Enterprise.
There are some corners of the GitHub API that's not yet implemented, but
the library is implemented with the right abstractions and libraries to make it very easy to improve the coverage.
@@ -34,3 +36,10 @@ Alternatively, you can have just the OAuth token in this file:
oauth=4d98173f7c075527cb64878561d1fe70
OkHttp
----
This library comes with a pluggable connector to use different HTTP client implementations
through `HttpConnector`. In particular, this means you can use [OkHttp](http://square.github.io/okhttp/),
so we can make use of it's HTTP response cache.
Making a conditional request against the GitHub API and receiving a 304 response
[does not count against the rate limit](http://developer.github.com/v3/#conditional-requests).

View File

@@ -1,12 +1,23 @@
import org.kohsuke.github.GHOrganization;
import org.kohsuke.github.GHTeam;
import org.kohsuke.github.GitHub;
import java.util.Arrays;
import java.util.Map;
/**
* @author Kohsuke Kawaguchi
*/
public class Foo {
public static void main(String[] args) throws Exception {
System.out.println(GitHub.connect().getOrganization("cloudbees").getRepository("grandcentral").isPrivate());
GHOrganization org = GitHub.connect().getOrganization("jenkinsci");
Map<String, GHTeam> teams = org.getTeams();
System.out.println(teams.size());
int sz = 0;
for (GHTeam t : org.listTeams()) {
sz++;
}
System.out.println(sz);
}
}

View File

@@ -40,6 +40,14 @@ import org.kohsuke.github.GHUser;
import org.kohsuke.github.GitHub;
import org.kohsuke.github.PagedIterable;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import java.util.List;
/**
* Unit test for simple App.
*/
@@ -252,13 +260,30 @@ public class AppTest {
Set<String> members = gitHub.getOrganization("jenkinsci").getRepository("violations-plugin").getCollaboratorNames();
System.out.println(members.contains("kohsuke"));
}
@Test
public void testMemberOrgs() throws Exception {
Set<GHOrganization> o = gitHub.getUser("kohsuke").getOrganizations();
System.out.println(o);
}
@Test
public void testOrgTeams() throws Exception {
kohsuke();
int sz=0;
for (GHTeam t : gitHub.getOrganization("jenkinsci").listTeams()) {
assertNotNull(t.getName());
sz++;
}
assertTrue(sz>1000);
}
public void testOrgTeamByName() throws Exception {
kohsuke();
GHTeam e = gitHub.getOrganization("jenkinsci").getTeamByName("Everyone");
assertNotNull(e);
}
@Test
public void testCommit() throws Exception {
GHCommit commit = gitHub.getUser("jenkinsci").getRepository("jenkins").getCommit("08c1c9970af4d609ae754fbe803e06186e3206f7");
@@ -279,8 +304,19 @@ public class AppTest {
System.out.println(c.getSHA1());
sha1.add(c.getSHA1());
}
assertEquals("fdfad6be4db6f96faea1f153fb447b479a7a9cb7",sha1.get(0));
assertEquals(1,sha1.size());
assertEquals("fdfad6be4db6f96faea1f153fb447b479a7a9cb7", sha1.get(0));
assertEquals(1, sha1.size());
}
public void testQueryCommits() throws Exception {
List<String> sha1 = new ArrayList<String>();
for (GHCommit c : gitHub.getUser("jenkinsci").getRepository("jenkins").queryCommits()
.since(new Date(1199174400000L)).until(1201852800000L).path("pom.xml").list()) {
System.out.println(c.getSHA1());
sha1.add(c.getSHA1());
}
assertEquals("1cccddb22e305397151b2b7b87b4b47d74ca337b",sha1.get(0));
assertEquals(29,sha1.size());
}
@Test