From ca563dd874b5d67a1a511d63cf78d0d58f135818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 23 Aug 2018 15:52:02 +0200 Subject: [PATCH] Fix default revision for hg and fix encoded slashes in URLs --- .../sonia/scm/it/RepositoryAccessITCase.java | 31 ++++++++++++++++--- .../java/sonia/scm/it/RepositoryUtil.java | 19 ++++++++++-- .../scm/repository/spi/HgBrowseCommand.java | 17 +++++----- .../api/v2/resources/BrowserResultMapper.java | 8 ++--- .../api/v2/resources/FileObjectMapper.java | 11 ++++--- .../v2/resources/FileObjectMapperTest.java | 4 +-- 6 files changed, 66 insertions(+), 24 deletions(-) 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 1a132711c8..0d0ded260e 100644 --- a/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java @@ -70,6 +70,8 @@ public class RepositoryAccessITCase { @Test public void shouldReadContent() throws IOException, InterruptedException { repositoryUtil.createAndCommitFile("a.txt", "a"); + tempFolder.newFolder("subfolder"); + repositoryUtil.createAndCommitFile("subfolder/a.txt", "sub-a"); sleep(1000); @@ -81,19 +83,40 @@ public class RepositoryAccessITCase { .extract() .path("_links.sources.href"); - String contentUrl = given() + String rootContentUrl = given() .when() .get(sourcesUrl) .then() .statusCode(HttpStatus.SC_OK) .extract() - .path("files[0]._links.content.href"); - + .path("files.find{it.name=='a.txt'}._links.content.href"); given() .when() - .get(contentUrl) + .get(rootContentUrl) .then() .statusCode(HttpStatus.SC_OK) .body(equalTo("a")); + + String subfolderSourceUrl = given() + .when() + .get(sourcesUrl) + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .path("files.find{it.name=='subfolder'}._links.self.href"); + String subfolderContentUrl= given() + .when() + .get(subfolderSourceUrl) + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .path("files[0]._links.content.href"); + System.out.println(subfolderContentUrl); + given() + .when() + .get(subfolderContentUrl) + .then() + .statusCode(HttpStatus.SC_OK) + .body(equalTo("sub-a")); } } diff --git a/scm-it/src/test/java/sonia/scm/it/RepositoryUtil.java b/scm-it/src/test/java/sonia/scm/it/RepositoryUtil.java index 98d4c8cdab..cb6d34559b 100644 --- a/scm-it/src/test/java/sonia/scm/it/RepositoryUtil.java +++ b/scm-it/src/test/java/sonia/scm/it/RepositoryUtil.java @@ -45,11 +45,26 @@ public class RepositoryUtil { } void createAndCommitFile(String fileName, String content) throws IOException { - Files.write(content, new File(folder, fileName), Charsets.UTF_8); - repositoryClient.getAddCommand().add(fileName); + File file = new File(folder, fileName); + Files.write(content, file, Charsets.UTF_8); + addWithParentDirectories(file); commit("added " + fileName); } + private String addWithParentDirectories(File file) throws IOException { + File parent = file.getParentFile(); + String thisName = file.getName(); + String path; + if (!folder.equals(parent)) { + addWithParentDirectories(parent); + path = addWithParentDirectories(parent) + File.separator + thisName; + } else { + path = thisName; + } + repositoryClient.getAddCommand().add(path); + return path; + } + Changeset commit(String message) throws IOException { Changeset changeset = repositoryClient.getCommitCommand().commit( new Person("scmadmin", "scmadmin@scm-manager.org"), message diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java index 0303275adf..0119b6b315 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java @@ -36,16 +36,14 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Strings; - import sonia.scm.repository.BrowserResult; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.javahg.HgFileviewCommand; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -76,12 +74,9 @@ public class HgBrowseCommand extends AbstractCommand implements BrowseCommand * @return * * @throws IOException - * @throws RepositoryException */ @Override - public BrowserResult getBrowserResult(BrowseCommandRequest request) - throws IOException, RepositoryException - { + public BrowserResult getBrowserResult(BrowseCommandRequest request) throws IOException { HgFileviewCommand cmd = HgFileviewCommand.on(open()); if (!Strings.isNullOrEmpty(request.getRevision())) @@ -113,6 +108,12 @@ public class HgBrowseCommand extends AbstractCommand implements BrowseCommand result.setFiles(cmd.execute()); + if (!Strings.isNullOrEmpty(request.getRevision())) { + result.setRevision(request.getRevision()); + } else { + result.setRevision("tip"); + } + return result; } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultMapper.java index 79f049a5be..4658a465dc 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultMapper.java @@ -17,10 +17,6 @@ public class BrowserResultMapper { @Inject private ResourceLinks resourceLinks; - private FileObjectDto mapFileObject(FileObject fileObject, NamespaceAndName namespaceAndName, String revision) { - return fileObjectMapper.map(fileObject, namespaceAndName, revision); - } - public BrowserResultDto map(BrowserResult browserResult, NamespaceAndName namespaceAndName) { BrowserResultDto browserResultDto = new BrowserResultDto(); @@ -38,6 +34,10 @@ public class BrowserResultMapper { return browserResultDto; } + private FileObjectDto mapFileObject(FileObject fileObject, NamespaceAndName namespaceAndName, String revision) { + return fileObjectMapper.map(fileObject, namespaceAndName, revision); + } + private void addLinks(BrowserResult browserResult, BrowserResultDto dto, NamespaceAndName namespaceAndName) { if (browserResult.getRevision() == null) { dto.add(Links.linkingTo().self(resourceLinks.source().selfWithoutRevision(namespaceAndName.getNamespace(), namespaceAndName.getName())).build()); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileObjectMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileObjectMapper.java index fbc4c8d913..92a031b182 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileObjectMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileObjectMapper.java @@ -10,6 +10,7 @@ import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.SubRepository; import javax.inject.Inject; +import java.net.URI; import static de.otto.edison.hal.Link.link; @@ -25,16 +26,18 @@ public abstract class FileObjectMapper extends BaseMapper