diff options
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); + } } |