diff --git a/pom.xml b/pom.xml
index fffadeffd9..bc4e873120 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
github-api
- 1.89
+ 1.90
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.89
+ github-api-1.90
@@ -64,7 +64,7 @@
com.infradna.tool
bridge-method-injector
- 1.14
+ 1.18
@@ -108,7 +108,7 @@
junit
junit
- 4.11
+ 4.12
test
@@ -120,7 +120,7 @@
com.fasterxml.jackson.core
jackson-databind
- 2.2.3
+ 2.9.2
commons-io
@@ -130,7 +130,7 @@
com.infradna.tool
bridge-method-annotation
- 1.14
+ 1.17
org.kohsuke.stapler
@@ -141,7 +141,7 @@
org.eclipse.jgit
org.eclipse.jgit
- 3.1.0.201310021548-r
+ 4.9.0.201710071750-r
test
@@ -153,25 +153,25 @@
com.squareup.okhttp3
okhttp-urlconnection
- 3.4.0
+ 3.9.0
true
org.kohsuke
wordnet-random-name
- 1.2
+ 1.3
test
org.mockito
mockito-all
- 1.9.5
+ 1.10.19
test
com.google.code.findbugs
annotations
- 3.0.0
+ 3.0.1
provided
diff --git a/src/main/java/org/kohsuke/github/GHDeployment.java b/src/main/java/org/kohsuke/github/GHDeployment.java
index 0cef10ee52..42118f3329 100644
--- a/src/main/java/org/kohsuke/github/GHDeployment.java
+++ b/src/main/java/org/kohsuke/github/GHDeployment.java
@@ -3,6 +3,13 @@
import java.io.IOException;
import java.net.URL;
+/**
+ * Represents a deployment
+ *
+ * @see documentation
+ * @see GHRepository#listDeployments(String, String, String, String)
+ * @see GHRepository#getDeployment(long)
+ */
public class GHDeployment extends GHObject {
private GHRepository owner;
private GitHub root;
@@ -58,4 +65,23 @@ public String getSha(){
public URL getHtmlUrl() {
return null;
}
+
+ public GHDeploymentStatusBuilder createStatus(GHDeploymentState state) {
+ return new GHDeploymentStatusBuilder(owner,id,state);
+ }
+
+ public PagedIterable listStatuses() {
+ return new PagedIterable() {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(root.retrieve().asIterator(statuses_url, GHDeploymentStatus[].class, pageSize)) {
+ @Override
+ protected void wrapUp(GHDeploymentStatus[] page) {
+ for (GHDeploymentStatus c : page)
+ c.wrap(owner);
+ }
+ };
+ }
+ };
+ }
+
}
diff --git a/src/main/java/org/kohsuke/github/GHDeploymentStatusBuilder.java b/src/main/java/org/kohsuke/github/GHDeploymentStatusBuilder.java
index f028b6f889..821a3e744e 100644
--- a/src/main/java/org/kohsuke/github/GHDeploymentStatusBuilder.java
+++ b/src/main/java/org/kohsuke/github/GHDeploymentStatusBuilder.java
@@ -2,12 +2,26 @@
import java.io.IOException;
+/**
+ * Creates a new deployment status.
+ *
+ * @see
+ * GHDeployment#createStatus(GHDeploymentState)
+ */
public class GHDeploymentStatusBuilder {
private final Requester builder;
private GHRepository repo;
- private int deploymentId;
+ private long deploymentId;
+ /**
+ * @deprecated
+ * Use {@link GHDeployment#createStatus(GHDeploymentState)}
+ */
public GHDeploymentStatusBuilder(GHRepository repo, int deploymentId, GHDeploymentState state) {
+ this(repo,(long)deploymentId,state);
+ }
+
+ /*package*/ GHDeploymentStatusBuilder(GHRepository repo, long deploymentId, GHDeploymentState state) {
this.repo = repo;
this.deploymentId = deploymentId;
this.builder = new Requester(repo.root);
@@ -25,6 +39,6 @@ public GHDeploymentStatusBuilder targetUrl(String targetUrl) {
}
public GHDeploymentStatus create() throws IOException {
- return builder.to(repo.getApiTailUrl("deployments")+"/"+deploymentId+"/statuses",GHDeploymentStatus.class).wrap(repo);
+ return builder.to(repo.getApiTailUrl("deployments/"+deploymentId+"/statuses"),GHDeploymentStatus.class).wrap(repo);
}
}
diff --git a/src/main/java/org/kohsuke/github/GHIssue.java b/src/main/java/org/kohsuke/github/GHIssue.java
index 6b416ca1d3..117c06f8d8 100644
--- a/src/main/java/org/kohsuke/github/GHIssue.java
+++ b/src/main/java/org/kohsuke/github/GHIssue.java
@@ -68,6 +68,7 @@ public class GHIssue extends GHObject implements Reactable{
protected GHIssue.PullRequest pull_request;
protected GHMilestone milestone;
protected GHUser closed_by;
+ protected boolean locked;
/**
* @deprecated use {@link GHLabel}
@@ -129,6 +130,10 @@ public String getTitle() {
return title;
}
+ public boolean isLocked() {
+ return locked;
+ }
+
public GHIssueState getState() {
return Enum.valueOf(GHIssueState.class, state.toUpperCase(Locale.ENGLISH));
}
@@ -148,6 +153,14 @@ public URL getApiURL(){
return GitHub.parseURL(url);
}
+ public void lock() throws IOException {
+ new Requester(root).method("PUT").to(getApiRoute()+"/lock");
+ }
+
+ public void unlock() throws IOException {
+ new Requester(root).method("PUT").to(getApiRoute()+"/lock");
+ }
+
/**
* Updates the issue by adding a comment.
*
diff --git a/src/main/java/org/kohsuke/github/GHLabel.java b/src/main/java/org/kohsuke/github/GHLabel.java
index 5d1b3b48a2..3792fdcca3 100644
--- a/src/main/java/org/kohsuke/github/GHLabel.java
+++ b/src/main/java/org/kohsuke/github/GHLabel.java
@@ -34,4 +34,12 @@ public String getColor() {
public void delete() throws IOException {
repo.root.retrieve().method("DELETE").to(url);
}
+
+ /**
+ * @param newColor
+ * 6-letter hex color code, like "f29513"
+ */
+ public void setColor(String newColor) throws IOException {
+ repo.root.retrieve().method("PATCH").with("name", name).with("color", newColor).to(url);
+ }
}
diff --git a/src/main/java/org/kohsuke/github/GHObject.java b/src/main/java/org/kohsuke/github/GHObject.java
index 96e41a2559..3b26ed77cc 100644
--- a/src/main/java/org/kohsuke/github/GHObject.java
+++ b/src/main/java/org/kohsuke/github/GHObject.java
@@ -25,7 +25,7 @@ public abstract class GHObject {
protected Map> responseHeaderFields;
protected String url;
- protected int id;
+ protected long id;
protected String created_at;
protected String updated_at;
@@ -84,14 +84,18 @@ public Date getUpdatedAt() throws IOException {
/**
* Unique ID number of this resource.
*/
- @WithBridgeMethods(value=String.class, adapterMethod="intToString")
- public int getId() {
+ @WithBridgeMethods(value={String.class,int.class}, adapterMethod="longToStringOrInt")
+ public long getId() {
return id;
}
@SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD", justification = "Bridge method of getId")
- private Object intToString(int id, Class type) {
- return String.valueOf(id);
+ private Object longToStringOrInt(long id, Class type) {
+ if (type==String.class)
+ return String.valueOf(id);
+ if (type==int.class)
+ return (int)id;
+ throw new AssertionError("Unexpected type: "+type);
}
@SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD", justification = "Bridge method of getHtmlUrl")
diff --git a/src/main/java/org/kohsuke/github/GHPullRequest.java b/src/main/java/org/kohsuke/github/GHPullRequest.java
index 6e1a5d90e5..9342623829 100644
--- a/src/main/java/org/kohsuke/github/GHPullRequest.java
+++ b/src/main/java/org/kohsuke/github/GHPullRequest.java
@@ -50,8 +50,8 @@ public class GHPullRequest extends GHIssue {
// details that are only available when obtained from ID
private GHUser merged_by;
- private int review_comments, additions;
- private boolean merged;
+ private int review_comments, additions, commits;
+ private boolean merged, maintainer_can_modify;
private Boolean mergeable;
private int deletions;
private String mergeable_state;
@@ -167,11 +167,21 @@ public int getAdditions() throws IOException {
return additions;
}
+ public int getCommits() throws IOException {
+ populate();
+ return commits;
+ }
+
public boolean isMerged() throws IOException {
populate();
return merged;
}
+ public boolean canMaintainerModify() throws IOException {
+ populate();
+ return maintainer_can_modify;
+ }
+
public Boolean getMergeable() throws IOException {
populate();
return mergeable;
diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java
index 29cac80d44..4dfd1397bc 100644
--- a/src/main/java/org/kohsuke/github/GHRepository.java
+++ b/src/main/java/org/kohsuke/github/GHRepository.java
@@ -95,18 +95,12 @@ public GHDeploymentBuilder createDeployment(String ref) {
return new GHDeploymentBuilder(this,ref);
}
- public PagedIterable getDeploymentStatuses(final int id) {
- return new PagedIterable() {
- 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)
- c.wrap(GHRepository.this);
- }
- };
- }
- };
+ /**
+ * @deprecated
+ * Use {@code getDeployment(id).listStatuses()}
+ */
+ public PagedIterable getDeploymentStatuses(final int id) throws IOException {
+ return getDeployment(id).listStatuses();
}
public PagedIterable listDeployments(String sha,String ref,String task,String environment){
@@ -123,7 +117,13 @@ protected void wrapUp(GHDeployment[] page) {
};
}
};
+ }
+ /**
+ * Obtains a single {@link GHDeployment} by its ID.
+ */
+ public GHDeployment getDeployment(long id) throws IOException {
+ return root.retrieve().to("deployments/" + id, GHDeployment.class).wrap(this);
}
private String join(List params, String joinStr) {
@@ -140,8 +140,12 @@ private String getParam(String name, String value) {
return StringUtils.trimToNull(value)== null? null: name+"="+value;
}
- public GHDeploymentStatusBuilder createDeployStatus(int deploymentId, GHDeploymentState ghDeploymentState) {
- return new GHDeploymentStatusBuilder(this,deploymentId,ghDeploymentState);
+ /**
+ * @deprecated
+ * Use {@code getDeployment(deploymentId).createStatus(ghDeploymentState)}
+ */
+ public GHDeploymentStatusBuilder createDeployStatus(int deploymentId, GHDeploymentState ghDeploymentState) throws IOException {
+ return getDeployment(deploymentId).createStatus(ghDeploymentState);
}
private static class GHRepoPermission {
diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java
index 62c1b4e80c..67fc1f8fe4 100644
--- a/src/main/java/org/kohsuke/github/GitHub.java
+++ b/src/main/java/org/kohsuke/github/GitHub.java
@@ -166,6 +166,16 @@ public static GitHub connect() throws IOException {
return GitHubBuilder.fromCredentials().build();
}
+ /**
+ * Version that connects to GitHub Enterprise.
+ *
+ * @deprecated
+ * Use {@link #connectToEnterpriseWithOAuth(String, String, String)}
+ */
+ public static GitHub connectToEnterprise(String apiUrl, String oauthAccessToken) throws IOException {
+ return connectToEnterpriseWithOAuth(apiUrl,null,oauthAccessToken);
+ }
+
/**
* Version that connects to GitHub Enterprise.
*
@@ -174,10 +184,16 @@ public static GitHub connect() throws IOException {
* "http://ghe.acme.com/api/v3". Note that GitHub Enterprise has /api/v3 in the URL.
* For historical reasons, this parameter still accepts the bare domain name, but that's considered deprecated.
*/
- public static GitHub connectToEnterprise(String apiUrl, String oauthAccessToken) throws IOException {
- return new GitHubBuilder().withEndpoint(apiUrl).withOAuthToken(oauthAccessToken).build();
+ public static GitHub connectToEnterpriseWithOAuth(String apiUrl, String login, String oauthAccessToken) throws IOException {
+ return new GitHubBuilder().withEndpoint(apiUrl).withOAuthToken(oauthAccessToken, login).build();
}
+ /**
+ * Version that connects to GitHub Enterprise.
+ *
+ * @deprecated
+ * Use with caution. Login with password is not a preferred method.
+ */
public static GitHub connectToEnterprise(String apiUrl, String login, String password) throws IOException {
return new GitHubBuilder().withEndpoint(apiUrl).withPassword(login, password).build();
}
@@ -793,7 +809,7 @@ public PagedIterable listAllPublicRepositories() {
* This provides a dump of every public repository, in the order that they were created.
*
* @param since
- * The integer ID of the last Repository that you’ve seen. See {@link GHRepository#getId()}
+ * The numeric ID of the last Repository that you’ve seen. See {@link GHRepository#getId()}
* @see documentation
*/
public PagedIterable listAllPublicRepositories(final String since) {
diff --git a/src/main/java/org/kohsuke/github/GitHubBuilder.java b/src/main/java/org/kohsuke/github/GitHubBuilder.java
index 62a99a6272..e54359892c 100644
--- a/src/main/java/org/kohsuke/github/GitHubBuilder.java
+++ b/src/main/java/org/kohsuke/github/GitHubBuilder.java
@@ -154,6 +154,12 @@ public static GitHubBuilder fromProperties(Properties props) {
return self;
}
+ /**
+ * @param endpoint
+ * The URL of GitHub (or GitHub enterprise) API endpoint, such as "https://api.github.com" or
+ * "http://ghe.acme.com/api/v3". Note that GitHub Enterprise has /api/v3 in the URL.
+ * For historical reasons, this parameter still accepts the bare domain name, but that's considered deprecated.
+ */
public GitHubBuilder withEndpoint(String endpoint) {
this.endpoint = endpoint;
return this;
diff --git a/src/test/java/org/kohsuke/github/AppTest.java b/src/test/java/org/kohsuke/github/AppTest.java
index 7087920dd7..e069a74edb 100755
--- a/src/test/java/org/kohsuke/github/AppTest.java
+++ b/src/test/java/org/kohsuke/github/AppTest.java
@@ -134,10 +134,10 @@ public void testGetDeploymentStatuses() throws IOException {
.description("question")
.payload("{\"user\":\"atmos\",\"room_id\":123456}")
.create();
- GHDeploymentStatus ghDeploymentStatus = repository.createDeployStatus(deployment.getId(), GHDeploymentState.SUCCESS)
+ GHDeploymentStatus ghDeploymentStatus = deployment.createStatus(GHDeploymentState.SUCCESS)
.description("success")
.targetUrl("http://www.github.com").create();
- Iterable deploymentStatuses = repository.getDeploymentStatuses(deployment.getId());
+ Iterable deploymentStatuses = deployment.listStatuses();
assertNotNull(deploymentStatuses);
assertEquals(1,Iterables.size(deploymentStatuses));
assertEquals(ghDeploymentStatus.getId(), Iterables.get(deploymentStatuses, 0).getId());
@@ -753,6 +753,10 @@ public void testRepoLabel() throws IOException {
assertEquals(t.getColor(), "123456");
assertEquals(t.getColor(), t2.getColor());
assertEquals(t.getUrl(), t2.getUrl());
+
+ t.setColor("000000");
+ GHLabel t3 = r.getLabel("test");
+ assertEquals(t3.getColor(), "000000");
t.delete();
}
}
@@ -784,7 +788,7 @@ public void testListAllRepositories() throws Exception {
GHRepository r = itr.next();
System.out.println(r.getFullName());
assertNotNull(r.getUrl());
- assertNotEquals(0,r.getId());
+ assertNotEquals(0L,r.getId());
}
}