Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDariusz Luksza2011-08-06 23:18:31 +0000
committerMatthias Sohn2011-08-06 23:18:31 +0000
commitbb5fa3c34dd48e596a426ed0ab27fbe6fa2c1402 (patch)
tree5584593239eab116b21a7b39ddeb5ffa4ef8d72a /org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions
parenteb454a243857ab130029a24b3d12e5572237e790 (diff)
downloadegit-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/eclipse/egit/ui/internal/actions')
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWithMenu.java29
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWorkspaceActionHandler.java45
2 files changed, 60 insertions, 14 deletions
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;
+ }
+
}

Back to the top