From 3838406ee83c3b64662fdb6c638fd612cde05ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 2 Aug 2018 15:14:40 +0200 Subject: [PATCH] Adapt git repository paths for LFS handling to namespaces --- .../java/sonia/scm/web/ScmGitServlet.java | 30 ++++++++----------- .../web/lfs/servlet/LfsServletFactory.java | 4 +-- .../lfs/servlet/LfsServletFactoryTest.java | 8 ++--- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java index e8e62b52cc..ebf4173ad5 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java @@ -38,32 +38,27 @@ package sonia.scm.web; import com.google.common.annotations.VisibleForTesting; import com.google.inject.Inject; import com.google.inject.Singleton; - import org.eclipse.jgit.http.server.GitServlet; - -import org.slf4j.Logger; -import static org.slf4j.LoggerFactory.getLogger; - - import org.eclipse.jgit.lfs.lib.Constants; -import static org.eclipse.jgit.lfs.lib.Constants.CONTENT_TYPE_GIT_LFS_JSON; - +import org.slf4j.Logger; import sonia.scm.repository.Repository; +import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryProvider; import sonia.scm.repository.RepositoryRequestListenerUtil; import sonia.scm.util.HttpUtil; import sonia.scm.web.lfs.servlet.LfsServletFactory; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; -import java.util.regex.Pattern; - import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import sonia.scm.repository.RepositoryException; +import java.io.IOException; +import java.util.regex.Pattern; + +import static org.eclipse.jgit.lfs.lib.Constants.CONTENT_TYPE_GIT_LFS_JSON; +import static org.slf4j.LoggerFactory.getLogger; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -166,12 +161,13 @@ public class ScmGitServlet extends GitServlet * */ private void handleRequest(HttpServletRequest request, HttpServletResponse response, Repository repository) throws ServletException, IOException { - logger.trace("handle git repository at {}", repository.getName()); - if (isLfsBatchApiRequest(request, repository.getName())) { + String repoPath = repository.getNamespace() + "/" + repository.getName(); + logger.trace("handle git repository at {}", repoPath); + if (isLfsBatchApiRequest(request, repoPath)) { HttpServlet servlet = lfsServletFactory.createProtocolServletFor(repository, request); logger.trace("handle lfs batch api request"); handleGitLfsRequest(servlet, request, response, repository); - } else if (isLfsFileTransferRequest(request, repository.getName())) { + } else if (isLfsFileTransferRequest(request, repoPath)) { HttpServlet servlet = lfsServletFactory.createFileLfsServletFor(repository, request); logger.trace("handle lfs file transfer request"); handleGitLfsRequest(servlet, request, response, repository); diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/LfsServletFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/LfsServletFactory.java index 2ca10559a2..58bdb2fcf1 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/LfsServletFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/LfsServletFactory.java @@ -9,13 +9,13 @@ import org.slf4j.LoggerFactory; import sonia.scm.repository.Repository; import sonia.scm.store.BlobStore; import sonia.scm.util.HttpUtil; +import sonia.scm.web.lfs.LfsBlobStoreFactory; import sonia.scm.web.lfs.ScmBlobLfsRepository; import javax.inject.Inject; import javax.inject.Singleton; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; -import sonia.scm.web.lfs.LfsBlobStoreFactory; /** * This factory class is a helper class to provide the {@link LfsProtocolServlet} and the {@link FileLfsServlet} @@ -70,7 +70,7 @@ public class LfsServletFactory { */ @VisibleForTesting static String buildBaseUri(Repository repository, HttpServletRequest request) { - return String.format("%s/git/%s.git/info/lfs/objects/", HttpUtil.getCompleteUrl(request), repository.getName()); + return String.format("%s/git/%s/%s.git/info/lfs/objects/", HttpUtil.getCompleteUrl(request), repository.getNamespace(), repository.getName()); } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/servlet/LfsServletFactoryTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/servlet/LfsServletFactoryTest.java index 74674cc9db..f6f5803bb7 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/servlet/LfsServletFactoryTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/servlet/LfsServletFactoryTest.java @@ -17,18 +17,18 @@ import static org.mockito.Mockito.when; public class LfsServletFactoryTest { @Test - public void buildBaseUri() throws Exception { + public void buildBaseUri() { String repositoryNamespace = "space"; String repositoryName = "git-lfs-demo"; String result = LfsServletFactory.buildBaseUri(new Repository("", "GIT", repositoryNamespace, repositoryName), RequestWithUri(repositoryName, true)); - assertThat(result, is(equalTo("http://localhost:8081/scm/git/git-lfs-demo.git/info/lfs/objects/"))); + assertThat(result, is(equalTo("http://localhost:8081/scm/git/space/git-lfs-demo.git/info/lfs/objects/"))); - //result will be with dot-gix suffix, ide + //result will be with dot-git suffix, ide result = LfsServletFactory.buildBaseUri(new Repository("", "GIT", repositoryNamespace, repositoryName), RequestWithUri(repositoryName, false)); - assertThat(result, is(equalTo("http://localhost:8081/scm/git/git-lfs-demo.git/info/lfs/objects/"))); + assertThat(result, is(equalTo("http://localhost:8081/scm/git/space/git-lfs-demo.git/info/lfs/objects/"))); } private HttpServletRequest RequestWithUri(String repositoryName, boolean withDotGitSuffix) {