From ce07c4f4ca47eebb53815aaa361a24ea46dc3757 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 07 May 2014 10:27:14 -0400
Subject: [PATCH] Ensure the repository model ref list is refreshed on ref creation or deletion
---
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..dd2a780 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 = 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 +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