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