FIX: deep-link into individual commit for non-root URLs. Use now the gerrit.canonicalWebUrl for allowing the correct composition of deep-links from individual points in the branch-network. Previously the (wrong) assumption that '/' is the main context was wrong and lead to broken deep-links. Change-Id: Id703a83875c259ea3eebb4585cec5667d2bf8346 Signed-off-by: Luca Milanesio <luca.milanesio@gmail.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/branchnetwork/canvas/GitGraphServlet.java b/src/main/java/com/googlesource/gerrit/plugins/branchnetwork/canvas/GitGraphServlet.java index 495352e..ba56d8a 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/branchnetwork/canvas/GitGraphServlet.java +++ b/src/main/java/com/googlesource/gerrit/plugins/branchnetwork/canvas/GitGraphServlet.java
@@ -27,6 +27,7 @@ import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.Repository; +import com.google.common.base.Objects; import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.httpd.GitWebConfig; import com.google.gerrit.reviewdb.client.Project; @@ -48,6 +49,7 @@ private Factory projectControl; private GitRepositoryManager repoManager; private GitWebConfig gitWebConfig; + private String canonicalWebUrl; @Inject public GitGraphServlet(@PluginName String pluginName, @@ -55,17 +57,13 @@ final ProjectControl.Factory projectControl, final GitRepositoryManager repoManager) throws MalformedURLException { - URL url = - new URL(gerritConfig.getString("gerrit", null, "canonicalWebUrl")); - String pathPrefix = "/"; - if(url != null && url.getPath() != null) { - pathPrefix = url.getPath(); - if(!pathPrefix.endsWith("/")) { - pathPrefix += "/"; - } + this.canonicalWebUrl = + Objects.firstNonNull(gerritConfig.getString("gerrit", null, "canonicalWebUrl"), "/"); + if(!canonicalWebUrl.endsWith("/")) { + canonicalWebUrl += "/"; } this.canonicalPath = - String.format("%splugins/%s/", pathPrefix, pluginName); + String.format("%splugins/%s/", canonicalWebUrl, pluginName); this.projectControl = projectControl; this.repoManager = repoManager; this.gitWebConfig = gitWebConfig; @@ -118,7 +116,6 @@ String networkDataChunkUrl = String.format("%1$snetwork_data_chunk/%2$s/?nethash=", canonicalPath, repoName); - String commitUrlPattern = gitWebConfig.getUrl() + gitWebConfig.getGitWebType().getRevision() @@ -130,10 +127,10 @@ .replaceAll("\\$\\{project\\}", repoName); commitUrlPattern = - (commitUrlPattern.startsWith("/") ? commitUrlPattern : "/" + (commitUrlPattern.startsWith("/") ? commitUrlPattern : canonicalWebUrl + commitUrlPattern); projectPattern = - (projectPattern.startsWith("/") ? projectPattern : "/" + (projectPattern.startsWith("/") ? projectPattern : canonicalWebUrl + projectPattern); String header =