From 01ffd40bd6f2e5a970527862b93b4e611367c746 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sat, 01 Mar 2014 09:21:32 -0500 Subject: [PATCH] Fix potential NPE in creating a date label --- src/main/java/com/gitblit/utils/JGitUtils.java | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gitblit/utils/JGitUtils.java b/src/main/java/com/gitblit/utils/JGitUtils.java index 212a90a..6a6085e 100644 --- a/src/main/java/com/gitblit/utils/JGitUtils.java +++ b/src/main/java/com/gitblit/utils/JGitUtils.java @@ -704,6 +704,7 @@ return null; } RevCommit commit = null; + RevWalk walk = null; try { // resolve object id ObjectId branchObject; @@ -712,12 +713,18 @@ } else { branchObject = repository.resolve(objectId); } - RevWalk walk = new RevWalk(repository); + if (branchObject == null) { + return null; + } + walk = new RevWalk(repository); RevCommit rev = walk.parseCommit(branchObject); commit = rev; - walk.dispose(); } catch (Throwable t) { error(t, repository, "{0} failed to get commit {1}", objectId); + } finally { + if (walk != null) { + walk.dispose(); + } } return commit; } @@ -969,6 +976,36 @@ * most recent commit. if null, HEAD is assumed. * @return list of files changed in a commit range */ + public static List<PathChangeModel> getFilesInRange(Repository repository, String startCommit, String endCommit) { + List<PathChangeModel> list = new ArrayList<PathChangeModel>(); + if (!hasCommits(repository)) { + return list; + } + try { + ObjectId startRange = repository.resolve(startCommit); + ObjectId endRange = repository.resolve(endCommit); + RevWalk rw = new RevWalk(repository); + RevCommit start = rw.parseCommit(startRange); + RevCommit end = rw.parseCommit(endRange); + list.addAll(getFilesInRange(repository, start, end)); + rw.release(); + } catch (Throwable t) { + error(t, repository, "{0} failed to determine files in range {1}..{2}!", startCommit, endCommit); + } + return list; + } + + /** + * Returns the list of files changed in a specified commit. If the + * repository does not exist or is empty, an empty list is returned. + * + * @param repository + * @param startCommit + * earliest commit + * @param endCommit + * most recent commit. if null, HEAD is assumed. + * @return list of files changed in a commit range + */ public static List<PathChangeModel> getFilesInRange(Repository repository, RevCommit startCommit, RevCommit endCommit) { List<PathChangeModel> list = new ArrayList<PathChangeModel>(); if (!hasCommits(repository)) { @@ -982,7 +1019,7 @@ List<DiffEntry> diffEntries = df.scan(startCommit.getTree(), endCommit.getTree()); for (DiffEntry diff : diffEntries) { - PathChangeModel pcm = PathChangeModel.from(diff, null); + PathChangeModel pcm = PathChangeModel.from(diff, endCommit.getName()); list.add(pcm); } Collections.sort(list); -- Gitblit v1.9.1