Merge "Support CSS themes"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocCache.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocCache.java index f84efd7..8c03eb9 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocCache.java +++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocCache.java
@@ -17,47 +17,33 @@ import com.google.common.cache.LoadingCache; import com.google.gerrit.httpd.resources.Resource; import com.google.gerrit.reviewdb.client.Project; -import com.google.gerrit.reviewdb.client.RefNames; -import com.google.gerrit.server.git.GitRepositoryManager; +import com.google.gerrit.server.project.ProjectCache; +import com.google.gerrit.server.project.ProjectState; import com.google.inject.Inject; import com.google.inject.Singleton; import com.google.inject.name.Named; -import com.googlesource.gerrit.plugins.xdocs.XDocLoader; import com.googlesource.gerrit.plugins.xdocs.formatter.Formatters.FormatterProvider; import org.eclipse.jgit.lib.ObjectId; -import org.eclipse.jgit.lib.Repository; - -import java.io.IOException; @Singleton public class XDocCache { private final LoadingCache<String, Resource> cache; - private final GitRepositoryManager repoManager; + private final ProjectCache projectCache; @Inject XDocCache( @Named(XDocLoader.Module.X_DOC_RESOURCES) LoadingCache<String, Resource> cache, - GitRepositoryManager repoManager) { + ProjectCache projectCache) { this.cache = cache; - this.repoManager = repoManager; + this.projectCache = projectCache; } public Resource get(FormatterProvider formatter, Project.NameKey project, String file, ObjectId revId) { - ObjectId metaConfigRevId; - try { - Repository repo = repoManager.openRepository(project); - try { - metaConfigRevId = repo.resolve(RefNames.REFS_CONFIG); - } finally { - repo.close(); - } - } catch (IOException e) { - return null; - } - + ProjectState p = projectCache.get(project); + ObjectId metaConfigRevId = p != null ? p.getConfig().getRevision() : null; return cache.getUnchecked((new XDocResourceKey(formatter.getName(), project, file, revId, metaConfigRevId)).asString()); }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java index e6dd9f7..cf0971c 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java +++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
@@ -108,18 +108,20 @@ ObjectId objectId = tw.getObjectId(0); ObjectLoader loader = repo.open(objectId); byte[] bytes = loader.getBytes(Integer.MAX_VALUE); - if (formatter.getName().equals(Formatters.RAW_FORMATTER) - && RawText.isBinary(bytes)) { + boolean isBinary = RawText.isBinary(bytes); + if (formatter.getName().equals(Formatters.RAW_FORMATTER) && isBinary) { return Resources.METHOD_NOT_ALLOWED; } ObjectReader reader = repo.newObjectReader(); try { String abbrRevId = reader.abbreviate(revId).name(); + String raw = new String(bytes, UTF_8); + if (!isBinary) { + raw = replaceMacros(repo, key.getProject(), revId, abbrRevId, raw); + } String html = formatter.get().format(key.getProject().get(), - abbrRevId, formatterCfg, - replaceMacros(repo, key.getProject(), revId, - abbrRevId, bytes)); + abbrRevId, formatterCfg, raw); return getAsHtmlResource(html, commit.getCommitTime()); } finally { reader.release(); @@ -136,7 +138,7 @@ } private String replaceMacros(Repository repo, Project.NameKey project, - ObjectId revId, String abbrRevId, byte[] raw) throws GitAPIException, + ObjectId revId, String abbrRevId, String raw) throws GitAPIException, IOException { Map<String, String> macros = Maps.newHashMap(); @@ -153,8 +155,7 @@ (new Git(repo)).describe().setTarget(revId).call(), abbrRevId)); - Matcher m = Pattern.compile("(\\\\)?@([A-Z_]+)@") - .matcher(new String(raw, UTF_8)); + Matcher m = Pattern.compile("(\\\\)?@([A-Z_]+)@").matcher(raw); StringBuffer sb = new StringBuffer(); while (m.find()) { String key = m.group(2);