Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDariusz Luksza2011-05-12 21:20:35 +0000
committerChris Aniszczyk2011-05-23 19:40:43 +0000
commita8e1af9c9dcf76a1cb6caa5c759a23ef253f5ab0 (patch)
tree6d5ecfb68918c1d779134b1c0751a75dc4eb2193
parent1c5bd87e06b4cc32012b541f67e6a23148d37893 (diff)
downloadegit-a8e1af9c9dcf76a1cb6caa5c759a23ef253f5ab0.tar.gz
egit-a8e1af9c9dcf76a1cb6caa5c759a23ef253f5ab0.tar.xz
egit-a8e1af9c9dcf76a1cb6caa5c759a23ef253f5ab0.zip
[sync] Fetch changes before synchronization launch
Automatically fetch changes from remote or remote tracking branch (if configured) just before synchronization launch. Change-Id: If6283420d56cd24ad28c564fd16b529d82c41a25 Signed-off-by: Dariusz Luksza <dariusz@luksza.org> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java9
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronize.java13
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/SynchronizeFetchJob.java82
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties3
4 files changed, 106 insertions, 1 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java
index d0058f7780..810150d898 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java
@@ -3664,6 +3664,15 @@ public class UIText extends NLS {
/** */
public static String SynchronizeWithMenu_custom;
+ /** */
+ public static String SynchronizeFetchJob_JobName;
+
+ /** */
+ public static String SynchronizeFetchJob_TaskName;
+
+ /** */
+ public static String SynchronizeFetchJob_SubTaskName;
+
static {
initializeMessages(BUNDLE_NAME, UIText.class);
}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronize.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronize.java
index 45bd04c52d..bbc49c30ac 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronize.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronize.java
@@ -16,11 +16,13 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.mapping.RemoteResourceMappingContext;
import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.egit.core.synchronize.GitResourceVariantTreeSubscriber;
import org.eclipse.egit.core.synchronize.GitSubscriberMergeContext;
import org.eclipse.egit.core.synchronize.GitSubscriberResourceMappingContext;
import org.eclipse.egit.core.synchronize.dto.GitSynchronizeData;
import org.eclipse.egit.core.synchronize.dto.GitSynchronizeDataSet;
+import org.eclipse.egit.ui.Activator;
import org.eclipse.team.core.RepositoryProvider;
import org.eclipse.team.core.subscribers.SubscriberScopeManager;
import org.eclipse.team.ui.TeamUI;
@@ -53,8 +55,12 @@ public class GitModelSynchronize {
* @param gsdSet
* @param resources
*/
- public static final void launch(GitSynchronizeDataSet gsdSet,
+ public static final void launch(final GitSynchronizeDataSet gsdSet,
IResource[] resources) {
+ Job fetchJob = new SynchronizeFetchJob(gsdSet);
+ fetchJob.setUser(true);
+ fetchJob.schedule();
+
ResourceMapping[] mappings = getSelectedResourceMappings(resources);
GitResourceVariantTreeSubscriber subscriber = new GitResourceVariantTreeSubscriber(
@@ -76,6 +82,11 @@ public class GitModelSynchronize {
if (window != null)
activePart = window.getActivePage().getActivePart();
+ try {
+ fetchJob.join();
+ } catch (InterruptedException e) {
+ Activator.logError("Fetch operation interupted", e); //$NON-NLS-1$
+ }
participant.run(activePart);
}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/SynchronizeFetchJob.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/SynchronizeFetchJob.java
new file mode 100644
index 0000000000..8608773384
--- /dev/null
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/SynchronizeFetchJob.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (C) 2011, Dariusz Luksza <dariusz@luksza.org>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.ui.internal.synchronize;
+
+import java.net.URISyntaxException;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.egit.core.synchronize.dto.GitSynchronizeData;
+import org.eclipse.egit.core.synchronize.dto.GitSynchronizeDataSet;
+import org.eclipse.egit.ui.Activator;
+import org.eclipse.egit.ui.UIPreferences;
+import org.eclipse.egit.ui.UIText;
+import org.eclipse.egit.ui.credentials.EGitCredentialsProvider;
+import org.eclipse.egit.ui.internal.fetch.FetchOperationUI;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.lib.StoredConfig;
+import org.eclipse.jgit.transport.RemoteConfig;
+import org.eclipse.osgi.util.NLS;
+
+class SynchronizeFetchJob extends Job {
+
+ private final int timeout;
+
+ private final GitSynchronizeDataSet gsdSet;
+
+ SynchronizeFetchJob(GitSynchronizeDataSet gsdSet) {
+ super(UIText.SynchronizeFetchJob_JobName);
+ this.gsdSet = gsdSet;
+ timeout = Activator.getDefault().getPreferenceStore()
+ .getInt(UIPreferences.REMOTE_CONNECTION_TIMEOUT);
+ }
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ monitor.beginTask(UIText.SynchronizeFetchJob_TaskName, gsdSet.size());
+
+ for (GitSynchronizeData gsd : gsdSet) {
+ Repository repo = gsd.getRepository();
+ StoredConfig repoConfig = repo.getConfig();
+ String remoteName = gsd.getDstRemoteName();
+ if (remoteName == null)
+ continue;
+
+ monitor.subTask(NLS.bind(UIText.SynchronizeFetchJob_SubTaskName,
+ remoteName));
+
+ RemoteConfig config;
+ try {
+ config = new RemoteConfig(repoConfig, remoteName);
+ } catch (URISyntaxException e) {
+ Activator.logError(e.getMessage(), e);
+ continue;
+ }
+
+ FetchOperationUI fetchOperationUI = new FetchOperationUI(repo,
+ config, timeout, false);
+ fetchOperationUI.setCredentialsProvider(new EGitCredentialsProvider());
+ SubMonitor subMonitor = SubMonitor.convert(monitor);
+
+ try {
+ fetchOperationUI.execute(subMonitor);
+ } catch (CoreException e) {
+ Activator.logError(e.getMessage(), e);
+ }
+
+ monitor.worked(1);
+ }
+
+ return Status.OK_STATUS;
+ }
+}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties
index 151c842414..6486ef9ef0 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties
@@ -1275,3 +1275,6 @@ StagingView_Add_Change_ID=Add Change-ID
StagingView_Commit=Commit
SynchronizeWithMenu_custom=&Custom...
+SynchronizeFetchJob_JobName=Fetching changes before synchronization launch
+SynchronizeFetchJob_TaskName=Fetching changes for synchronization
+SynchronizeFetchJob_SubTaskName=Fetching changes from {0}

Back to the top