diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java
index fed6ef31b1..7cadf9724e 100644
--- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java
+++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java
@@ -91,6 +91,7 @@ import javax.ws.rs.core.GenericEntity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.StreamingOutput;
import javax.ws.rs.core.UriInfo;
@@ -409,7 +410,6 @@ public class RepositoryResource
*
500 internal server error
*
*
- * @param request the current request
* @param type the type of the repository
* @param name the name of the repository
*
@@ -438,6 +438,73 @@ public class RepositoryResource
return response;
}
+ /**
+ * Returns the {@link Changeset} from the given repository
+ * with the specified revision.
+ *
+ * Status codes:
+ *
+ * - 200 get successful
+ * - 400 bad request, the changeset feature is not
+ * supported by this type of repositories.
+ * - 404 not found, if the repository or
+ * the revision could not be found
+ * - 500 internal server error
+ *
+ *
+ * @param id the id of the repository
+ * @param revision the revision of the changeset
+ *
+ * @return a {@link Changeset} from the given repository
+ *
+ * @throws IOException
+ * @throws RepositoryException
+ */
+ @GET
+ @Path("{id}/changeset/{revision}")
+ public Response getChangeset(@PathParam("id") String id,
+ @PathParam("revision") String revision)
+ throws IOException, RepositoryException
+ {
+ Response response = null;
+
+ if (Util.isNotEmpty(id) && Util.isNotEmpty(revision))
+ {
+ try
+ {
+ Changeset changeset = changesetViewerUtil.getChangeset(id, revision);
+
+ if (changeset != null)
+ {
+ response = Response.ok(changeset).build();
+ }
+ else
+ {
+ response = Response.status(Status.NOT_FOUND).build();
+ }
+ }
+ catch (RepositoryNotFoundException ex)
+ {
+ response = Response.status(Response.Status.NOT_FOUND).build();
+ }
+ catch (NotSupportedFeatuerException ex)
+ {
+ response = Response.status(Response.Status.BAD_REQUEST).build();
+ }
+ }
+ else
+ {
+ if (logger.isWarnEnabled())
+ {
+ logger.warn("id or revision is empty");
+ }
+
+ response = Response.status(Status.BAD_REQUEST).build();
+ }
+
+ return response;
+ }
+
/**
* Returns a list of {@link Changeset} for the given repository.
*