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);