From 057c58413dd70f15f012af815de3ea9485ea0b25 Mon Sep 17 00:00:00 2001 From: Mohamed Karray Date: Wed, 19 Sep 2018 18:28:42 +0200 Subject: [PATCH 1/7] bugfixing --- .../sonia/scm/it/RepositoryAccessITCase.java | 2 +- .../BranchChangesetCollectionToDtoMapper.java | 23 +++++++++++++++++++ .../api/v2/resources/BranchRootResource.java | 18 +++++++++++---- .../api/v2/resources/TagToTagDtoMapper.java | 2 +- .../v2/resources/BranchRootResourceTest.java | 9 +++++--- 5 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java diff --git a/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java b/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java index 398921a692..161f15d87a 100644 --- a/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java @@ -165,7 +165,7 @@ public class RepositoryAccessITCase { .isNotNull() .contains(String.format("%s/sources/%s", repositoryUrl, changeset.getId())); - assertThat(response.body().jsonPath().getString("_embedded.tags.find{it.name=='" + tagName + "'}._links.changesets.href")) + assertThat(response.body().jsonPath().getString("_embedded.tags.find{it.name=='" + tagName + "'}._links.changeset.href")) .as("assert single tag changesets link") .isNotNull() .contains(String.format("%s/changesets/%s", repositoryUrl, changeset.getId())); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java new file mode 100644 index 0000000000..9db35c10eb --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java @@ -0,0 +1,23 @@ +package sonia.scm.api.v2.resources; + +import sonia.scm.PageResult; +import sonia.scm.repository.Changeset; +import sonia.scm.repository.Repository; + +import javax.inject.Inject; + +public class BranchChangesetCollectionToDtoMapper extends ChangesetCollectionToDtoMapper { + + @Inject + public BranchChangesetCollectionToDtoMapper(ChangesetToChangesetDtoMapper changesetToChangesetDtoMapper, ResourceLinks resourceLinks) { + super(changesetToChangesetDtoMapper, resourceLinks); + } + + public CollectionDto map(int pageNumber, int pageSize, PageResult pageResult, Repository repository, String branch) { + return this.map(pageNumber, pageSize, pageResult, repository, () -> createSelfLink(repository, branch)); + } + + protected String createSelfLink(Repository repository, String branch) { + return resourceLinks.branch().history(repository.getNamespaceAndName(), branch); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index 9763f11def..cc773e41e7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -3,6 +3,7 @@ package sonia.scm.api.v2.resources; import com.webcohesion.enunciate.metadata.rs.ResponseCode; import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; +import sonia.scm.NotFoundException; import sonia.scm.PageResult; import sonia.scm.repository.Branches; import sonia.scm.repository.Changeset; @@ -25,6 +26,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import java.io.IOException; +import java.text.MessageFormat; public class BranchRootResource { @@ -32,14 +34,14 @@ public class BranchRootResource { private final BranchToBranchDtoMapper branchToDtoMapper; private final BranchCollectionToDtoMapper branchCollectionToDtoMapper; - private final ChangesetCollectionToDtoMapper changesetCollectionToDtoMapper; + private final BranchChangesetCollectionToDtoMapper branchChangesetCollectionToDtoMapper; @Inject - public BranchRootResource(RepositoryServiceFactory serviceFactory, BranchToBranchDtoMapper branchToDtoMapper, BranchCollectionToDtoMapper branchCollectionToDtoMapper, ChangesetCollectionToDtoMapper changesetCollectionToDtoMapper) { + public BranchRootResource(RepositoryServiceFactory serviceFactory, BranchToBranchDtoMapper branchToDtoMapper, BranchCollectionToDtoMapper branchCollectionToDtoMapper, BranchChangesetCollectionToDtoMapper changesetCollectionToDtoMapper) { this.serviceFactory = serviceFactory; this.branchToDtoMapper = branchToDtoMapper; this.branchCollectionToDtoMapper = branchCollectionToDtoMapper; - this.changesetCollectionToDtoMapper = changesetCollectionToDtoMapper; + this.branchChangesetCollectionToDtoMapper = changesetCollectionToDtoMapper; } /** @@ -98,6 +100,14 @@ public class BranchRootResource { @DefaultValue("0") @QueryParam("page") int page, @DefaultValue("10") @QueryParam("pageSize") int pageSize) throws Exception { try (RepositoryService repositoryService = serviceFactory.create(new NamespaceAndName(namespace, name))) { + boolean branchExists = repositoryService.getBranchesCommand() + .getBranches() + .getBranches() + .stream() + .anyMatch(branch -> branchName.equals(branch.getName())); + if (!branchExists){ + throw new NotFoundException(MessageFormat.format("The branch {0} is not found", branchName)); + } Repository repository = repositoryService.getRepository(); RepositoryPermissions.read(repository).check(); ChangesetPagingResult changesets = repositoryService.getLogCommand() @@ -107,7 +117,7 @@ public class BranchRootResource { .getChangesets(); if (changesets != null && changesets.getChangesets() != null) { PageResult pageResult = new PageResult<>(changesets.getChangesets(), changesets.getTotal()); - return Response.ok(changesetCollectionToDtoMapper.map(page, pageSize, pageResult, repository)).build(); + return Response.ok(branchChangesetCollectionToDtoMapper.map(page, pageSize, pageResult, repository, branchName)).build(); } else { return Response.ok().build(); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagToTagDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagToTagDtoMapper.java index 917b4b7789..ee0488e037 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagToTagDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagToTagDtoMapper.java @@ -28,7 +28,7 @@ public abstract class TagToTagDtoMapper { Links.Builder linksBuilder = linkingTo() .self(resourceLinks.tag().self(namespaceAndName.getNamespace(), namespaceAndName.getName(), target.getName())) .single(link("sources", resourceLinks.source().self(namespaceAndName.getNamespace(), namespaceAndName.getName(), target.getRevision()))) - .single(link("changesets", resourceLinks.changeset().self(namespaceAndName.getNamespace(), namespaceAndName.getName(), target.getRevision()))); + .single(link("changeset", resourceLinks.changeset().self(namespaceAndName.getNamespace(), namespaceAndName.getName(), target.getRevision()))); target.add(linksBuilder.build()); } } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java index 13ed9cddcd..4994c11b08 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java @@ -67,7 +67,7 @@ public class BranchRootResourceTest extends RepositoryTestBase { @InjectMocks private BranchToBranchDtoMapperImpl branchToDtoMapper; - private ChangesetCollectionToDtoMapper changesetCollectionToDtoMapper; + private BranchChangesetCollectionToDtoMapper changesetCollectionToDtoMapper; private BranchRootResource branchRootResource; @@ -90,7 +90,7 @@ public class BranchRootResourceTest extends RepositoryTestBase { @Before public void prepareEnvironment() throws Exception { - changesetCollectionToDtoMapper = new ChangesetCollectionToDtoMapper(changesetToChangesetDtoMapper, resourceLinks); + changesetCollectionToDtoMapper = new BranchChangesetCollectionToDtoMapper(changesetToChangesetDtoMapper, resourceLinks); BranchCollectionToDtoMapper branchCollectionToDtoMapper = new BranchCollectionToDtoMapper(branchToDtoMapper, resourceLinks); branchRootResource = new BranchRootResource(serviceFactory, branchToDtoMapper, branchCollectionToDtoMapper, changesetCollectionToDtoMapper); super.branchRootResource = Providers.of(branchRootResource); @@ -152,6 +152,10 @@ public class BranchRootResourceTest extends RepositoryTestBase { when(logCommandBuilder.setPagingLimit(anyInt())).thenReturn(logCommandBuilder); when(logCommandBuilder.setBranch(anyString())).thenReturn(logCommandBuilder); when(logCommandBuilder.getChangesets()).thenReturn(changesetPagingResult); + Branches branches = mock(Branches.class); + List branchList = Lists.newArrayList(new Branch("master",id)); + when(branches.getBranches()).thenReturn(branchList); + when(branchesCommandBuilder.getBranches()).thenReturn(branches); MockHttpRequest request = MockHttpRequest.get(BRANCH_URL + "/changesets/"); MockHttpResponse response = new MockHttpResponse(); dispatcher.invoke(request, response); @@ -161,6 +165,5 @@ public class BranchRootResourceTest extends RepositoryTestBase { assertTrue(response.getContentAsString().contains(String.format("\"name\":\"%s\"", authorName))); assertTrue(response.getContentAsString().contains(String.format("\"mail\":\"%s\"", authorEmail))); assertTrue(response.getContentAsString().contains(String.format("\"description\":\"%s\"", commit))); - assertTrue(response.getContentAsString().contains(String.format("\"description\":\"%s\"", commit))); } } From 9c8b88587c6385a6f6df9ec7675d80b41a31d731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 21 Sep 2018 10:40:09 +0200 Subject: [PATCH 2/7] Workaround missing cleanup on other tests --- .../sonia/scm/repository/DefaultRepositoryManagerTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java b/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java index b7d231cf38..a67c275bc0 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java @@ -38,6 +38,7 @@ import com.github.sdorra.shiro.SubjectAware; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import org.apache.shiro.authz.UnauthorizedException; +import org.apache.shiro.util.ThreadContext; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -94,6 +95,10 @@ import static org.mockito.Mockito.when; ) public class DefaultRepositoryManagerTest extends ManagerTestBase { + { + ThreadContext.unbindSubject(); + } + @Rule public ShiroRule shiro = new ShiroRule(); From 89377c665c238980047cf2cad463d7ecd5612278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 21 Sep 2018 11:20:46 +0200 Subject: [PATCH 3/7] Fix violation of LSP --- .../BranchChangesetCollectionToDtoMapper.java | 9 ++++--- .../ChangesetCollectionToDtoMapper.java | 19 ++++----------- .../ChangesetCollectionToDtoMapperBase.java | 24 +++++++++++++++++++ .../FileHistoryCollectionToDtoMapper.java | 11 +++++---- 4 files changed, 42 insertions(+), 21 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapperBase.java diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java index 9db35c10eb..afe8ad318b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java @@ -6,18 +6,21 @@ import sonia.scm.repository.Repository; import javax.inject.Inject; -public class BranchChangesetCollectionToDtoMapper extends ChangesetCollectionToDtoMapper { +public class BranchChangesetCollectionToDtoMapper extends ChangesetCollectionToDtoMapperBase { + + private final ResourceLinks resourceLinks; @Inject public BranchChangesetCollectionToDtoMapper(ChangesetToChangesetDtoMapper changesetToChangesetDtoMapper, ResourceLinks resourceLinks) { - super(changesetToChangesetDtoMapper, resourceLinks); + super(changesetToChangesetDtoMapper); + this.resourceLinks = resourceLinks; } public CollectionDto map(int pageNumber, int pageSize, PageResult pageResult, Repository repository, String branch) { return this.map(pageNumber, pageSize, pageResult, repository, () -> createSelfLink(repository, branch)); } - protected String createSelfLink(Repository repository, String branch) { + private String createSelfLink(Repository repository, String branch) { return resourceLinks.branch().history(repository.getNamespaceAndName(), branch); } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java index 2f7ac86e14..24ee9b0ce1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java @@ -5,31 +5,22 @@ import sonia.scm.repository.Changeset; import sonia.scm.repository.Repository; import javax.inject.Inject; -import java.util.Optional; -import java.util.function.Supplier; -public class ChangesetCollectionToDtoMapper extends PagedCollectionToDtoMapper { +public class ChangesetCollectionToDtoMapper extends ChangesetCollectionToDtoMapperBase { - private final ChangesetToChangesetDtoMapper changesetToChangesetDtoMapper; - protected final ResourceLinks resourceLinks; + private final ResourceLinks resourceLinks; @Inject public ChangesetCollectionToDtoMapper(ChangesetToChangesetDtoMapper changesetToChangesetDtoMapper, ResourceLinks resourceLinks) { - super("changesets"); - this.changesetToChangesetDtoMapper = changesetToChangesetDtoMapper; + super(changesetToChangesetDtoMapper); this.resourceLinks = resourceLinks; } public CollectionDto map(int pageNumber, int pageSize, PageResult pageResult, Repository repository) { - return this.map(pageNumber, pageSize, pageResult, repository, () -> createSelfLink(repository)); + return super.map(pageNumber, pageSize, pageResult, repository, () -> createSelfLink(repository)); } - public CollectionDto map(int pageNumber, int pageSize, PageResult pageResult, Repository repository, Supplier selfLinkSupplier) { - return super.map(pageNumber, pageSize, pageResult, selfLinkSupplier.get(), Optional.empty(), changeset -> changesetToChangesetDtoMapper.map(changeset, repository)); - } - - protected String createSelfLink(Repository repository) { + private String createSelfLink(Repository repository) { return resourceLinks.changeset().all(repository.getNamespace(), repository.getName()); } } - diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapperBase.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapperBase.java new file mode 100644 index 0000000000..b83f957c09 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapperBase.java @@ -0,0 +1,24 @@ +package sonia.scm.api.v2.resources; + +import sonia.scm.PageResult; +import sonia.scm.repository.Changeset; +import sonia.scm.repository.Repository; + +import javax.inject.Inject; +import java.util.Optional; +import java.util.function.Supplier; + +class ChangesetCollectionToDtoMapperBase extends PagedCollectionToDtoMapper { + + private final ChangesetToChangesetDtoMapper changesetToChangesetDtoMapper; + + ChangesetCollectionToDtoMapperBase(ChangesetToChangesetDtoMapper changesetToChangesetDtoMapper) { + super("changesets"); + this.changesetToChangesetDtoMapper = changesetToChangesetDtoMapper; + } + + CollectionDto map(int pageNumber, int pageSize, PageResult pageResult, Repository repository, Supplier selfLinkSupplier) { + return super.map(pageNumber, pageSize, pageResult, selfLinkSupplier.get(), Optional.empty(), changeset -> changesetToChangesetDtoMapper.map(changeset, repository)); + } +} + diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryCollectionToDtoMapper.java index 692b2f57b1..af7fb2ed83 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryCollectionToDtoMapper.java @@ -6,19 +6,22 @@ import sonia.scm.repository.Repository; import javax.inject.Inject; -public class FileHistoryCollectionToDtoMapper extends ChangesetCollectionToDtoMapper { +public class FileHistoryCollectionToDtoMapper extends ChangesetCollectionToDtoMapperBase { + private final ResourceLinks resourceLinks; + @Inject public FileHistoryCollectionToDtoMapper(ChangesetToChangesetDtoMapper changesetToChangesetDtoMapper, ResourceLinks resourceLinks) { - super(changesetToChangesetDtoMapper, resourceLinks); + super(changesetToChangesetDtoMapper); + this.resourceLinks = resourceLinks; } public CollectionDto map(int pageNumber, int pageSize, PageResult pageResult, Repository repository, String revision, String path) { return super.map(pageNumber, pageSize, pageResult, repository, () -> createSelfLink(repository, revision, path)); } - protected String createSelfLink(Repository repository, String revision, String path) { - return super.resourceLinks.fileHistory().self(repository.getNamespace(), repository.getName(), revision, path); + private String createSelfLink(Repository repository, String revision, String path) { + return resourceLinks.fileHistory().self(repository.getNamespace(), repository.getName(), revision, path); } } From a89353adff0f42327abb9088f23e9e2ed51f4e1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 21 Sep 2018 11:38:32 +0200 Subject: [PATCH 4/7] Replace custom exception messages with generic ones --- scm-core/src/main/java/sonia/scm/NotFoundException.java | 5 ----- .../java/sonia/scm/api/v2/resources/BranchRootResource.java | 2 +- .../sonia/scm/api/v2/resources/PermissionRootResource.java | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/NotFoundException.java b/scm-core/src/main/java/sonia/scm/NotFoundException.java index 0d8c14c61b..8a7ae642bd 100644 --- a/scm-core/src/main/java/sonia/scm/NotFoundException.java +++ b/scm-core/src/main/java/sonia/scm/NotFoundException.java @@ -7,9 +7,4 @@ public class NotFoundException extends Exception { public NotFoundException() { } - - - public NotFoundException(String message) { - super(message); - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index cc773e41e7..491e0312b1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -106,7 +106,7 @@ public class BranchRootResource { .stream() .anyMatch(branch -> branchName.equals(branch.getName())); if (!branchExists){ - throw new NotFoundException(MessageFormat.format("The branch {0} is not found", branchName)); + throw new NotFoundException("branch", branchName); } Repository repository = repositoryService.getRepository(); RepositoryPermissions.read(repository).check(); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionRootResource.java index 2a587bc2fe..b7f6df8c2d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionRootResource.java @@ -162,7 +162,7 @@ public class PermissionRootResource { RepositoryPermissions.permissionWrite(repository).check(); String extractedPermissionName = getPermissionName(permissionName); if (!isPermissionExist(new PermissionDto(extractedPermissionName, isGroupPermission(permissionName)), repository)) { - throw new NotFoundException("the permission " + extractedPermissionName + " does not exist"); + throw new NotFoundException("permission", extractedPermissionName); } permission.setGroupPermission(isGroupPermission(permissionName)); if (!extractedPermissionName.equals(permission.getName())) { From 5d2c8591d3bd45f17cf87e861fbd74123ca145ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 21 Sep 2018 11:44:26 +0200 Subject: [PATCH 5/7] Remove unused import --- .../scm/api/v2/resources/ChangesetCollectionToDtoMapperBase.java | 1 - 1 file changed, 1 deletion(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapperBase.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapperBase.java index b83f957c09..e29a0a92b2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapperBase.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapperBase.java @@ -4,7 +4,6 @@ import sonia.scm.PageResult; import sonia.scm.repository.Changeset; import sonia.scm.repository.Repository; -import javax.inject.Inject; import java.util.Optional; import java.util.function.Supplier; From 4c468c57432dd48b00dc182fbccd38e17db93400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 21 Sep 2018 12:16:27 +0200 Subject: [PATCH 6/7] Remove unused import --- .../main/java/sonia/scm/api/v2/resources/BranchRootResource.java | 1 - 1 file changed, 1 deletion(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index 491e0312b1..7414f5c21f 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import java.io.IOException; -import java.text.MessageFormat; public class BranchRootResource { From 166969b1034a018c9dce7166a1ccb604af9c2b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 21 Sep 2018 10:19:14 +0000 Subject: [PATCH 7/7] Close branch bugfix/changesets_links_v2