summaryrefslogtreecommitdiffstats
path: root/src/com/gitblit/utils/DiffUtils.java
diff options
context:
space:
mode:
authorJames Moger <james.moger@gitblit.com>2011-06-08 20:48:07 -0400
committerJames Moger <james.moger@gitblit.com>2011-06-08 20:48:07 -0400
commit008322bec70a3a20bd00ed2219215a9f42fe0ca5 (patch)
treea5b8e4a6ba7169c94bc89d5a8a0ad838f5aea20a /src/com/gitblit/utils/DiffUtils.java
parent716745e2dd9b3925b1229433e7072580206f731e (diff)
downloadgitblit-008322bec70a3a20bd00ed2219215a9f42fe0ca5.tar.gz
gitblit-008322bec70a3a20bd00ed2219215a9f42fe0ca5.zip
Blame support finished, requires JGit 1.0.0. Checkstyle. Findbugs.
Diffstat (limited to 'src/com/gitblit/utils/DiffUtils.java')
-rw-r--r--src/com/gitblit/utils/DiffUtils.java26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/com/gitblit/utils/DiffUtils.java b/src/com/gitblit/utils/DiffUtils.java
index fab9f43b..0f569074 100644
--- a/src/com/gitblit/utils/DiffUtils.java
+++ b/src/com/gitblit/utils/DiffUtils.java
@@ -16,10 +16,14 @@
package com.gitblit.utils;
import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
import java.util.List;
+import org.eclipse.jgit.api.BlameCommand;
+import org.eclipse.jgit.blame.BlameResult;
import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.diff.DiffFormatter;
+import org.eclipse.jgit.diff.RawText;
import org.eclipse.jgit.diff.RawTextComparator;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
@@ -30,6 +34,8 @@ import org.eclipse.jgit.treewalk.filter.TreeFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.gitblit.models.AnnotatedLine;
+
public class DiffUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(DiffUtils.class);
@@ -172,4 +178,24 @@ public class DiffUtils {
}
return null;
}
+
+ public static List<AnnotatedLine> blame(Repository r, String blobPath, String objectId) {
+ List<AnnotatedLine> lines = new ArrayList<AnnotatedLine>();
+ try {
+ BlameCommand blameCommand = new BlameCommand(r);
+ blameCommand.setFilePath(blobPath);
+ blameCommand.setStartCommit(r.resolve(objectId));
+ BlameResult blameResult = blameCommand.call();
+ RawText rawText = blameResult.getResultContents();
+ int length = rawText.size();
+ for (int i = 0; i < length; i++) {
+ RevCommit commit = blameResult.getSourceCommit(i);
+ AnnotatedLine line = new AnnotatedLine(commit, i + 1, rawText.getString(i));
+ lines.add(line);
+ }
+ } catch (Throwable t) {
+ LOGGER.error("failed to generate blame!", t);
+ }
+ return lines;
+ }
}