Use sensible defaults in the dev server When no config file is present, default to exporting all git repositories under the current directory and making templates reloadable. Move some of the default dev-specific behavior out of GitilesFilter and into DevServer, including removing the gitiles.reloadTemplates config option entirely. Change-Id: Ibf62d49ed2a77ff232d5477b326c3f03e98895fb
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultUrls.java b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultUrls.java index 6495b5d..83c5436 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultUrls.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultUrls.java
@@ -40,7 +40,7 @@ this.canonicalHostName = InetAddress.getLocalHost().getCanonicalHostName(); } this.baseGitUrl = checkNotNull(baseGitUrl, "baseGitUrl"); - this.baseGerritUrl = checkNotNull(baseGerritUrl, "baseGerritUrl"); + this.baseGerritUrl = baseGerritUrl; } @Override
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java index bf87c4a..3f6c35c 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java
@@ -29,12 +29,11 @@ private static final String PROPERTY_NAME = "com.google.gitiles.configPath"; private static final String DEFAULT_PATH = "gitiles.config"; - public static Config loadDefault() throws IOException, ConfigInvalidException { - return loadDefault(null); + public static File defaultFile() { + return defaultFile(null); } - public static Config loadDefault(FilterConfig filterConfig) - throws IOException, ConfigInvalidException { + public static File defaultFile(FilterConfig filterConfig) { String configPath = null; if (filterConfig != null) { configPath = filterConfig.getInitParameter(FILTER_CONFIG_PARAM); @@ -42,7 +41,16 @@ if (configPath == null) { configPath = System.getProperty(PROPERTY_NAME, DEFAULT_PATH); } - FileBasedConfig config = new FileBasedConfig(new File(configPath), FS.DETECTED); + return new File(configPath); + } + + public static Config loadDefault() throws IOException, ConfigInvalidException { + return loadDefault(null); + } + + public static Config loadDefault(FilterConfig filterConfig) + throws IOException, ConfigInvalidException { + FileBasedConfig config = new FileBasedConfig(defaultFile(), FS.DETECTED); config.load(); return config; }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java index 99a2c4e..b926666 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
@@ -20,7 +20,6 @@ import static com.google.gitiles.ViewFilter.getRegexGroup; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Joiner; import com.google.common.base.Objects; import com.google.common.collect.ImmutableMap; import com.google.common.collect.LinkedListMultimap; @@ -154,6 +153,7 @@ private final ListMultimap<GitilesView.Type, Filter> filters = LinkedListMultimap.create(); private final Map<GitilesView.Type, HttpServlet> servlets = Maps.newHashMap(); + private Config config; private Renderer renderer; private GitilesUrls urls; private Linkifier linkifier; @@ -166,17 +166,20 @@ } GitilesFilter( + Config config, Renderer renderer, GitilesUrls urls, GitilesAccess.Factory accessFactory, final RepositoryResolver<HttpServletRequest> resolver, VisibilityCache visibilityCache) { - this.renderer = checkNotNull(renderer, "renderer"); - this.urls = checkNotNull(urls, "urls"); - this.accessFactory = checkNotNull(accessFactory, "accessFactory"); - this.visibilityCache = checkNotNull(visibilityCache, "visibilityCache"); - this.linkifier = new Linkifier(urls); - this.resolver = wrapResolver(resolver); + this.config = checkNotNull(config, "config"); + this.renderer = renderer; + this.urls = urls; + this.accessFactory = accessFactory; + this.visibilityCache = visibilityCache; + if (resolver != null) { + this.resolver = wrapResolver(resolver); + } } @Override @@ -219,18 +222,23 @@ case REPOSITORY_INDEX: return new RepositoryIndexServlet(renderer, accessFactory); case REVISION: - return new RevisionServlet(renderer, linkifier); + return new RevisionServlet(renderer, linkifier()); case PATH: return new PathServlet(renderer); case DIFF: - return new DiffServlet(renderer, linkifier); + return new DiffServlet(renderer, linkifier()); case LOG: - return new LogServlet(renderer, linkifier); + return new LogServlet(renderer, linkifier()); default: throw new IllegalArgumentException("Invalid view type: " + view); } } + public synchronized void setRenderer(Renderer renderer) { + checkNotInitialized(); + this.renderer = checkNotNull(renderer, "renderer"); + } + synchronized void addFilter(GitilesView.Type view, Filter filter) { checkNotInitialized(); filters.put(checkNotNull(view, "view"), checkNotNull(filter, "filter for %s", view)); @@ -259,47 +267,48 @@ }; } + private synchronized Linkifier linkifier() { + if (linkifier == null) { + checkState(urls != null, "GitilesUrls not yet set"); + linkifier = new Linkifier(urls); + } + return linkifier; + } + private void setDefaultFields(FilterConfig filterConfig) throws ServletException { if (renderer != null && urls != null && accessFactory != null && resolver != null && visibilityCache != null) { return; } Config config; - try { - config = GitilesConfig.loadDefault(filterConfig); - } catch (IOException e) { - throw new ServletException(e); - } catch (ConfigInvalidException e) { - throw new ServletException(e); + if (this.config != null) { + config = this.config; + } else { + try { + config = GitilesConfig.loadDefault(filterConfig); + } catch (IOException e) { + throw new ServletException(e); + } catch (ConfigInvalidException e) { + throw new ServletException(e); + } } if (renderer == null) { - String staticPrefix = filterConfig.getServletContext().getContextPath() + STATIC_PREFIX; - String customTemplates = config.getString("gitiles", null, "customTemplates"); - String siteTitle = Objects.firstNonNull(config.getString("gitiles", null, "siteTitle"), - "Gitiles"); - // TODO(dborowitz): Automatically set to true when run with mvn jetty:run. - if (config.getBoolean("gitiles", null, "reloadTemplates", false)) { - renderer = new DebugRenderer(staticPrefix, customTemplates, - Joiner.on(File.separatorChar).join(System.getProperty("user.dir"), - "gitiles-servlet", "src", "main", "resources", - "com", "google", "gitiles", "templates"), siteTitle); - } else { - renderer = new DefaultRenderer(staticPrefix, Renderer.toFileURL(customTemplates), - siteTitle); - } + renderer = new DefaultRenderer( + filterConfig.getServletContext().getContextPath() + STATIC_PREFIX, + Renderer.toFileURL(config.getString("gitiles", null, "customTemplates")), + Objects.firstNonNull(config.getString("gitiles", null, "siteTitle"), "Gitiles")); } if (urls == null) { try { urls = new DefaultUrls( config.getString("gitiles", null, "canonicalHostName"), getBaseGitUrl(config), - getGerritUrl(config)); + config.getString("gitiles", null, "gerritUrl")); } catch (UnknownHostException e) { throw new ServletException(e); } } - linkifier = new Linkifier(urls); if (accessFactory == null || resolver == null) { String basePath = config.getString("gitiles", null, "basePath"); if (basePath == null) { @@ -345,12 +354,4 @@ } return baseGitUrl; } - - private static String getGerritUrl(Config config) throws ServletException { - String gerritUrl = config.getString("gitiles", null, "gerritUrl"); - if (gerritUrl == null) { - throw new ServletException("gitiles.gerritUrl not set"); - } - return gerritUrl; - } }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java index c1647ba..be03293 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java
@@ -15,10 +15,12 @@ package com.google.gitiles; import org.eclipse.jgit.http.server.glue.MetaServlet; +import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.transport.resolver.RepositoryResolver; import java.util.Enumeration; +import javax.annotation.Nullable; import javax.servlet.Filter; import javax.servlet.FilterConfig; import javax.servlet.ServletConfig; @@ -42,12 +44,14 @@ /** The prefix from which static resources are served. */ public static final String STATIC_PREFIX = "/+static/"; - public GitilesServlet(Renderer renderer, - GitilesUrls urls, - GitilesAccess.Factory accessFactory, - RepositoryResolver<HttpServletRequest> resolver, - VisibilityCache visibilityCache) { - super(new GitilesFilter(renderer, urls, accessFactory, resolver, visibilityCache)); + public GitilesServlet( + @Nullable Config config, + @Nullable Renderer renderer, + @Nullable GitilesUrls urls, + @Nullable GitilesAccess.Factory accessFactory, + @Nullable RepositoryResolver<HttpServletRequest> resolver, + @Nullable VisibilityCache visibilityCache) { + super(new GitilesFilter(config, renderer, urls, accessFactory, resolver, visibilityCache)); } public GitilesServlet() {