Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWorkspaceActionHandler.java')
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/SynchronizeWorkspaceActionHandler.java45
1 files changed, 41 insertions, 4 deletions
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