From 008322bec70a3a20bd00ed2219215a9f42fe0ca5 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 08 Jun 2011 20:48:07 -0400
Subject: [PATCH] Blame support finished, requires JGit 1.0.0. Checkstyle. Findbugs.

---
 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 fab9f43..0f56907 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;
@@ -29,6 +33,8 @@
 import org.eclipse.jgit.treewalk.filter.TreeFilter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import com.gitblit.models.AnnotatedLine;
 
 public class DiffUtils {
 
@@ -172,4 +178,24 @@
 		}
 		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;
+	}
 }

--
Gitblit v1.9.1