From 54af2104d6ea4a6343c3bdd082e9906e595130a7 Mon Sep 17 00:00:00 2001 From: Mohamed Karray Date: Mon, 29 Oct 2018 16:55:53 +0100 Subject: [PATCH] flexible getting of a unique hg changeset --- .../scm/api/v2/resources/ChangesetRootResource.java | 12 ++++++++---- .../api/v2/resources/ChangesetRootResourceTest.java | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java index 8900183f5b..57c0bb8712 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java @@ -12,7 +12,6 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryNotFoundException; import sonia.scm.repository.RepositoryPermissions; import sonia.scm.repository.RevisionNotFoundException; -import sonia.scm.repository.api.LogCommandBuilder; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.web.VndMediaType; @@ -26,6 +25,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import java.io.IOException; +import java.util.Optional; @Slf4j @@ -89,7 +89,7 @@ public class ChangesetRootResource { @Produces(VndMediaType.CHANGESET) @TypeHint(ChangesetDto.class) @Path("{id}") - public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("id") String id) throws IOException, RevisionNotFoundException, RepositoryNotFoundException { + public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("id") String id) throws IOException { try (RepositoryService repositoryService = serviceFactory.create(new NamespaceAndName(namespace, name))) { Repository repository = repositoryService.getRepository(); RepositoryPermissions.read(repository).check(); @@ -97,8 +97,12 @@ public class ChangesetRootResource { .setStartChangeset(id) .setEndChangeset(id) .getChangesets(); - if (changesets != null && changesets.getChangesets() != null && changesets.getChangesets().size() == 1) { - return Response.ok(changesetToChangesetDtoMapper.map(changesets.getChangesets().get(0), repository)).build(); + if (changesets != null && changesets.getChangesets() != null && !changesets.getChangesets().isEmpty()) { + Optional changeset = changesets.getChangesets().stream().filter(ch -> ch.getId().equals(id)).findFirst(); + if (!changeset.isPresent()) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + return Response.ok(changesetToChangesetDtoMapper.map(changeset.get(), repository)).build(); } else { return Response.status(Response.Status.NOT_FOUND).build(); } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java index 4e1a0f90f1..c26998eef7 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ChangesetRootResourceTest.java @@ -169,7 +169,7 @@ public class ChangesetRootResourceTest extends RepositoryTestBase { when(logCommandBuilder.setStartChangeset(anyString())).thenReturn(logCommandBuilder); when(logCommandBuilder.getChangesets()).thenReturn(changesetPagingResult); MockHttpRequest request = MockHttpRequest - .get(CHANGESET_URL + "id") + .get(CHANGESET_URL + id) .accept(VndMediaType.CHANGESET); MockHttpResponse response = new MockHttpResponse(); dispatcher.invoke(request, response);