From 835529db4edb7b3c5c67e58b3dd1080e8772a642 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sat, 01 Mar 2014 09:20:23 -0500 Subject: [PATCH] Add method to calculate the diffstat between two commits --- src/main/java/com/gitblit/utils/DiffUtils.java | 32 ++++++++++++++++++++++++++++++++ 1 files changed, 32 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/gitblit/utils/DiffUtils.java b/src/main/java/com/gitblit/utils/DiffUtils.java index 107f6ab..b49497e 100644 --- a/src/main/java/com/gitblit/utils/DiffUtils.java +++ b/src/main/java/com/gitblit/utils/DiffUtils.java @@ -346,6 +346,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 = 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) { return getDiffStat(repository, null, commit, null); } -- Gitblit v1.9.1