From 7baf2e4cd2ef8082b74937e26de75b01e630b5d4 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 17 Apr 2014 12:00:35 -0400
Subject: [PATCH] Expose JGit 3.x receive pack settings as Gitblit settings

---
 src/main/java/com/gitblit/utils/DiffUtils.java |   70 +++++++++++++++++++++++++---------
 1 files changed, 51 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/gitblit/utils/DiffUtils.java b/src/main/java/com/gitblit/utils/DiffUtils.java
index 3c52cb0..b49497e 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;
@@ -282,7 +282,7 @@
 		} catch (Throwable t) {
 			LOGGER.error("failed to generate commit diff!", t);
 		}
-		
+
 		return new DiffOutput(outputType, diff, stat);
 	}
 
@@ -344,6 +344,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 = null;
+		try {
+			revWalk = new RevWalk(repository);
+			tipCommit = revWalk.parseCommit(repository.resolve(tip));
+			if (!StringUtils.isEmpty(base)) {
+				baseCommit = revWalk.parseCommit(repository.resolve(base));
+			}
+		} catch (Exception e) {
+			LOGGER.error("failed to generate diffstat!", e);
+		} finally {
+			revWalk.dispose();
+		}
+		return getDiffStat(repository, baseCommit, tipCommit, null);
 	}
 
 	public static DiffStat getDiffStat(Repository repository, RevCommit commit) {
@@ -442,10 +474,10 @@
 		}
 		return lines;
 	}
-	
+
 	/**
 	 * Normalizes a diffstat to an N-segment display.
-	 * 
+	 *
 	 * @params segments
 	 * @param insertions
 	 * @param deletions
@@ -482,7 +514,7 @@
 			sd = segments - si;
 			sb = 0;
 		}
-		
+
 		return new NormalizedDiffStat(si, sd, sb);
 	}
 }

--
Gitblit v1.9.1