From 6a7987481abe7449a5e5ae1c8fe6ff01bee90d46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 17 Aug 2018 09:33:45 +0200 Subject: [PATCH] Peer review --- .../sonia/scm/it/RepositoryAccessITCase.java | 32 +++++++++++++++++++ .../java/sonia/scm/repository/SvnUtil.java | 12 +++---- .../api/v2/resources/BrowserResultDto.java | 2 ++ .../api/v2/resources/BrowserResultMapper.java | 6 +++- .../api/v2/resources/FileObjectMapper.java | 11 ++++--- .../scm/api/v2/resources/ResourceLinks.java | 10 ++++-- .../api/v2/resources/SourceRootResource.java | 22 +++++++------ .../v2/resources/FileObjectMapperTest.java | 6 ++-- 8 files changed, 73 insertions(+), 28 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 a461e40dea..1a132711c8 100644 --- a/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java @@ -11,6 +11,8 @@ import org.junit.runners.Parameterized; import java.io.IOException; import java.util.Collection; +import static java.lang.Thread.sleep; +import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertNotNull; import static org.junit.Assume.assumeFalse; import static sonia.scm.it.RestUtil.given; @@ -64,4 +66,34 @@ public class RepositoryAccessITCase { assertNotNull(branchName); } + + @Test + public void shouldReadContent() throws IOException, InterruptedException { + repositoryUtil.createAndCommitFile("a.txt", "a"); + + sleep(1000); + + String sourcesUrl = given() + .when() + .get(TestData.getDefaultRepositoryUrl(repositoryType)) + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .path("_links.sources.href"); + + String contentUrl = given() + .when() + .get(sourcesUrl) + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .path("files[0]._links.content.href"); + + given() + .when() + .get(contentUrl) + .then() + .statusCode(HttpStatus.SC_OK) + .body(equalTo("a")); + } } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java index 6cc5eb5da9..63fabaf4e9 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java @@ -38,10 +38,8 @@ package sonia.scm.repository; import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.common.io.Closeables; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.tmatesoft.svn.core.SVNErrorCode; import org.tmatesoft.svn.core.SVNLogEntry; import org.tmatesoft.svn.core.SVNLogEntryPath; @@ -52,20 +50,17 @@ import org.tmatesoft.svn.core.internal.util.SVNXMLUtil; import org.tmatesoft.svn.core.io.SVNRepository; import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.admin.SVNChangeEntry; - import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; - import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +//~--- JDK imports ------------------------------------------------------------ /** * @@ -366,6 +361,7 @@ public final class SvnUtil public static long getRevisionNumber(String revision) throws RepositoryException { + // REVIEW Bei SVN wird ohne Revision die -1 genommen, was zu einem Fehler führt long revisionNumber = -1; if (Util.isNotEmpty(revision)) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultDto.java index 12c227b65c..b8ffd7ff26 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultDto.java @@ -16,6 +16,7 @@ public class BrowserResultDto extends HalRepresentation implements Iterable files; @Override @@ -24,6 +25,7 @@ public class BrowserResultDto extends HalRepresentation implements Iterable iterator() { Iterator it = null; 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 6ab054bd74..79f049a5be 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 @@ -39,7 +39,11 @@ public class BrowserResultMapper { } private void addLinks(BrowserResult browserResult, BrowserResultDto dto, NamespaceAndName namespaceAndName) { - dto.add(Links.linkingTo().self(resourceLinks.source().self(namespaceAndName.getNamespace(), namespaceAndName.getName(), browserResult.getRevision())).build()); + if (browserResult.getRevision() == null) { + dto.add(Links.linkingTo().self(resourceLinks.source().selfWithoutRevision(namespaceAndName.getNamespace(), namespaceAndName.getName())).build()); + } else { + dto.add(Links.linkingTo().self(resourceLinks.source().self(namespaceAndName.getNamespace(), namespaceAndName.getName(), browserResult.getRevision())).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 4363a8a9b1..ebabf79342 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 @@ -25,9 +25,12 @@ public abstract class FileObjectMapper extends BaseMapper