diff options
author | James Moger <james.moger@gitblit.com> | 2011-06-08 20:48:07 -0400 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2011-06-08 20:48:07 -0400 |
commit | 008322bec70a3a20bd00ed2219215a9f42fe0ca5 (patch) | |
tree | a5b8e4a6ba7169c94bc89d5a8a0ad838f5aea20a /src/com/gitblit/utils/DiffUtils.java | |
parent | 716745e2dd9b3925b1229433e7072580206f731e (diff) | |
download | gitblit-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.java | 26 |
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;
+ }
}
|