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