Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Sawicki2012-09-21 13:19:29 -0400
committerKevin Sawicki2012-09-21 13:19:29 -0400
commitdd6352a5ac8d828940d936d11eb994bb22a26141 (patch)
tree483c65b089df5e70c43bef64c46afc55a4b07e69
parent31db368a6df1960fe9f27abfe1454460de4c030e (diff)
downloadegit-github-dd6352a5ac8d828940d936d11eb994bb22a26141.tar.gz
egit-github-dd6352a5ac8d828940d936d11eb994bb22a26141.tar.xz
egit-github-dd6352a5ac8d828940d936d11eb994bb22a26141.zip
Add service support for commit status API
-rw-r--r--org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/CommitServiceTest.java120
-rw-r--r--org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/CommitStatus.java188
-rw-r--r--org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/IGitHubConstants.java2
-rw-r--r--org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/CommitService.java64
4 files changed, 374 insertions, 0 deletions
diff --git a/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/CommitServiceTest.java b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/CommitServiceTest.java
index c7b83675..13e0116a 100644
--- a/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/CommitServiceTest.java
+++ b/org.eclipse.egit.github.core.tests/src/org/eclipse/egit/github/core/tests/CommitServiceTest.java
@@ -18,8 +18,11 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import org.eclipse.egit.github.core.CommitComment;
+import org.eclipse.egit.github.core.CommitStatus;
import org.eclipse.egit.github.core.RepositoryCommit;
import org.eclipse.egit.github.core.RepositoryId;
import org.eclipse.egit.github.core.client.GitHubClient;
@@ -312,4 +315,121 @@ public class CommitServiceTest {
request.setUri("/repos/o/n/compare/v1...HEAD");
verify(client).get(request);
}
+
+ /**
+ * Get statuses
+ *
+ * @throws IOException
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void getStatusesNullRepository() throws IOException {
+ service.getStatuses(null, "123");
+ }
+
+ /**
+ * Get statuses
+ *
+ * @throws IOException
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void getStatusesNullSha() throws IOException {
+ service.getStatuses(new RepositoryId("o", "n"), null);
+ }
+
+ /**
+ * Get statuses
+ *
+ * @throws IOException
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void getStatusesEmptySha() throws IOException {
+ service.getStatuses(new RepositoryId("o", "n"), "");
+ }
+
+ /**
+ * Get statuses
+ *
+ * @throws IOException
+ */
+ @Test
+ public void getStatuses() throws IOException {
+ RepositoryId repo = new RepositoryId("o", "n");
+ service.getStatuses(repo, "123");
+ GitHubRequest request = new GitHubRequest();
+ request.setUri(Utils.page("/repos/o/n/statuses/123"));
+ verify(client).get(request);
+ }
+
+ /**
+ * Create status
+ *
+ * @throws IOException
+ */
+ @Test
+ public void createStatus() throws IOException {
+ RepositoryId repo = new RepositoryId("o", "n");
+ CommitStatus status = new CommitStatus();
+ status.setDescription("description");
+ status.setTargetUrl("http://target/url");
+ status.setState("success");
+ service.createStatus(repo, "123", status);
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("description", status.getDescription());
+ params.put("target_url", status.getTargetUrl());
+ params.put("state", status.getState());
+ verify(client).post("/repos/o/n/statuses/123", params,
+ CommitStatus.class);
+ }
+
+ /**
+ * Create status
+ *
+ * @throws IOException
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void createStatusNullRepository() throws IOException {
+ CommitStatus status = new CommitStatus();
+ status.setDescription("description");
+ status.setTargetUrl("http://target/url");
+ status.setState("success");
+ service.createStatus(null, "123", status);
+ }
+
+ /**
+ * Create status
+ *
+ * @throws IOException
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void createStatusNullSha() throws IOException {
+ CommitStatus status = new CommitStatus();
+ status.setDescription("description");
+ status.setTargetUrl("http://target/url");
+ status.setState("success");
+ service.createStatus(new RepositoryId("o", "n"), null, status);
+ }
+
+ /**
+ * Create status
+ *
+ * @throws IOException
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void createStatusEmptySha() throws IOException {
+ CommitStatus status = new CommitStatus();
+ status.setDescription("description");
+ status.setTargetUrl("http://target/url");
+ status.setState("success");
+ service.createStatus(new RepositoryId("o", "n"), "", status);
+ }
+
+ /**
+ * Create status
+ *
+ * @throws IOException
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void createStatusNullStatus() throws IOException {
+ service.createStatus(new RepositoryId("o", "n"), "123", null);
+ }
}
diff --git a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/CommitStatus.java b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/CommitStatus.java
new file mode 100644
index 00000000..fde7bdbb
--- /dev/null
+++ b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/CommitStatus.java
@@ -0,0 +1,188 @@
+/******************************************************************************
+ * Copyright (c) 2012 GitHub Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Kevin Sawicki (GitHub Inc.) - initial API and implementation
+ *****************************************************************************/
+package org.eclipse.egit.github.core;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import org.eclipse.egit.github.core.util.DateUtils;
+
+/**
+ * Status of a commit in a repository
+ */
+public class CommitStatus implements Serializable {
+
+ private static final long serialVersionUID = -7701789812780758070L;
+
+ /**
+ * Error state
+ */
+ public static final String STATE_ERROR = "error"; //$NON-NLS-1$
+
+ /**
+ * Failure state
+ */
+ public static final String STATE_FAILURE = "failure"; //$NON-NLS-1$
+
+ /**
+ * Pending state
+ */
+ public static final String STATE_PENDING = "pending"; //$NON-NLS-1$
+
+ /**
+ * Success state
+ */
+ public static final String STATE_SUCCESS = "success"; //$NON-NLS-1$
+
+ private Date createdAt;
+
+ private Date updatedAt;
+
+ private long id;
+
+ private String description;
+
+ private String state;
+
+ private String targetUrl;
+
+ private String url;
+
+ private User creator;
+
+ /**
+ * @return createdAt
+ */
+ public Date getCreatedAt() {
+ return DateUtils.clone(createdAt);
+ }
+
+ /**
+ * @param createdAt
+ * @return this status
+ */
+ public CommitStatus setCreatedAt(final Date createdAt) {
+ this.createdAt = DateUtils.clone(createdAt);
+ return this;
+ }
+
+ /**
+ * @return updatedAt
+ */
+ public Date getUpdatedAt() {
+ return DateUtils.clone(updatedAt);
+ }
+
+ /**
+ * @param updatedAt
+ * @return this status
+ */
+ public CommitStatus setUpdatedAt(final Date updatedAt) {
+ this.updatedAt = DateUtils.clone(updatedAt);
+ return this;
+ }
+
+ /**
+ * @return id
+ */
+ public long getId() {
+ return id;
+ }
+
+ /**
+ * @param id
+ * @return this status
+ */
+ public CommitStatus setId(final long id) {
+ this.id = id;
+ return this;
+ }
+
+ /**
+ * @return description
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * @param description
+ * @return this status
+ */
+ public CommitStatus setDescription(final String description) {
+ this.description = description;
+ return this;
+ }
+
+ /**
+ * @return state
+ */
+ public String getState() {
+ return state;
+ }
+
+ /**
+ * @param state
+ * @return this status
+ */
+ public CommitStatus setState(final String state) {
+ this.state = state;
+ return this;
+ }
+
+ /**
+ * @return targetUrl
+ */
+ public String getTargetUrl() {
+ return targetUrl;
+ }
+
+ /**
+ * @param targetUrl
+ * @return this status
+ */
+ public CommitStatus setTargetUrl(final String targetUrl) {
+ this.targetUrl = targetUrl;
+ return this;
+ }
+
+ /**
+ * @return url
+ */
+ public String getUrl() {
+ return url;
+ }
+
+ /**
+ * @param url
+ * @return this status
+ */
+ public CommitStatus setUrl(final String url) {
+ this.url = url;
+ return this;
+ }
+
+ /**
+ * @return creator
+ */
+ public User getCreator() {
+ return creator;
+ }
+
+ /**
+ * @param creator
+ * @return this status
+ */
+ public CommitStatus setCreator(final User creator) {
+ this.creator = creator;
+ return this;
+ }
+}
diff --git a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/IGitHubConstants.java b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/IGitHubConstants.java
index 62cabd83..6f96923e 100644
--- a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/IGitHubConstants.java
+++ b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/client/IGitHubConstants.java
@@ -157,6 +157,8 @@ public interface IGitHubConstants {
/** */
String SEGMENT_STARRED = "/starred"; //$NON-NLS-1$
/** */
+ String SEGMENT_STATUSES = "/statuses"; //$NON-NLS-1$
+ /** */
String SEGMENT_TAGS = "/tags"; //$NON-NLS-1$
/** */
String SEGMENT_TEAMS = "/teams"; //$NON-NLS-1$
diff --git a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/CommitService.java b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/CommitService.java
index 63332f62..dc0fa479 100644
--- a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/CommitService.java
+++ b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/CommitService.java
@@ -14,6 +14,7 @@ import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_COMME
import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_COMMITS;
import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_COMPARE;
import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_REPOS;
+import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_STATUSES;
import static org.eclipse.egit.github.core.client.PagedRequest.PAGE_FIRST;
import static org.eclipse.egit.github.core.client.PagedRequest.PAGE_SIZE;
@@ -25,6 +26,7 @@ import java.util.List;
import java.util.Map;
import org.eclipse.egit.github.core.CommitComment;
+import org.eclipse.egit.github.core.CommitStatus;
import org.eclipse.egit.github.core.IRepositoryIdProvider;
import org.eclipse.egit.github.core.RepositoryCommit;
import org.eclipse.egit.github.core.RepositoryCommitCompare;
@@ -361,4 +363,66 @@ public class CommitService extends GitHubService {
request.setUri(uri);
return (RepositoryCommitCompare) client.get(request).getBody();
}
+
+ /**
+ * Get statuses for commit SHA-1
+ *
+ * @param repository
+ * @param sha
+ * @return list of statuses
+ * @throws IOException
+ */
+ public List<CommitStatus> getStatuses(IRepositoryIdProvider repository,
+ String sha) throws IOException {
+ String id = getId(repository);
+ if (sha == null)
+ throw new IllegalArgumentException("SHA-1 cannot be null"); //$NON-NLS-1$
+ if (sha.length() == 0)
+ throw new IllegalArgumentException("SHA-1 cannot be empty"); //$NON-NLS-1$
+
+ StringBuilder uri = new StringBuilder(SEGMENT_REPOS);
+ uri.append('/').append(id);
+ uri.append(SEGMENT_STATUSES);
+ uri.append('/').append(sha);
+ PagedRequest<CommitStatus> request = createPagedRequest();
+ request.setType(new TypeToken<List<CommitStatus>>() {
+ }.getType());
+ request.setUri(uri);
+ return getAll(request);
+ }
+
+ /**
+ * Create status for commit SHA-1
+ *
+ * @param repository
+ * @param sha
+ * @param status
+ * @return created status
+ * @throws IOException
+ */
+ public CommitStatus createStatus(IRepositoryIdProvider repository,
+ String sha, CommitStatus status) throws IOException {
+ String id = getId(repository);
+ if (sha == null)
+ throw new IllegalArgumentException("SHA-1 cannot be null"); //$NON-NLS-1$
+ if (sha.length() == 0)
+ throw new IllegalArgumentException("SHA-1 cannot be empty"); //$NON-NLS-1$
+ if (status == null)
+ throw new IllegalArgumentException("Status cannot be null"); //$NON-NLS-1$
+
+ Map<String, String> params = new HashMap<String, String>(3, 1);
+ if (status.getState() != null)
+ params.put("state", status.getState());
+ if (status.getTargetUrl() != null)
+ params.put("target_url", status.getTargetUrl());
+ if (status.getDescription() != null)
+ params.put("description", status.getDescription());
+
+ StringBuilder uri = new StringBuilder(SEGMENT_REPOS);
+ uri.append('/').append(id);
+ uri.append(SEGMENT_STATUSES);
+ uri.append('/').append(sha);
+
+ return client.post(uri.toString(), params, CommitStatus.class);
+ }
}

Back to the top