From f0ebfe6152959fda74bf7a5436bd765a0a231f6b Mon Sep 17 00:00:00 2001 From: Tom <tw201207@gmail.com> Date: Thu, 06 Nov 2014 12:06:47 -0500 Subject: [PATCH] More diff page improvements --- src/main/java/com/gitblit/utils/DiffUtils.java | 39 ++++++++++++++++++++++++++++++++++++--- 1 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gitblit/utils/DiffUtils.java b/src/main/java/com/gitblit/utils/DiffUtils.java index 107f6ab..f597b94 100644 --- a/src/main/java/com/gitblit/utils/DiffUtils.java +++ b/src/main/java/com/gitblit/utils/DiffUtils.java @@ -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,7 +280,6 @@ } else { diff = os.toString(); } - df.flush(); } catch (Throwable t) { LOGGER.error("failed to generate commit diff!", t); } @@ -346,6 +347,38 @@ 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) { return getDiffStat(repository, null, commit, null); } -- Gitblit v1.9.1