diff options
author | Robin Stocker | 2012-06-25 22:55:49 +0000 |
---|---|---|
committer | Matthias Sohn | 2013-02-06 23:57:44 +0000 |
commit | 6bcaf8223ccf9838774138e1b9e9bb15b9d35703 (patch) | |
tree | 1c16c31ace9b2dc4d388b87ccd90613a7af53fb7 /org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/GitHistoryPage.java | |
parent | b66d44e2b3284d76a20735f47eafb05a6093fb23 (diff) | |
download | egit-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.java | 33 |
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. |