From f911d2540342d61792bf79655d048a1e43c42d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Ar=C3=A8s?= Date: Mon, 14 Nov 2016 18:58:12 -0800 Subject: [PATCH] GitwebServlet should not inject LocalDiskRepositoryManager GitwebServlet was the only class not getting the interface injected. Inject GitRepositoryManager instead and check to make sure the implementation is LocalDiskRepositoryManager since Gitweb can only work with LocalDiskRepositoryManager. Change-Id: Id707069c3d8cd09ce11a0356ea2218d3f9c74166 --- .../com/google/gerrit/httpd/gitweb/GitwebServlet.java | 10 ++++++++-- .../git/MultiBaseLocalDiskRepositoryManager.java | 2 -- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitwebServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitwebServlet.java index ac7c7e75d6..db8808d21e 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitwebServlet.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitwebServlet.java @@ -42,6 +42,7 @@ import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.GitwebCgiConfig; import com.google.gerrit.server.config.GitwebConfig; import com.google.gerrit.server.config.SitePaths; +import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.git.LocalDiskRepositoryManager; import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gerrit.server.project.ProjectControl; @@ -49,6 +50,7 @@ import com.google.gerrit.server.ssh.SshInfo; import com.google.gwtexpui.server.CacheHeaders; import com.google.inject.Inject; import com.google.inject.Provider; +import com.google.inject.ProvisionException; import com.google.inject.Singleton; import org.eclipse.jgit.errors.RepositoryNotFoundException; @@ -100,7 +102,7 @@ class GitwebServlet extends HttpServlet { private final EnvList _env; @Inject - GitwebServlet(LocalDiskRepositoryManager repoManager, + GitwebServlet(GitRepositoryManager repoManager, ProjectControl.Factory projectControl, Provider anonymousUserProvider, Provider userProvider, @@ -110,7 +112,11 @@ class GitwebServlet extends HttpServlet { GitwebConfig gitwebConfig, GitwebCgiConfig gitwebCgiConfig) throws IOException { - this.repoManager = repoManager; + if (!(repoManager instanceof LocalDiskRepositoryManager)) { + throw new ProvisionException( + "Gitweb can only be used with LocalDiskRepositoryManager"); + } + this.repoManager = (LocalDiskRepositoryManager)repoManager; this.projectControl = projectControl; this.anonymousUserProvider = anonymousUserProvider; this.userProvider = userProvider; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MultiBaseLocalDiskRepositoryManager.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MultiBaseLocalDiskRepositoryManager.java index a35d5192a3..db739b149d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MultiBaseLocalDiskRepositoryManager.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MultiBaseLocalDiskRepositoryManager.java @@ -35,8 +35,6 @@ public class MultiBaseLocalDiskRepositoryManager extends protected void configure() { bind(GitRepositoryManager.class).to( MultiBaseLocalDiskRepositoryManager.class); - bind(LocalDiskRepositoryManager.class).to( - MultiBaseLocalDiskRepositoryManager.class); listener().to(MultiBaseLocalDiskRepositoryManager.Lifecycle.class); } }