diff options
-rw-r--r-- | org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/RepositoryActionHandler.java | 2 | ||||
-rw-r--r-- | org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/GitMergeEditorInput.java | 35 |
2 files changed, 23 insertions, 14 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/RepositoryActionHandler.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/RepositoryActionHandler.java index 0c3146dea4..ebbdb5f014 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/RepositoryActionHandler.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/RepositoryActionHandler.java @@ -210,7 +210,7 @@ abstract class RepositoryActionHandler extends AbstractHandler { private Repository getRepository(boolean warn, IStructuredSelection selection, Shell shell) { RepositoryMapping mapping = null; - for (IProject project : getSelectedProjects(selection)) { + for (IProject project : getProjectsForSelectedResources(selection)) { RepositoryMapping repositoryMapping = RepositoryMapping .getMapping(project); if (mapping == null) 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() |