From 0fec6711a6ca0bb18f21923fde16000702c3fa9c 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] Redirect to log page is the blobpage references a commit we can't find
---
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