diff options
author | Dariusz Luksza | 2011-08-06 23:18:31 +0000 |
---|---|---|
committer | Matthias Sohn | 2011-08-06 23:18:31 +0000 |
commit | bb5fa3c34dd48e596a426ed0ab27fbe6fa2c1402 (patch) | |
tree | 5584593239eab116b21a7b39ddeb5ffa4ef8d72a /org.eclipse.egit.ui/src/org | |
parent | eb454a243857ab130029a24b3d12e5572237e790 (diff) | |
download | egit-bb5fa3c34dd48e596a426ed0ab27fbe6fa2c1402.tar.gz egit-bb5fa3c34dd48e596a426ed0ab27fbe6fa2c1402.tar.xz egit-bb5fa3c34dd48e596a426ed0ab27fbe6fa2c1402.zip |
[sync] Allow synchronize on folder level
When synchronization is launched from folder level, results will only
show changes inside this folder. When it is launched from project level
it will show changes in whole repository (same as before).
Folder level synchronization will always use Workspace presentation
model.
Change-Id: I937cb2bf870f47e4c3000ae89cd1eb83d0c2d918
Signed-off-by: Dariusz Luksza <dariusz@luksza.org>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.egit.ui/src/org')
9 files changed, 215 insertions, 37 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ResourcePropertyTester.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ResourcePropertyTester.java index f25227961a..7aaa55d4b4 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ResourcePropertyTester.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ResourcePropertyTester.java @@ -36,6 +36,9 @@ public class ResourcePropertyTester extends PropertyTester { .getProject()); return mapping != null && SAFE == mapping.getRepository().getRepositoryState(); + } else if ("isContainer".equals(property)) { //$NON-NLS-1$ + int type = res.getType(); + return type == IResource.FOLDER || type == IResource.PROJECT; } return false; } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWithMenu.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWithMenu.java index 5d66de702c..01ddfd223f 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWithMenu.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWithMenu.java @@ -14,9 +14,11 @@ import static org.eclipse.jgit.lib.Constants.R_TAGS; import java.io.IOException; import java.util.Collections; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; @@ -86,12 +88,12 @@ public class SynchronizeWithMenu extends ContributionItem implements public void fill(final Menu menu, int index) { if (srv == null) return; - final IProject selectedProject = getSelection(); - if (selectedProject == null) + final IResource selectedResource = getSelection(); + if (selectedResource == null) return; RepositoryMapping mapping = RepositoryMapping - .getMapping(selectedProject); + .getMapping(selectedResource.getProject()); if (mapping == null) return; @@ -145,7 +147,13 @@ public class SynchronizeWithMenu extends ContributionItem implements GitSynchronizeData data; try { data = new GitSynchronizeData(repo, HEAD, name, true); - GitModelSynchronize.launch(data, new IResource[] { selectedProject }); + if (!(selectedResource instanceof IProject)) { + HashSet<IContainer> containers = new HashSet<IContainer>(); + containers.add((IContainer) selectedResource); + data.setIncludedPaths(containers); + } + + GitModelSynchronize.launch(data, new IResource[] { selectedResource }); } catch (IOException e) { Activator.logError(e.getMessage(), e); } @@ -176,7 +184,7 @@ public class SynchronizeWithMenu extends ContributionItem implements public void initialize(IServiceLocator serviceLocator) { srv = (ISelectionService) serviceLocator - .getService(ISelectionService.class); + .getService(ISelectionService.class); } @Override @@ -189,7 +197,7 @@ public class SynchronizeWithMenu extends ContributionItem implements branchImage.dispose(); } - private IProject getSelection() { + private IResource getSelection() { ISelection sel = srv.getSelection(); if (!(sel instanceof IStructuredSelection)) @@ -197,10 +205,11 @@ public class SynchronizeWithMenu extends ContributionItem implements Object selected = ((IStructuredSelection) sel).getFirstElement(); if (selected instanceof IAdaptable) - return (IProject) ((IAdaptable) selected) - .getAdapter(IProject.class); - if (selected instanceof IProject) - return (IProject) selected; + return (IResource) ((IAdaptable) selected) + .getAdapter(IResource.class); + + if (selected instanceof IResource) + return (IResource) selected; return null; } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWorkspaceActionHandler.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWorkspaceActionHandler.java index 19b33470e1..9d035e192c 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWorkspaceActionHandler.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWorkspaceActionHandler.java @@ -11,9 +11,18 @@ package org.eclipse.egit.ui.internal.actions; import static org.eclipse.jgit.lib.Constants.HEAD; import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.egit.core.project.RepositoryMapping; import org.eclipse.egit.core.synchronize.dto.GitSynchronizeData; import org.eclipse.egit.core.synchronize.dto.GitSynchronizeDataSet; import org.eclipse.egit.ui.Activator; @@ -31,15 +40,21 @@ public class SynchronizeWorkspaceActionHandler extends RepositoryActionHandler { } public Object execute(ExecutionEvent event) throws ExecutionException { - Repository[] repos = getRepositories(event); + IResource[] resources = getSelectedResources(event); + Map<Repository, Set<IContainer>> containerMap = mapContainerResources(resources); - if (repos.length == 0) + if (containerMap.isEmpty()) return null; GitSynchronizeDataSet gsdSet = new GitSynchronizeDataSet(); - for (Repository repo : repos) + for (Entry<Repository, Set<IContainer>> entry : containerMap.entrySet()) try { - gsdSet.add(new GitSynchronizeData(repo, HEAD, HEAD, true)); + GitSynchronizeData data = new GitSynchronizeData(entry.getKey(), HEAD, HEAD, true); + Set<IContainer> containers = entry.getValue(); + if (!containers.isEmpty()) + data.setIncludedPaths(containers); + + gsdSet.add(data); } catch (IOException e) { Activator.handleError(e.getMessage(), e, true); } @@ -49,4 +64,26 @@ public class SynchronizeWorkspaceActionHandler extends RepositoryActionHandler { return null; } + private Map<Repository, Set<IContainer>> mapContainerResources( + IResource[] resources) { + Map<Repository, Set<IContainer>> result = new HashMap<Repository, Set<IContainer>>(); + + for (IResource resource : resources) { + RepositoryMapping rm = RepositoryMapping.getMapping(resource); + if (resource instanceof IProject) + result.put(rm.getRepository(), new HashSet<IContainer>()); + else if (resource instanceof IContainer) { + Set<IContainer> containers = result.get(rm.getRepository()); + if (containers == null) { + containers = new HashSet<IContainer>(); + result.put(rm.getRepository(), containers); + containers.add((IContainer) resource); + } else if (containers.size() > 0) + containers.add((IContainer) resource); + } + } + + return result; + } + } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronizeParticipant.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronizeParticipant.java index fd705a6fbb..aca1eb3cd1 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronizeParticipant.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronizeParticipant.java @@ -85,18 +85,18 @@ public class GitModelSynchronizeParticipant extends ModelSynchronizeParticipant ISynchronizePageConfiguration configuration) { configuration.setProperty(ISynchronizePageConfiguration.P_VIEWER_ID, VIEWER_ID); - String modelProvider; + String modelProvider = WORKSPACE_MODEL_PROVIDER_ID; final IPreferenceStore preferenceStore = Activator.getDefault() .getPreferenceStore(); - if (preferenceStore - .getBoolean(UIPreferences.SYNC_VIEW_ALWAYS_SHOW_CHANGESET_MODEL)) { - modelProvider = GitChangeSetModelProvider.ID; - } else { - String lastSelectedModel = preferenceStore.getString(UIPreferences.SYNC_VIEW_LAST_SELECTED_MODEL); - if (!"".equals(lastSelectedModel)) //$NON-NLS-1$ - modelProvider = lastSelectedModel; - else - modelProvider = WORKSPACE_MODEL_PROVIDER_ID; + if (!gsds.containsFolderLevelSynchronizationRequest()) { + if (preferenceStore + .getBoolean(UIPreferences.SYNC_VIEW_ALWAYS_SHOW_CHANGESET_MODEL)) { + modelProvider = GitChangeSetModelProvider.ID; + } else { + String lastSelectedModel = preferenceStore.getString(UIPreferences.SYNC_VIEW_LAST_SELECTED_MODEL); + if (!"".equals(lastSelectedModel)) //$NON-NLS-1$ + modelProvider = lastSelectedModel; + } } configuration.setProperty( diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitSynchronizeWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitSynchronizeWizard.java index 854dd64e14..61ad9d0112 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitSynchronizeWizard.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitSynchronizeWizard.java @@ -13,19 +13,28 @@ package org.eclipse.egit.ui.internal.synchronize; import static org.eclipse.jgit.lib.Constants.HEAD; +import java.io.File; import java.io.IOException; +import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.IAdaptable; import org.eclipse.egit.core.Activator; +import org.eclipse.egit.core.project.RepositoryMapping; import org.eclipse.egit.core.synchronize.dto.GitSynchronizeData; import org.eclipse.egit.core.synchronize.dto.GitSynchronizeDataSet; import org.eclipse.egit.ui.UIText; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jgit.lib.Repository; +import org.eclipse.ui.ISelectionService; +import org.eclipse.ui.PlatformUI; /** * Synchronization wizard for Git repositories @@ -56,8 +65,14 @@ public class GitSynchronizeWizard extends Wizard { boolean shouldIncludeLocal = page.shouldIncludeLocal(); for (Entry<Repository, String> branchesEntry : branches.entrySet()) try { - gsdSet.add(new GitSynchronizeData(branchesEntry.getKey(), HEAD, - branchesEntry.getValue(), shouldIncludeLocal)); + Repository repo = branchesEntry.getKey(); + GitSynchronizeData data = new GitSynchronizeData( + repo, HEAD, branchesEntry.getValue(), + shouldIncludeLocal); + Set<IContainer> containers = getSelectedContainers(repo); + if (containers != null) + data.setIncludedPaths(containers); + gsdSet.add(data); } catch (IOException e) { Activator.logError(e.getMessage(), e); } @@ -71,4 +86,38 @@ public class GitSynchronizeWizard extends Wizard { return true; } + private Set<IContainer> getSelectedContainers(Repository repo) { + ISelectionService selectionService = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getSelectionService(); + ISelection selection = selectionService.getSelection(); + if (selection instanceof IStructuredSelection) { + Set<IContainer> result = new HashSet<IContainer>(); + IStructuredSelection sel = (IStructuredSelection) selection; + if (sel.size() == 0) + return null; + + File workTree = repo.getWorkTree(); + for (Object o : sel.toArray()) { + if (!(o instanceof IAdaptable)) + continue; + + IResource res = (IResource) ((IAdaptable) o) + .getAdapter(IResource.class); + if (res == null) + continue; + + int type = res.getType(); + if (type == IResource.FOLDER || type == IResource.PROJECT) { + Repository selRepo = RepositoryMapping.getMapping(res) + .getRepository(); + if (workTree.equals(selRepo.getWorkTree())) + result.add((IContainer) res); + } + } + + return result; + } + return null; + } + } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCache.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCache.java index 50ff106a8c..1af2f2a191 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCache.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCache.java @@ -30,6 +30,7 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.TreeWalk; +import org.eclipse.jgit.treewalk.filter.TreeFilter; /** * Git cache representation in EGit Change Set @@ -47,6 +48,12 @@ public class GitModelCache extends GitModelObjectContainer { private static final int REMOTE_NTH = 1; /** + * list of paths that needs to be included, {@code null} when all paths + * should be included + */ + protected final TreeFilter pathFilter; + + /** * This interface enables creating proper instance of {@link GitModelBlob} * for cached and working files. In case of working files the left side * content of Compare View is loaded from local hard drive. @@ -89,11 +96,14 @@ public class GitModelCache extends GitModelObjectContainer { * parent object * @param baseCommit * last {@link RevCommit} in repository + * @param pathFilter + * list of paths that needs to be included, {@code null} when all + * paths should be included * @throws IOException */ - public GitModelCache(GitModelObject parent, RevCommit baseCommit) + public GitModelCache(GitModelObject parent, RevCommit baseCommit, TreeFilter pathFilter) throws IOException { - this(parent, baseCommit, new FileModelFactory() { + this(parent, baseCommit, pathFilter, new FileModelFactory() { public GitModelBlob createFileModel( GitModelObjectContainer modelParent, RevCommit commit, @@ -107,18 +117,35 @@ public class GitModelCache extends GitModelObjectContainer { return false; } }); + + } + + /** + * Constructor used by JUnits + * + * @param parent + * @param baseCommit + * @throws IOException + */ + GitModelCache(GitModelObject parent, RevCommit baseCommit) + throws IOException { + this(parent, baseCommit, null); } /** * @param parent * @param baseCommit + * @param pathFilter + * list of paths that needs to be included, {@code null} when all + * paths should be included * @param fileFactory * @throws IOException */ protected GitModelCache(GitModelObject parent, RevCommit baseCommit, - FileModelFactory fileFactory) throws IOException { + TreeFilter pathFilter, FileModelFactory fileFactory) throws IOException { super(parent, baseCommit, RIGHT); this.fileFactory = fileFactory; + this.pathFilter = pathFilter; cacheTreeMap = new HashMap<String, GitModelCacheTree>(); location = new Path(getRepository().getWorkTree().toString()); } @@ -192,6 +219,9 @@ public class GitModelCache extends GitModelObjectContainer { tw.addTree(new RevWalk(repo).parseTree(headId)); tw.addTree(new DirCacheIterator(index)); + if (pathFilter != null) + tw.setFilter(pathFilter); + return tw; } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCommit.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCommit.java index b33fca0485..2977b7d1f2 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCommit.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCommit.java @@ -22,6 +22,7 @@ import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.revwalk.filter.RevFilter; import org.eclipse.jgit.treewalk.TreeWalk; +import org.eclipse.jgit.treewalk.filter.TreeFilter; import org.eclipse.team.ui.mapping.ISynchronizationCompareInput; /** @@ -34,6 +35,7 @@ public class GitModelCommit extends GitModelObjectContainer implements * Common ancestor commit for wrapped commit object */ protected final RevCommit ancestorCommit; + private final TreeFilter pathFilter; /** * @param parent @@ -43,11 +45,13 @@ public class GitModelCommit extends GitModelObjectContainer implements * instance of commit that will be associated with this model * object * @param direction + * @param pathFilter * @throws IOException */ public GitModelCommit(GitModelRepository parent, RevCommit commit, - int direction) throws IOException { + int direction, TreeFilter pathFilter) throws IOException { super(parent, commit, direction); + this.pathFilter = pathFilter; this.ancestorCommit = calculateAncestor(commit); } @@ -72,9 +76,23 @@ public class GitModelCommit extends GitModelObjectContainer implements RevCommit ancestorCommit, int direction) throws IOException { super(parent, commit, direction); + pathFilter = null; this.ancestorCommit = ancestorCommit; } + /** + * Constructor used by JUnits + * + * @param parent + * @param commit + * @param direction + * @throws IOException + */ + GitModelCommit(GitModelRepository parent, RevCommit commit, + int direction) throws IOException { + this(parent, commit, direction, null); + } + @Override public IPath getLocation() { return new Path(getRepository().getWorkTree().toString()); @@ -138,6 +156,9 @@ public class GitModelCommit extends GitModelObjectContainer implements RevWalk rw = new RevWalk(getRepository()); rw.setRevFilter(RevFilter.MERGE_BASE); + if (pathFilter != null) + rw.setTreeFilter(pathFilter); + for (RevCommit parent : actual.getParents()) { RevCommit parentCommit = rw.parseCommit(parent.getId()); rw.markStart(parentCommit); diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelRepository.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelRepository.java index 9eb6cbc6d4..2cd4c993d3 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelRepository.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelRepository.java @@ -30,6 +30,7 @@ import org.eclipse.jgit.revwalk.RevFlag; import org.eclipse.jgit.revwalk.RevFlagSet; import org.eclipse.jgit.revwalk.RevObject; import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.treewalk.filter.TreeFilter; /** * Representation of Git repository in Git ChangeSet model. @@ -44,6 +45,8 @@ public class GitModelRepository extends GitModelObject { private final Set<IProject> projects; + private final TreeFilter pathFilter; + private final boolean includeLocal; private IPath location; @@ -60,6 +63,7 @@ public class GitModelRepository extends GitModelObject { repo = data.getRepository(); includeLocal = data.shouldIncludeLocal(); projects = data.getProjects(); + pathFilter = data.getPathFilter(); srcRev = data.getSrcRevCommit(); dstRev = data.getDstRevCommit(); @@ -152,11 +156,15 @@ public class GitModelRepository extends GitModelObject { RevWalk rw = new RevWalk(repo); rw.setRetainBody(true); + if (pathFilter != null) + rw.setTreeFilter(pathFilter); + try { RevCommit srcCommit = rw.parseCommit(srcRev); if (includeLocal) { - GitModelCache gitModelCache = new GitModelCache(this, srcCommit); + GitModelCache gitModelCache = new GitModelCache(this, + srcCommit, pathFilter); if (gitModelCache.getChildren().length > 0) result.add(gitModelCache); @@ -187,9 +195,11 @@ public class GitModelRepository extends GitModelObject { break; if (nextCommit.has(localFlag)) - result.add(new GitModelCommit(this, nextCommit, RIGHT)); + result.add(new GitModelCommit(this, nextCommit, RIGHT, + pathFilter)); else if (nextCommit.has(remoteFlag)) - result.add(new GitModelCommit(this, nextCommit, LEFT)); + result.add(new GitModelCommit(this, nextCommit, LEFT, + pathFilter)); } } catch (IOException e) { Activator.logError(e.getMessage(), e); @@ -200,7 +210,8 @@ public class GitModelRepository extends GitModelObject { private GitModelWorkingTree getLocaWorkingTreeChanges() { try { - GitModelWorkingTree gitModelWorkingTree = new GitModelWorkingTree(this); + GitModelWorkingTree gitModelWorkingTree = new GitModelWorkingTree( + this, pathFilter); if (gitModelWorkingTree.getChildren().length > 0) return gitModelWorkingTree; diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelWorkingTree.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelWorkingTree.java index 699cbf85b8..85bb90c94f 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelWorkingTree.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelWorkingTree.java @@ -21,7 +21,9 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.treewalk.TreeWalk; +import org.eclipse.jgit.treewalk.filter.AndTreeFilter; import org.eclipse.jgit.treewalk.filter.IndexDiffFilter; +import org.eclipse.jgit.treewalk.filter.TreeFilter; /** * Representation of working tree in EGit ChangeSet model @@ -29,13 +31,25 @@ import org.eclipse.jgit.treewalk.filter.IndexDiffFilter; public class GitModelWorkingTree extends GitModelCache { /** + * Constructor used by JUnits + * * @param parent * parent of working tree instance * @throws IOException */ - public GitModelWorkingTree(GitModelObject parent) + GitModelWorkingTree(GitModelObject parent) throws IOException { + this(parent, null); + } + + /** + * @param parent + * parent of working tree instance + * @param pathFilter synchronize configuration + * @throws IOException + */ + public GitModelWorkingTree(GitModelObject parent, TreeFilter pathFilter) throws IOException { - super(parent, null, new FileModelFactory() { + super(parent, null, pathFilter, new FileModelFactory() { public GitModelBlob createFileModel( GitModelObjectContainer modelParent, RevCommit modelCommit, ObjectId repoId, ObjectId cacheId, IPath location) @@ -96,7 +110,11 @@ public class GitModelWorkingTree extends GitModelCache { ResourcesPlugin.getWorkspace().getRoot())); int dirCacheIteratorNth = tw.addTree(new DirCacheIterator(repo.readDirCache())); IndexDiffFilter idf = new IndexDiffFilter(dirCacheIteratorNth, ftIndex, true); - tw.setFilter(idf); + + if (pathFilter != null) + tw.setFilter(AndTreeFilter.create(pathFilter, idf)); + else + tw.setFilter(idf); return tw; } |