From 58be4a33a1ca70baae779d80eff5d79ab7c523a3 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 30 Sep 2013 10:10:36 -0400 Subject: [PATCH] Change diffstat character to improve look and layout --- src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java | 70 ++++++++++++++++++++++++++++++++--- 1 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java b/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java index 62966de..8ca4285 100644 --- a/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java +++ b/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java @@ -16,32 +16,50 @@ package com.gitblit.utils; import static org.eclipse.jgit.lib.Constants.encode; +import static org.eclipse.jgit.lib.Constants.encodeASCII; import java.io.ByteArrayOutputStream; import java.io.IOException; 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 GitWebDiffFormatter { +public class GitBlitDiffFormatter extends DiffFormatter { private final OutputStream os; - private int left, right; + private final DiffStat diffStat; - public GitBlitDiffFormatter(OutputStream os) { + private PathChangeModel currentPath; + + private int left, right; + + 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 * @@ -70,10 +88,47 @@ 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); + switch (cnt) { + case 0: + // If the range is empty, its beginning number must + // be the + // line just before the range, or 0 if the range is + // at the + // start of the file stream. Here, begin is always 1 + // based, + // so an empty file would produce "0,0". + // + os.write(encodeASCII(begin - 1)); + os.write(','); + os.write('0'); + break; + + case 1: + // If the range is exactly one line, produce only + // the number. + // + os.write(encodeASCII(begin)); + break; + + default: + os.write(encodeASCII(begin)); + os.write(','); + os.write(encodeASCII(cnt)); + break; + } + } @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 '+': @@ -110,7 +165,6 @@ * * @return */ - @Override public String getHtml() { ByteArrayOutputStream bos = (ByteArrayOutputStream) os; String html = RawParseUtils.decode(bos.toByteArray()); @@ -175,4 +229,8 @@ sb.append("</table></div>"); return sb.toString(); } + + public DiffStat getDiffStat() { + return diffStat; + } } -- Gitblit v1.9.1