Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Stocker2012-06-25 22:55:49 +0000
committerMatthias Sohn2013-02-06 23:57:44 +0000
commit6bcaf8223ccf9838774138e1b9e9bb15b9d35703 (patch)
tree1c16c31ace9b2dc4d388b87ccd90613a7af53fb7 /org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java
parentb66d44e2b3284d76a20735f47eafb05a6093fb23 (diff)
downloadegit-6bcaf8223ccf9838774138e1b9e9bb15b9d35703.tar.gz
egit-6bcaf8223ccf9838774138e1b9e9bb15b9d35703.tar.xz
egit-6bcaf8223ccf9838774138e1b9e9bb15b9d35703.zip
[historyView] Highlight filtered files in file diff viewer
The fix for bug 360073 changed the History view file diff viewer to show all files of a commit, regardless of the resource filter. This made it sometimes hard to find the files that the filter is focused on. This change improves that by rendering the files that are not matched by the filter in gray. The matching files are rendered in the same color as before. With this, the files can be found at a glance instead of reading through the paths. Bug: 393610 JGit-Dependency: Icf911fe6fca131b2567514f54d66636a44561af1 Change-Id: I03da4b38d1591495cb290909f0e4c6e52270e97f Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java')
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java33
1 files changed, 32 insertions, 1 deletions
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 55315a243f..d335d3e4bc 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
@@ -18,8 +18,10 @@ package org.eclipse.egit.ui.internal.history;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
+import java.util.Set;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
@@ -64,6 +66,7 @@ import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.events.ListenerHandle;
@@ -77,6 +80,7 @@ import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revplot.PlotCommit;
import org.eclipse.jgit.revplot.PlotWalk;
import org.eclipse.jgit.revwalk.FollowFilter;
+import org.eclipse.jgit.revwalk.RenameCallback;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevFlag;
import org.eclipse.jgit.revwalk.RevObject;
@@ -646,6 +650,9 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
private boolean currentFollowRenames;
+ /** Tracks the file names that are to be highlighted in the diff file viewer */
+ private Set<String> fileViewerInterestingPaths;
+
// react on changes to the relative date preference
private final IPropertyChangeListener listener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
@@ -1469,6 +1476,8 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
graph.setInput(highlightFlag, list, asArray, input, true);
if (toSelect != null)
graph.selectCommit(toSelect);
+ if (getFollowRenames())
+ updateInterestingPathsOfFileViewer();
if (trace)
GitTraceLocation.getTrace().trace(
GitTraceLocation.HISTORYVIEW.getLocation(),
@@ -1488,6 +1497,10 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
GitTraceLocation.HISTORYVIEW.getLocation());
}
+ private void updateInterestingPathsOfFileViewer() {
+ fileViewer.setInterestingPaths(fileViewerInterestingPaths);
+ }
+
private void setWarningText(String warning) {
if (warningComposite == null || warningComposite.isDisposed())
return;
@@ -1739,6 +1752,7 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
private TreeWalk setupFileViewer(RevWalk walk, Repository db, List<FilterPath> paths) {
final TreeWalk fileWalker = createFileWalker(walk, db, paths);
fileViewer.setTreeWalk(db, fileWalker);
+ fileViewer.setInterestingPaths(fileViewerInterestingPaths);
fileViewer.refresh();
fileViewer.addSelectionChangedListener(commentViewer);
return fileWalker;
@@ -1757,6 +1771,7 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
for (FilterPath filterPath : paths)
selectedPaths.add(filterPath.getPath());
+ fileViewerInterestingPaths = new HashSet<String>(selectedPaths);
TreeFilter followFilter = createFollowFilterFor(selectedPaths);
walk.setTreeFilter(followFilter);
} else if (paths.size() > 0) {
@@ -1767,9 +1782,11 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
walk.setTreeFilter(AndTreeFilter.create(PathFilterGroup
.createFromStrings(stringPaths), TreeFilter.ANY_DIFF));
+ fileViewerInterestingPaths = new HashSet<String>(stringPaths);
} else {
pathFilters = null;
walk.setTreeFilter(TreeFilter.ALL);
+ fileViewerInterestingPaths = null;
}
return fileWalker;
}
@@ -1786,7 +1803,7 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
List<TreeFilter> followFilters = new ArrayList<TreeFilter>(paths.size());
for (String path : paths)
- followFilters.add(FollowFilter.create(path));
+ followFilters.add(createFollowFilter(path));
if (followFilters.size() == 1)
return followFilters.get(0);
@@ -1794,6 +1811,20 @@ public class GitHistoryPage extends HistoryPage implements RefsChangedListener,
return OrTreeFilter.create(followFilters);
}
+ private FollowFilter createFollowFilter(String path) {
+ FollowFilter followFilter = FollowFilter.create(path);
+ followFilter.setRenameCallback(new RenameCallback() {
+ @Override
+ public void renamed(DiffEntry entry) {
+ if (fileViewerInterestingPaths != null) {
+ fileViewerInterestingPaths.add(entry.getOldPath());
+ fileViewerInterestingPaths.add(entry.getNewPath());
+ }
+ }
+ });
+ return followFilter;
+ }
+
/**
* @return Returns <code>true</code> if <b>all</b> filterpaths refer to plain files,
* or if the list is empty.

Back to the top