Also reformat main servlet code. Background: see https://gerrit-review.googlesource.com/c/77101/. Change-Id: I1a66e301334a2fb9986ac35a5adf0b05e0c0079d
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveFormat.java b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveFormat.java index 152a50a..116bf29 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveFormat.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveFormat.java
@@ -35,6 +35,7 @@ // valid JAR file, whose code would have access to cookies on the domain. private static final ImmutableMap<String, ArchiveFormat> BY_EXT; + static { ImmutableMap.Builder<String, ArchiveFormat> byExt = ImmutableMap.builder(); for (ArchiveFormat format : ArchiveFormat.values()) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java index 851723f..8a3b1e2 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
@@ -57,8 +57,8 @@ return; } - Optional<ArchiveFormat> format = ArchiveFormat.byExtension( - view.getExtension(), getAccess(req).getConfig()); + Optional<ArchiveFormat> format = + ArchiveFormat.byExtension(view.getExtension(), getAccess(req).getConfig()); if (!format.isPresent()) { res.setStatus(SC_NOT_FOUND); return; @@ -95,15 +95,14 @@ } private String getFilename(GitilesView view, Revision rev, String ext) { - StringBuilder sb = new StringBuilder() - .append(PathUtil.basename(view.getRepositoryName())) - .append('-') - .append(rev.getName()); + StringBuilder sb = + new StringBuilder() + .append(PathUtil.basename(view.getRepositoryName())) + .append('-') + .append(rev.getName()); if (view.getPathPart() != null) { - sb.append('-') - .append(view.getPathPart().replace('/', '-')); + sb.append('-').append(view.getPathPart().replace('/', '-')); } - return sb.append(ext) - .toString(); + return sb.append(ext).toString(); } }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java index 476e8cc..49c62df 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -66,6 +66,7 @@ public static BaseServlet notFoundServlet() { return new BaseServlet(null, null) { private static final long serialVersionUID = 1L; + @Override public void service(HttpServletRequest req, HttpServletResponse res) { res.setStatus(SC_NOT_FOUND); @@ -147,8 +148,7 @@ * @param req in-progress request. * @param res in-progress response. */ - protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException { res.sendError(SC_BAD_REQUEST); } @@ -158,8 +158,7 @@ * @param req in-progress request. * @param res in-progress response. */ - protected void doGetText(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doGetText(HttpServletRequest req, HttpServletResponse res) throws IOException { res.sendError(SC_BAD_REQUEST); } @@ -169,8 +168,7 @@ * @param req in-progress request. * @param res in-progress response. */ - protected void doGetJson(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doGetJson(HttpServletRequest req, HttpServletResponse res) throws IOException { res.sendError(SC_BAD_REQUEST); } @@ -202,10 +200,10 @@ * @param soyData data for Soy. * @throws IOException an error occurred during rendering. */ - protected void renderHtml(HttpServletRequest req, HttpServletResponse res, String templateName, - Map<String, ?> soyData) throws IOException { - renderer.render(req, res, templateName, - startHtmlResponse(req, res, soyData)); + protected void renderHtml( + HttpServletRequest req, HttpServletResponse res, String templateName, Map<String, ?> soyData) + throws IOException { + renderer.render(req, res, templateName, startHtmlResponse(req, res, soyData)); } /** @@ -226,22 +224,22 @@ * written only on calling {@code close()}. * @throws IOException an error occurred during rendering the header. */ - protected OutputStream startRenderStreamingHtml(HttpServletRequest req, - HttpServletResponse res, String templateName, Map<String, ?> soyData) throws IOException { + protected OutputStream startRenderStreamingHtml( + HttpServletRequest req, HttpServletResponse res, String templateName, Map<String, ?> soyData) + throws IOException { req.setAttribute(STREAMING_ATTRIBUTE, true); return renderer.renderStreaming(res, templateName, startHtmlResponse(req, res, soyData)); } - private Map<String, ?> startHtmlResponse(HttpServletRequest req, HttpServletResponse res, - Map<String, ?> soyData) throws IOException { + private Map<String, ?> startHtmlResponse( + HttpServletRequest req, HttpServletResponse res, Map<String, ?> soyData) throws IOException { res.setContentType(FormatType.HTML.getMimeType()); res.setCharacterEncoding(UTF_8.name()); setCacheHeaders(res); Map<String, Object> allData = getData(req); - GitilesConfig.putVariant( - getAccess(req).getConfig(), "customHeader", "headerVariant", allData); + GitilesConfig.putVariant(getAccess(req).getConfig(), "customHeader", "headerVariant", allData); allData.putAll(soyData); GitilesView view = ViewFilter.getView(req); if (!allData.containsKey("repositoryName") && view.getRepositoryName() != null) { @@ -263,8 +261,9 @@ * @param src @see com.google.gson.Gson#toJson(Object, Type, Appendable) * @param typeOfSrc @see com.google.gson.Gson#toJson(Object, Type, Appendable) */ - protected void renderJson(HttpServletRequest req, HttpServletResponse res, Object src, - Type typeOfSrc) throws IOException { + protected void renderJson( + HttpServletRequest req, HttpServletResponse res, Object src, Type typeOfSrc) + throws IOException { setApiHeaders(res, JSON); res.setStatus(SC_OK); try (Writer writer = newWriter(req, res)) { @@ -276,9 +275,9 @@ @SuppressWarnings("unused") // Used in subclasses. protected GsonBuilder newGsonBuilder(HttpServletRequest req) throws IOException { return new GsonBuilder() - .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) - .setPrettyPrinting() - .generateNonExecutableJson(); + .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) + .setPrettyPrinting() + .generateNonExecutableJson(); } /** @@ -288,8 +287,8 @@ * @param contentType contentType to set. * @return the response's writer. */ - protected Writer startRenderText(HttpServletRequest req, HttpServletResponse res, - String contentType) throws IOException { + protected Writer startRenderText( + HttpServletRequest req, HttpServletResponse res, String contentType) throws IOException { setApiHeaders(res, contentType); return newWriter(req, res); } @@ -324,8 +323,9 @@ * * @throws IOException */ - protected void renderTextError(HttpServletRequest req, HttpServletResponse res, int statusCode, - String message) throws IOException { + protected void renderTextError( + HttpServletRequest req, HttpServletResponse res, int statusCode, String message) + throws IOException { res.setStatus(statusCode); setApiHeaders(res, TEXT); setCacheHeaders(res); @@ -371,8 +371,7 @@ return new OutputStreamWriter(os, res.getCharacterEncoding()); } - private Writer newWriter(HttpServletRequest req, HttpServletResponse res) - throws IOException { + private Writer newWriter(HttpServletRequest req, HttpServletResponse res) throws IOException { OutputStream out; if (acceptsGzipEncoding(req)) { res.setHeader(HttpHeaders.CONTENT_ENCODING, "gzip"); @@ -388,7 +387,7 @@ if (accepts == null) { return false; } - for (int b = 0; b < accepts.length();) { + for (int b = 0; b < accepts.length(); ) { int comma = accepts.indexOf(',', b); int e = 0 <= comma ? comma : accepts.length(); String term = accepts.substring(b, e).trim();
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BlobSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/BlobSoyData.java index 87fc5c9..09dd548 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/BlobSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/BlobSoyData.java
@@ -61,8 +61,7 @@ this.view = view; } - public Map<String, Object> toSoyData(ObjectId blobId) - throws MissingObjectException, IOException { + public Map<String, Object> toSoyData(ObjectId blobId) throws MissingObjectException, IOException { return toSoyData(null, blobId); } @@ -107,8 +106,11 @@ int last = 0; for (ParseResult r : results) { - checkState(r.getOffset() >= last, - "out-of-order ParseResult, expected %s >= %s", r.getOffset(), last); + checkState( + r.getOffset() >= last, + "out-of-order ParseResult, expected %s >= %s", + r.getOffset(), + last); line = writeResult(lines, null, content, last, r.getOffset()); last = r.getOffset() + r.getLength(); line = writeResult(lines, r.getStyleKeysString(), content, r.getOffset(), last); @@ -132,8 +134,8 @@ } } - private static SoyListData writeResult(SoyListData lines, String classes, - String s, int start, int end) { + private static SoyListData writeResult( + SoyListData lines, String classes, String s, int start, int end) { SoyListData line = lines.getListData(lines.length() - 1); while (true) { int nl = nextLineBreak(s, start, end);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java index f457088..4027d91 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
@@ -100,8 +100,7 @@ return this; } - CommitData build(HttpServletRequest req, RevCommit c, Set<Field> fs) - throws IOException { + CommitData build(HttpServletRequest req, RevCommit c, Set<Field> fs) throws IOException { checkFields(fs); checkNotNull(req, "request"); Repository repo = ServletUtils.getRepository(req); @@ -124,17 +123,15 @@ } } if (fs.contains(Field.URL)) { - result.url = GitilesView.revision() - .copyFrom(view) - .setRevision(c) - .toUrl(); + result.url = GitilesView.revision().copyFrom(view).setRevision(c).toUrl(); } if (fs.contains(Field.LOG_URL)) { result.logUrl = urlFromView(view, c, GitilesView.log()); } if (fs.contains(Field.ARCHIVE_URL)) { - result.archiveUrl = urlFromView(view, c, - GitilesView.archive().setExtension(archiveFormat.getDefaultSuffix())); + result.archiveUrl = + urlFromView( + view, c, GitilesView.archive().setExtension(archiveFormat.getDefaultSuffix())); } if (fs.contains(Field.ARCHIVE_TYPE)) { result.archiveType = archiveFormat; @@ -186,10 +183,11 @@ } } - private static String urlFromView(GitilesView view, RevCommit commit, - GitilesView.Builder builder) { + private static String urlFromView( + GitilesView view, RevCommit commit, GitilesView.Builder builder) { Revision rev = view.getRevision(); - return builder.copyFrom(view) + return builder + .copyFrom(view) .setOldRevision(Revision.NULL) .setRevision(rev.getId().equals(commit) ? rev.getName() : commit.name(), commit) .setPathPart(view.getPathPart()) @@ -200,18 +198,23 @@ if (refsById == null) { refsById = repo.getAllRefsByPeeledObjectId(); } - return FluentIterable.from(firstNonNull(refsById.get(id), ImmutableSet.<Ref> of())) - .filter(new Predicate<Ref>() { - @Override - public boolean apply(Ref ref) { - return ref.getName().startsWith(prefix); - } - }).toSortedList(Ordering.natural().onResultOf(new Function<Ref, String>() { - @Override - public String apply(Ref ref) { - return ref.getName(); - } - })); + return FluentIterable.from(firstNonNull(refsById.get(id), ImmutableSet.<Ref>of())) + .filter( + new Predicate<Ref>() { + @Override + public boolean apply(Ref ref) { + return ref.getName().startsWith(prefix); + } + }) + .toSortedList( + Ordering.natural() + .onResultOf( + new Function<Ref, String>() { + @Override + public String apply(Ref ref) { + return ref.getName(); + } + })); } private AbstractTreeIterator getTreeIterator(RevCommit commit) throws IOException { @@ -223,9 +226,10 @@ private DiffList computeDiffEntries(Repository repo, GitilesView view, RevCommit commit) throws IOException { DiffList result = new DiffList(); - result.revision = view.getRevision().matches(commit) - ? view.getRevision() - : Revision.peeled(commit.name(), commit); + result.revision = + view.getRevision().matches(commit) + ? view.getRevision() + : Revision.peeled(commit.name(), commit); AbstractTreeIterator oldTree; switch (commit.getParentCount()) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java index b1d8d8f..1db047b 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java
@@ -34,8 +34,9 @@ import javax.servlet.http.HttpServletRequest; public class CommitJsonData { - static final ImmutableSet<Field> DEFAULT_FIELDS = Sets.immutableEnumSet( - Field.SHA, Field.TREE, Field.PARENTS, Field.AUTHOR, Field.COMMITTER, Field.MESSAGE); + static final ImmutableSet<Field> DEFAULT_FIELDS = + Sets.immutableEnumSet( + Field.SHA, Field.TREE, Field.PARENTS, Field.AUTHOR, Field.COMMITTER, Field.MESSAGE); public static class Log { public List<Commit> log; @@ -85,9 +86,7 @@ Commit toJsonData(HttpServletRequest req, RevCommit c, Set<Field> fs, DateFormatter df) throws IOException { - CommitData cd = new CommitData.Builder() - .setRevWalk(walk) - .build(req, c, fs); + CommitData cd = new CommitData.Builder().setRevWalk(walk).build(req, c, fs); Commit result = new Commit(); if (cd.sha != null) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java index 9e5a9fe..d5bd8fd 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
@@ -47,12 +47,21 @@ /** Soy data converter for git commits. */ public class CommitSoyData { - static final ImmutableSet<Field> DEFAULT_FIELDS = Sets.immutableEnumSet(Field.AUTHOR, - Field.COMMITTER, Field.SHA, Field.TREE, Field.TREE_URL, Field.PARENTS, Field.MESSAGE, - Field.LOG_URL, Field.ARCHIVE_URL, Field.ARCHIVE_TYPE); + static final ImmutableSet<Field> DEFAULT_FIELDS = + Sets.immutableEnumSet( + Field.AUTHOR, + Field.COMMITTER, + Field.SHA, + Field.TREE, + Field.TREE_URL, + Field.PARENTS, + Field.MESSAGE, + Field.LOG_URL, + Field.ARCHIVE_URL, + Field.ARCHIVE_TYPE); - private static final ImmutableSet<Field> NESTED_FIELDS = Sets.immutableEnumSet( - Field.PARENT_BLAME_URL); + private static final ImmutableSet<Field> NESTED_FIELDS = + Sets.immutableEnumSet(Field.PARENT_BLAME_URL); private Linkifier linkifier; private RevWalk walk; @@ -74,17 +83,14 @@ return this; } - Map<String, Object> toSoyData(HttpServletRequest req, RevCommit c, Set<Field> fs, - DateFormatter df) throws IOException { + Map<String, Object> toSoyData( + HttpServletRequest req, RevCommit c, Set<Field> fs, DateFormatter df) throws IOException { GitilesView view = ViewFilter.getView(req); if (cdb == null) { cdb = new CommitData.Builder(); } - CommitData cd = cdb - .setRevWalk(walk) - .setArchiveFormat(archiveFormat) - .build(req, c, fs); + CommitData cd = cdb.setRevWalk(walk).setArchiveFormat(archiveFormat).build(req, c, fs); Map<String, Object> data = Maps.newHashMapWithExpectedSize(fs.size()); if (cd.author != null) { @@ -139,13 +145,16 @@ if (cd.diffEntries != null) { data.put("diffTree", toSoyData(view, cd.diffEntries)); } - checkState(Sets.difference(fs, NESTED_FIELDS).size() == data.size(), - "bad commit data fields: %s != %s", fs, data.keySet()); + checkState( + Sets.difference(fs, NESTED_FIELDS).size() == data.size(), + "bad commit data fields: %s != %s", + fs, + data.keySet()); return data; } - Map<String, Object> toSoyData(HttpServletRequest req, RevCommit commit, - DateFormatter df) throws IOException { + Map<String, Object> toSoyData(HttpServletRequest req, RevCommit commit, DateFormatter df) + throws IOException { return toSoyData(req, commit, DEFAULT_FIELDS, df); } @@ -159,8 +168,8 @@ "relativeTime", RelativeDateFormatter.format(ident.getWhen())); } - private List<Map<String, String>> toSoyData(GitilesView view, Set<Field> fs, - List<RevCommit> parents) { + private List<Map<String, String>> toSoyData( + GitilesView view, Set<Field> fs, List<RevCommit> parents) { List<Map<String, String>> result = Lists.newArrayListWithCapacity(parents.size()); int i = 1; // TODO(dborowitz): Render something slightly different when we're actively @@ -180,17 +189,16 @@ Map<String, String> e = Maps.newHashMapWithExpectedSize(4); e.put("sha", name); - e.put("url", GitilesView.revision() - .copyFrom(view) - .setRevision(parentName, parent) - .toUrl()); + e.put("url", GitilesView.revision().copyFrom(view).setRevision(parentName, parent).toUrl()); e.put("diffUrl", diff.toUrl()); if (fs.contains(Field.PARENT_BLAME_URL)) { // Assumes caller has ensured path is a file. - e.put("blameUrl", GitilesView.blame() - .copyFrom(view) - .setRevision(Revision.peeled(parentName, parent)) - .toUrl()); + e.put( + "blameUrl", + GitilesView.blame() + .copyFrom(view) + .setRevision(Revision.peeled(parentName, parent)) + .toUrl()); } result.add(e); } @@ -201,11 +209,12 @@ if (dl.oldRevision == null) { return NullData.INSTANCE; } - GitilesView.Builder diffUrl = GitilesView.diff() - .copyFrom(view) - .setOldRevision(dl.oldRevision) - .setRevision(dl.revision) - .setPathPart(""); + GitilesView.Builder diffUrl = + GitilesView.diff() + .copyFrom(view) + .setOldRevision(dl.oldRevision) + .setRevision(dl.revision) + .setPathPart(""); List<Object> result = Lists.newArrayListWithCapacity(dl.entries.size()); for (DiffEntry e : dl.entries) { @@ -213,18 +222,22 @@ ChangeType type = e.getChangeType(); if (type != DELETE) { entry.put("path", e.getNewPath()); - entry.put("url", GitilesView.path() - .copyFrom(view) - .setRevision(dl.revision) - .setPathPart(e.getNewPath()) - .toUrl()); + entry.put( + "url", + GitilesView.path() + .copyFrom(view) + .setRevision(dl.revision) + .setPathPart(e.getNewPath()) + .toUrl()); } else { entry.put("path", e.getOldPath()); - entry.put("url", GitilesView.path() - .copyFrom(view) - .setRevision(dl.oldRevision) - .setPathPart(e.getOldPath()) - .toUrl()); + entry.put( + "url", + GitilesView.path() + .copyFrom(view) + .setRevision(dl.oldRevision) + .setPathPart(e.getOldPath()) + .toUrl()); } entry.put("diffUrl", diffUrl.setAnchor("F" + result.size()).toUrl()); entry.put("changeType", e.getChangeType().toString()); @@ -236,17 +249,19 @@ return result; } - private static List<Map<String, String>> toSoyData(GitilesView view, List<Ref> refs, - String prefix) { + private static List<Map<String, String>> toSoyData( + GitilesView view, List<Ref> refs, String prefix) { List<Map<String, String>> result = Lists.newArrayListWithCapacity(refs.size()); for (Ref ref : refs) { if (ref.getName().startsWith(prefix)) { - result.add(ImmutableMap.of( - "name", ref.getName().substring(prefix.length()), - "url", GitilesView.revision() - .copyFrom(view) - .setRevision(Revision.unpeeled(ref.getName(), ref.getObjectId())) - .toUrl())); + result.add( + ImmutableMap.of( + "name", ref.getName().substring(prefix.length()), + "url", + GitilesView.revision() + .copyFrom(view) + .setRevision(Revision.unpeeled(ref.getName(), ref.getObjectId())) + .toUrl())); } } return result;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java b/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java index e167f94..0fedbf4 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java
@@ -43,15 +43,15 @@ * @param defaultValue value to use when the value is not assigned. * @return a standard duration representing the time read, or defaultValue. */ - public static Duration getDuration(Config config, String section, String subsection, String name, - Duration defaultValue) { + public static Duration getDuration( + Config config, String section, String subsection, String name, Duration defaultValue) { String valStr = config.getString(section, subsection, name); if (valStr == null) { - return defaultValue; + return defaultValue; } valStr = valStr.trim(); if (valStr.isEmpty()) { - return defaultValue; + return defaultValue; } Duration val = parseDuration(valStr); if (val == null) { @@ -162,21 +162,19 @@ * {@link TimeZone#getTimeZone(String)}, unknown time zones are treated as * GMT. */ - public static Optional<TimeZone> getTimeZone(Config config, String section, String subsection, - String name) { + public static Optional<TimeZone> getTimeZone( + Config config, String section, String subsection, String name) { String id = config.getString(section, subsection, name); - return id != null ? Optional.of(TimeZone.getTimeZone(id)) : Optional.<TimeZone> absent(); + return id != null ? Optional.of(TimeZone.getTimeZone(id)) : Optional.<TimeZone>absent(); } private static Matcher matcher(String pattern, String valStr) { - return Pattern.compile(pattern).matcher(valStr); + return Pattern.compile(pattern).matcher(valStr); } private static boolean anyOf(String a, String... cases) { - return Iterables.any(ImmutableList.copyOf(cases), - Predicates.equalTo(a.toLowerCase())); + return Iterables.any(ImmutableList.copyOf(cases), Predicates.equalTo(a.toLowerCase())); } - private ConfigUtil() { - } + private ConfigUtil() {} }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java b/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java index 0a57b6b..dd6830d 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java
@@ -28,11 +28,15 @@ /** Renderer that reloads Soy templates from the filesystem on every request. */ public class DebugRenderer extends Renderer { - public DebugRenderer(String staticPrefix, Iterable<String> customTemplatesFilenames, - final String soyTemplatesRoot, String siteTitle) { + public DebugRenderer( + String staticPrefix, + Iterable<String> customTemplatesFilenames, + final String soyTemplatesRoot, + String siteTitle) { super( new FileUrlMapper(soyTemplatesRoot + File.separator), - ImmutableMap.<String, String> of(), staticPrefix, + ImmutableMap.<String, String>of(), + staticPrefix, FluentIterable.from(customTemplatesFilenames).transform(new FileUrlMapper()), siteTitle); } @@ -44,8 +48,7 @@ @Override protected SoyTofu getTofu() { - SoyFileSet.Builder builder = SoyFileSet.builder() - .setCompileTimeGlobals(globals); + SoyFileSet.Builder builder = SoyFileSet.builder().setCompileTimeGlobals(globals); for (URL template : templates.values()) { try { checkState(new File(template.toURI()).exists(), "Missing Soy template %s", template);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java index 0e435c6..a31be1c 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
@@ -57,7 +57,7 @@ private static final String ANONYMOUS_USER_KEY = "anonymous user"; private static final String DEFAULT_DESCRIPTION = - "Unnamed repository; edit this file 'description' to name the repository."; + "Unnamed repository; edit this file 'description' to name the repository."; private static final Collator US_COLLATOR = Collator.getInstance(Locale.US); @@ -68,8 +68,12 @@ private final Config baseConfig; private final FileResolver<HttpServletRequest> resolver; - Factory(File basePath, String baseGitUrl, Config baseConfig, - FileResolver<HttpServletRequest> resolver) throws IOException { + Factory( + File basePath, + String baseGitUrl, + Config baseConfig, + FileResolver<HttpServletRequest> resolver) + throws IOException { this.basePath = checkNotNull(basePath, "basePath"); this.baseGitUrl = checkNotNull(baseGitUrl, "baseGitUrl"); this.baseConfig = checkNotNull(baseConfig, "baseConfig"); @@ -82,8 +86,12 @@ return newAccess(basePath, canonicalBasePath, baseGitUrl, resolver, req); } - protected DefaultAccess newAccess(File basePath, String canonicalBasePath, String baseGitUrl, - FileResolver<HttpServletRequest> resolver, HttpServletRequest req) { + protected DefaultAccess newAccess( + File basePath, + String canonicalBasePath, + String baseGitUrl, + FileResolver<HttpServletRequest> resolver, + HttpServletRequest req) { return new DefaultAccess(basePath, canonicalBasePath, baseGitUrl, baseConfig, resolver, req); } } @@ -95,8 +103,13 @@ protected final FileResolver<HttpServletRequest> resolver; protected final HttpServletRequest req; - protected DefaultAccess(File basePath, String canonicalBasePath, String baseGitUrl, - Config baseConfig, FileResolver<HttpServletRequest> resolver, HttpServletRequest req) { + protected DefaultAccess( + File basePath, + String canonicalBasePath, + String baseGitUrl, + Config baseConfig, + FileResolver<HttpServletRequest> resolver, + HttpServletRequest req) { this.basePath = checkNotNull(basePath, "basePath"); this.canonicalBasePath = checkNotNull(canonicalBasePath, "canonicalBasePath"); this.baseGitUrl = checkNotNull(baseGitUrl, "baseGitUrl"); @@ -106,8 +119,8 @@ } @Override - public Map<String, RepositoryDescription> listRepositories(String prefix, - Set<String> branches) throws IOException { + public Map<String, RepositoryDescription> listRepositories(String prefix, Set<String> branches) + throws IOException { Map<String, RepositoryDescription> repos = Maps.newTreeMap(US_COLLATOR); for (Repository repo : scanRepositories(basePath, prefix, req)) { repos.put(getRepositoryName(repo), buildDescription(repo, branches)); @@ -130,7 +143,7 @@ @Override public RepositoryDescription getRepositoryDescription() throws IOException { - return buildDescription(ServletUtils.getRepository(req), Collections.<String> emptySet()); + return buildDescription(ServletUtils.getRepository(req), Collections.<String>emptySet()); } @Override @@ -170,8 +183,8 @@ if (path.startsWith(canonicalBasePath)) { return path.substring(canonicalBasePath.length() + 1); } - throw new IllegalStateException(String.format( - "Repository path %s is outside base path %s", path, base)); + throw new IllegalStateException( + String.format("Repository path %s is outside base path %s", path, base)); } private String loadDescriptionText(Repository repo) throws IOException { @@ -223,8 +236,8 @@ return "refs/heads/" + name; } - private Collection<Repository> scanRepositories(File basePath, String prefix, - HttpServletRequest req) throws IOException { + private Collection<Repository> scanRepositories( + File basePath, String prefix, HttpServletRequest req) throws IOException { List<Repository> repos = Lists.newArrayList(); Queue<File> todo = initScan(basePath, prefix); while (!todo.isEmpty()) { @@ -243,8 +256,7 @@ return repos; } - private Queue<File> initScan(File basePath, String prefix) - throws IOException { + private Queue<File> initScan(File basePath, String prefix) throws IOException { Queue<File> todo = Queues.newArrayDeque(); File[] entries; if (isValidPrefix(prefix)) { @@ -262,7 +274,8 @@ private static boolean isValidPrefix(String prefix) { return !Strings.isNullOrEmpty(prefix) - && !prefix.equals(".") && !prefix.equals("..") + && !prefix.equals(".") + && !prefix.equals("..") && !prefix.contains("../") && !prefix.endsWith("/.."); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java index f3f244b..238aa74 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java
@@ -29,15 +29,18 @@ private final SoyTofu tofu; DefaultRenderer() { - this("", ImmutableList.<URL> of(), ""); + this("", ImmutableList.<URL>of(), ""); } public DefaultRenderer(String staticPrefix, Iterable<URL> customTemplates, String siteTitle) { - this(ImmutableMap.<String, String> of(), staticPrefix, customTemplates, siteTitle); + this(ImmutableMap.<String, String>of(), staticPrefix, customTemplates, siteTitle); } - public DefaultRenderer(Map<String, String> globals, String staticPrefix, - Iterable<URL> customTemplates, String siteTitle) { + public DefaultRenderer( + Map<String, String> globals, + String staticPrefix, + Iterable<URL> customTemplates, + String siteTitle) { super( new Function<String, URL>() { @Override @@ -45,9 +48,11 @@ return Resources.getResource(Renderer.class, "templates/" + name); } }, - globals, staticPrefix, customTemplates, siteTitle); - SoyFileSet.Builder builder = SoyFileSet.builder() - .setCompileTimeGlobals(this.globals); + globals, + staticPrefix, + customTemplates, + siteTitle); + SoyFileSet.Builder builder = SoyFileSet.builder().setCompileTimeGlobals(this.globals); for (URL template : templates.values()) { builder.add(template); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java index 949fbab..adc280a 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
@@ -49,8 +49,7 @@ private static boolean getBooleanParam(GitilesView view, String name) { List<String> values = view.getParameters().get(name); - return !values.isEmpty() - && (values.get(0).isEmpty() || values.get(0).equals("1")); + return !values.isEmpty() && (values.get(0).isEmpty() || values.get(0).equals("1")); } protected DescribeServlet(GitilesAccess.Factory accessFactory) { @@ -58,8 +57,7 @@ } @Override - protected void doGetText(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doGetText(HttpServletRequest req, HttpServletResponse res) throws IOException { String name = describe(ServletUtils.getRepository(req), ViewFilter.getView(req), req, res); if (name == null) { return; @@ -70,36 +68,47 @@ } @Override - protected void doGetJson(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doGetJson(HttpServletRequest req, HttpServletResponse res) throws IOException { String name = describe(ServletUtils.getRepository(req), ViewFilter.getView(req), req, res); if (name == null) { return; } - renderJson(req, res, + renderJson( + req, + res, ImmutableMap.of(ViewFilter.getView(req).getPathPart(), name), new TypeToken<Map<String, String>>() {}.getType()); } - private ObjectId resolve(Repository repo, GitilesView view, HttpServletRequest req, - HttpServletResponse res) throws IOException { + private ObjectId resolve( + Repository repo, GitilesView view, HttpServletRequest req, HttpServletResponse res) + throws IOException { String rev = view.getPathPart(); try { return repo.resolve(rev); } catch (RevisionSyntaxException e) { - renderTextError(req, res, SC_BAD_REQUEST, + renderTextError( + req, + res, + SC_BAD_REQUEST, "Invalid revision syntax: " + RefServlet.sanitizeRefForText(rev)); return null; } catch (AmbiguousObjectException e) { - renderTextError(req, res, SC_BAD_REQUEST, String.format( - "Ambiguous short SHA-1 %s (%s)", - e.getAbbreviatedObjectId(), Joiner.on(", ").join(e.getCandidates()))); + renderTextError( + req, + res, + SC_BAD_REQUEST, + String.format( + "Ambiguous short SHA-1 %s (%s)", + e.getAbbreviatedObjectId(), + Joiner.on(", ").join(e.getCandidates()))); return null; } } - private String describe(Repository repo, GitilesView view, HttpServletRequest req, - HttpServletResponse res) throws IOException { + private String describe( + Repository repo, GitilesView view, HttpServletRequest req, HttpServletResponse res) + throws IOException { if (!getBooleanParam(view, CONTAINS_PARAM)) { res.setStatus(SC_BAD_REQUEST); return null; @@ -125,8 +134,8 @@ return name; } - private NameRevCommand nameRevCommand(Git git, ObjectId id, - HttpServletRequest req, HttpServletResponse res) throws IOException { + private NameRevCommand nameRevCommand( + Git git, ObjectId id, HttpServletRequest req, HttpServletResponse res) throws IOException { GitilesView view = ViewFilter.getView(req); NameRevCommand cmd = git.nameRev(); boolean all = getBooleanParam(view, ALL_PARAM);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java index 788eb07..90d5170 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
@@ -93,10 +93,12 @@ } GitilesAccess access = getAccess(req); DateFormatter df = new DateFormatter(access, Format.DEFAULT); - data.put("commit", new CommitSoyData() - .setLinkifier(linkifier) - .setArchiveFormat(getArchiveFormat(access)) - .toSoyData(req, walk.parseCommit(view.getRevision().getId()), fs, df)); + data.put( + "commit", + new CommitSoyData() + .setLinkifier(linkifier) + .setArchiveFormat(getArchiveFormat(access)) + .toSoyData(req, walk.parseCommit(view.getRevision().getId()), fs, df)); } if (!data.containsKey("repositoryName") && (view.getRepositoryName() != null)) { data.put("repositoryName", view.getRepositoryName()); @@ -107,15 +109,14 @@ setCacheHeaders(res); try (OutputStream out = startRenderStreamingHtml(req, res, "gitiles.diffDetail", data); - DiffFormatter diff = new HtmlDiffFormatter(renderer, view, out)) { + DiffFormatter diff = new HtmlDiffFormatter(renderer, view, out)) { formatDiff(repo, oldTree, newTree, view.getPathPart(), diff); } } } @Override - protected void doGetText(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doGetText(HttpServletRequest req, HttpServletResponse res) throws IOException { GitilesView view = ViewFilter.getView(req); Repository repo = ServletUtils.getRepository(req); @@ -143,9 +144,7 @@ return null; } return TreeWalk.forPath( - walk.getObjectReader(), - view.getPathPart(), - walk.parseTree(view.getRevision().getId())); + walk.getObjectReader(), view.getPathPart(), walk.parseTree(view.getRevision().getId())); } private static boolean isParentOf(RevWalk walk, Revision oldRevision, Revision newRevision) @@ -162,8 +161,13 @@ return (tw.getRawMode(0) & FileMode.TYPE_FILE) > 0; } - private static void formatDiff(Repository repo, AbstractTreeIterator oldTree, - AbstractTreeIterator newTree, String path, DiffFormatter diff) throws IOException { + private static void formatDiff( + Repository repo, + AbstractTreeIterator oldTree, + AbstractTreeIterator newTree, + String path, + DiffFormatter diff) + throws IOException { if (!path.isEmpty()) { diff.setPathFilter(PathFilter.create(path)); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/FormatType.java b/gitiles-servlet/src/main/java/com/google/gitiles/FormatType.java index 1d2f61c..c78ea25 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/FormatType.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/FormatType.java
@@ -32,8 +32,7 @@ public static Optional<FormatType> getFormatType(HttpServletRequest req) { @SuppressWarnings("unchecked") - Optional<FormatType> result = - (Optional<FormatType>) req.getAttribute(FORMAT_TYPE_ATTRIBUTE); + Optional<FormatType> result = (Optional<FormatType>) req.getAttribute(FORMAT_TYPE_ATTRIBUTE); if (result != null) { return result; } @@ -58,8 +57,7 @@ return set(req, Optional.of(DEFAULT)); } - private static Optional<FormatType> set(HttpServletRequest req, - Optional<FormatType> format) { + private static Optional<FormatType> set(HttpServletRequest req, Optional<FormatType> format) { req.setAttribute(FORMAT_TYPE_ATTRIBUTE, format); return format; }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java index 6434e55..2977507 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java
@@ -54,8 +54,7 @@ */ public Map<String, RepositoryDescription> listRepositories( @Nullable String prefix, Set<String> branches) - throws ServiceNotEnabledException, ServiceNotAuthorizedException, - IOException; + throws ServiceNotEnabledException, ServiceNotAuthorizedException, IOException; /** * @return an opaque object that uniquely identifies the end-user making the
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 a196c07..4f7b40f 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java
@@ -53,8 +53,8 @@ return config; } - public static void putVariant(Config config, String templateName, String keyName, - Map<String, ? super String> out) { + public static void putVariant( + Config config, String templateName, String keyName, Map<String, ? super String> out) { String variant = config.getString("template", null, templateName); if (variant != null) { out.put(keyName, variant);
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 d1960b8..4e5da10 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
@@ -77,52 +77,65 @@ private static final String CMD = "\\+[a-z0-9-]*"; @VisibleForTesting - static final Pattern ROOT_REGEX = Pattern.compile("" - + "^( " // 1. Everything - + " /* " // Excess slashes - + " (/) " // 2. Repo name (just slash) - + " () " // 3. Command - + " () " // 4. Path - + ")$ ", - Pattern.COMMENTS); + static final Pattern ROOT_REGEX = + Pattern.compile( + "" + + "^( " // 1. Everything + + " /* " // Excess slashes + + " (/) " // 2. Repo name (just slash) + + " () " // 3. Command + + " () " // 4. Path + + ")$ ", + Pattern.COMMENTS); @VisibleForTesting - static final Pattern REPO_REGEX = Pattern.compile("" - + "^( " // 1. Everything - + " /* " // Excess slashes - + " ( " // 2. Repo name - + " / " // Leading slash - + " (?:.(?! " // Anything, as long as it's not followed by... - + " /" + CMD + "/ " // the special "/<CMD>/" separator, - + " |/" + CMD + "$ " // or "/<CMD>" at the end of the string - + " ))*? " - + " ) " - + " /* " // Trailing slashes - + " () " // 3. Command - + " () " // 4. Path - + ")$ ", - Pattern.COMMENTS); + static final Pattern REPO_REGEX = + Pattern.compile( + "" + + "^( " // 1. Everything + + " /* " // Excess slashes + + " ( " // 2. Repo name + + " / " // Leading slash + + " (?:.(?! " // Anything, as long as it's not followed by... + + " /" + + CMD + + "/ " // the special "/<CMD>/" separator, + + " |/" + + CMD + + "$ " // or "/<CMD>" at the end of the string + + " ))*? " + + " ) " + + " /* " // Trailing slashes + + " () " // 3. Command + + " () " // 4. Path + + ")$ ", + Pattern.COMMENTS); @VisibleForTesting - static final Pattern REPO_PATH_REGEX = Pattern.compile("" - + "^( " // 1. Everything - + " /* " // Excess slashes - + " ( " // 2. Repo name - + " / " // Leading slash - + " .*? " // Anything, non-greedy - + " ) " - + " /(" + CMD + ")" // 3. Command - + " ( " // 4. Path - + " (?:/.*)? " // Slash path, or nothing. - + " ) " - + ")$ ", - Pattern.COMMENTS); + static final Pattern REPO_PATH_REGEX = + Pattern.compile( + "" + + "^( " // 1. Everything + + " /* " // Excess slashes + + " ( " // 2. Repo name + + " / " // Leading slash + + " .*? " // Anything, non-greedy + + " ) " + + " /(" + + CMD + + ")" // 3. Command + + " ( " // 4. Path + + " (?:/.*)? " // Slash path, or nothing. + + " ) " + + ")$ ", + Pattern.COMMENTS); private static class DispatchFilter extends AbstractHttpFilter { private final ListMultimap<GitilesView.Type, Filter> filters; private final Map<GitilesView.Type, HttpServlet> servlets; - private DispatchFilter(ListMultimap<GitilesView.Type, Filter> filters, + private DispatchFilter( + ListMultimap<GitilesView.Type, Filter> filters, Map<GitilesView.Type, HttpServlet> servlets) { this.filters = LinkedListMultimap.create(filters); this.servlets = ImmutableMap.copyOf(servlets); @@ -166,8 +179,7 @@ private GitwebRedirectFilter gitwebRedirect; private boolean initialized; - GitilesFilter() { - } + GitilesFilter() {} GitilesFilter( Config config, @@ -213,10 +225,7 @@ } root.through(dispatchFilter); - serveRegex(REPO_REGEX) - .through(repositoryFilter) - .through(viewFilter) - .through(dispatchFilter); + serveRegex(REPO_REGEX).through(repositoryFilter).through(viewFilter).through(dispatchFilter); serveRegex(REPO_PATH_REGEX) .through(repositoryFilter) @@ -270,8 +279,7 @@ synchronized void setHandler(GitilesView.Type view, HttpServlet handler) { checkNotInitialized(); - servlets.put(checkNotNull(view, "view"), - checkNotNull(handler, "handler for %s", view)); + servlets.put(checkNotNull(view, "view"), checkNotNull(handler, "handler for %s", view)); } private synchronized void checkNotInitialized() { @@ -309,22 +317,24 @@ private void setDefaultRenderer(FilterConfig filterConfig) { if (renderer == null) { - renderer = new DefaultRenderer( - filterConfig.getServletContext().getContextPath() + STATIC_PREFIX, - FluentIterable.from(Arrays.asList( - config.getStringList("gitiles", null, "customTemplates"))) - .transform(new FileUrlMapper()), - firstNonNull(config.getString("gitiles", null, "siteTitle"), "Gitiles")); + renderer = + new DefaultRenderer( + filterConfig.getServletContext().getContextPath() + STATIC_PREFIX, + FluentIterable.from( + Arrays.asList(config.getStringList("gitiles", null, "customTemplates"))) + .transform(new FileUrlMapper()), + firstNonNull(config.getString("gitiles", null, "siteTitle"), "Gitiles")); } } private void setDefaultUrls() throws ServletException { if (urls == null) { try { - urls = new DefaultUrls( - config.getString("gitiles", null, "canonicalHostName"), - getBaseGitUrl(config), - config.getString("gitiles", null, "gerritUrl")); + urls = + new DefaultUrls( + config.getString("gitiles", null, "canonicalHostName"), + getBaseGitUrl(config), + config.getString("gitiles", null, "gerritUrl")); } catch (UnknownHostException e) { throw new ServletException(e); } @@ -351,11 +361,9 @@ if (accessFactory == null) { checkState(fileResolver != null, "need a FileResolver when GitilesAccess.Factory not set"); try { - accessFactory = new DefaultAccess.Factory( - new File(basePath), - getBaseGitUrl(config), - config, - fileResolver); + accessFactory = + new DefaultAccess.Factory( + new File(basePath), getBaseGitUrl(config), config, fileResolver); } catch (IOException e) { throw new ServletException(e); }
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 a3c15b3..7a14ba2 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java
@@ -56,9 +56,17 @@ @Nullable TimeCache timeCache, @Nullable BlameCache blameCache, @Nullable GitwebRedirectFilter gitwebRedirect) { - super(new GitilesFilter( - config, renderer, urls, accessFactory, resolver, visibilityCache, timeCache, blameCache, - gitwebRedirect)); + super( + new GitilesFilter( + config, + renderer, + urls, + accessFactory, + resolver, + visibilityCache, + timeCache, + blameCache, + gitwebRedirect)); } public GitilesServlet() { @@ -72,28 +80,30 @@ @Override public void init(final ServletConfig config) throws ServletException { - getDelegateFilter().init(new FilterConfig() { - @Override - public String getFilterName() { - return getDelegateFilter().getClass().getName(); - } + getDelegateFilter() + .init( + new FilterConfig() { + @Override + public String getFilterName() { + return getDelegateFilter().getClass().getName(); + } - @Override - public String getInitParameter(String name) { - return config.getInitParameter(name); - } + @Override + public String getInitParameter(String name) { + return config.getInitParameter(name); + } - @SuppressWarnings("rawtypes") - @Override - public Enumeration getInitParameterNames() { - return config.getInitParameterNames(); - } + @SuppressWarnings("rawtypes") + @Override + public Enumeration getInitParameterNames() { + return config.getInitParameterNames(); + } - @Override - public ServletContext getServletContext() { - return config.getServletContext(); - } - }); + @Override + public ServletContext getServletContext() { + return config.getServletContext(); + } + }); } /**
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java index fdf577d..6308a76 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java
@@ -35,21 +35,22 @@ * should not be encoded, while almost any other non-alpha, non-numeric * character will be encoded using URL style encoding. */ - public static final Function<String, String> NAME_ESCAPER = new Function<String, String>() { - @Override - public String apply(String s) { - try { - return URLEncoder.encode(s, UTF_8.name()) - .replace("%2F", "/") - .replace("%2f", "/") - .replace("+", "%20") - .replace("%2B", "+") - .replace("%2b", "+"); - } catch (UnsupportedEncodingException e) { - throw new IllegalStateException(e); - } - } - }; + public static final Function<String, String> NAME_ESCAPER = + new Function<String, String>() { + @Override + public String apply(String s) { + try { + return URLEncoder.encode(s, UTF_8.name()) + .replace("%2F", "/") + .replace("%2f", "/") + .replace("+", "%20") + .replace("%2B", "+") + .replace("%2b", "+"); + } catch (UnsupportedEncodingException e) { + throw new IllegalStateException(e); + } + } + }; /** * Return the name of the host from the request.
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java index 0e7dc59..0a76b7d 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -171,9 +171,8 @@ public Builder setRepositoryPrefix(String prefix) { switch (type) { case HOST_INDEX: - this.repositoryPrefix = prefix != null - ? Strings.emptyToNull(maybeTrimLeadingAndTrailingSlash(prefix)) - : null; + this.repositoryPrefix = + prefix != null ? Strings.emptyToNull(maybeTrimLeadingAndTrailingSlash(prefix)) : null; return this; default: throw new IllegalStateException( @@ -184,8 +183,8 @@ public Builder setRepositoryName(String repositoryName) { switch (type) { case HOST_INDEX: - throw new IllegalStateException(String.format( - "cannot set repository name on %s view", type)); + throw new IllegalStateException( + String.format("cannot set repository name on %s view", type)); default: this.repositoryName = checkNotNull(repositoryName); return this; @@ -362,8 +361,17 @@ checkRootedDoc(); break; } - return new GitilesView(type, hostName, servletPath, repositoryPrefix, - repositoryName, revision, oldRevision, path, extension, params, + return new GitilesView( + type, + hostName, + servletPath, + repositoryPrefix, + repositoryName, + revision, + oldRevision, + path, + extension, + params, anchor); } @@ -500,7 +508,8 @@ private final ListMultimap<String, String> params; private final String anchor; - private GitilesView(Type type, + private GitilesView( + Type type, String hostName, String servletPath, String repositoryPrefix, @@ -598,16 +607,17 @@ @Override public String toString() { - ToStringHelper b = toStringHelper(type.toString()) - .omitNullValues() - .add("host", hostName) - .add("servlet", servletPath) - .add("prefix", repositoryPrefix) - .add("repo", repositoryName) - .add("rev", revision) - .add("old", oldRevision) - .add("path", path) - .add("extension", extension); + ToStringHelper b = + toStringHelper(type.toString()) + .omitNullValues() + .add("host", hostName) + .add("servlet", servletPath) + .add("prefix", repositoryPrefix) + .add("repo", repositoryName) + .add("rev", revision) + .add("old", oldRevision) + .add("path", path) + .add("extension", extension); if (!params.isEmpty()) { b.add("params", params); } @@ -650,12 +660,18 @@ url.append(firstNonNull(extension, DEFAULT_ARCHIVE_EXTENSION)); break; case PATH: - url.append(repositoryName).append("/+/").append(revision.getName()).append('/') + url.append(repositoryName) + .append("/+/") + .append(revision.getName()) + .append('/') .append(path); break; case SHOW: - url.append(repositoryName).append("/+show/").append(revision.getName()) - .append('/').append(path); + url.append(repositoryName) + .append("/+show/") + .append(revision.getName()) + .append('/') + .append(path); break; case DIFF: url.append(repositoryName).append("/+/"); @@ -680,7 +696,10 @@ } break; case BLAME: - url.append(repositoryName).append("/+blame/").append(revision.getName()).append('/') + url.append(repositoryName) + .append("/+blame/") + .append(revision.getName()) + .append('/') .append(path); break; case DOC: @@ -736,12 +755,12 @@ * auto-diving into one-entry subtrees. */ public List<Map<String, String>> getBreadcrumbs(List<Boolean> hasSingleTree) { - checkArgument(!NON_HTML_TYPES.contains(type), - "breadcrumbs for %s view not supported", type); - checkArgument(type != Type.REFS || Strings.isNullOrEmpty(path), + checkArgument(!NON_HTML_TYPES.contains(type), "breadcrumbs for %s view not supported", type); + checkArgument( + type != Type.REFS || Strings.isNullOrEmpty(path), "breadcrumbs for REFS view with path not supported"); - checkArgument(hasSingleTree == null || type == Type.PATH, - "hasSingleTree must be null for %s view", type); + checkArgument( + hasSingleTree == null || type == Type.PATH, "hasSingleTree must be null for %s view", type); String path = this.path; ImmutableList.Builder<Map<String, String>> breadcrumbs = ImmutableList.builder(); breadcrumbs.add(breadcrumb(hostName, hostIndex().copyFrom(this).setRepositoryPrefix(null))); @@ -777,9 +796,10 @@ } StringBuilder cur = new StringBuilder(); List<String> parts = PathUtil.SPLITTER.omitEmptyStrings().splitToList(path); - checkArgument(hasSingleTree == null - || (parts.isEmpty() && hasSingleTree.isEmpty()) - || hasSingleTree.size() == parts.size() - 1, + checkArgument( + hasSingleTree == null + || (parts.isEmpty() && hasSingleTree.isEmpty()) + || hasSingleTree.size() == parts.size() - 1, "hasSingleTree has wrong number of entries"); for (int i = 0; i < parts.size(); i++) { String part = parts.get(i); @@ -801,9 +821,7 @@ List<Map<String, String>> r = new ArrayList<>(parts.size()); for (int i = 0; i < parts.size(); i++) { String prefix = Joiner.on('/').join(parts.subList(0, i + 1)); - r.add(breadcrumb( - parts.get(i), - hostIndex().copyFrom(this).setRepositoryPrefix(prefix))); + r.add(breadcrumb(parts.get(i), hostIndex().copyFrom(this).setRepositoryPrefix(prefix))); } return r; } @@ -840,21 +858,20 @@ @VisibleForTesting static String paramsToString(ListMultimap<String, String> params) { try { - StringBuilder sb = new StringBuilder(); - boolean first = true; - for (Map.Entry<String, String> e : params.entries()) { - if (!first) { - sb.append('&'); - } else { - first = false; + StringBuilder sb = new StringBuilder(); + boolean first = true; + for (Map.Entry<String, String> e : params.entries()) { + if (!first) { + sb.append('&'); + } else { + first = false; + } + sb.append(URLEncoder.encode(e.getKey(), UTF_8.name())); + if (!"".equals(e.getValue())) { + sb.append('=').append(URLEncoder.encode(e.getValue(), UTF_8.name())); + } } - sb.append(URLEncoder.encode(e.getKey(), UTF_8.name())); - if (!"".equals(e.getValue())) { - sb.append('=') - .append(URLEncoder.encode(e.getValue(), UTF_8.name())); - } - } - return sb.toString(); + return sb.toString(); } catch (UnsupportedEncodingException e) { throw new IllegalStateException(e); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java index ddf65b4..6578891 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
@@ -97,29 +97,26 @@ } else if ("log".equals(action) || "shortlog".equals(action)) { view = GitilesView.log().setRevision(firstNonNull(hash, Revision.HEAD)); } else if ("tree".equals(action)) { - view = GitilesView.path() - .setRevision(firstNonNull(hashBase, Revision.HEAD)) - .setPathPart(path); + view = + GitilesView.path().setRevision(firstNonNull(hashBase, Revision.HEAD)).setPathPart(path); } else if (("blob".equals(action) || "blob_plain".equals(action)) - && hashBase != null && !path.isEmpty()) { - view = GitilesView.path() - .setRevision(hashBase) - .setPathPart(path); + && hashBase != null + && !path.isEmpty()) { + view = GitilesView.path().setRevision(hashBase).setPathPart(path); } else if ("commitdiff".equals(action) && hash != null) { - view = GitilesView.diff() - .setOldRevision(firstNonNull(hashParent, Revision.NULL)) - .setRevision(hash) - .setPathPart(""); - } else if ("blobdiff".equals(action) && !path.isEmpty() - && hashParentBase != null && hashBase != null) { - view = GitilesView.diff() - .setOldRevision(hashParentBase) - .setRevision(hashBase) - .setPathPart(path); + view = + GitilesView.diff() + .setOldRevision(firstNonNull(hashParent, Revision.NULL)) + .setRevision(hash) + .setPathPart(""); + } else if ("blobdiff".equals(action) + && !path.isEmpty() + && hashParentBase != null + && hashBase != null) { + view = + GitilesView.diff().setOldRevision(hashParentBase).setRevision(hashBase).setPathPart(path); } else if ("history".equals(action) && !path.isEmpty()) { - view = GitilesView.log() - .setRevision(firstNonNull(hashBase, Revision.HEAD)) - .setPathPart(path); + view = GitilesView.log().setRevision(firstNonNull(hashBase, Revision.HEAD)).setPathPart(path); } else { // Gitiles does not provide an RSS feed (a=rss,atom,opml) // Any other URL is out of date and not valid anymore. @@ -133,9 +130,10 @@ String url; try { - url = view.setHostName(gitwebView.getHostName()) - .setServletPath(gitwebView.getServletPath()) - .toUrl(); + url = + view.setHostName(gitwebView.getHostName()) + .setServletPath(gitwebView.getServletPath()) + .toUrl(); } catch (InvalidViewException e) { res.setStatus(SC_GONE); return;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java index 2cc1351..c1f10e6 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
@@ -56,15 +56,15 @@ protected final GitilesUrls urls; - public HostIndexServlet(GitilesAccess.Factory accessFactory, Renderer renderer, - GitilesUrls urls) { + public HostIndexServlet( + GitilesAccess.Factory accessFactory, Renderer renderer, GitilesUrls urls) { super(renderer, accessFactory); this.urls = checkNotNull(urls, "urls"); } private Map<String, RepositoryDescription> list( - HttpServletRequest req, HttpServletResponse res, String prefix, - Set<String> branches) throws IOException { + HttpServletRequest req, HttpServletResponse res, String prefix, Set<String> branches) + throws IOException { Map<String, RepositoryDescription> descs; try { descs = getAccess(req).listRepositories(prefix, branches); @@ -94,20 +94,16 @@ return descs; } - private SoyMapData toSoyMapData(RepositoryDescription desc, - @Nullable String prefix, GitilesView view) { + private SoyMapData toSoyMapData( + RepositoryDescription desc, @Nullable String prefix, GitilesView view) { return new SoyMapData( "name", stripPrefix(prefix, desc.name), "description", Strings.nullToEmpty(desc.description), - "url", GitilesView.repositoryIndex() - .copyFrom(view) - .setRepositoryName(desc.name) - .toUrl()); + "url", GitilesView.repositoryIndex().copyFrom(view).setRepositoryName(desc.name).toUrl()); } @Override - protected void doHead(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doHead(HttpServletRequest req, HttpServletResponse res) throws IOException { Optional<FormatType> format = getFormat(req); if (!format.isPresent()) { res.sendError(SC_BAD_REQUEST); @@ -118,7 +114,7 @@ String prefix = view.getRepositoryPrefix(); if (prefix != null) { Map<String, RepositoryDescription> descs = - list(req, res, prefix, Collections.<String> emptySet()); + list(req, res, prefix, Collections.<String>emptySet()); if (descs == null) { return; } @@ -158,11 +154,19 @@ hostName = hostName + '/' + prefix; breadcrumbs = view.getBreadcrumbs(); } - renderHtml(req, res, "gitiles.hostIndex", ImmutableMap.of( - "hostName", hostName, - "breadcrumbs", SoyData.createFromExistingData(breadcrumbs), - "prefix", prefix != null ? prefix + '/' : "", - "repositories", repos)); + renderHtml( + req, + res, + "gitiles.hostIndex", + ImmutableMap.of( + "hostName", + hostName, + "breadcrumbs", + SoyData.createFromExistingData(breadcrumbs), + "prefix", + prefix != null ? prefix + '/' : "", + "repositories", + repos)); } @Override
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java b/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java index efccc4a..4998f94 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java
@@ -68,8 +68,7 @@ } @Override - public void format(FileHeader hdr, RawText a, RawText b) - throws IOException { + public void format(FileHeader hdr, RawText a, RawText b) throws IOException { int start = hdr.getStartOffset(); int end = hdr.getEndOffset(); if (!hdr.getHunks().isEmpty()) { @@ -84,35 +83,37 @@ } } - private void renderHeader(String header) - throws IOException { + private void renderHeader(String header) throws IOException { int lf = header.indexOf('\n'); - String rest = 0 <= lf ? header.substring(lf + 1) : ""; + String rest = 0 <= lf ? header.substring(lf + 1) : ""; // Based on DiffFormatter.formatGitDiffFirstHeaderLine. List<Map<String, String>> parts = Lists.newArrayListWithCapacity(3); parts.add(ImmutableMap.of("text", "diff --git")); if (entry.getChangeType() != ChangeType.ADD) { - parts.add(ImmutableMap.of( - "text", GIT_PATH.quote(getOldPrefix() + entry.getOldPath()), - "url", revisionUrl(view.getOldRevision(), entry.getOldPath()))); + parts.add( + ImmutableMap.of( + "text", GIT_PATH.quote(getOldPrefix() + entry.getOldPath()), + "url", revisionUrl(view.getOldRevision(), entry.getOldPath()))); } else { - parts.add(ImmutableMap.of( - "text", GIT_PATH.quote(getOldPrefix() + entry.getNewPath()))); + parts.add(ImmutableMap.of("text", GIT_PATH.quote(getOldPrefix() + entry.getNewPath()))); } if (entry.getChangeType() != ChangeType.DELETE) { - parts.add(ImmutableMap.of( - "text", GIT_PATH.quote(getNewPrefix() + entry.getNewPath()), - "url", revisionUrl(view.getRevision(), entry.getNewPath()))); + parts.add( + ImmutableMap.of( + "text", GIT_PATH.quote(getNewPrefix() + entry.getNewPath()), + "url", revisionUrl(view.getRevision(), entry.getNewPath()))); } else { - parts.add(ImmutableMap.of( - "text", GIT_PATH.quote(getNewPrefix() + entry.getOldPath()))); + parts.add(ImmutableMap.of("text", GIT_PATH.quote(getNewPrefix() + entry.getOldPath()))); } - getOutputStream().write(renderer.newRenderer("gitiles.diffHeader") - .setData(ImmutableMap.of("firstParts", parts, "rest", rest, "fileIndex", fileIndex)) - .render() - .getBytes(UTF_8)); + getOutputStream() + .write( + renderer + .newRenderer("gitiles.diffHeader") + .setData(ImmutableMap.of("firstParts", parts, "rest", rest, "fileIndex", fileIndex)) + .render() + .getBytes(UTF_8)); } private String revisionUrl(Revision rev, String path) { @@ -125,8 +126,8 @@ } @Override - protected void writeHunkHeader(int aStartLine, int aEndLine, - int bStartLine, int bEndLine) throws IOException { + protected void writeHunkHeader(int aStartLine, int aEndLine, int bStartLine, int bEndLine) + throws IOException { getOutputStream().write(HUNK_BEGIN); // TODO(sop): If hunk header starts including method names, escape it. super.writeHunkHeader(aStartLine, aEndLine, bStartLine, bEndLine); @@ -134,8 +135,7 @@ } @Override - protected void writeLine(char prefix, RawText text, int cur) - throws IOException { + protected void writeLine(char prefix, RawText text, int cur) throws IOException { // Manually render each line, rather than invoke a Soy template. This method // can be called thousands of times in a single request. Avoid unnecessary // overheads by formatting as-is.
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/IdentRevFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/IdentRevFilter.java index eb0905b..5493452 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/IdentRevFilter.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/IdentRevFilter.java
@@ -43,8 +43,8 @@ } @Override - public boolean include(RevWalk walker, RevCommit commit) throws StopWalkException, - MissingObjectException, IncorrectObjectTypeException, IOException { + public boolean include(RevWalk walker, RevCommit commit) + throws StopWalkException, MissingObjectException, IncorrectObjectTypeException, IOException { return matchesPerson(getIdent(commit)); } @@ -59,8 +59,7 @@ // Equivalent to --fixed-strings, to avoid pathological performance of Java // regex matching. // TODO(kalman): Find/use a port of re2. - return person.getName().contains(pattern) - || person.getEmailAddress().contains(pattern); + return person.getName().contains(pattern) || person.getEmailAddress().contains(pattern); } protected abstract PersonIdent getIdent(RevCommit commit);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java b/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java index 8225278..e513ec4 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
@@ -45,14 +45,8 @@ static { // HTTP URL regex adapted from com.google.gwtexpui.safehtml.client.SafeHtml. - String part = "(?:" + - "[a-zA-Z0-9$_.+!*',%;:@=?#/~<>-]" + - "|&(?!lt;|gt;)" + - ")"; - String httpUrl = "https?://" + - part + "{2,}" + - "(?:[(]" + part + "*" + "[)])*" + - part + "*"; + String part = "(?:" + "[a-zA-Z0-9$_.+!*',%;:@=?#/~<>-]" + "|&(?!lt;|gt;)" + ")"; + String httpUrl = "https?://" + part + "{2,}" + "(?:[(]" + part + "*" + "[)])*" + part + "*"; HTTP_URL_PATTERN = Pattern.compile(httpUrl); CHANGE_ID_PATTERN = Pattern.compile("(\\bI[0-9a-f]{8,40}\\b)"); } @@ -76,8 +70,9 @@ String link = config.getString("commentlink", subsection, "link"); String html = config.getString("commentlink", subsection, "html"); if (html != null) { - log.warn("Beware: html in commentlinks is unsupported in gitiles; " - + "Did you copy it from a gerrit config?"); + log.warn( + "Beware: html in commentlinks is unsupported in gitiles; " + + "Did you copy it from a gerrit config?"); } if (Strings.isNullOrEmpty(match)) { log.warn("invalid commentlink.%s.match", subsection); @@ -86,7 +81,7 @@ Pattern pattern; try { pattern = Pattern.compile(match); - } catch(PatternSyntaxException ex) { + } catch (PatternSyntaxException ex) { log.warn("invalid commentlink." + subsection + ".match", ex); continue; }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java index ae6219f..4408c1e 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -131,8 +131,7 @@ try (OutputStream out = startRenderStreamingHtml(req, res, "gitiles.logDetail", data)) { Writer w = newWriter(out, res); - new LogSoyData(req, access, pretty) - .renderStreaming(paginator, null, renderer, w, df); + new LogSoyData(req, access, pretty).renderStreaming(paginator, null, renderer, w, df); w.flush(); } } catch (RevWalkException e) { @@ -169,8 +168,8 @@ List<CommitJsonData.Commit> entries = Lists.newArrayListWithCapacity(paginator.getLimit()); for (RevCommit c : paginator) { paginator.getWalk().parseBody(c); - entries.add(new CommitJsonData().setRevWalk(paginator.getWalk()) - .toJsonData(req, c, fs, df)); + entries.add( + new CommitJsonData().setRevWalk(paginator.getWalk()).toJsonData(req, c, fs, df)); } result.log = entries; if (paginator.getPreviousStart() != null) { @@ -198,14 +197,14 @@ } try (RevWalk walk = new RevWalk(repo)) { return GitilesView.log() - .copyFrom(view) - .setRevision(Revision.peel(Constants.HEAD, walk.parseAny(headRef.getObjectId()), walk)) - .build(); + .copyFrom(view) + .setRevision(Revision.peel(Constants.HEAD, walk.parseAny(headRef.getObjectId()), walk)) + .build(); } } - private static Optional<ObjectId> getStart(ListMultimap<String, String> params, - ObjectReader reader) throws IOException { + private static Optional<ObjectId> getStart( + ListMultimap<String, String> params, ObjectReader reader) throws IOException { List<String> values = params.get(START_PARAM); switch (values.size()) { case 0: @@ -258,15 +257,15 @@ String path = view.getPathPart(); List<String> followParams = view.getParameters().get(FOLLOW_PARAM); - boolean follow = !followParams.isEmpty() - ? isTrue(followParams.get(0)) - : access.getConfig().getBoolean("log", null, "follow", true); + boolean follow = + !followParams.isEmpty() + ? isTrue(followParams.get(0)) + : access.getConfig().getBoolean("log", null, "follow", true); if (follow) { walk.setTreeFilter(FollowFilter.create(path, access.getConfig().get(DiffConfig.KEY))); } else { - walk.setTreeFilter(AndTreeFilter.create( - PathFilterGroup.createFromStrings(path), - TreeFilter.ANY_DIFF)); + walk.setTreeFilter( + AndTreeFilter.create(PathFilterGroup.createFromStrings(path), TreeFilter.ANY_DIFF)); } }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java index 97fe1ce..6d1a1c8 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
@@ -39,9 +39,17 @@ import javax.servlet.http.HttpServletRequest; public class LogSoyData { - private static final ImmutableSet<Field> FIELDS = Sets.immutableEnumSet(Field.ABBREV_SHA, - Field.SHA, Field.URL, Field.SHORT_MESSAGE, Field.MESSAGE, Field.AUTHOR, Field.COMMITTER, - Field.BRANCHES, Field.TAGS); + private static final ImmutableSet<Field> FIELDS = + Sets.immutableEnumSet( + Field.ABBREV_SHA, + Field.SHA, + Field.URL, + Field.SHORT_MESSAGE, + Field.MESSAGE, + Field.AUTHOR, + Field.COMMITTER, + Field.BRANCHES, + Field.TAGS); private static final ImmutableSet<Field> VERBOSE_FIELDS = Field.setOf(FIELDS, Field.DIFF_TREE); private final HttpServletRequest req; @@ -60,9 +68,15 @@ variant = firstNonNull(config.getString("logFormat", pretty, "variant"), pretty); } - public void renderStreaming(Paginator paginator, @Nullable String revision, Renderer renderer, - Writer out, DateFormatter df) throws IOException { - renderer.newRenderer("gitiles.logEntriesHeader") + public void renderStreaming( + Paginator paginator, + @Nullable String revision, + Renderer renderer, + Writer out, + DateFormatter df) + throws IOException { + renderer + .newRenderer("gitiles.logEntriesHeader") .setData(toHeaderSoyData(paginator, revision)) .render(out); out.flush(); @@ -78,7 +92,8 @@ renderer.newRenderer("gitiles.emptyLog").render(out); } - renderer.newRenderer("gitiles.logEntriesFooter") + renderer + .newRenderer("gitiles.logEntriesFooter") .setData(toFooterSoyData(paginator, revision)) .render(out); } @@ -120,7 +135,7 @@ if (type != ChangeType.RENAME && type != ChangeType.COPY) { return null; } - return ImmutableMap.<String, Object> of( + return ImmutableMap.<String, Object>of( "changeType", type.toString(), "oldPath", entry.getOldPath(), "newPath", entry.getNewPath(), @@ -131,9 +146,11 @@ Map<String, Object> data = Maps.newHashMapWithExpectedSize(1); ObjectId next = paginator.getNextStart(); if (next != null) { - data.put("nextUrl", copyAndCanonicalizeView(revision) - .replaceParam(LogServlet.START_PARAM, next.name()) - .toUrl()); + data.put( + "nextUrl", + copyAndCanonicalizeView(revision) + .replaceParam(LogServlet.START_PARAM, next.name()) + .toUrl()); } return data; }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java b/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java index 1a1a053..019d33c 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java
@@ -85,8 +85,8 @@ * @param start commit at which to start the walk, or null to start at the * beginning. */ - Paginator(RevWalk walk, int limit, @Nullable ObjectId start) throws MissingObjectException, - IncorrectObjectTypeException, IOException { + Paginator(RevWalk walk, int limit, @Nullable ObjectId start) + throws MissingObjectException, IncorrectObjectTypeException, IOException { this.walk = checkNotNull(walk, "walk"); checkArgument(limit > 0, "limit must be positive: %s", limit); this.limit = limit; @@ -127,8 +127,7 @@ * @throws IncorrectObjectTypeException See {@link RevWalk#next()}. * @throws IOException See {@link RevWalk#next()}. */ - public RevCommit next() throws MissingObjectException, IncorrectObjectTypeException, - IOException { + public RevCommit next() throws MissingObjectException, IncorrectObjectTypeException, IOException { if (done) { return null; }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java index d08062f..4837671 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
@@ -80,11 +80,16 @@ * repository URL verbatim in a web browser. */ private static final Pattern VERBATIM_SUBMODULE_URL_PATTERN = - Pattern.compile("^(" + Joiner.on('|').join( - "https?://[^.]+.googlesource.com/.*", - "https?://[^.]+.googlecode.com/.*", - "https?://code.google.com/p/.*", - "https?://github.com/.*") + ")$", Pattern.CASE_INSENSITIVE); + Pattern.compile( + "^(" + + Joiner.on('|') + .join( + "https?://[^.]+.googlesource.com/.*", + "https?://[^.]+.googlecode.com/.*", + "https?://code.google.com/p/.*", + "https?://github.com/.*") + + ")$", + Pattern.CASE_INSENSITIVE); static final String AUTODIVE_PARAM = "autodive"; static final String NO_AUTODIVE_VALUE = "0"; @@ -279,8 +284,8 @@ } @Override - public boolean include(TreeWalk tw) throws MissingObjectException, - IncorrectObjectTypeException, IOException { + public boolean include(TreeWalk tw) + throws MissingObjectException, IncorrectObjectTypeException, IOException { count++; int cmp = tw.isPathPrefix(pathRaw, pathRaw.length); if (cmp > 0) { @@ -313,7 +318,7 @@ @Override public boolean shouldBeRecursive() { - return Bytes.indexOf(pathRaw, (byte)'/') >= 0; + return Bytes.indexOf(pathRaw, (byte) '/') >= 0; } @Override @@ -344,7 +349,7 @@ tw.addTree(root); tw.setRecursive(false); if (path.isEmpty()) { - return new WalkResult(tw, path, root, root, FileType.TREE, ImmutableList.<Boolean> of()); + return new WalkResult(tw, path, root, root, FileType.TREE, ImmutableList.<Boolean>of()); } AutoDiveFilter f = new AutoDiveFilter(path); tw.setFilter(f); @@ -375,7 +380,12 @@ private final FileType type; private final List<Boolean> hasSingleTree; - private WalkResult(TreeWalk tw, String path, RevTree root, ObjectId objectId, FileType type, + private WalkResult( + TreeWalk tw, + String path, + RevTree root, + ObjectId objectId, + FileType type, List<Boolean> hasSingleTree) { this.tw = tw; this.path = path; @@ -414,21 +424,28 @@ } child = next; } - res.sendRedirect(GitilesView.path().copyFrom(view) - .setPathPart( - RawParseUtils.decode(child.getEntryPathBuffer(), 0, child.getEntryPathLength())) - .toUrl()); + res.sendRedirect( + GitilesView.path() + .copyFrom(view) + .setPathPart( + RawParseUtils.decode(child.getEntryPathBuffer(), 0, child.getEntryPathLength())) + .toUrl()); return; } } // TODO(sop): Allow caching trees by SHA-1 when no S cookie is sent. - renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of( - "title", !view.getPathPart().isEmpty() ? view.getPathPart() : "/", - "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree), - "type", FileType.TREE.toString(), - "data", new TreeSoyData(wr.getObjectReader(), view, cfg, wr.root) - .setArchiveFormat(getArchiveFormat(getAccess(req))) - .toSoyData(wr.id, wr.tw))); + renderHtml( + req, + res, + "gitiles.pathDetail", + ImmutableMap.of( + "title", !view.getPathPart().isEmpty() ? view.getPathPart() : "/", + "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree), + "type", FileType.TREE.toString(), + "data", + new TreeSoyData(wr.getObjectReader(), view, cfg, wr.root) + .setArchiveFormat(getArchiveFormat(getAccess(req))) + .toSoyData(wr.id, wr.tw))); } private CanonicalTreeParser getOnlyChildSubtree(ObjectReader reader, ObjectId id, byte[] prefix) @@ -444,14 +461,17 @@ private void showFile(HttpServletRequest req, HttpServletResponse res, WalkResult wr) throws IOException { GitilesView view = ViewFilter.getView(req); - Map<String, ?> data = new BlobSoyData(wr.getObjectReader(), view) - .toSoyData(wr.path, wr.id); + Map<String, ?> data = new BlobSoyData(wr.getObjectReader(), view).toSoyData(wr.path, wr.id); // TODO(sop): Allow caching files by SHA-1 when no S cookie is sent. - renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of( - "title", ViewFilter.getView(req).getPathPart(), - "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree), - "type", wr.type.toString(), - "data", data)); + renderHtml( + req, + res, + "gitiles.pathDetail", + ImmutableMap.of( + "title", ViewFilter.getView(req).getPathPart(), + "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree), + "type", wr.type.toString(), + "data", data)); } private void showSymlink(HttpServletRequest req, HttpServletResponse res, WalkResult wr) @@ -469,20 +489,22 @@ data.put("sha", ObjectId.toString(wr.id)); data.put("data", null); data.put("size", Long.toString(loader.getSize())); - renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of( - "title", ViewFilter.getView(req).getPathPart(), - "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree), - "type", FileType.REGULAR_FILE.toString(), - "data", data)); + renderHtml( + req, + res, + "gitiles.pathDetail", + ImmutableMap.of( + "title", ViewFilter.getView(req).getPathPart(), + "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree), + "type", FileType.REGULAR_FILE.toString(), + "data", data)); return; } - String url = resolveTargetUrl( - GitilesView.path() - .copyFrom(view) - .setPathPart(dirname(view.getPathPart())) - .build(), - target); + String url = + resolveTargetUrl( + GitilesView.path().copyFrom(view).setPathPart(dirname(view.getPathPart())).build(), + target); data.put("title", view.getPathPart()); data.put("target", target); if (url != null) { @@ -490,11 +512,15 @@ } // TODO(sop): Allow caching files by SHA-1 when no S cookie is sent. - renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of( - "title", ViewFilter.getView(req).getPathPart(), - "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree), - "type", FileType.SYMLINK.toString(), - "data", data)); + renderHtml( + req, + res, + "gitiles.pathDetail", + ImmutableMap.of( + "title", ViewFilter.getView(req).getPathPart(), + "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree), + "type", FileType.SYMLINK.toString(), + "data", data)); } private static String dirname(String path) { @@ -517,10 +543,8 @@ String modulesUrl; String remoteUrl = null; - try (SubmoduleWalk sw = SubmoduleWalk.forPath( - ServletUtils.getRepository(req), - wr.root, - view.getPathPart())) { + try (SubmoduleWalk sw = + SubmoduleWalk.forPath(ServletUtils.getRepository(req), wr.root, view.getPathPart())) { modulesUrl = sw.getModulesUrl(); if (modulesUrl != null && (modulesUrl.startsWith("./") || modulesUrl.startsWith("../"))) { String moduleRepo = PathUtil.simplifyPathUpToRoot(modulesUrl, view.getRepositoryName()); @@ -545,10 +569,14 @@ } // TODO(sop): Allow caching links by SHA-1 when no S cookie is sent. - renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of( - "title", view.getPathPart(), - "type", FileType.GITLINK.toString(), - "data", data)); + renderHtml( + req, + res, + "gitiles.pathDetail", + ImmutableMap.of( + "title", view.getPathPart(), + "type", FileType.GITLINK.toString(), + "data", data)); } private static String resolveHttpUrl(String remoteUrl) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java b/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java index e55b77d..e67223f 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java
@@ -59,6 +59,5 @@ return path.substring(slash + 1); } - private PathUtil() { - } + private PathUtil() {} }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java b/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java index 91795bb..6bf0feb 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java
@@ -50,8 +50,7 @@ private String readmePath; private ObjectId readmeId; - ReadmeHelper(ObjectReader reader, GitilesView view, Config cfg, - RevTree rootTree) { + ReadmeHelper(ObjectReader reader, GitilesView view, Config cfg, RevTree rootTree) { this.reader = reader; this.view = view; this.cfg = cfg; @@ -59,8 +58,9 @@ render = cfg.getBoolean("markdown", "render", true); } - void scanTree(RevTree tree) throws MissingObjectException, - IncorrectObjectTypeException, CorruptObjectException, IOException { + void scanTree(RevTree tree) + throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, + IOException { if (render) { TreeWalk tw = new TreeWalk(reader); tw.setRecursive(false); @@ -90,13 +90,13 @@ SanitizedContent render() { try { - Duration parseTimeout = ConfigUtil.getDuration(cfg, "markdown", null, - "parseTimeout", Duration.standardSeconds(2)); + Duration parseTimeout = + ConfigUtil.getDuration( + cfg, "markdown", null, "parseTimeout", Duration.standardSeconds(2)); int inputLimit = cfg.getInt("markdown", "inputLimit", 5 << 20); byte[] raw = reader.open(readmeId, Constants.OBJ_BLOB).getCachedBytes(inputLimit); String md = RawParseUtils.decode(raw); - RootNode root = - GitilesMarkdown.parseFile(parseTimeout, view, readmePath, md); + RootNode root = GitilesMarkdown.parseFile(parseTimeout, view, readmePath, md); if (root == null) { return null; } @@ -107,13 +107,9 @@ img = new ImageLoader(reader, view, rootTree, readmePath, imageLimit); } - return new MarkdownToHtml(view, cfg) - .setImageLoader(img) - .setReadme(true) - .toSoyHtml(root); + return new MarkdownToHtml(view, cfg).setImageLoader(img).setReadme(true).toSoyHtml(root); } catch (LargeObjectException | IOException e) { - log.error(String.format("error rendering %s/%s", - view.getRepositoryName(), readmePath), e); + log.error(String.format("error rendering %s/%s", view.getRepositoryName(), readmePath), e); return null; } }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java index ff48d4d..0d74b46 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
@@ -52,15 +52,14 @@ private final TimeCache timeCache; - protected RefServlet(GitilesAccess.Factory accessFactory, Renderer renderer, - TimeCache timeCache) { + protected RefServlet( + GitilesAccess.Factory accessFactory, Renderer renderer, TimeCache timeCache) { super(renderer, accessFactory); this.timeCache = checkNotNull(timeCache, "timeCache"); } @Override - protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException { if (!ViewFilter.getView(req).getPathPart().isEmpty()) { res.setStatus(SC_NOT_FOUND); return; @@ -69,16 +68,18 @@ try (RevWalk walk = new RevWalk(ServletUtils.getRepository(req))) { tags = getTagsSoyData(req, timeCache, walk, 0); } - renderHtml(req, res, "gitiles.refsDetail", + renderHtml( + req, + res, + "gitiles.refsDetail", ImmutableMap.of("branches", getBranchesSoyData(req, 0), "tags", tags)); } @Override - protected void doGetText(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doGetText(HttpServletRequest req, HttpServletResponse res) throws IOException { GitilesView view = ViewFilter.getView(req); - Map<String, Ref> refs = getRefs(ServletUtils.getRepository(req).getRefDatabase(), - view.getPathPart()); + Map<String, Ref> refs = + getRefs(ServletUtils.getRepository(req).getRefDatabase(), view.getPathPart()); TextRefAdvertiser adv = new TextRefAdvertiser(startRenderText(req, res)); adv.setDerefTags(true); adv.send(refs); @@ -86,11 +87,10 @@ } @Override - protected void doGetJson(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doGetJson(HttpServletRequest req, HttpServletResponse res) throws IOException { GitilesView view = ViewFilter.getView(req); - Map<String, Ref> refs = getRefs(ServletUtils.getRepository(req).getRefDatabase(), - view.getPathPart()); + Map<String, Ref> refs = + getRefs(ServletUtils.getRepository(req).getRefDatabase(), view.getPathPart()); Map<String, RefJsonData> jsonRefs = new LinkedHashMap<>(); for (Map.Entry<String, Ref> ref : refs.entrySet()) { jsonRefs.put(ref.getKey(), new RefJsonData(ref.getValue())); @@ -131,8 +131,8 @@ }.compound(RefComparator.INSTANCE); } - static List<Map<String, Object>> getTagsSoyData(HttpServletRequest req, - TimeCache timeCache, RevWalk walk, int limit) throws IOException { + static List<Map<String, Object>> getTagsSoyData( + HttpServletRequest req, TimeCache timeCache, RevWalk walk, int limit) throws IOException { return getRefsSoyData( ServletUtils.getRepository(req).getRefDatabase(), ViewFilter.getView(req), @@ -143,16 +143,20 @@ } private static Ordering<Ref> tagComparator(final TimeCache timeCache, final RevWalk walk) { - return Ordering.natural().onResultOf(new Function<Ref, Long>() { - @Override - public Long apply(Ref ref) { - try { - return timeCache.getTime(walk, ref.getObjectId()); - } catch (IOException e) { - throw new UncheckedExecutionException(e); - } - } - }).reverse().compound(RefComparator.INSTANCE); + return Ordering.natural() + .onResultOf( + new Function<Ref, Long>() { + @Override + public Long apply(Ref ref) { + try { + return timeCache.getTime(walk, ref.getObjectId()); + } catch (IOException e) { + throw new UncheckedExecutionException(e); + } + } + }) + .reverse() + .compound(RefComparator.INSTANCE); } private static List<Map<String, Object>> getRefsSoyData( @@ -161,7 +165,8 @@ String prefix, Ordering<Ref> ordering, @Nullable Ref headLeaf, - int limit) throws IOException { + int limit) + throws IOException { Collection<Ref> refs = refdb.getRefs(prefix).values(); refs = ordering.leastOf(refs, limit > 0 ? Ints.saturatedCast(limit + 1L) : refs.size()); List<Map<String, Object>> result = Lists.newArrayListWithCapacity(refs.size()); @@ -172,8 +177,13 @@ if (refForName != null) { boolean needPrefix = !ref.getName().equals(refForName.getName()); Map<String, Object> value = Maps.newHashMapWithExpectedSize(3); - value.put("url", GitilesView.revision().copyFrom(view).setRevision( - Revision.unpeeled(needPrefix ? ref.getName() : name, ref.getObjectId())).toUrl()); + value.put( + "url", + GitilesView.revision() + .copyFrom(view) + .setRevision( + Revision.unpeeled(needPrefix ? ref.getName() : name, ref.getObjectId())) + .toUrl()); value.put("name", name); if (headLeaf != null) { value.put("isHead", headLeaf.equals(ref)); @@ -185,9 +195,7 @@ } static String sanitizeRefForText(String refName) { - return refName.replace("&", "&") - .replace("<", "<") - .replace(">", ">"); + return refName.replace("&", "&").replace("<", "<").replace(">", ">"); } private static Map<String, Ref> getRefs(RefDatabase refdb, String path) throws IOException { @@ -229,7 +237,7 @@ static class RefJsonData { RefJsonData(Ref ref) { value = ref.getObjectId().getName(); - if(ref.getPeeledObjectId() != null) { + if (ref.getPeeledObjectId() != null) { peeled = ref.getPeeledObjectId().getName(); } if (ref.isSymbolic()) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java b/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java index 9defb71..8d04578 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java
@@ -55,23 +55,25 @@ // Must match .streamingPlaceholder. private static final String PLACEHOLDER = "id=\"STREAMED_OUTPUT_BLOCK\""; - private static final List<String> SOY_FILENAMES = ImmutableList.of( - "BlameDetail.soy", - "Common.soy", - "DiffDetail.soy", - "Doc.soy", - "HostIndex.soy", - "LogDetail.soy", - "ObjectDetail.soy", - "PathDetail.soy", - "RefList.soy", - "RevisionDetail.soy", - "RepositoryIndex.soy"); + private static final List<String> SOY_FILENAMES = + ImmutableList.of( + "BlameDetail.soy", + "Common.soy", + "DiffDetail.soy", + "Doc.soy", + "HostIndex.soy", + "LogDetail.soy", + "ObjectDetail.soy", + "PathDetail.soy", + "RefList.soy", + "RevisionDetail.soy", + "RepositoryIndex.soy"); - public static final Map<String, String> STATIC_URL_GLOBALS = ImmutableMap.of( - "gitiles.BASE_CSS_URL", "base.css", - "gitiles.DOC_CSS_URL", "doc.css", - "gitiles.PRETTIFY_CSS_URL", "prettify/prettify.css"); + public static final Map<String, String> STATIC_URL_GLOBALS = + ImmutableMap.of( + "gitiles.BASE_CSS_URL", "base.css", + "gitiles.DOC_CSS_URL", "doc.css", + "gitiles.PRETTIFY_CSS_URL", "prettify/prettify.css"); protected static class FileUrlMapper implements Function<String, URL> { private final String prefix; @@ -99,13 +101,15 @@ protected ImmutableMap<String, URL> templates; protected ImmutableMap<String, String> globals; - private final ConcurrentMap<String, HashCode> hashes = new MapMaker() - .initialCapacity(SOY_FILENAMES.size()) - .concurrencyLevel(1) - .makeMap(); + private final ConcurrentMap<String, HashCode> hashes = + new MapMaker().initialCapacity(SOY_FILENAMES.size()).concurrencyLevel(1).makeMap(); - protected Renderer(Function<String, URL> resourceMapper, Map<String, String> globals, - String staticPrefix, Iterable<URL> customTemplates, String siteTitle) { + protected Renderer( + Function<String, URL> resourceMapper, + Map<String, String> globals, + String staticPrefix, + Iterable<URL> customTemplates, + String siteTitle) { checkNotNull(staticPrefix, "staticPrefix"); ImmutableMap.Builder<String, URL> b = ImmutableMap.builder(); @@ -153,8 +157,9 @@ return newRenderer(templateName).setData(soyData).render(); } - void render(HttpServletRequest req, HttpServletResponse res, - String templateName, Map<String, ?> soyData) throws IOException { + void render( + HttpServletRequest req, HttpServletResponse res, String templateName, Map<String, ?> soyData) + throws IOException { res.setContentType("text/html"); res.setCharacterEncoding("UTF-8"); byte[] data = newRenderer(templateName).setData(soyData).render().getBytes(UTF_8); @@ -168,9 +173,7 @@ OutputStream renderStreaming(HttpServletResponse res, String templateName, Map<String, ?> soyData) throws IOException { - final String html = newRenderer(templateName) - .setData(soyData) - .render(); + final String html = newRenderer(templateName).setData(soyData).render(); int id = html.indexOf(PLACEHOLDER); checkArgument(id >= 0, "Template must contain %s", PLACEHOLDER);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryFilter.java index 6eb5033..bbaabc5 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryFilter.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryFilter.java
@@ -43,8 +43,8 @@ } @Override - public void doFilter(HttpServletRequest req, HttpServletResponse res, - FilterChain chain) throws IOException, ServletException { + public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) + throws IOException, ServletException { try { String repo = ViewFilter.trimLeadingSlash(getRegexGroup(req, 1)); try (Repository git = resolver.open(req, repo)) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java index d1dfbd8..c45e0e6 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -55,15 +55,14 @@ private final TimeCache timeCache; - public RepositoryIndexServlet(GitilesAccess.Factory accessFactory, Renderer renderer, - TimeCache timeCache) { + public RepositoryIndexServlet( + GitilesAccess.Factory accessFactory, Renderer renderer, TimeCache timeCache) { super(renderer, accessFactory); this.timeCache = checkNotNull(timeCache, "timeCache"); } @Override - protected void doHead(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doHead(HttpServletRequest req, HttpServletResponse res) throws IOException { // If the repository didn't exist a prior filter would have 404 replied. Optional<FormatType> format = getFormat(req); if (!format.isPresent()) { @@ -77,7 +76,7 @@ res.setContentType(format.get().getMimeType()); break; case TEXT: - default: + default: res.sendError(SC_BAD_REQUEST); break; } @@ -155,8 +154,8 @@ return list.size() > REF_LIMIT ? list.subList(0, REF_LIMIT) : list; } - private static Map<String, Object> renderReadme(RevWalk walk, - GitilesView view, Config cfg, RevObject head) throws IOException { + private static Map<String, Object> renderReadme( + RevWalk walk, GitilesView view, Config cfg, RevObject head) throws IOException { RevTree rootTree; try { rootTree = walk.parseTree(head); @@ -164,13 +163,15 @@ return null; } - ReadmeHelper readme = new ReadmeHelper( - walk.getObjectReader(), - GitilesView.path().copyFrom(view).setRevision(Revision.HEAD).setPathPart("/").build(), - cfg, rootTree); + ReadmeHelper readme = + new ReadmeHelper( + walk.getObjectReader(), + GitilesView.path().copyFrom(view).setRevision(Revision.HEAD).setPathPart("/").build(), + cfg, + rootTree); readme.scanTree(rootTree); if (readme.isPresent()) { - return ImmutableMap.<String, Object> of("readmeHtml", readme.render()); + return ImmutableMap.<String, Object>of("readmeHtml", readme.render()); } return null; }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java b/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java index 00d5763..356fbc7 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
@@ -46,8 +46,7 @@ public static final Revision HEAD = named("HEAD"); public static Revision normalizeParentExpressions(Revision rev) { - if (rev == null - || (rev.name.indexOf('~') < 0 && rev.name.indexOf('^') < 0)) { + if (rev == null || (rev.name.indexOf('~') < 0 && rev.name.indexOf('^') < 0)) { return rev; } return new Revision(rev.id.name(), rev.id, rev.type, rev.peeledId, rev.peeledType);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java index 9f234d1..59112d0 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
@@ -167,8 +167,9 @@ } else { oldRevision = Revision.NULL; } - Result result = new Result(Revision.peeled(name, c), oldRevision, - path.substring(name.length() + 2)); + Result result = + new Result( + Revision.peeled(name, c), oldRevision, path.substring(name.length() + 2)); return isVisible(walk, result) ? result : null; } } @@ -212,9 +213,7 @@ private static boolean isValidRevision(String revision) { // Disallow some uncommon but valid revision expressions that either we // don't support or we represent differently in our URLs. - return !revision.contains(":") - && !revision.contains("^{") - && !revision.contains("@"); + return !revision.contains(":") && !revision.contains("^{") && !revision.contains("@"); } private boolean isVisible(RevWalk walk, Result result) throws IOException {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java index 9887195..9c7fdb0 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
@@ -67,8 +67,8 @@ private final Linkifier linkifier; - public RevisionServlet(GitilesAccess.Factory accessFactory, Renderer renderer, - Linkifier linkifier) { + public RevisionServlet( + GitilesAccess.Factory accessFactory, Renderer renderer, Linkifier linkifier) { super(renderer, accessFactory); this.linkifier = checkNotNull(linkifier, "linkifier"); } @@ -92,33 +92,39 @@ try { switch (obj.getType()) { case OBJ_COMMIT: - soyObjects.add(ImmutableMap.of( - "type", Constants.TYPE_COMMIT, - "data", new CommitSoyData() - .setLinkifier(linkifier) - .setRevWalk(walk) - .setArchiveFormat(getArchiveFormat(access)) - .toSoyData(req, (RevCommit) obj, COMMIT_SOY_FIELDS, df))); + soyObjects.add( + ImmutableMap.of( + "type", + Constants.TYPE_COMMIT, + "data", + new CommitSoyData() + .setLinkifier(linkifier) + .setRevWalk(walk) + .setArchiveFormat(getArchiveFormat(access)) + .toSoyData(req, (RevCommit) obj, COMMIT_SOY_FIELDS, df))); break; case OBJ_TREE: Map<String, Object> tree = - new TreeSoyData(walk.getObjectReader(), view, cfg, (RevTree) obj) - .toSoyData(obj); - soyObjects.add(ImmutableMap.of( - "type", Constants.TYPE_TREE, - "data", tree)); + new TreeSoyData(walk.getObjectReader(), view, cfg, (RevTree) obj).toSoyData(obj); + soyObjects.add(ImmutableMap.of("type", Constants.TYPE_TREE, "data", tree)); hasReadme = tree.containsKey("readmeHtml"); break; case OBJ_BLOB: - soyObjects.add(ImmutableMap.of( - "type", Constants.TYPE_BLOB, - "data", new BlobSoyData(walk.getObjectReader(), view).toSoyData(obj))); + soyObjects.add( + ImmutableMap.of( + "type", + Constants.TYPE_BLOB, + "data", + new BlobSoyData(walk.getObjectReader(), view).toSoyData(obj))); hasBlob = true; break; case OBJ_TAG: - soyObjects.add(ImmutableMap.of( - "type", Constants.TYPE_TAG, - "data", new TagSoyData(linkifier, req).toSoyData((RevTag) obj, df))); + soyObjects.add( + ImmutableMap.of( + "type", + Constants.TYPE_TAG, + "data", + new TagSoyData(linkifier, req).toSoyData((RevTag) obj, df))); break; default: log.warn("Bad object type for {}: {}", ObjectId.toString(obj.getId()), obj.getType()); @@ -136,11 +142,15 @@ } } - renderHtml(req, res, "gitiles.revisionDetail", ImmutableMap.of( - "title", view.getRevision().getName(), - "objects", soyObjects, - "hasBlob", hasBlob, - "hasReadme", hasReadme)); + renderHtml( + req, + res, + "gitiles.revisionDetail", + ImmutableMap.of( + "title", view.getRevision().getName(), + "objects", soyObjects, + "hasBlob", hasBlob, + "hasReadme", hasReadme)); } } @@ -149,16 +159,16 @@ GitilesView view = ViewFilter.getView(req); Repository repo = ServletUtils.getRepository(req); try (ObjectReader reader = repo.newObjectReader()) { - ObjectLoader loader = reader.open(view.getRevision().getId()); - if (loader.getType() != OBJ_COMMIT) { - res.setStatus(SC_NOT_FOUND); - } else { - PathServlet.setTypeHeader(res, loader.getType()); - try (Writer writer = startRenderText(req, res); - OutputStream out = BaseEncoding.base64().encodingStream(writer)) { - loader.copyTo(out); - } + ObjectLoader loader = reader.open(view.getRevision().getId()); + if (loader.getType() != OBJ_COMMIT) { + res.setStatus(SC_NOT_FOUND); + } else { + PathServlet.setTypeHeader(res, loader.getType()); + try (Writer writer = startRenderText(req, res); + OutputStream out = BaseEncoding.base64().encodingStream(writer)) { + loader.copyTo(out); } + } } } @@ -172,9 +182,12 @@ RevObject obj = walk.parseAny(view.getRevision().getId()); switch (obj.getType()) { case OBJ_COMMIT: - renderJson(req, res, new CommitJsonData() - .setRevWalk(walk) - .toJsonData(req, (RevCommit) obj, COMMIT_JSON_FIELDS, df), + renderJson( + req, + res, + new CommitJsonData() + .setRevWalk(walk) + .toJsonData(req, (RevCommit) obj, COMMIT_JSON_FIELDS, df), Commit.class); break; default:
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RootedDocServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RootedDocServlet.java index bdf4aa9..057aba8 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RootedDocServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RootedDocServlet.java
@@ -47,8 +47,10 @@ private final RepositoryResolver<HttpServletRequest> resolver; private final DocServlet docServlet; - public RootedDocServlet(RepositoryResolver<HttpServletRequest> resolver, - GitilesAccess.Factory accessFactory, Renderer renderer) { + public RootedDocServlet( + RepositoryResolver<HttpServletRequest> resolver, + GitilesAccess.Factory accessFactory, + Renderer renderer) { this.resolver = resolver; docServlet = new DocServlet(accessFactory, renderer); } @@ -77,15 +79,18 @@ } req.setAttribute(ATTRIBUTE_REPOSITORY, repo); - ViewFilter.setView(req, GitilesView.rootedDoc() - .setHostName(req.getServerName()) - .setServletPath(req.getContextPath() + req.getServletPath()) - .setRevision(BRANCH, obj) - .setPathPart(req.getPathInfo()) - .build()); + ViewFilter.setView( + req, + GitilesView.rootedDoc() + .setHostName(req.getServerName()) + .setServletPath(req.getContextPath() + req.getServletPath()) + .setRevision(BRANCH, obj) + .setPathPart(req.getPathInfo()) + .build()); docServlet.service(req, res); - } catch (RepositoryNotFoundException | ServiceNotAuthorizedException + } catch (RepositoryNotFoundException + | ServiceNotAuthorizedException | ServiceNotEnabledException e) { log.error(String.format("cannot open repository for %s", req.getServerName()), e); res.sendError(HttpServletResponse.SC_NOT_FOUND);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ThreadSafePrettifyParser.java b/gitiles-servlet/src/main/java/com/google/gitiles/ThreadSafePrettifyParser.java index f5881d4..36646aa 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/ThreadSafePrettifyParser.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/ThreadSafePrettifyParser.java
@@ -20,15 +20,15 @@ import prettify.parser.Prettify; public class ThreadSafePrettifyParser extends PrettifyParser { - public static final ThreadSafePrettifyParser INSTANCE = - new ThreadSafePrettifyParser(); + public static final ThreadSafePrettifyParser INSTANCE = new ThreadSafePrettifyParser(); private ThreadSafePrettifyParser() { // Prettify is not thread safe ... unless we do this. - prettify = new Prettify() { - { - langHandlerRegistry = Collections.synchronizedMap(langHandlerRegistry); - } - }; + prettify = + new Prettify() { + { + langHandlerRegistry = Collections.synchronizedMap(langHandlerRegistry); + } + }; } }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java b/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java index efdff6e..7021733 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
@@ -58,25 +58,27 @@ Long getTime(final RevWalk walk, final ObjectId id) throws IOException { try { - return cache.get(id, new Callable<Long>() { - @Override - public Long call() throws IOException { - RevObject o = walk.parseAny(id); - while (o instanceof RevTag) { - RevTag tag = (RevTag) o; - PersonIdent ident = tag.getTaggerIdent(); - if (ident != null) { - return ident.getWhen().getTime() / 1000; + return cache.get( + id, + new Callable<Long>() { + @Override + public Long call() throws IOException { + RevObject o = walk.parseAny(id); + while (o instanceof RevTag) { + RevTag tag = (RevTag) o; + PersonIdent ident = tag.getTaggerIdent(); + if (ident != null) { + return ident.getWhen().getTime() / 1000; + } + o = tag.getObject(); + walk.parseHeaders(o); + } + if (o.getType() == Constants.OBJ_COMMIT) { + return Long.valueOf(((RevCommit) o).getCommitTime()); + } + return Long.MIN_VALUE; } - o = tag.getObject(); - walk.parseHeaders(o); - } - if (o.getType() == Constants.OBJ_COMMIT) { - return Long.valueOf(((RevCommit) o).getCommitTime()); - } - return Long.MIN_VALUE; - } - }); + }); } catch (ExecutionException e) { Throwables.propagateIfInstanceOf(e.getCause(), IOException.class); throw new IOException(e);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TreeJsonData.java b/gitiles-servlet/src/main/java/com/google/gitiles/TreeJsonData.java index 4ad6562..b525453 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/TreeJsonData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/TreeJsonData.java
@@ -53,6 +53,5 @@ return tree; } - private TreeJsonData() { - } + private TreeJsonData() {} }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java index 6967c65..f1366ad 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
@@ -54,10 +54,7 @@ if (resolved == null) { return null; } - return GitilesView.path() - .copyFrom(view) - .setPathPart(resolved) - .toUrl(); + return GitilesView.path().copyFrom(view).setPathPart(resolved).toUrl(); } @VisibleForTesting @@ -77,8 +74,7 @@ private final RevTree rootTree; private ArchiveFormat archiveFormat; - public TreeSoyData(ObjectReader reader, GitilesView view, Config cfg, - RevTree rootTree) { + public TreeSoyData(ObjectReader reader, GitilesView view, Config cfg, RevTree rootTree) { this.reader = reader; this.view = view; this.cfg = cfg; @@ -90,8 +86,8 @@ return this; } - public Map<String, Object> toSoyData(ObjectId treeId, TreeWalk tw) throws MissingObjectException, - IOException { + public Map<String, Object> toSoyData(ObjectId treeId, TreeWalk tw) + throws MissingObjectException, IOException { ReadmeHelper readme = new ReadmeHelper(reader, view, cfg, rootTree); List<Object> entries = Lists.newArrayList(); GitilesView.Builder urlBuilder = GitilesView.path().copyFrom(view); @@ -108,8 +104,8 @@ urlBuilder.setPathPart(name); break; default: - throw new IllegalStateException(String.format( - "Cannot render TreeSoyData from %s view", view.getType())); + throw new IllegalStateException( + String.format("Cannot render TreeSoyData from %s view", view.getType())); } String url = urlBuilder.toUrl(); @@ -122,9 +118,7 @@ entry.put("name", name); entry.put("url", url); if (type == FileType.SYMLINK) { - String target = new String( - reader.open(tw.getObjectId(0)).getCachedBytes(), - UTF_8); + String target = new String(reader.open(tw.getObjectId(0)).getCachedBytes(), UTF_8); entry.put("targetName", getTargetDisplayName(target)); String targetUrl = resolveTargetUrl(view, target); if (targetUrl != null) { @@ -143,11 +137,13 @@ if (view.getType() == GitilesView.Type.PATH && view.getRevision().getPeeledType() == OBJ_COMMIT) { data.put("logUrl", GitilesView.log().copyFrom(view).toUrl()); - data.put("archiveUrl", GitilesView.archive() - .copyFrom(view) - .setPathPart(Strings.emptyToNull(view.getPathPart())) - .setExtension(archiveFormat.getDefaultSuffix()) - .toUrl()); + data.put( + "archiveUrl", + GitilesView.archive() + .copyFrom(view) + .setPathPart(Strings.emptyToNull(view.getPathPart())) + .setExtension(archiveFormat.getDefaultSuffix()) + .toUrl()); data.put("archiveType", archiveFormat.getShortName()); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java index 3bd5e09..131a353 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
@@ -93,8 +93,8 @@ private final GitilesAccess.Factory accessFactory; private final VisibilityCache visibilityCache; - public ViewFilter(GitilesAccess.Factory accessFactory, GitilesUrls urls, - VisibilityCache visibilityCache) { + public ViewFilter( + GitilesAccess.Factory accessFactory, GitilesUrls urls, VisibilityCache visibilityCache) { this.urls = checkNotNull(urls, "urls"); this.accessFactory = checkNotNull(accessFactory, "accessFactory"); this.visibilityCache = checkNotNull(visibilityCache, "visibilityCache"); @@ -134,8 +134,7 @@ } } - private boolean normalize(GitilesView.Builder view, HttpServletResponse res) - throws IOException { + private boolean normalize(GitilesView.Builder view, HttpServletResponse res) throws IOException { if (view.getOldRevision() != Revision.NULL) { return false; } @@ -185,8 +184,7 @@ } } - private GitilesView.Builder parseNoCommand(HttpServletRequest req, - String repoName) { + private GitilesView.Builder parseNoCommand(HttpServletRequest req, String repoName) { if (!hasRepository(req)) { return GitilesView.hostIndex().setRepositoryPrefix(repoName); } @@ -217,8 +215,8 @@ .setExtension(ext); } - private GitilesView.Builder parseAutoCommand( - HttpServletRequest req, String repoName, String path) throws IOException { + private GitilesView.Builder parseAutoCommand(HttpServletRequest req, String repoName, String path) + throws IOException { // Note: if you change the mapping for +, make sure to change // GitilesView.toUrl() correspondingly. if (path.isEmpty()) { @@ -234,9 +232,9 @@ GitilesView.Builder b = parseShowCommand(repoName, result); if (b != null && b.getPathPart() != null && b.getPathPart().endsWith(".md")) { return GitilesView.doc() - .setRepositoryName(repoName) - .setRevision(result.getRevision()) - .setPathPart(result.getPath()); + .setRepositoryName(repoName) + .setRevision(result.getRevision()) + .setPathPart(result.getPath()); } return b; } @@ -260,18 +258,15 @@ if (isEmptyOrSlash(path)) { return null; } - return GitilesView.describe() - .setRepositoryName(repoName) - .setPathPart(path); + return GitilesView.describe().setRepositoryName(repoName).setPathPart(path); } - private GitilesView.Builder parseDiffCommand( - HttpServletRequest req, String repoName, String path) throws IOException { + private GitilesView.Builder parseDiffCommand(HttpServletRequest req, String repoName, String path) + throws IOException { return parseDiffCommand(repoName, parseRevision(req, path)); } - private GitilesView.Builder parseDiffCommand( - String repoName, RevisionParser.Result result) { + private GitilesView.Builder parseDiffCommand(String repoName, RevisionParser.Result result) { if (result == null) { return null; } @@ -282,8 +277,8 @@ .setPathPart(result.getPath()); } - private GitilesView.Builder parseLogCommand( - HttpServletRequest req, String repoName, String path) throws IOException { + private GitilesView.Builder parseLogCommand(HttpServletRequest req, String repoName, String path) + throws IOException { if (isEmptyOrSlash(path)) { return GitilesView.log().setRepositoryName(repoName); } @@ -299,46 +294,39 @@ } private GitilesView.Builder parseRefsCommand(String repoName, String path) { - return GitilesView.refs() - .setRepositoryName(repoName) - .setPathPart(path); + return GitilesView.refs().setRepositoryName(repoName).setPathPart(path); } - private GitilesView.Builder parseShowCommand( - HttpServletRequest req, String repoName, String path) throws IOException { + private GitilesView.Builder parseShowCommand(HttpServletRequest req, String repoName, String path) + throws IOException { return parseShowCommand(repoName, parseRevision(req, path)); } - private GitilesView.Builder parseShowCommand( - String repoName, RevisionParser.Result result) { + private GitilesView.Builder parseShowCommand(String repoName, RevisionParser.Result result) { if (result == null || result.getOldRevision() != null) { return null; } if (result.getPath().isEmpty()) { - return GitilesView.revision() - .setRepositoryName(repoName) - .setRevision(result.getRevision()); + return GitilesView.revision().setRepositoryName(repoName).setRevision(result.getRevision()); } else { return GitilesView.path() - .setRepositoryName(repoName) - .setRevision(result.getRevision()) - .setPathPart(result.getPath()); + .setRepositoryName(repoName) + .setRevision(result.getRevision()) + .setPathPart(result.getPath()); } } - private GitilesView.Builder parseDocCommand( - HttpServletRequest req, String repoName, String path) throws IOException { + private GitilesView.Builder parseDocCommand(HttpServletRequest req, String repoName, String path) + throws IOException { return parseDocCommand(repoName, parseRevision(req, path)); } - private GitilesView.Builder parseDocCommand( - String repoName, RevisionParser.Result result) { + private GitilesView.Builder parseDocCommand(String repoName, RevisionParser.Result result) { if (result == null || result.getOldRevision() != null) { return null; } - GitilesView.Builder b = GitilesView.doc() - .setRepositoryName(repoName) - .setRevision(result.getRevision()); + GitilesView.Builder b = + GitilesView.doc().setRepositoryName(repoName).setRevision(result.getRevision()); if (!result.getPath().isEmpty()) { b.setPathPart(result.getPath()); } @@ -347,8 +335,9 @@ private RevisionParser.Result parseRevision(HttpServletRequest req, String path) throws IOException { - RevisionParser revParser = new RevisionParser( - ServletUtils.getRepository(req), accessFactory.forRequest(req), visibilityCache); + RevisionParser revParser = + new RevisionParser( + ServletUtils.getRepository(req), accessFactory.forRequest(req), visibilityCache); return revParser.parse(checkLeadingSlash(path)); } }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java index cc36da8..2c0385d 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
@@ -81,10 +81,10 @@ @Override public String toString() { return toStringHelper(this) - .add("user", user) - .add("repositoryName", repositoryName) - .add("objectId", objectId) - .toString(); + .add("user", user) + .add("repositoryName", repositoryName) + .add("objectId", objectId) + .toString(); } } @@ -92,9 +92,7 @@ private final boolean topoSort; public static CacheBuilder<Object, Object> defaultBuilder() { - return CacheBuilder.newBuilder() - .maximumSize(1 << 10) - .expireAfterWrite(30, TimeUnit.MINUTES); + return CacheBuilder.newBuilder().maximumSize(1 << 10).expireAfterWrite(30, TimeUnit.MINUTES); } public VisibilityCache(boolean topoSort) { @@ -110,8 +108,13 @@ return cache; } - boolean isVisible(final Repository repo, final RevWalk walk, GitilesAccess access, - final ObjectId id, final ObjectId... knownReachable) throws IOException { + boolean isVisible( + final Repository repo, + final RevWalk walk, + GitilesAccess access, + final ObjectId id, + final ObjectId... knownReachable) + throws IOException { try { return cache.get( new Key(access.getUserKey(), access.getRepositoryName(), id), @@ -135,8 +138,9 @@ } } - private boolean isVisible(Repository repo, RevWalk walk, ObjectId id, - Collection<ObjectId> knownReachable) throws IOException { + private boolean isVisible( + Repository repo, RevWalk walk, ObjectId id, Collection<ObjectId> knownReachable) + throws IOException { RevCommit commit; try { commit = walk.parseCommit(id); @@ -175,23 +179,28 @@ @SuppressWarnings("unchecked") private static Predicate<Ref> otherRefs() { - return not(Predicates.<Ref> or( - refStartsWith(R_HEADS), refStartsWith(R_TAGS), refStartsWith("refs/changes/"))); + return not( + Predicates.<Ref>or( + refStartsWith(R_HEADS), refStartsWith(R_TAGS), refStartsWith("refs/changes/"))); } - private boolean isReachableFromRefs(RevWalk walk, RevCommit commit, - Collection<Ref> refs) throws IOException { - return isReachableFrom(walk, commit, - Collections2.transform(refs, new Function<Ref, ObjectId>() { - @Override - public ObjectId apply(Ref ref) { - if (ref.getPeeledObjectId() != null) { - return ref.getPeeledObjectId(); - } else { - return ref.getObjectId(); - } - } - })); + private boolean isReachableFromRefs(RevWalk walk, RevCommit commit, Collection<Ref> refs) + throws IOException { + return isReachableFrom( + walk, + commit, + Collections2.transform( + refs, + new Function<Ref, ObjectId>() { + @Override + public ObjectId apply(Ref ref) { + if (ref.getPeeledObjectId() != null) { + return ref.getPeeledObjectId(); + } else { + return ref.getObjectId(); + } + } + })); } private boolean isReachableFrom(RevWalk walk, RevCommit commit, Collection<ObjectId> ids)
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java index 9c5edbd..daae821 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java
@@ -69,8 +69,7 @@ } @Override - protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException { GitilesView view = ViewFilter.getView(req); Repository repo = ServletUtils.getRepository(req); @@ -82,20 +81,32 @@ } String title = "Blame - " + view.getPathPart(); - Map<String, ?> blobData = new BlobSoyData(rw.getObjectReader(), view) - .toSoyData(view.getPathPart(), result.blobId); + Map<String, ?> blobData = + new BlobSoyData(rw.getObjectReader(), view).toSoyData(view.getPathPart(), result.blobId); if (blobData.get("lines") != null) { DateFormatter df = new DateFormatter(access, Format.ISO); - renderHtml(req, res, "gitiles.blameDetail", ImmutableMap.of( - "title", title, - "breadcrumbs", view.getBreadcrumbs(), - "data", blobData, - "regions", toSoyData(view, rw.getObjectReader(), result.regions, df))); + renderHtml( + req, + res, + "gitiles.blameDetail", + ImmutableMap.of( + "title", + title, + "breadcrumbs", + view.getBreadcrumbs(), + "data", + blobData, + "regions", + toSoyData(view, rw.getObjectReader(), result.regions, df))); } else { - renderHtml(req, res, "gitiles.blameDetail", ImmutableMap.of( - "title", title, - "breadcrumbs", view.getBreadcrumbs(), - "data", blobData)); + renderHtml( + req, + res, + "gitiles.blameDetail", + ImmutableMap.of( + "title", title, + "breadcrumbs", view.getBreadcrumbs(), + "data", blobData)); } } } @@ -118,15 +129,19 @@ r.setStart(start); start += r.getCount(); } - renderJson(req, res, ImmutableMap.of("regions", result.regions), + renderJson( + req, + res, + ImmutableMap.of("regions", result.regions), new TypeToken<Map<String, List<Region>>>() {}.getType()); } } @Override protected GsonBuilder newGsonBuilder(HttpServletRequest req) throws IOException { - return super.newGsonBuilder(req).registerTypeAdapter(Region.class, - new RegionAdapter(new DateFormatter(getAccess(req), Format.ISO))); + return super.newGsonBuilder(req) + .registerTypeAdapter( + Region.class, new RegionAdapter(new DateFormatter(getAccess(req), Format.ISO))); } private static class RegionResult { @@ -139,8 +154,9 @@ } } - private RegionResult getRegions(GitilesView view, GitilesAccess access, Repository repo, - RevWalk rw, HttpServletResponse res) throws IOException { + private RegionResult getRegions( + GitilesView view, GitilesAccess access, Repository repo, RevWalk rw, HttpServletResponse res) + throws IOException { RevCommit currCommit = rw.parseCommit(view.getRevision().getId()); ObjectId currCommitBlobId = resolveBlob(view, rw, currCommit); if (currCommitBlobId == null) { @@ -152,13 +168,15 @@ ObjectId lastCommitBlobId = resolveBlob(view, rw, lastCommit); if (!Objects.equals(currCommitBlobId, lastCommitBlobId)) { - log.warn(String.format("Blob %s in last modified commit %s for repo %s starting from %s" - + " does not match original blob %s", - ObjectId.toString(lastCommitBlobId), - ObjectId.toString(lastCommit), - access.getRepositoryName(), - ObjectId.toString(currCommit), - ObjectId.toString(currCommitBlobId))); + log.warn( + String.format( + "Blob %s in last modified commit %s for repo %s starting from %s" + + " does not match original blob %s", + ObjectId.toString(lastCommitBlobId), + ObjectId.toString(lastCommit), + access.getRepositoryName(), + ObjectId.toString(currCommit), + ObjectId.toString(currCommitBlobId))); lastCommitBlobId = currCommitBlobId; lastCommit = currCommit; } @@ -191,6 +209,7 @@ private static final ImmutableList<String> CLASSES = ImmutableList.of("Blame-region--bg1", "Blame-region--bg2"); private static final ImmutableList<SoyMapData> NULLS; + static { ImmutableList.Builder<SoyMapData> nulls = ImmutableList.builder(); for (String clazz : CLASSES) { @@ -199,8 +218,9 @@ NULLS = nulls.build(); } - private static SoyListData toSoyData(GitilesView view, ObjectReader reader, - List<Region> regions, DateFormatter df) throws IOException { + private static SoyListData toSoyData( + GitilesView view, ObjectReader reader, List<Region> regions, DateFormatter df) + throws IOException { Map<ObjectId, String> abbrevShas = Maps.newHashMap(); SoyListData result = new SoyListData(); @@ -225,18 +245,24 @@ blameParent = "^"; blameText = "blame^"; } - e.put("blameUrl", GitilesView.blame().copyFrom(view) - .setRevision(r.getSourceCommit().name() + blameParent) - .setPathPart(r.getSourcePath()) - .toUrl()); + e.put( + "blameUrl", + GitilesView.blame() + .copyFrom(view) + .setRevision(r.getSourceCommit().name() + blameParent) + .setPathPart(r.getSourcePath()) + .toUrl()); e.put("blameText", blameText); - e.put("commitUrl", GitilesView.revision().copyFrom(view) - .setRevision(r.getSourceCommit().name()) - .toUrl()); - e.put("diffUrl", GitilesView.diff().copyFrom(view) - .setRevision(r.getSourceCommit().name()) - .setPathPart(r.getSourcePath()) - .toUrl()); + e.put( + "commitUrl", + GitilesView.revision().copyFrom(view).setRevision(r.getSourceCommit().name()).toUrl()); + e.put( + "diffUrl", + GitilesView.diff() + .copyFrom(view) + .setRevision(r.getSourceCommit().name()) + .setPathPart(r.getSourcePath()) + .toUrl()); e.put("author", CommitSoyData.toSoyData(r.getSourceAuthor(), df)); e.put("class", CLASSES.get(c)); result.add(e);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/blame/RegionAdapter.java b/gitiles-servlet/src/main/java/com/google/gitiles/blame/RegionAdapter.java index a9710ae..eed270f 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/blame/RegionAdapter.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/blame/RegionAdapter.java
@@ -35,15 +35,23 @@ @Override public void write(JsonWriter out, Region value) throws IOException { out.beginObject() - .name("start").value(value.getStart() + 1) - .name("count").value(value.getCount()) - .name("path").value(value.getSourcePath()) - .name("commit").value(ObjectId.toString(value.getSourceCommit())) - .name("author").beginObject() + .name("start") + .value(value.getStart() + 1) + .name("count") + .value(value.getCount()) + .name("path") + .value(value.getSourcePath()) + .name("commit") + .value(ObjectId.toString(value.getSourceCommit())) + .name("author") + .beginObject() // TODO(dborowitz): Use an adapter from CommitJsonData instead. - .name("name").value(value.getSourceAuthor().getName()) - .name("email").value(value.getSourceAuthor().getEmailAddress()) - .name("time").value(df.format(value.getSourceAuthor())) + .name("name") + .value(value.getSourceAuthor().getName()) + .name("email") + .value(value.getSourceAuthor().getEmailAddress()) + .name("time") + .value(df.format(value.getSourceAuthor())) .endObject() .endObject(); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/ColsNode.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/ColsNode.java index 7c31b0f..502c39f 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/ColsNode.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/ColsNode.java
@@ -57,10 +57,8 @@ int idx = 0; Column col = null; for (Node n : children) { - if (col == null - || n instanceof HeaderNode - || n instanceof DivNode) { - for (;;) { + if (col == null || n instanceof HeaderNode || n instanceof DivNode) { + for (; ; ) { if (idx < columns.size()) { col = columns.get(idx); } else { @@ -78,9 +76,7 @@ } private static <T> ArrayList<T> copyOf(List<T> in) { - return in != null && !in.isEmpty() - ? new ArrayList<>(in) - : new ArrayList<T>(); + return in != null && !in.isEmpty() ? new ArrayList<>(in) : new ArrayList<T>(); } @SuppressWarnings("unchecked")
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DivNode.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DivNode.java index f3389de..9bdb926 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DivNode.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DivNode.java
@@ -25,9 +25,10 @@ private final String style; DivNode(String style, List<Node> list) { - super(list.size() == 1 && list.get(0) instanceof ParaNode - ? ((ParaNode) list.get(0)).getChildren() - : list); + super( + list.size() == 1 && list.get(0) instanceof ParaNode + ? ((ParaNode) list.get(0)).getChildren() + : list); this.style = style; }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java index 59b8b5c..4b774a5 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java
@@ -76,8 +76,7 @@ } @Override - protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) - throws IOException { + protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException { Config cfg = getAccess(req).getConfig(); if (!cfg.getBoolean("markdown", "render", true)) { res.setStatus(SC_NOT_FOUND); @@ -110,13 +109,14 @@ return; } - Duration parseTimeout = ConfigUtil.getDuration(cfg, "markdown", null, - "parseTimeout", Duration.standardSeconds(2)); + Duration parseTimeout = + ConfigUtil.getDuration( + cfg, "markdown", null, "parseTimeout", Duration.standardSeconds(2)); view = view.toBuilder().setPathPart(srcmd.path).build(); int inputLimit = cfg.getInt("markdown", "inputLimit", 5 << 20); - RootNode doc = GitilesMarkdown.parseFile( - parseTimeout, view, srcmd.path, - srcmd.read(rw.getObjectReader(), inputLimit)); + RootNode doc = + GitilesMarkdown.parseFile( + parseTimeout, view, srcmd.path, srcmd.read(rw.getObjectReader(), inputLimit)); if (doc == null) { res.sendRedirect(GitilesView.show().copyFrom(view).toUrl()); return; @@ -124,9 +124,9 @@ RootNode nav = null; if (navmd != null) { - nav = GitilesMarkdown.parseFile( - parseTimeout, view, navmd.path, - navmd.read(rw.getObjectReader(), inputLimit)); + nav = + GitilesMarkdown.parseFile( + parseTimeout, view, navmd.path, navmd.read(rw.getObjectReader(), inputLimit)); if (nav == null) { res.setStatus(SC_INTERNAL_SERVER_ERROR); return; @@ -136,8 +136,7 @@ int imageLimit = cfg.getInt("markdown", "imageLimit", 256 << 10); ImageLoader img = null; if (imageLimit > 0) { - img = new ImageLoader(rw.getObjectReader(), view, - root, srcmd.path, imageLimit); + img = new ImageLoader(rw.getObjectReader(), view, root, srcmd.path, imageLimit); } res.setHeader(HttpHeaders.ETAG, curEtag); @@ -171,23 +170,25 @@ res.setHeader(HttpHeaders.CACHE_CONTROL, "private, max-age=0, must-revalidate"); } - private void showDoc(HttpServletRequest req, HttpServletResponse res, - GitilesView view, Config cfg, ImageLoader img, - RootNode nav, RootNode doc) throws IOException { + private void showDoc( + HttpServletRequest req, + HttpServletResponse res, + GitilesView view, + Config cfg, + ImageLoader img, + RootNode nav, + RootNode doc) + throws IOException { Map<String, Object> data = new HashMap<>(); data.putAll(Navbar.bannerSoyData(view, img, nav)); - data.put("pageTitle", MoreObjects.firstNonNull( - MarkdownUtil.getTitle(doc), - view.getPathPart())); + data.put("pageTitle", MoreObjects.firstNonNull(MarkdownUtil.getTitle(doc), view.getPathPart())); if (view.getType() != GitilesView.Type.ROOTED_DOC) { data.put("sourceUrl", GitilesView.show().copyFrom(view).toUrl()); data.put("logUrl", GitilesView.log().copyFrom(view).toUrl()); data.put("blameUrl", GitilesView.blame().copyFrom(view).toUrl()); } data.put("navbarHtml", new MarkdownToHtml(view, cfg).toSoyHtml(nav)); - data.put("bodyHtml", new MarkdownToHtml(view, cfg) - .setImageLoader(img) - .toSoyHtml(doc)); + data.put("bodyHtml", new MarkdownToHtml(view, cfg).setImageLoader(img).toSoyHtml(doc)); String analyticsId = cfg.getString("google", null, "analyticsId"); if (!Strings.isNullOrEmpty(analyticsId)) { @@ -237,8 +238,7 @@ private static boolean findIndexFile(TreeWalk tw) throws IOException { tw.enterSubtree(); while (tw.next()) { - if ((tw.getRawMode(0) & TYPE_MASK) == TYPE_FILE - && INDEX_MD.equals(tw.getNameString())) { + if ((tw.getRawMode(0) & TYPE_MASK) == TYPE_FILE && INDEX_MD.equals(tw.getNameString())) { return true; } }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java index 91168b8..c417932 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java
@@ -39,8 +39,7 @@ import java.util.List; /** Parses Gitiles extensions to markdown. */ -public class GitilesMarkdown extends Parser - implements BlockPluginParser, InlinePluginParser { +public class GitilesMarkdown extends Parser implements BlockPluginParser, InlinePluginParser { private static final Logger log = LoggerFactory.getLogger(MarkdownUtil.class); // SUPPRESS_ALL_HTML is enabled to permit hosting arbitrary user content @@ -51,8 +50,8 @@ // this impacting the rendered formatting. private static final int MD_OPTIONS = (ALL | SUPPRESS_ALL_HTML) & ~(HARDWRAPS); - public static RootNode parseFile(Duration parseTimeout, GitilesView view, - String path, String md) { + public static RootNode parseFile( + Duration parseTimeout, GitilesView view, String path, String md) { if (md == null) { return null; } @@ -65,7 +64,8 @@ throw e; } } catch (ParsingTimeoutException e) { - log.error("timeout {} ms rendering {}/{} at {}", + log.error( + "timeout {} ms rendering {}/{} at {}", parseTimeout.getMillis(), view.getRepositoryName(), path, @@ -75,9 +75,8 @@ } private static PegDownProcessor newParser(Duration parseDeadline) { - PegDownPlugins plugins = new PegDownPlugins.Builder() - .withPlugin(GitilesMarkdown.class, parseDeadline) - .build(); + PegDownPlugins plugins = + new PegDownPlugins.Builder().withPlugin(GitilesMarkdown.class, parseDeadline).build(); return new PegDownProcessor(MD_OPTIONS, parseDeadline.getMillis(), plugins); } @@ -92,32 +91,28 @@ @Override public Rule[] blockPluginRules() { return new Rule[] { - cols(), - hr(), - iframe(), - note(), - toc(), + cols(), hr(), iframe(), note(), toc(), }; } @Override public Rule[] inlinePluginRules() { - return new Rule[]{ - namedAnchorHtmlStyle(), - namedAnchorMarkdownExtensionStyle(), + return new Rule[] { + namedAnchorHtmlStyle(), namedAnchorMarkdownExtensionStyle(), }; } public Rule toc() { - return NodeSequence( - string("[TOC]"), - push(new TocNode())); + return NodeSequence(string("[TOC]"), push(new TocNode())); } public Rule hr() { // GitHub flavor markdown recognizes "--" as a rule. return NodeSequence( - NonindentSpace(), string("--"), zeroOrMore('-'), Newline(), + NonindentSpace(), + string("--"), + zeroOrMore('-'), + Newline(), oneOrMore(BlankLine()), push(new SimpleNode(SimpleNode.Type.HRule))); } @@ -125,19 +120,21 @@ public Rule namedAnchorHtmlStyle() { StringBuilderVar name = new StringBuilderVar(); return NodeSequence( - Sp(), string("<a"), + Sp(), + string("<a"), Spn1(), sequence(string("name="), attribute(name)), - Spn1(), '>', - Spn1(), string("</a>"), + Spn1(), + '>', + Spn1(), + string("</a>"), push(new NamedAnchorNode(name.getString()))); } public Rule namedAnchorMarkdownExtensionStyle() { StringBuilderVar name = new StringBuilderVar(); return NodeSequence( - Sp(), string("{#"), anchorId(name), '}', - push(new NamedAnchorNode(name.getString()))); + Sp(), string("{#"), anchorId(name), '}', push(new NamedAnchorNode(name.getString()))); } public Rule anchorId(StringBuilderVar name) { @@ -152,35 +149,36 @@ return NodeSequence( string("<iframe"), oneOrMore( - sequence( - Spn1(), - firstOf( - sequence(string("src="), attribute(src)), - sequence(string("height="), attribute(h)), - sequence(string("width="), attribute(w)), - sequence(string("frameborder="), attribute(b)) - ))), - Spn1(), '>', - Spn1(), string("</iframe>"), - push(new IframeNode(src.getString(), - h.getString(), w.getString(), - b.getString()))); + sequence( + Spn1(), + firstOf( + sequence(string("src="), attribute(src)), + sequence(string("height="), attribute(h)), + sequence(string("width="), attribute(w)), + sequence(string("frameborder="), attribute(b))))), + Spn1(), + '>', + Spn1(), + string("</iframe>"), + push(new IframeNode(src.getString(), h.getString(), w.getString(), b.getString()))); } public Rule attribute(StringBuilderVar var) { return firstOf( - sequence('"', zeroOrMore(testNot('"'), ANY), var.append(match()), '"'), - sequence('\'', zeroOrMore(testNot('\''), ANY), var.append(match()), '\'')); + sequence('"', zeroOrMore(testNot('"'), ANY), var.append(match()), '"'), + sequence('\'', zeroOrMore(testNot('\''), ANY), var.append(match()), '\'')); } public Rule note() { StringBuilderVar body = new StringBuilderVar(); return NodeSequence( - string("***"), Sp(), typeOfNote(), Newline(), - oneOrMore( - testNot(string("***"), Newline()), - Line(body)), - string("***"), Newline(), + string("***"), + Sp(), + typeOfNote(), + Newline(), + oneOrMore(testNot(string("***"), Newline()), Line(body)), + string("***"), + Newline(), push(new DivNode(popAsString(), parse(body)))); } @@ -195,11 +193,12 @@ public Rule cols() { StringBuilderVar body = new StringBuilderVar(); return NodeSequence( - colsTag(), columnWidths(), Newline(), - oneOrMore( - testNot(colsTag(), Newline()), - Line(body)), - colsTag(), Newline(), + colsTag(), + columnWidths(), + Newline(), + oneOrMore(testNot(colsTag(), Newline()), Line(body)), + colsTag(), + Newline(), push(new ColsNode((List<ColsNode.Column>) pop(), parse(body)))); } @@ -210,19 +209,17 @@ public Rule columnWidths() { ListVar widths = new ListVar(); return sequence( - zeroOrMore( - sequence( - Sp(), optional(ch(',')), Sp(), - columnWidth(widths))), - push(widths.get())); + zeroOrMore(sequence(Sp(), optional(ch(',')), Sp(), columnWidth(widths))), + push(widths.get())); } public Rule columnWidth(ListVar widths) { StringBuilderVar s = new StringBuilderVar(); return sequence( - optional(sequence(ch(':'), s.append(':'))), - oneOrMore(digit()), s.append(match()), - widths.get().add(parse(s.get().toString()))); + optional(sequence(ch(':'), s.append(':'))), + oneOrMore(digit()), + s.append(match()), + widths.get().add(parse(s.get().toString()))); } static ColsNode.Column parse(String spec) { @@ -248,12 +245,13 @@ public static class ListVar extends Var<List<Object>> { @SuppressWarnings({"rawtypes", "unchecked"}) public ListVar() { - super(new Factory() { - @Override - public Object create() { - return new ArrayList<>(); - } - }); + super( + new Factory() { + @Override + public Object create() { + return new ArrayList<>(); + } + }); } } }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/ImageLoader.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/ImageLoader.java index 11c5e2f..b381616 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/ImageLoader.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/ImageLoader.java
@@ -41,8 +41,8 @@ private final String path; private final int imageLimit; - public ImageLoader(ObjectReader reader, GitilesView view, - RevTree root, String path, int maxImageSize) { + public ImageLoader( + ObjectReader reader, GitilesView view, RevTree root, String path, int maxImageSize) { this.reader = reader; this.view = view; this.root = root; @@ -97,17 +97,20 @@ } catch (LargeObjectException.ExceedsLimit e) { return FilterImageDataUri.INSTANCE.getInnocuousOutput(); } catch (IOException e) { - log.error(String.format("cannot read repo %s image %s from %s", - view.getRepositoryName(), path, root.name()), e); + log.error( + String.format( + "cannot read repo %s image %s from %s", view.getRepositoryName(), path, root.name()), + e); return FilterImageDataUri.INSTANCE.getInnocuousOutput(); } } - private static final ImmutableMap<String, String> TYPES = ImmutableMap.of( - "png", "image/png", - "gif", "image/gif", - "jpg", "image/jpeg", - "jpeg", "image/jpeg"); + private static final ImmutableMap<String, String> TYPES = + ImmutableMap.of( + "png", "image/png", + "gif", "image/gif", + "jpg", "image/jpeg", + "jpeg", "image/jpeg"); private static String getMimeType(String path) { int d = path.lastIndexOf('.');
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java index eb602ea..7d0d4e1 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java
@@ -188,7 +188,8 @@ .attribute("class", "h") .attribute("name", id) .attribute("href", "#" + id) - .open("span").close("span") + .open("span") + .close("span") .close("a"); } visitChildren(node); @@ -322,33 +323,25 @@ @Override public void visit(AutoLinkNode node) { String url = node.getText(); - html.open("a").attribute("href", href(url)) - .appendAndEscape(url) - .close("a"); + html.open("a").attribute("href", href(url)).appendAndEscape(url).close("a"); } @Override public void visit(MailLinkNode node) { String addr = node.getText(); - html.open("a").attribute("href", "mailto:" + addr) - .appendAndEscape(addr) - .close("a"); + html.open("a").attribute("href", "mailto:" + addr).appendAndEscape(addr).close("a"); } @Override public void visit(WikiLinkNode node) { String text = node.getText(); String path = text.replace(' ', '-') + ".md"; - html.open("a").attribute("href", href(path)) - .appendAndEscape(text) - .close("a"); + html.open("a").attribute("href", href(path)).appendAndEscape(text).close("a"); } @Override public void visit(ExpLinkNode node) { - html.open("a") - .attribute("href", href(node.url)) - .attribute("title", node.title); + html.open("a").attribute("href", href(node.url)).attribute("title", node.title); visitChildren(node); html.close("a"); } @@ -357,9 +350,7 @@ public void visit(RefLinkNode node) { ReferenceNode ref = references.get(node.referenceKey, getInnerText(node)); if (ref != null) { - html.open("a") - .attribute("href", href(ref.getUrl())) - .attribute("title", ref.getTitle()); + html.open("a").attribute("href", href(ref.getUrl())).attribute("title", ref.getTitle()); visitChildren(node); html.close("a"); } else { @@ -411,9 +402,7 @@ return FilterNormalizeUri.INSTANCE.getInnocuousOutput(); } - GitilesView.Builder dest = url.endsWith(".md") - ? GitilesView.doc() - : GitilesView.show(); + GitilesView.Builder dest = url.endsWith(".md") ? GitilesView.doc() : GitilesView.show(); return dest.copyFrom(view).setPathPart(dir + url).build().toUrl(); } @@ -437,15 +426,13 @@ // If reference is missing, insert a broken image. url = FilterImageDataUri.INSTANCE.getInnocuousOutput(); } - html.open("img") - .attribute("src", url) - .attribute("title", title) - .attribute("alt", alt); + html.open("img").attribute("src", url).attribute("title", title).attribute("alt", alt); } private String resolveImageUrl(String url) { if (imageLoader == null - || url.startsWith("https://") || url.startsWith("http://") + || url.startsWith("https://") + || url.startsWith("http://") || url.startsWith("data:")) { return url; } @@ -492,8 +479,7 @@ public void visit(TableCellNode node) { mustBeInsideTable(node); String tag = table.inHeader ? "th" : "td"; - html.open(tag) - .attribute("align", table.getAlign()); + html.open(tag).attribute("align", table.getAlign()); if (node.getColSpan() > 1) { html.attribute("colspan", Integer.toString(node.getColSpan())); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownUtil.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownUtil.java index e6a0f00..5130216 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownUtil.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownUtil.java
@@ -23,9 +23,7 @@ class MarkdownUtil { /** Check if anchor URL is like {@code /top.md}. */ static boolean isAbsolutePathToMarkdown(String url) { - return url.length() >= 5 - && url.charAt(0) == '/' && url.charAt(1) != '/' - && url.endsWith(".md"); + return url.length() >= 5 && url.charAt(0) == '/' && url.charAt(1) != '/' && url.endsWith(".md"); } /** Combine child nodes as string; this must be escaped for HTML. */ @@ -66,6 +64,5 @@ return null; } - private MarkdownUtil() { - } + private MarkdownUtil() {} }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java index 548a252..aa8e0eb 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java
@@ -29,9 +29,7 @@ import java.util.Map; class Navbar { - static Map<String, Object> bannerSoyData( - GitilesView view, ImageLoader img, - RootNode nav) { + static Map<String, Object> bannerSoyData(GitilesView view, ImageLoader img, RootNode nav) { Map<String, Object> data = new HashMap<>(); data.put("siteTitle", null); data.put("logoUrl", null); @@ -41,7 +39,7 @@ return data; } - for (Iterator<Node> i = nav.getChildren().iterator(); i.hasNext();) { + for (Iterator<Node> i = nav.getChildren().iterator(); i.hasNext(); ) { Node n = i.next(); if (n instanceof HeaderNode) { HeaderNode h = (HeaderNode) n; @@ -78,6 +76,5 @@ return data; } - private Navbar() { - } + private Navbar() {} }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/TableState.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/TableState.java index 80276d2..396a86b 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/TableState.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/TableState.java
@@ -47,13 +47,12 @@ case Center: return "center"; default: - throw new IllegalStateException(String.format( - "unsupported alignment %s on column %d", - c.getAlignment(), pos)); + throw new IllegalStateException( + String.format("unsupported alignment %s on column %d", c.getAlignment(), pos)); } } void done(TableCellNode cell) { column += cell.getColSpan(); } -} \ No newline at end of file +}
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java index ed5315c..cb82f54 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java
@@ -73,9 +73,12 @@ html.open("div") .attribute("class", "toc") .attribute("role", "navigation") - .open("h2").appendAndEscape("Contents").close("h2") - .open("div").attribute("class", "toc-aux") - .open("ul"); + .open("h2") + .appendAndEscape("Contents") + .close("h2") + .open("div") + .attribute("class", "toc-aux") + .open("ul"); for (HeaderNode header : outline) { outline(header); } @@ -106,15 +109,14 @@ } html.open("li") - .open("a").attribute("href", "#" + id) - .appendAndEscape(MarkdownUtil.getInnerText(h)) - .close("a") - .close("li"); + .open("a") + .attribute("href", "#" + id) + .appendAndEscape(MarkdownUtil.getInnerText(h)) + .close("a") + .close("li"); } - private void scan(Node node, - Multimap<String, TocEntry> entries, - Deque<HeaderNode> stack) { + private void scan(Node node, Multimap<String, TocEntry> entries, Deque<HeaderNode> stack) { if (node instanceof HeaderNode) { scan((HeaderNode) node, entries, stack); } else { @@ -124,9 +126,8 @@ } } - private void scan(HeaderNode header, - Multimap<String, TocEntry> entries, - Deque<HeaderNode> stack) { + private void scan( + HeaderNode header, Multimap<String, TocEntry> entries, Deque<HeaderNode> stack) { if (header.getLevel() == 1) { countH1++; } @@ -227,14 +228,10 @@ private static String idFromTitle(String title) { StringBuilder b = new StringBuilder(title.length()); for (char c : StringUtils.stripAccents(title).toCharArray()) { - if (('a' <= c && c <= 'z') - || ('A' <= c && c <= 'Z') - || ('0' <= c && c <= '9')) { + if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9')) { b.append(c); } else if (c == ' ') { - if (b.length() > 0 - && b.charAt(b.length() - 1) != '-' - && b.charAt(b.length() - 1) != '_') { + if (b.length() > 0 && b.charAt(b.length() - 1) != '-' && b.charAt(b.length() - 1) != '_') { b.append('-'); } } else if (b.length() > 0
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/Visitor.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/Visitor.java index 5562be2..6c9f2f6 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/Visitor.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/Visitor.java
@@ -16,9 +16,14 @@ public interface Visitor extends org.pegdown.ast.Visitor { void visit(ColsNode node); + void visit(ColsNode.Column node); + void visit(DivNode node); + void visit(IframeNode node); + void visit(TocNode node); + void visit(NamedAnchorNode node); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/html/HtmlBuilder.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/html/HtmlBuilder.java index 5b74c35..89611da 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/html/HtmlBuilder.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/html/HtmlBuilder.java
@@ -41,20 +41,46 @@ * {@code https://}, and for image src {@code data:image/*;base64,...}. */ public final class HtmlBuilder { - private static final ImmutableSet<String> ALLOWED_TAGS = ImmutableSet.of( - "h1", "h2", "h3", "h4", "h5", "h6", - "a", "div", "img", "p", "blockquote", "pre", - "ol", "ul", "li", "dl", "dd", "dt", - "del", "em", "strong", "code", "br", "hr", - "table", "thead", "tbody", "caption", "tr", "th", "td", - "iframe", "span" - ); + private static final ImmutableSet<String> ALLOWED_TAGS = + ImmutableSet.of( + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "a", + "div", + "img", + "p", + "blockquote", + "pre", + "ol", + "ul", + "li", + "dl", + "dd", + "dt", + "del", + "em", + "strong", + "code", + "br", + "hr", + "table", + "thead", + "tbody", + "caption", + "tr", + "th", + "td", + "iframe", + "span"); - private static final ImmutableSet<String> ALLOWED_ATTRIBUTES = ImmutableSet.of( - "id", "class", "role"); + private static final ImmutableSet<String> ALLOWED_ATTRIBUTES = + ImmutableSet.of("id", "class", "role"); - private static final ImmutableSet<String> SELF_CLOSING_TAGS = ImmutableSet.of( - "img", "br", "hr"); + private static final ImmutableSet<String> SELF_CLOSING_TAGS = ImmutableSet.of("img", "br", "hr"); private static final FilterNormalizeUri URI = FilterNormalizeUri.INSTANCE; private static final FilterImageDataUri IMAGE_DATA = FilterImageDataUri.INSTANCE; @@ -64,9 +90,7 @@ } public static boolean isValidHttpUri(String val) { - return (val.startsWith("https://") - || val.startsWith("http://") - || val.startsWith("//")) + return (val.startsWith("https://") || val.startsWith("http://") || val.startsWith("//")) && URI.getValueFilter().matcher(val).find(); } @@ -163,8 +187,7 @@ /** Close an open tag with {@code </tag>} */ public HtmlBuilder close(String tag) { checkArgument( - ALLOWED_TAGS.contains(tag) && !SELF_CLOSING_TAGS.contains(tag), - "invalid HTML tag %s", tag); + ALLOWED_TAGS.contains(tag) && !SELF_CLOSING_TAGS.contains(tag), "invalid HTML tag %s", tag); finishActiveTag(); htmlBuf.append("</").append(tag).append('>'); @@ -194,8 +217,6 @@ /** Bless the current content as HTML. */ public SanitizedContent toSoy() { finishActiveTag(); - return UnsafeSanitizedContentOrdainer.ordainAsSafe( - htmlBuf.toString(), - ContentKind.HTML); + return UnsafeSanitizedContentOrdainer.ordainAsSafe(htmlBuf.toString(), ContentKind.HTML); } }