From 319342c09152c61af13930e79777e1396f9c397f Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 27 Sep 2013 21:33:34 -0400
Subject: [PATCH] Add normalized diffstats to the commit, commitdiff, and compare pages

---
 src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java |   32 ++++++++++++++++++++++++++++----
 1 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java b/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
index a00e107..8ca4285 100644
--- a/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
+++ b/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
@@ -23,12 +23,17 @@
 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
  * 
@@ -37,13 +42,24 @@
 
 	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
 	 * 
@@ -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 '+':
@@ -209,4 +229,8 @@
 		sb.append("</table></div>");
 		return sb.toString();
 	}
+	
+	public DiffStat getDiffStat() {
+		return diffStat;
+	}
 }

--
Gitblit v1.9.1