From 388f49ada1b32bd2e99c964a0278094e4f21c3fb Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 25 Sep 2014 10:20:03 -0400
Subject: [PATCH] Fix failure to clear/delete ticket topic and description

---
 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