James Moger
2011-06-08 008322bec70a3a20bd00ed2219215a9f42fe0ca5
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,11 +34,24 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gitblit.utils.JGitUtils.DiffOutputType;
import com.gitblit.models.AnnotatedLine;
public class DiffUtils {
   private static final Logger LOGGER = LoggerFactory.getLogger(DiffUtils.class);
   public static enum DiffOutputType {
      PLAIN, GITWEB, GITBLIT;
      public static DiffOutputType forName(String name) {
         for (DiffOutputType type : values()) {
            if (type.name().equalsIgnoreCase(name)) {
               return type;
            }
         }
         return null;
      }
   }
   public static String getCommitDiff(Repository r, RevCommit commit, DiffOutputType outputType) {
      return getDiff(r, null, commit, null, outputType);
@@ -161,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;
   }
}