diff options
author | Mathias Kinzler | 2011-02-03 14:36:52 +0000 |
---|---|---|
committer | Mathias Kinzler | 2011-02-03 14:36:52 +0000 |
commit | 0c9c952ba0bbb393b602c278d1628a3467c03320 (patch) | |
tree | 1c0efd5592b0f8449555bf49db548e91c574226a | |
parent | d0e9c3f568f1032c3ec8ede26a0ba008ce35c695 (diff) | |
download | egit-0c9c952ba0bbb393b602c278d1628a3467c03320.tar.gz egit-0c9c952ba0bbb393b602c278d1628a3467c03320.tar.xz egit-0c9c952ba0bbb393b602c278d1628a3467c03320.zip |
Merge tool: skip ignored resources when building the diff
Ignored resources should not appear in the Merge tool.
Bug: 330983
Change-Id: I8fb19e78bb42a7684920945fdccc22ebec7098f6
Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
-rw-r--r-- | org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/GitMergeEditorInput.java | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/GitMergeEditorInput.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/GitMergeEditorInput.java index fdae04e61b..c4e283c4c6 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/GitMergeEditorInput.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/GitMergeEditorInput.java @@ -51,6 +51,8 @@ import org.eclipse.jgit.revwalk.filter.RevFilter; import org.eclipse.jgit.treewalk.AbstractTreeIterator; import org.eclipse.jgit.treewalk.FileTreeIterator; import org.eclipse.jgit.treewalk.TreeWalk; +import org.eclipse.jgit.treewalk.filter.AndTreeFilter; +import org.eclipse.jgit.treewalk.filter.NotIgnoredFilter; import org.eclipse.jgit.treewalk.filter.OrTreeFilter; import org.eclipse.jgit.treewalk.filter.PathFilter; import org.eclipse.jgit.treewalk.filter.TreeFilter; @@ -246,30 +248,41 @@ public class GitMergeEditorInput extends CompareEditorInput { TreeWalk tw = new TreeWalk(repository); try { + int dirCacheIndex = tw.addTree(new DirCacheIterator(repository + .readDirCache())); + int fileTreeIndex = tw.addTree(new FileTreeIterator(repository)); + int repositoryTreeIndex = tw.addTree(rw.parseTree(repository + .resolve(Constants.HEAD))); + + // skip ignored resources + NotIgnoredFilter notIgnoredFilter = new NotIgnoredFilter( + fileTreeIndex); // filter by selected resources if (filterPaths.size() > 1) { List<TreeFilter> suffixFilters = new ArrayList<TreeFilter>(); for (String filterPath : filterPaths) suffixFilters.add(PathFilter.create(filterPath)); TreeFilter otf = OrTreeFilter.create(suffixFilters); - tw.setFilter(otf); + tw.setFilter(AndTreeFilter.create(otf, notIgnoredFilter)); } else if (filterPaths.size() > 0) - tw.setFilter(PathFilter.create(filterPaths.get(0))); + tw.setFilter(AndTreeFilter.create(PathFilter.create(filterPaths + .get(0)), notIgnoredFilter)); + else + tw.setFilter(notIgnoredFilter); tw.setRecursive(true); - int dirCacheIndex = tw.addTree(new DirCacheIterator(repository - .readDirCache())); - int fileTreeIndex = tw.addTree(new FileTreeIterator(repository)); - int repositoryTreeIndex = tw.addTree(rw.parseTree(repository - .resolve(Constants.HEAD))); - while (tw.next()) { if (monitor.isCanceled()) throw new InterruptedException(); - String gitPath = tw.getPathString(); monitor.setTaskName(gitPath); + + FileTreeIterator fit = tw.getTree(fileTreeIndex, + FileTreeIterator.class); + if (fit == null) + continue; + DirCacheIterator dit = tw.getTree(dirCacheIndex, DirCacheIterator.class); @@ -282,10 +295,6 @@ public class GitMergeEditorInput extends CompareEditorInput { AbstractTreeIterator rt = tw.getTree(repositoryTreeIndex, AbstractTreeIterator.class); - FileTreeIterator fit = tw.getTree(fileTreeIndex, - FileTreeIterator.class); - if (fit == null || fit.isEntryIgnored()) - continue; // compare local file against HEAD to see if it was modified boolean modified = rt != null && !fit.getEntryObjectId() |