From 7c643b65f3613e30a14e8e9decc92fddb8bfd654 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 01 Jul 2011 17:42:56 -0400
Subject: [PATCH] Documentation. Include LICENSE and NOTICE files in both builds.
---
src/com/gitblit/utils/DiffUtils.java | 90 ++++++++++++++++++++++++++++++++------------
1 files changed, 65 insertions(+), 25 deletions(-)
diff --git a/src/com/gitblit/utils/DiffUtils.java b/src/com/gitblit/utils/DiffUtils.java
index c9d0fc3..c1401f9 100644
--- a/src/com/gitblit/utils/DiffUtils.java
+++ b/src/com/gitblit/utils/DiffUtils.java
@@ -16,11 +16,16 @@
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.Constants;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevTree;
@@ -30,28 +35,42 @@
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 getCommitDiff(r, null, commit, null, outputType);
+ return getDiff(r, null, commit, null, outputType);
}
- public static String getCommitDiff(Repository r, RevCommit commit, String path,
+ public static String getDiff(Repository r, RevCommit commit, String path,
DiffOutputType outputType) {
- return getCommitDiff(r, null, commit, path, outputType);
+ return getDiff(r, null, commit, path, outputType);
}
- public static String getCommitDiff(Repository r, RevCommit baseCommit, RevCommit commit,
+ public static String getDiff(Repository r, RevCommit baseCommit, RevCommit commit,
DiffOutputType outputType) {
- return getCommitDiff(r, baseCommit, commit, null, outputType);
+ return getDiff(r, baseCommit, commit, null, outputType);
}
- public static String getCommitDiff(Repository r, RevCommit baseCommit, RevCommit commit,
- String path, DiffOutputType outputType) {
+ public static String getDiff(Repository r, RevCommit baseCommit, RevCommit commit, String path,
+ DiffOutputType outputType) {
+ String diff = null;
try {
RevTree baseTree;
if (baseCommit == null) {
@@ -90,18 +109,17 @@
df.setRepository(r);
df.setDiffComparator(cmp);
df.setDetectRenames(true);
- List<DiffEntry> diffs = df.scan(baseTree, commitTree);
+ List<DiffEntry> diffEntries = df.scan(baseTree, commitTree);
if (path != null && path.length() > 0) {
- for (DiffEntry diff : diffs) {
- if (diff.getNewPath().equalsIgnoreCase(path)) {
- df.format(diff);
+ for (DiffEntry diffEntry : diffEntries) {
+ if (diffEntry.getNewPath().equalsIgnoreCase(path)) {
+ df.format(diffEntry);
break;
}
}
} else {
- df.format(diffs);
+ df.format(diffEntries);
}
- String diff;
if (df instanceof GitWebDiffFormatter) {
// workaround for complex private methods in DiffFormatter
diff = ((GitWebDiffFormatter) df).getHtml();
@@ -109,15 +127,15 @@
diff = os.toString();
}
df.flush();
- return diff;
} catch (Throwable t) {
LOGGER.error("failed to generate commit diff!", t);
}
- return null;
+ return diff;
}
public static String getCommitPatch(Repository r, RevCommit baseCommit, RevCommit commit,
String path) {
+ String diff = null;
try {
RevTree baseTree;
if (baseCommit == null) {
@@ -142,23 +160,45 @@
df.setRepository(r);
df.setDiffComparator(cmp);
df.setDetectRenames(true);
- List<DiffEntry> diffs = df.scan(baseTree, commitTree);
+ List<DiffEntry> diffEntries = df.scan(baseTree, commitTree);
if (path != null && path.length() > 0) {
- for (DiffEntry diff : diffs) {
- if (diff.getNewPath().equalsIgnoreCase(path)) {
- df.format(diff);
+ for (DiffEntry diffEntry : diffEntries) {
+ if (diffEntry.getNewPath().equalsIgnoreCase(path)) {
+ df.format(diffEntry);
break;
}
}
} else {
- df.format(diffs);
+ df.format(diffEntries);
}
- String diff = df.getPatch(commit);
+ diff = df.getPatch(commit);
df.flush();
- return diff;
} catch (Throwable t) {
LOGGER.error("failed to generate commit diff!", t);
}
- return null;
+ return diff;
+ }
+
+ public static List<AnnotatedLine> blame(Repository r, String blobPath, String objectId) {
+ List<AnnotatedLine> lines = new ArrayList<AnnotatedLine>();
+ try {
+ if (StringUtils.isEmpty(objectId)) {
+ objectId = Constants.HEAD;
+ }
+ 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