From fd8cea4761b5382f23d06ed52608d1f556c4dbe5 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 22 May 2014 17:31:30 -0400 Subject: [PATCH] Render GFM links using Markdown, not direct HTML --- 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