Merge "Never replace macros in binary files"
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);