From bfa998a3d04e759be555dd8136aaa9450960a879 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 10 Apr 2014 19:00:04 -0400
Subject: [PATCH] Documentation
---
src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java | 44 ++++++++++++++++++++++++++++++++++----------
1 files changed, 34 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java b/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
index a00e107..47ff143 100644
--- a/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
+++ b/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
@@ -23,30 +23,46 @@
import java.io.OutputStream;
import java.text.MessageFormat;
+import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.diff.DiffFormatter;
import org.eclipse.jgit.diff.RawText;
import org.eclipse.jgit.util.RawParseUtils;
+import com.gitblit.models.PathModel.PathChangeModel;
+import com.gitblit.utils.DiffUtils.DiffStat;
+
/**
- * Generates an html snippet of a diff in Gitblit's style.
- *
+ * Generates an html snippet of a diff in Gitblit's style, tracks changed paths,
+ * and calculates diff stats.
+ *
* @author James Moger
- *
+ *
*/
public class GitBlitDiffFormatter extends DiffFormatter {
private final OutputStream os;
+ private final DiffStat diffStat;
+
+ private PathChangeModel currentPath;
+
private int left, right;
- public GitBlitDiffFormatter(OutputStream os) {
+ public GitBlitDiffFormatter(OutputStream os, String commitId) {
super(os);
this.os = os;
+ this.diffStat = new DiffStat(commitId);
+ }
+
+ @Override
+ public void format(DiffEntry ent) throws IOException {
+ currentPath = diffStat.addPath(ent);
+ super.format(ent);
}
/**
* Output a hunk header
- *
+ *
* @param aStartLine
* within first source
* @param aEndLine
@@ -72,7 +88,7 @@
left = aStartLine + 1;
right = bStartLine + 1;
}
-
+
protected void writeRange(final char prefix, final int begin, final int cnt) throws IOException {
os.write(' ');
os.write(prefix);
@@ -109,6 +125,10 @@
@Override
protected void writeLine(final char prefix, final RawText text, final int cur)
throws IOException {
+ // update entry diffstat
+ currentPath.update(prefix);
+
+ // output diff
os.write("<tr>".getBytes());
switch (prefix) {
case '+':
@@ -142,7 +162,7 @@
/**
* Workaround function for complex private methods in DiffFormatter. This
* sets the html for the diff headers.
- *
+ *
* @return
*/
public String getHtml() {
@@ -171,10 +191,10 @@
} else {
// use a
line = line.substring("diff --git ".length()).trim();
- line = line.substring(line.startsWith("\"a/") ? 3 : 2);
+ line = line.substring(line.startsWith("\"a/") ? 3 : 2);
line = line.substring(0, line.indexOf(" b/") > -1 ? line.indexOf(" b/") : line.indexOf("\"b/")).trim();
}
-
+
if (line.charAt(0) == '"') {
line = line.substring(1);
}
@@ -185,7 +205,7 @@
sb.append("</tbody></table></div>\n");
inFile = false;
}
-
+
sb.append(MessageFormat.format("<div class='header'><div class=\"diffHeader\" id=\"{0}\"><i class=\"icon-file\"></i> ", line)).append(line).append("</div></div>");
sb.append("<div class=\"diff\">");
sb.append("<table><tbody>");
@@ -209,4 +229,8 @@
sb.append("</table></div>");
return sb.toString();
}
+
+ public DiffStat getDiffStat() {
+ return diffStat;
+ }
}
--
Gitblit v1.9.1