Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java12
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/blame/BlameInformationControl.java3
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/DiffEditorPage.java2
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/DiffViewer.java12
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitInfoBuilder.java172
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitMessageViewer.java52
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/FormatJob.java55
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java144
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties4
9 files changed, 171 insertions, 285 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
index 34003dfc58..bb3e53a591 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
@@ -594,6 +594,9 @@ public class UIText extends NLS {
public static String GitHistoryPage_FollowRenames;
/** */
+ public static String GitHistoryPage_FormatDiffJobName;
+
+ /** */
public static String GitHistoryPage_FilterSubMenuLabel;
/** */
@@ -2391,15 +2394,6 @@ public class UIText extends NLS {
public static String CommitMessageViewer_MoreBranches;
/** */
- public static String CommitMessageViewer_BuildDiffListTaskName;
-
- /** */
- public static String CommitMessageViewer_BuildDiffTaskName;
-
- /** */
- public static String CommitMessageViewer_CanNotRenderDiffMessage;
-
- /** */
public static String CommitMessageViewer_tags;
/** */
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/blame/BlameInformationControl.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/blame/BlameInformationControl.java
index c101294ba3..fed939859c 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/blame/BlameInformationControl.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/blame/BlameInformationControl.java
@@ -356,7 +356,8 @@ public class BlameInformationControl extends AbstractInformationControl
showAnnotationsLink
.addSelectionListener(showAnnotationsLinkSelectionAdapter);
- DiffViewer diffText = new DiffViewer(diffComposite, null, SWT.NONE);
+ DiffViewer diffText = new DiffViewer(diffComposite, null, SWT.NONE,
+ false);
diffText.setEditable(false);
diffText.getControl().setLayoutData(
GridDataFactory.fillDefaults().grab(true, true).create());
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/DiffEditorPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/DiffEditorPage.java
index 1aa47b4111..c81700bde4 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/DiffEditorPage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/DiffEditorPage.java
@@ -205,7 +205,7 @@ public class DiffEditorPage extends FormPage {
GridLayoutFactory.fillDefaults().numColumns(1).applyTo(body);
viewer = new DiffViewer(body, new CompositeRuler(), SWT.V_SCROLL
- | SWT.H_SCROLL);
+ | SWT.H_SCROLL, true);
viewer.setEditable(false);
GridDataFactory.fillDefaults().grab(true, true)
.applyTo(viewer.getControl());
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/DiffViewer.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/DiffViewer.java
index 972bb58e5b..285a5f081a 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/DiffViewer.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/DiffViewer.java
@@ -115,15 +115,19 @@ public class DiffViewer extends SourceViewer {
* @param parent
* @param ruler
* @param styles
+ * @param showCursorLine
*/
- public DiffViewer(Composite parent, IVerticalRuler ruler, int styles) {
+ public DiffViewer(Composite parent, IVerticalRuler ruler, int styles,
+ boolean showCursorLine) {
super(parent, ruler, styles);
setDocument(new Document());
SourceViewerDecorationSupport support = new SourceViewerDecorationSupport(
this, null, null, EditorsUI.getSharedTextColors());
- support.setCursorLinePainterPreferenceKeys(
- AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE,
- AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR);
+ if (showCursorLine) {
+ support.setCursorLinePainterPreferenceKeys(
+ AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE,
+ AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR);
+ }
support.install(EditorsUI.getPreferenceStore());
if (ruler instanceof CompositeRuler) {
lineNumberRuler = new LineNumberRulerColumn();
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitInfoBuilder.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitInfoBuilder.java
index 7825af3439..643ec6d971 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitInfoBuilder.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitInfoBuilder.java
@@ -13,14 +13,9 @@
package org.eclipse.egit.ui.internal.history;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
@@ -31,14 +26,11 @@ import java.util.regex.Pattern;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.egit.core.internal.CompareCoreUtils;
import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.UIPreferences;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.egit.ui.internal.history.CommitMessageViewer.ObjectLink;
import org.eclipse.egit.ui.internal.trace.GitTraceLocation;
-import org.eclipse.jgit.diff.DiffFormatter;
-import org.eclipse.jgit.diff.RawText;
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.lib.Constants;
@@ -51,7 +43,6 @@ import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevObject;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.revwalk.RevWalkUtils;
-import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
@@ -76,34 +67,24 @@ public class CommitInfoBuilder {
private final boolean fill;
- // set by selecting files in the file list
- private final List<FileDiff> currentDiffs;
-
private Color linkColor;
private Color darkGrey;
- private Color hunkheaderColor;
-
- private Color linesAddedColor;
-
- private Color linesRemovedColor;
-
private final Collection<Ref> allRefs;
/**
* @param db the repository
* @param commit the commit the info should be shown for
- * @param currentDiffs list of current diffs
* @param fill whether to fill the available space
* @param allRefs all Ref's to examine regarding marge bases
*/
- public CommitInfoBuilder(Repository db, PlotCommit commit, List<FileDiff> currentDiffs, boolean fill, Collection<Ref> allRefs) {
+ public CommitInfoBuilder(Repository db, PlotCommit commit, boolean fill,
+ Collection<Ref> allRefs) {
this.db = db;
this.commit = commit;
this.fill = fill;
this.allRefs = allRefs;
- this.currentDiffs = new ArrayList<FileDiff>(currentDiffs);
}
/**
@@ -111,16 +92,10 @@ public class CommitInfoBuilder {
*
* @param linkColor
* @param darkGrey
- * @param hunkheaderColor
- * @param linesAddedColor
- * @param linesRemovedColor
*/
- public void setColors(Color linkColor, Color darkGrey, Color hunkheaderColor, Color linesAddedColor, Color linesRemovedColor) {
+ public void setColors(Color linkColor, Color darkGrey) {
this.linkColor = linkColor;
this.darkGrey = darkGrey;
- this.hunkheaderColor = hunkheaderColor;
- this.linesAddedColor = linesAddedColor;
- this.linesRemovedColor = linesRemovedColor;
}
/**
@@ -282,9 +257,6 @@ public class CommitInfoBuilder {
- matcher.start(), null, null, SWT.ITALIC));
}
- if (!currentDiffs.isEmpty())
- buildDiffs(d, styles, monitor, trace);
-
if (trace)
GitTraceLocation.getTrace().traceExit(
GitTraceLocation.HISTORYVIEW.getLocation());
@@ -368,90 +340,6 @@ public class CommitInfoBuilder {
}
}
-
- private void buildDiffs(final StringBuilder d,
- final List<StyleRange> styles, IProgressMonitor monitor,
- boolean trace) throws OperationCanceledException,
- IOException {
-
- // the encoding for the currently processed file
- final String[] currentEncoding = new String[1];
-
- if (trace)
- GitTraceLocation.getTrace().traceEntry(
- GitTraceLocation.HISTORYVIEW.getLocation());
- if (commit.getParentCount() > 1) {
- d.append(UIText.CommitMessageViewer_CanNotRenderDiffMessage);
- return;
- }
-
- try {
- monitor.beginTask(UIText.CommitMessageViewer_BuildDiffListTaskName,
- currentDiffs.size());
- BufferedOutputStream bos = new SafeBufferedOutputStream(
- new ByteArrayOutputStream() {
- @Override
- public synchronized void write(byte[] b, int off,
- int len) {
- super.write(b, off, len);
- try {
- if (currentEncoding[0] == null)
- d.append(toString("UTF-8")); //$NON-NLS-1$
- else
- d.append(toString(currentEncoding[0]));
- } catch (UnsupportedEncodingException e) {
- d.append(toString());
- }
- reset();
- }
-
- });
- final DiffFormatter diffFmt = new MessageViewerFormatter(bos,
- styles, d, hunkheaderColor, linesAddedColor, linesRemovedColor);
-
- for (FileDiff currentDiff : currentDiffs) {
- if (monitor.isCanceled())
- throw new OperationCanceledException();
- if (currentDiff.getBlobs().length == 2) {
- String path = currentDiff.getNewPath();
- monitor.setTaskName(NLS.bind(
- UIText.CommitMessageViewer_BuildDiffTaskName, path));
- currentEncoding[0] = CompareCoreUtils.getResourceEncoding(db,
- path);
- d.append(LF);
- int start = d.length();
- String pathLine = formatPathLine(path);
- int len = pathLine.length();
- d.append(pathLine).append(LF);
- styles.add(new StyleRange(start, len, darkGrey, null));
- currentDiff.outputDiff(d, db, diffFmt, true);
- diffFmt.flush();
- }
- monitor.worked(1);
- }
-
- } finally {
- monitor.done();
- if (trace)
- GitTraceLocation.getTrace().traceExit(
- GitTraceLocation.HISTORYVIEW.getLocation());
- }
- }
-
- private String formatPathLine(String path) {
- int n = 80 - path.length() - 2;
- if (n < 0)
- return path;
- final StringBuilder d = new StringBuilder();
- int i = 0;
- for (; i < n / 2; i++)
- d.append("-"); //$NON-NLS-1$
- d.append(SPACE).append(path).append(SPACE);
- for (; i < n - 1; i++)
- d.append("-"); //$NON-NLS-1$
- return d.toString();
- }
-
private String getTagsString() {
StringBuilder sb = new StringBuilder();
Map<String, Ref> tagsMap = db.getTags();
@@ -468,60 +356,6 @@ public class CommitInfoBuilder {
return sb.toString();
}
- private static final class MessageViewerFormatter extends DiffFormatter {
- private final List<StyleRange> styles;
-
- private final StringBuilder d;
-
- private final Color hunkheaderColor;
- private final Color linesAddedColor;
- private final Color linesRemovedColor;
-
- private MessageViewerFormatter(OutputStream out,
- List<StyleRange> styles, StringBuilder d, Color hunkheaderColor, Color linesAddedColor, Color linesRemovedColor) {
- super(out);
- this.styles = styles;
- this.hunkheaderColor = hunkheaderColor;
- this.linesAddedColor = linesAddedColor;
- this.linesRemovedColor = linesRemovedColor;
- this.d = d;
- }
-
- @Override
- protected void writeHunkHeader(int aCur, int aEnd, int bCur, int bEnd)
- throws IOException {
- flush();
- int start = d.length();
- super.writeHunkHeader(aCur, aEnd, bCur, bEnd);
- flush();
- int end = d.length();
- styles.add(new StyleRange(start, end - start, hunkheaderColor,
- null));
- }
-
- @Override
- protected void writeAddedLine(RawText b, int bCur) throws IOException {
- flush();
- int start = d.length();
- super.writeAddedLine(b, bCur);
- flush();
- int end = d.length();
- styles.add(new StyleRange(start, end - start,
- linesAddedColor, null));
- }
-
- @Override
- protected void writeRemovedLine(RawText b, int bCur) throws IOException {
- flush();
- int start = d.length();
- super.writeRemovedLine(b, bCur);
- flush();
- int end = d.length();
- styles.add(new StyleRange(start, end - start,
- linesRemovedColor, null));
- }
- }
-
/**
* Finds next door tagged revision. Searches forwards (in descendants) or
* backwards (in ancestors)
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitMessageViewer.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitMessageViewer.java
index 7ccbeb037d..9488b45d25 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitMessageViewer.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitMessageViewer.java
@@ -39,10 +39,6 @@ import org.eclipse.jface.text.ITextOperationTarget;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jgit.events.ListenerHandle;
import org.eclipse.jgit.events.RefsChangedEvent;
import org.eclipse.jgit.events.RefsChangedListener;
@@ -72,8 +68,7 @@ import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
-class CommitMessageViewer extends SourceViewer implements
- ISelectionChangedListener {
+class CommitMessageViewer extends SourceViewer {
private static final Color SYS_LINKCOLOR = PlatformUI.getWorkbench()
.getDisplay().getSystemColor(SWT.COLOR_BLUE);
@@ -81,15 +76,6 @@ class CommitMessageViewer extends SourceViewer implements
private static final Color SYS_DARKGRAY = PlatformUI.getWorkbench()
.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY);
- private static final Color SYS_HUNKHEADER_COLOR = PlatformUI.getWorkbench()
- .getDisplay().getSystemColor(SWT.COLOR_BLUE);
-
- private static final Color SYS_LINES_ADDED_COLOR = PlatformUI
- .getWorkbench().getDisplay().getSystemColor(SWT.COLOR_DARK_GREEN);
-
- private static final Color SYS_LINES_REMOVED_COLOR = PlatformUI
- .getWorkbench().getDisplay().getSystemColor(SWT.COLOR_DARK_RED);
-
private static final Cursor SYS_LINK_CURSOR = PlatformUI.getWorkbench()
.getDisplay().getSystemCursor(SWT.CURSOR_HAND);
@@ -98,9 +84,6 @@ class CommitMessageViewer extends SourceViewer implements
// notified when clicking on a link in the message (branch, commit...)
private final ListenerList navListeners = new ListenerList();
- // set by selecting files in the file list
- private final List<FileDiff> currentDiffs = new ArrayList<FileDiff>();
-
// listener to detect changes in the wrap and fill preferences
private final IPropertyChangeListener listener;
@@ -128,7 +111,7 @@ class CommitMessageViewer extends SourceViewer implements
private BooleanPrefAction fillParagraphsPrefAction;
CommitMessageViewer(final Composite parent, final IPageSite site, IWorkbenchPartSite partSite) {
- super(parent, null, SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
+ super(parent, null, SWT.READ_ONLY);
this.partSite = partSite;
final StyledText t = getTextWidget();
@@ -170,11 +153,6 @@ class CommitMessageViewer extends SourceViewer implements
listener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(
- UIPreferences.RESOURCEHISTORY_SHOW_COMMENT_WRAP)) {
- setWrap(((Boolean) event.getNewValue()).booleanValue());
- return;
- }
- if (event.getProperty().equals(
UIPreferences.RESOURCEHISTORY_SHOW_COMMENT_FILL)) {
setFill(((Boolean) event.getNewValue()).booleanValue());
return;
@@ -190,8 +168,6 @@ class CommitMessageViewer extends SourceViewer implements
store.addPropertyChangeListener(listener);
fill = store
.getBoolean(UIPreferences.RESOURCEHISTORY_SHOW_COMMENT_FILL);
- setWrap(store
- .getBoolean(UIPreferences.RESOURCEHISTORY_SHOW_COMMENT_WRAP));
// global action handlers for select all and copy
final IAction selectAll = new Action() {
@@ -325,7 +301,6 @@ class CommitMessageViewer extends SourceViewer implements
// so we only rebuild this when the commit did in fact change
if (input == commit)
return;
- currentDiffs.clear();
commit = (PlotCommit<?>) input;
if (refsChangedListener != null) {
refsChangedListener.remove();
@@ -386,10 +361,8 @@ class CommitMessageViewer extends SourceViewer implements
.getAdapter(IWorkbenchSiteProgressService.class);
if (siteService == null)
return;
- FormatJob.FormatRequest formatRequest = new FormatJob.FormatRequest(getRepository(),
- commit, fill, currentDiffs, SYS_LINKCOLOR, SYS_DARKGRAY,
- SYS_HUNKHEADER_COLOR, SYS_LINES_ADDED_COLOR,
- SYS_LINES_REMOVED_COLOR,
+ FormatJob.FormatRequest formatRequest = new FormatJob.FormatRequest(
+ getRepository(), commit, fill, SYS_LINKCOLOR, SYS_DARKGRAY,
allRefs);
formatJob = new FormatJob(formatRequest);
addDoneListenerToFormatJob();
@@ -445,27 +418,11 @@ class CommitMessageViewer extends SourceViewer implements
}
}
- private void setWrap(boolean wrap) {
- getTextWidget().setWordWrap(wrap);
- }
-
private void setFill(boolean fill) {
this.fill = fill;
format();
}
- public void selectionChanged(SelectionChangedEvent event) {
- currentDiffs.clear();
- ISelection selection = event.getSelection();
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection sel = (IStructuredSelection) selection;
- for (Object obj : sel.toList())
- if (obj instanceof FileDiff)
- currentDiffs.add((FileDiff) obj);
- }
- format();
- }
-
/**
* Get style range at x/y coordinates
*
@@ -487,4 +444,5 @@ class CommitMessageViewer extends SourceViewer implements
else
return null;
}
+
}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/FormatJob.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/FormatJob.java
index dd79730734..125f0cbf16 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/FormatJob.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/FormatJob.java
@@ -64,13 +64,11 @@ class FormatJob extends Job {
synchronized(lock) {
SWTCommit commit = (SWTCommit)formatRequest.getCommit();
commit.parseBody();
- builder = new CommitInfoBuilder(formatRequest.getRepository(), commit,
- formatRequest.getCurrentDiffs(), formatRequest.isFill(), formatRequest.getAllRefs());
+ builder = new CommitInfoBuilder(formatRequest.getRepository(),
+ commit, formatRequest.isFill(),
+ formatRequest.getAllRefs());
builder.setColors(formatRequest.getLinkColor(),
- formatRequest.getDarkGrey(),
- formatRequest.getHunkheaderColor(),
- formatRequest.getLinesAddedColor(),
- formatRequest.getLinesRemovedColor());
+ formatRequest.getDarkGrey());
}
commitInfo = builder.format(styles, monitor);
} catch (IOException e) {
@@ -109,30 +107,6 @@ class FormatJob extends Job {
this.darkGrey = darkGrey;
}
- public Color getHunkheaderColor() {
- return hunkheaderColor;
- }
-
- public void setHunkheaderColor(Color hunkheaderColor) {
- this.hunkheaderColor = hunkheaderColor;
- }
-
- public Color getLinesAddedColor() {
- return linesAddedColor;
- }
-
- public void setLinesAddedColor(Color linesAddedColor) {
- this.linesAddedColor = linesAddedColor;
- }
-
- public Color getLinesRemovedColor() {
- return linesRemovedColor;
- }
-
- public void setLinesRemovedColor(Color linesRemovedColor) {
- this.linesRemovedColor = linesRemovedColor;
- }
-
public Collection<Ref> getAllRefs() {
return allRefs;
}
@@ -147,33 +121,20 @@ class FormatJob extends Job {
private boolean fill;
- List<FileDiff> currentDiffs;
-
private Color linkColor;
private Color darkGrey;
- private Color hunkheaderColor;
-
- private Color linesAddedColor;
-
- private Color linesRemovedColor;
-
private Collection<Ref> allRefs;
FormatRequest(Repository repository, PlotCommit<?> commit,
- boolean fill, List<FileDiff> currentDiffs, Color linkColor,
- Color darkGrey, Color hunkheaderColor, Color linesAddedColor,
- Color linesRemovedColor, Collection<Ref> allRefs) {
+ boolean fill, Color linkColor, Color darkGrey,
+ Collection<Ref> allRefs) {
this.repository = repository;
this.commit = commit;
this.fill = fill;
- this.currentDiffs = new ArrayList<FileDiff>(currentDiffs);
this.linkColor = linkColor;
this.darkGrey = darkGrey;
- this.hunkheaderColor = hunkheaderColor;
- this.linesAddedColor = linesAddedColor;
- this.linesRemovedColor = linesRemovedColor;
this.allRefs = allRefs;
}
@@ -189,10 +150,6 @@ class FormatJob extends Job {
return fill;
}
- public List<FileDiff> getCurrentDiffs() {
- return currentDiffs;
- }
-
}
static class FormatResult{
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java
index 8a27d32835..95c4a1d6e9 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java
@@ -27,7 +27,10 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.egit.core.AdapterUtils;
@@ -38,6 +41,8 @@ import org.eclipse.egit.ui.UIUtils;
import org.eclipse.egit.ui.internal.CompareUtils;
import org.eclipse.egit.ui.internal.UIIcons;
import org.eclipse.egit.ui.internal.UIText;
+import org.eclipse.egit.ui.internal.commit.DiffStyleRangeFormatter;
+import org.eclipse.egit.ui.internal.commit.DiffViewer;
import org.eclipse.egit.ui.internal.repository.tree.AdditionalRefNode;
import org.eclipse.egit.ui.internal.repository.tree.FileNode;
import org.eclipse.egit.ui.internal.repository.tree.FolderNode;
@@ -53,12 +58,17 @@ import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.LocalResourceManager;
import org.eclipse.jface.resource.ResourceManager;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextListener;
+import org.eclipse.jface.text.TextEvent;
import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
import org.eclipse.jface.text.hyperlink.IHyperlinkPresenter;
import org.eclipse.jface.text.hyperlink.MultipleHyperlinkPresenter;
@@ -101,12 +111,16 @@ import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
@@ -128,6 +142,7 @@ import org.eclipse.ui.part.IShowInSource;
import org.eclipse.ui.part.IShowInTargetList;
import org.eclipse.ui.part.ShowInContext;
import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
+import org.eclipse.ui.progress.UIJob;
/** Graphical commit history viewer. */
public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
@@ -624,6 +639,8 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
/** Viewer displaying the currently selected commit of {@link #graph}. */
private CommitMessageViewer commentViewer;
+ private DiffViewer diffViewer;
+
/** Viewer displaying file difference implied by {@link #graph}'s commit. */
private CommitFileDiffViewer fileViewer;
@@ -683,6 +700,10 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
if (UIPreferences.HISTORY_MAX_BRANCH_LENGTH.equals(prop)
|| UIPreferences.HISTORY_MAX_TAG_LENGTH.equals(prop))
graph.getTableView().refresh();
+ if (UIPreferences.RESOURCEHISTORY_SHOW_COMMENT_WRAP.equals(prop)) {
+ setWrap(((Boolean) event.getNewValue()).booleanValue());
+ }
+
}
};
@@ -698,6 +719,10 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
private final RenameTracker renameTracker = new RenameTracker();
+ private ScrolledComposite commentAndDiffScrolledComposite;
+
+ private Composite commentAndDiffComposite;
+
/**
* Determine if the input can be shown in this viewer.
*
@@ -789,7 +814,31 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
.addPropertyChangeListener(listener);
revInfoSplit = new SashForm(graphDetailSplit, SWT.HORIZONTAL);
- commentViewer = new CommitMessageViewer(revInfoSplit, getSite(), getPartSite());
+
+ commentAndDiffScrolledComposite = new ScrolledComposite(revInfoSplit,
+ SWT.H_SCROLL | SWT.V_SCROLL);
+ commentAndDiffScrolledComposite.setExpandHorizontal(true);
+ commentAndDiffScrolledComposite.setExpandVertical(true);
+
+ commentAndDiffComposite = new Composite(commentAndDiffScrolledComposite, SWT.NONE);
+ commentAndDiffScrolledComposite.setContent(commentAndDiffComposite);
+ commentAndDiffComposite.setLayout(GridLayoutFactory.fillDefaults()
+ .create());
+
+ commentViewer = new CommitMessageViewer(commentAndDiffComposite,
+ getSite(), getPartSite());
+ commentViewer.getControl().setLayoutData(
+ GridDataFactory.fillDefaults().grab(true, false).create());
+
+ commentViewer.addTextListener(new ITextListener() {
+ public void textChanged(TextEvent event) {
+ resizeCommentAndDiffScrolledComposite();
+ }
+ });
+
+ commentAndDiffComposite.setBackground(commentViewer.getControl()
+ .getBackground());
+
TextSourceViewerConfiguration configuration = new TextSourceViewerConfiguration(
EditorsUI.getPreferenceStore()) {
@@ -819,7 +868,37 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
commentViewer.configure(configuration);
+ diffViewer = new DiffViewer(commentAndDiffComposite, null, SWT.NONE, false);
+ diffViewer.getControl().setLayoutData(
+ GridDataFactory.fillDefaults().grab(true, false).create());
+ diffViewer.setEditable(false);
+
+ setWrap(store
+ .getBoolean(UIPreferences.RESOURCEHISTORY_SHOW_COMMENT_WRAP));
+
+ commentAndDiffScrolledComposite.addControlListener(new ControlAdapter() {
+ @Override
+ public void controlResized(ControlEvent e) {
+ if (commentViewer.getTextWidget().getWordWrap())
+ resizeCommentAndDiffScrolledComposite();
+ }
+ });
+
fileViewer = new CommitFileDiffViewer(revInfoSplit, getSite());
+ fileViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ ISelection selection = event.getSelection();
+ List<FileDiff> diffs = new ArrayList<FileDiff>();
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection sel = (IStructuredSelection) selection;
+ for (Object obj : sel.toList())
+ if (obj instanceof FileDiff)
+ diffs.add((FileDiff) obj);
+ }
+ formatDiffs(diffs);
+ }
+ });
+
findToolbar = new FindToolbar(historyControl);
layoutSashForm(graphDetailSplit,
@@ -1808,10 +1887,71 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
fileViewer.setTreeWalk(db, fileWalker);
fileViewer.setInterestingPaths(fileViewerInterestingPaths);
fileViewer.refresh();
- fileViewer.addSelectionChangedListener(commentViewer);
return fileWalker;
}
+ private void formatDiffs(final List<FileDiff> diffs) {
+ final Repository repository = fileViewer.getRepository();
+ Job formatJob = new Job(UIText.GitHistoryPage_FormatDiffJobName) {
+ protected IStatus run(IProgressMonitor monitor) {
+ final IDocument document = new Document();
+ final DiffStyleRangeFormatter formatter = new DiffStyleRangeFormatter(
+ document);
+
+ monitor.beginTask("", diffs.size()); //$NON-NLS-1$
+ for (FileDiff diff : diffs) {
+ if (monitor.isCanceled())
+ break;
+ if (diff.getCommit().getParentCount() > 1)
+ break;
+ monitor.setTaskName(diff.getPath());
+ try {
+ formatter.write(repository, diff);
+ } catch (IOException ignore) {
+ // Ignored
+ }
+ monitor.worked(1);
+ }
+ monitor.done();
+ UIJob uiJob = new UIJob(UIText.GitHistoryPage_FormatDiffJobName) {
+ public IStatus runInUIThread(IProgressMonitor uiMonitor) {
+ if (UIUtils.isUsable(diffViewer)) {
+ diffViewer.setDocument(document);
+ diffViewer.setFormatter(formatter);
+ resizeCommentAndDiffScrolledComposite();
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ uiJob.schedule();
+ return Status.OK_STATUS;
+ }
+ };
+ formatJob.schedule();
+ }
+
+ private void setWrap(boolean wrap) {
+ commentViewer.getTextWidget().setWordWrap(wrap);
+ diffViewer.getTextWidget().setWordWrap(wrap);
+ resizeCommentAndDiffScrolledComposite();
+ }
+
+ private void resizeCommentAndDiffScrolledComposite() {
+ int widthHint;
+ if (commentViewer.getTextWidget().getWordWrap()) {
+ widthHint = commentAndDiffScrolledComposite.getClientArea().width;
+ if (commentAndDiffScrolledComposite.getVerticalBar() != null
+ && !commentAndDiffScrolledComposite.getVerticalBar().isVisible())
+ widthHint -= commentAndDiffScrolledComposite.getVerticalBar().getSize().x;
+ } else {
+ widthHint = SWT.DEFAULT;
+ }
+ Point size = commentAndDiffComposite
+ .computeSize(widthHint, SWT.DEFAULT);
+ commentAndDiffComposite.setSize(size);
+ commentAndDiffScrolledComposite.setMinSize(size);
+ }
+
private TreeWalk createFileWalker(RevWalk walk, Repository db, List<FilterPath> paths) {
final TreeWalk fileWalker = new TreeWalk(db);
fileWalker.setRecursive(true);
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
index c0993748f9..a9a9241d81 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
@@ -214,6 +214,7 @@ GitHistoryPage_SetAsBaselineMenuLabel=&Set as Baseline
GitHistoryPage_ShowAdditionalRefsMenuLabel=&Additional Refs
GitHistoryPage_ShowAllBranchesMenuLabel=All &Branches and Tags
GitHistoryPage_FollowRenames=&Follow Renames
+GitHistoryPage_FormatDiffJobName=Updating Diff
GitHistoryPage_FilterSubMenuLabel=&Filter
GitHistoryPage_IncompleteListTooltip=Not all commits are shown, the limit may be exceeded or the job building the list may have been aborted
GitHistoryPage_InRevisionCommentSubMenuLabel=&In Revision Comment
@@ -793,9 +794,6 @@ CommitMessageViewer_author=Author
CommitMessageViewer_child=Child
CommitMessageViewer_branches=Branches
CommitMessageViewer_MoreBranches=\ and {0} more branches
-CommitMessageViewer_BuildDiffListTaskName=Building diffs for the selected files
-CommitMessageViewer_BuildDiffTaskName=Building diff for file {0}
-CommitMessageViewer_CanNotRenderDiffMessage=Cannot render diff, as the current commit has multiple parents
CommitMessageViewer_tags=Tags
CommitMessageViewer_follows=Follows
CommitMessageViewer_precedes=Precedes

Back to the top