From 8fa8cbcf9db40fea41d7a555c86428aede7f25e8 Mon Sep 17 00:00:00 2001
From: Tom <tw201207@gmail.com>
Date: Thu, 06 Nov 2014 12:06:47 -0500
Subject: [PATCH] Fix a copy/paste error in a comment.

---
 src/main/java/com/gitblit/utils/DiffUtils.java |   77 +++++++++++++++++++++++++++-----------
 1 files changed, 55 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/gitblit/utils/DiffUtils.java b/src/main/java/com/gitblit/utils/DiffUtils.java
index 3c52cb0..f597b94 100644
--- a/src/main/java/com/gitblit/utils/DiffUtils.java
+++ b/src/main/java/com/gitblit/utils/DiffUtils.java
@@ -66,23 +66,23 @@
 			return null;
 		}
 	}
-	
+
 	/**
-	 * Encapsulates the output of a diff. 
+	 * Encapsulates the output of a diff.
 	 */
 	public static class DiffOutput implements Serializable {
 		private static final long serialVersionUID = 1L;
-		
+
 		public final DiffOutputType type;
 		public final String content;
 		public final DiffStat stat;
-		
+
 		DiffOutput(DiffOutputType type, String content, DiffStat stat) {
 			this.type = type;
 			this.content = content;
 			this.stat = stat;
 		}
-		
+
 		public PathChangeModel getPath(String path) {
 			if (stat == null) {
 				return null;
@@ -98,15 +98,15 @@
 	public static class DiffStat implements Serializable {
 
 		private static final long serialVersionUID = 1L;
-		
+
 		public final List<PathChangeModel> paths = new ArrayList<PathChangeModel>();
-		
+
 		private final String commitId;
-		
+
 		public DiffStat(String commitId) {
 			this.commitId = commitId;
 		}
-		
+
 		public PathChangeModel addPath(DiffEntry entry) {
 			PathChangeModel pcm = PathChangeModel.from(entry, commitId);
 			paths.add(pcm);
@@ -128,7 +128,7 @@
 			}
 			return val;
 		}
-		
+
 		public PathChangeModel getPath(String path) {
 			PathChangeModel stat = null;
 			for (PathChangeModel p : paths) {
@@ -138,7 +138,7 @@
 				}
 			}
 			return stat;
-		}		
+		}
 
 		@Override
 		public String toString() {
@@ -150,15 +150,15 @@
 			return sb.toString();
 		}
 	}
-	
+
 	public static class NormalizedDiffStat implements Serializable {
-		
+
 		private static final long serialVersionUID = 1L;
-		
+
 		public final int insertions;
 		public final int deletions;
 		public final int blanks;
-		
+
 		NormalizedDiffStat(int insertions, int deletions, int blanks) {
 			this.insertions = insertions;
 			this.deletions = deletions;
@@ -228,15 +228,16 @@
 		DiffStat stat = null;
 		String diff = null;
 		try {
-			final ByteArrayOutputStream os = new ByteArrayOutputStream();
+			ByteArrayOutputStream os = null;
 			RawTextComparator cmp = RawTextComparator.DEFAULT;
 			DiffFormatter df;
 			switch (outputType) {
 			case HTML:
-				df = new GitBlitDiffFormatter(os, commit.getName());
+				df = new GitBlitDiffFormatter(commit.getName(), path);
 				break;
 			case PLAIN:
 			default:
+				os = new ByteArrayOutputStream();
 				df = new DiffFormatter(os);
 				break;
 			}
@@ -271,6 +272,7 @@
 			} else {
 				df.format(diffEntries);
 			}
+			df.flush();
 			if (df instanceof GitBlitDiffFormatter) {
 				// workaround for complex private methods in DiffFormatter
 				diff = ((GitBlitDiffFormatter) df).getHtml();
@@ -278,11 +280,10 @@
 			} else {
 				diff = os.toString();
 			}
-			df.flush();
 		} catch (Throwable t) {
 			LOGGER.error("failed to generate commit diff!", t);
 		}
-		
+
 		return new DiffOutput(outputType, diff, stat);
 	}
 
@@ -344,6 +345,38 @@
 			LOGGER.error("failed to generate commit diff!", t);
 		}
 		return diff;
+	}
+
+	/**
+	 * Returns the diffstat between the two commits for the specified file or folder.
+	 *
+	 * @param repository
+	 * @param base
+	 *            if base commit is unspecified, the diffstat is generated against
+	 *            the primary parent of the specified tip.
+	 * @param tip
+	 * @param path
+	 *            if path is specified, the diffstat is generated only for the
+	 *            specified file or folder. if unspecified, the diffstat is
+	 *            generated for the entire diff between the two commits.
+	 * @return patch as a string
+	 */
+	public static DiffStat getDiffStat(Repository repository, String base, String tip) {
+		RevCommit baseCommit = null;
+		RevCommit tipCommit = null;
+		RevWalk revWalk = new RevWalk(repository);
+		try {
+			tipCommit = revWalk.parseCommit(repository.resolve(tip));
+			if (!StringUtils.isEmpty(base)) {
+				baseCommit = revWalk.parseCommit(repository.resolve(base));
+			}
+			return getDiffStat(repository, baseCommit, tipCommit, null);
+		} catch (Exception e) {
+			LOGGER.error("failed to generate diffstat!", e);
+		} finally {
+			revWalk.dispose();
+		}
+		return null;
 	}
 
 	public static DiffStat getDiffStat(Repository repository, RevCommit commit) {
@@ -442,10 +475,10 @@
 		}
 		return lines;
 	}
-	
+
 	/**
 	 * Normalizes a diffstat to an N-segment display.
-	 * 
+	 *
 	 * @params segments
 	 * @param insertions
 	 * @param deletions
@@ -482,7 +515,7 @@
 			sd = segments - si;
 			sb = 0;
 		}
-		
+
 		return new NormalizedDiffStat(si, sd, sb);
 	}
 }

--
Gitblit v1.9.1