Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathias Kinzler2010-09-30 10:37:17 +0000
committerChris Aniszczyk2010-10-01 16:18:13 +0000
commited1d5bcd6fec50d583881bdc702437d52de91302 (patch)
tree06911bb5fdad76412cc3041b69667e6222c09dc7
parent45adde21ec24f79c08416dbf6e0ae3b055242a32 (diff)
downloadegit-ed1d5bcd6fec50d583881bdc702437d52de91302.tar.gz
egit-ed1d5bcd6fec50d583881bdc702437d52de91302.tar.xz
egit-ed1d5bcd6fec50d583881bdc702437d52de91302.zip
Remote connections: allow to configure a timeout
This adds a preference page with a "remote connection timeout" that lets the user configure a timeout for remote connection. 0 is the default and corresponds to no timeout. The different operations opening Transport instances use this timeout and set in the Transport instance. Bug: 322242 Change-Id: I150b7bd4ad1c8c74061562f6a3b5958e0643a4de Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ListRemoteOperationTest.java10
-rw-r--r--org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/PushOperationTest.java8
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/op/CloneOperation.java7
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/op/ListRemoteOperation.java9
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/op/PushOperation.java7
-rw-r--r--org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/common/LocalRepositoryTestCase.java2
-rw-r--r--org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewBranchHandlingTest.java2
-rw-r--r--org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewFetchAndPushTest.java4
-rw-r--r--org.eclipse.egit.ui/plugin.xml9
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIPreferences.java3
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java6
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java5
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java5
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefSpecPage.java5
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/RemoteConnectionPreferencePage.java49
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/ConfirmationPage.java6
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushConfiguredRemoteAction.java6
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java5
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties2
19 files changed, 125 insertions, 25 deletions
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ListRemoteOperationTest.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ListRemoteOperationTest.java
index b9fd99f879..c890c4e750 100644
--- a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ListRemoteOperationTest.java
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/ListRemoteOperationTest.java
@@ -92,7 +92,7 @@ public class ListRemoteOperationTest extends DualRepositoryTestCase {
URIish uri = new URIish("file:///"
+ repository1.getRepository().getDirectory().toString());
CloneOperation clop = new CloneOperation(uri, true, null, workdir2,
- "refs/heads/master", "origin");
+ "refs/heads/master", "origin", 0);
clop.run(null);
repository2 = new TestRepository(new FileRepository(new File(workdir2,
@@ -123,14 +123,14 @@ public class ListRemoteOperationTest extends DualRepositoryTestCase {
URIish uri = new URIish("file:///"
+ repository2.getRepository().getDirectory().getPath());
ListRemoteOperation lrop = new ListRemoteOperation(repository1
- .getRepository(), uri);
+ .getRepository(), uri, 0);
lrop.run(null);
assertEquals(4, lrop.getRemoteRefs().size());
assertNotNull(lrop.getRemoteRef("refs/heads/test"));
uri = new URIish("file:///"
+ repository1.getRepository().getDirectory().getPath());
- lrop = new ListRemoteOperation(repository2.getRepository(), uri);
+ lrop = new ListRemoteOperation(repository2.getRepository(), uri, 0);
lrop.run(new NullProgressMonitor());
assertEquals(2, lrop.getRemoteRefs().size());
assertNotNull(lrop.getRemoteRef("refs/heads/master"));
@@ -147,7 +147,7 @@ public class ListRemoteOperationTest extends DualRepositoryTestCase {
URIish uri = new URIish("file:///"
+ repository2.getRepository().getDirectory().getPath());
ListRemoteOperation lrop = new ListRemoteOperation(repository1
- .getRepository(), uri);
+ .getRepository(), uri, 0);
try {
lrop.getRemoteRefs();
fail("Expected Exception not thrown");
@@ -166,7 +166,7 @@ public class ListRemoteOperationTest extends DualRepositoryTestCase {
URIish uri = new URIish("file:///" + "no/path");
ListRemoteOperation lrop = new ListRemoteOperation(repository1
- .getRepository(), uri);
+ .getRepository(), uri, 0);
try {
lrop.run(new NullProgressMonitor());
fail("Expected Exception not thrown");
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/PushOperationTest.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/PushOperationTest.java
index 16f8e48054..035b744ba0 100644
--- a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/PushOperationTest.java
+++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/test/op/PushOperationTest.java
@@ -102,7 +102,7 @@ public class PushOperationTest extends DualRepositoryTestCase {
URIish uri = new URIish("file:///"
+ repository1.getRepository().getDirectory().toString());
CloneOperation clop = new CloneOperation(uri, true, null, workdir2,
- "refs/heads/master", "origin");
+ "refs/heads/master", "origin", 0);
clop.run(null);
repository2 = new TestRepository(new FileRepository(new File(workdir2,
@@ -229,10 +229,10 @@ public class PushOperationTest extends DualRepositoryTestCase {
spec.addURIRefUpdates(remote, refUpdates);
PushOperation pop = new PushOperation(repository1.getRepository(),
- spec, false, null);
+ spec, false, null, 0);
pop.run(null);
- pop = new PushOperation(repository1.getRepository(), spec, false, null);
+ pop = new PushOperation(repository1.getRepository(), spec, false, null, 0);
try {
pop.run(null);
fail("Expected Exception not thrown");
@@ -262,7 +262,7 @@ public class PushOperationTest extends DualRepositoryTestCase {
spec.addURIRefUpdates(remote, refUpdates);
// now we can construct the push operation
PushOperation pop = new PushOperation(repository1.getRepository(),
- spec, false, null);
+ spec, false, null, 0);
return pop;
}
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CloneOperation.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CloneOperation.java
index a9334546d5..b9b96541ff 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CloneOperation.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CloneOperation.java
@@ -58,6 +58,8 @@ public class CloneOperation {
private final String remoteName;
+ private final int timeout;
+
private FileRepository local;
private RemoteConfig remoteConfig;
@@ -83,10 +85,11 @@ public class CloneOperation {
* @param remoteName
* name of created remote config as source remote (typically
* named "origin").
+ * @param timeout timeout in seconds
*/
public CloneOperation(final URIish uri, final boolean allSelected,
final Collection<Ref> selectedBranches, final File workdir,
- final String branch, final String remoteName) {
+ final String branch, final String remoteName, int timeout) {
this.uri = uri;
this.allSelected = allSelected;
this.selectedBranches = selectedBranches;
@@ -94,6 +97,7 @@ public class CloneOperation {
this.gitdir = new File(workdir, Constants.DOT_GIT);
this.branch = branch;
this.remoteName = remoteName;
+ this.timeout = timeout;
}
/**
@@ -195,6 +199,7 @@ public class CloneOperation {
private void doFetch(final IProgressMonitor monitor)
throws NotSupportedException, TransportException {
final Transport tn = Transport.open(local, remoteConfig);
+ tn.setTimeout(this.timeout);
try {
final EclipseGitProgressTransformer pm;
pm = new EclipseGitProgressTransformer(monitor);
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/ListRemoteOperation.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/ListRemoteOperation.java
index 5e1feeeba1..85ad57f1f3 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/ListRemoteOperation.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/ListRemoteOperation.java
@@ -31,6 +31,8 @@ public class ListRemoteOperation {
private final URIish uri;
+ private final int timeout;
+
private Map<String, Ref> remoteRefsMap;
/**
@@ -42,10 +44,14 @@ public class ListRemoteOperation {
* occur.
* @param uri
* URI of remote repository to list.
+ * @param timeout
+ * timeout is seconds; 0 means no timeout
*/
- public ListRemoteOperation(final Repository localDb, final URIish uri) {
+ public ListRemoteOperation(final Repository localDb, final URIish uri,
+ int timeout) {
this.localDb = localDb;
this.uri = uri;
+ this.timeout = timeout;
}
/**
@@ -83,6 +89,7 @@ public class ListRemoteOperation {
Connection connection = null;
try {
transport = Transport.open(localDb, uri);
+ transport.setTimeout(this.timeout);
if (pm != null)
pm.beginTask(CoreText.ListRemoteOperation_title,
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/PushOperation.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/PushOperation.java
index 3404696d43..e588361df0 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/PushOperation.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/PushOperation.java
@@ -41,6 +41,8 @@ public class PushOperation {
private final RemoteConfig rc;
+ private final int timeout;
+
private PushOperationResult operationResult;
/**
@@ -60,14 +62,16 @@ public class PushOperation {
* true if push operation should just check for possible result
* and not really update remote refs, false otherwise - when push
* should act normally.
+ * @param timeout the timeout in seconds (0 for no timeout)
*/
public PushOperation(final Repository localDb,
final PushOperationSpecification specification,
- final boolean dryRun, final RemoteConfig rc) {
+ final boolean dryRun, final RemoteConfig rc, int timeout) {
this.localDb = localDb;
this.specification = specification;
this.dryRun = dryRun;
this.rc = rc;
+ this.timeout = timeout;
}
/**
@@ -139,6 +143,7 @@ public class PushOperation {
continue;
}
transport = Transport.open(localDb, uri);
+ transport.setTimeout(this.timeout);
if (rc != null)
transport.applyConfig(rc);
diff --git a/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/common/LocalRepositoryTestCase.java b/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/common/LocalRepositoryTestCase.java
index 28988afae0..4fc3f38e1f 100644
--- a/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/common/LocalRepositoryTestCase.java
+++ b/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/common/LocalRepositoryTestCase.java
@@ -330,7 +330,7 @@ public abstract class LocalRepositoryTestCase extends EGitTestCase {
URIish uri = new URIish("file:///" + myRepository.getDirectory());
File workdir = new File(testDirectory, CHILDREPO);
CloneOperation clop = new CloneOperation(uri, true, null, workdir,
- "refs/heads/master", "origin");
+ "refs/heads/master", "origin", 0);
clop.run(null);
return new File(workdir, Constants.DOT_GIT);
}
diff --git a/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewBranchHandlingTest.java b/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewBranchHandlingTest.java
index b3bede28f6..858048a0e5 100644
--- a/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewBranchHandlingTest.java
+++ b/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewBranchHandlingTest.java
@@ -69,7 +69,7 @@ public class GitRepositoriesViewBranchHandlingTest extends
final File workdir = new File(testDirectory, "Cloned");
CloneOperation op = new CloneOperation(uri, true, null, workdir,
- "refs/heads/master", "origin");
+ "refs/heads/master", "origin", 0);
op.run(null);
clonedRepositoryFile = new File(workdir, Constants.DOT_GIT);
diff --git a/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewFetchAndPushTest.java b/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewFetchAndPushTest.java
index 6f4c7e4afa..75a032417f 100644
--- a/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewFetchAndPushTest.java
+++ b/org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/view/repositories/GitRepositoriesViewFetchAndPushTest.java
@@ -59,7 +59,7 @@ public class GitRepositoriesViewFetchAndPushTest extends
File workdir = new File(testDirectory, "ClonedRepo");
CloneOperation op = new CloneOperation(uri, true, null, workdir,
- "refs/heads/master", "origin");
+ "refs/heads/master", "origin", 0);
op.run(null);
clonedRepositoryFile = new File(workdir, Constants.DOT_GIT);
@@ -69,7 +69,7 @@ public class GitRepositoriesViewFetchAndPushTest extends
workdir = new File(testDirectory, "ClonedRepo2");
op = new CloneOperation(uri, true, null, workdir, "refs/heads/master",
- "origin");
+ "origin", 0);
op.run(null);
clonedRepositoryFile2 = new File(workdir, Constants.DOT_GIT);
diff --git a/org.eclipse.egit.ui/plugin.xml b/org.eclipse.egit.ui/plugin.xml
index 81f0fbda62..77fa62dace 100644
--- a/org.eclipse.egit.ui/plugin.xml
+++ b/org.eclipse.egit.ui/plugin.xml
@@ -324,6 +324,15 @@
id="org.eclipse.egit.ui.keyword.git">
</keywordReference>
</page>
+ <page
+ category="org.eclipse.egit.ui.GitPreferences"
+ class="org.eclipse.egit.ui.internal.preferences.RemoteConnectionPreferencePage"
+ id="org.eclipse.egit.ui.page1"
+ name="Remote Connections">
+ <keywordReference
+ id="org.eclipse.egit.ui.keyword.git">
+ </keywordReference>
+ </page>
</extension>
<extension point="org.eclipse.ui.propertyPages">
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIPreferences.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIPreferences.java
index 2cba31ce02..eee35f0bb6 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIPreferences.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIPreferences.java
@@ -82,11 +82,12 @@ public class UIPreferences {
public final static String DECORATOR_SHOW_ASSUME_VALID_ICON = "decorator_show_assume_valid_icon"; //$NON-NLS-1$
/** */
public final static String DECORATOR_SHOW_DIRTY_ICON = "decorator_show_dirty_icon"; //$NON-NLS-1$
-
/** */
public static final String REFESH_ON_INDEX_CHANGE = "refesh_on_index_change"; //$NON-NLS-1$
/** */
public static final String REFESH_ONLY_WHEN_ACTIVE = "refesh_only_when_active"; //$NON-NLS-1$
+ /** */
+ public static final String REMOTE_CONNECTION_TIMEOUT = "remote_connection_timeout"; //$NON-NLS-1$
/**
* Converts a persisted String separated with commas to an integer array
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 91f26ef222..de2d23058e 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
@@ -2294,6 +2294,12 @@ public class UIText extends NLS {
public static String NewRepositoryWizard_WizardTitle;
/** */
+ public static String RemoteConnectionPreferencePage_TimeoutLabel;
+
+ /** */
+ public static String RemoteConnectionPreferencePage_ZeroValueTooltip;
+
+ /** */
public static String RemoteSelectionCombo_sourceName;
/** */
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java
index 18fc83ddcb..bbc4e8eb42 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java
@@ -26,6 +26,7 @@ import org.eclipse.egit.core.RepositoryUtil;
import org.eclipse.egit.core.op.CloneOperation;
import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.UIIcons;
+import org.eclipse.egit.ui.UIPreferences;
import org.eclipse.egit.ui.UIText;
import org.eclipse.egit.ui.internal.components.RepositorySelectionPage;
import org.eclipse.jface.dialogs.ErrorDialog;
@@ -179,8 +180,10 @@ public class GitCloneWizard extends Wizard {
return false;
}
+ int timeout = Activator.getDefault().getPreferenceStore().getInt(
+ UIPreferences.REMOTE_CONNECTION_TIMEOUT);
final CloneOperation op = new CloneOperation(uri, allSelected,
- selectedBranches, workdir, branch, remoteName);
+ selectedBranches, workdir, branch, remoteName, timeout);
alreadyClonedInto = workdir.getPath();
cloneSource.saveUriInPrefs();
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java
index b51862e257..f0016b3d95 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java
@@ -26,6 +26,7 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.egit.core.op.ListRemoteOperation;
import org.eclipse.egit.ui.Activator;
+import org.eclipse.egit.ui.UIPreferences;
import org.eclipse.egit.ui.UIText;
import org.eclipse.egit.ui.internal.components.RepositorySelection;
import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNodeType;
@@ -229,7 +230,9 @@ class SourceBranchPage extends WizardPage {
try {
final URIish uri = newRepoSelection.getURI();
final Repository db = new FileRepository(new File("/tmp")); //$NON-NLS-1$
- listRemoteOp = new ListRemoteOperation(db, uri);
+ int timeout = Activator.getDefault().getPreferenceStore().getInt(
+ UIPreferences.REMOTE_CONNECTION_TIMEOUT);
+ listRemoteOp = new ListRemoteOperation(db, uri, timeout);
getContainer().run(true, true, new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefSpecPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefSpecPage.java
index f207d77cf3..5e325936bc 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefSpecPage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/components/RefSpecPage.java
@@ -19,6 +19,7 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.egit.core.op.ListRemoteOperation;
import org.eclipse.egit.ui.Activator;
+import org.eclipse.egit.ui.UIPreferences;
import org.eclipse.egit.ui.UIText;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.ErrorDialog;
@@ -221,7 +222,9 @@ public class RefSpecPage extends WizardPage {
try {
final URIish uri;
uri = newRepoSelection.getURI(pushPage);
- listRemotesOp = new ListRemoteOperation(local, uri);
+ int timeout = Activator.getDefault().getPreferenceStore().getInt(
+ UIPreferences.REMOTE_CONNECTION_TIMEOUT);
+ listRemotesOp = new ListRemoteOperation(local, uri, timeout);
getContainer().run(true, true, new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/RemoteConnectionPreferencePage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/RemoteConnectionPreferencePage.java
new file mode 100644
index 0000000000..5e71efb91d
--- /dev/null
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/RemoteConnectionPreferencePage.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2010, SAP AG.
+ * 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
+ *
+ * Contributors:
+ * Mathias Kinzler (SAP AG) - initial implementation
+ *******************************************************************************/
+package org.eclipse.egit.ui.internal.preferences;
+
+import org.eclipse.egit.ui.Activator;
+import org.eclipse.egit.ui.UIPreferences;
+import org.eclipse.egit.ui.UIText;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * "Remote Connection" preference page
+ */
+public class RemoteConnectionPreferencePage extends FieldEditorPreferencePage
+ implements IWorkbenchPreferencePage {
+
+ /**
+ * Default constructor
+ */
+ public RemoteConnectionPreferencePage() {
+ super(GRID);
+ setPreferenceStore(Activator.getDefault().getPreferenceStore());
+ }
+
+ @Override
+ protected void createFieldEditors() {
+ IntegerFieldEditor editor = new IntegerFieldEditor(
+ UIPreferences.REMOTE_CONNECTION_TIMEOUT,
+ UIText.RemoteConnectionPreferencePage_TimeoutLabel,
+ getFieldEditorParent());
+ editor.getLabelControl(getFieldEditorParent()).setToolTipText(
+ UIText.RemoteConnectionPreferencePage_ZeroValueTooltip);
+ addField(editor);
+ }
+
+ public void init(IWorkbench workbench) {
+ // nothing to do
+ }
+}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/ConfirmationPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/ConfirmationPage.java
index ec1e8ba5b0..bd44ab99c0 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/ConfirmationPage.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/ConfirmationPage.java
@@ -22,6 +22,7 @@ import org.eclipse.egit.core.op.PushOperation;
import org.eclipse.egit.core.op.PushOperationResult;
import org.eclipse.egit.core.op.PushOperationSpecification;
import org.eclipse.egit.ui.Activator;
+import org.eclipse.egit.ui.UIPreferences;
import org.eclipse.egit.ui.UIText;
import org.eclipse.egit.ui.internal.components.RepositorySelection;
import org.eclipse.jface.dialogs.Dialog;
@@ -166,9 +167,10 @@ class ConfirmationPage extends WizardPage {
final PushOperationSpecification spec = new PushOperationSpecification();
for (final URIish uri : displayedRepoSelection.getPushURIs())
spec.addURIRefUpdates(uri, copyUpdates(updates));
-
+ int timeout = Activator.getDefault().getPreferenceStore().getInt(
+ UIPreferences.REMOTE_CONNECTION_TIMEOUT);
operation = new PushOperation(local, spec, true,
- displayedRepoSelection.getConfig());
+ displayedRepoSelection.getConfig(), timeout);
getContainer().run(true, true, new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushConfiguredRemoteAction.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushConfiguredRemoteAction.java
index 4c6d6e4a93..d924ec0572 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushConfiguredRemoteAction.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushConfiguredRemoteAction.java
@@ -25,6 +25,7 @@ import org.eclipse.egit.core.op.PushOperation;
import org.eclipse.egit.core.op.PushOperationResult;
import org.eclipse.egit.core.op.PushOperationSpecification;
import org.eclipse.egit.ui.Activator;
+import org.eclipse.egit.ui.UIPreferences;
import org.eclipse.egit.ui.UIText;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jgit.lib.Repository;
@@ -105,8 +106,9 @@ public class PushConfiguredRemoteAction {
for (final URIish uri : pushURIs)
spec.addURIRefUpdates(uri,
ConfirmationPage.copyUpdates(updates));
-
- op = new PushOperation(repository, spec, dryRun, config);
+ int timeout = Activator.getDefault().getPreferenceStore().getInt(
+ UIPreferences.REMOTE_CONNECTION_TIMEOUT);
+ op = new PushOperation(repository, spec, dryRun, config, timeout);
} catch (URISyntaxException e) {
pushException = e;
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java
index 57fbc84502..e48f75651f 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/PushWizard.java
@@ -24,6 +24,7 @@ import org.eclipse.egit.core.op.PushOperationResult;
import org.eclipse.egit.core.op.PushOperationSpecification;
import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.UIIcons;
+import org.eclipse.egit.ui.UIPreferences;
import org.eclipse.egit.ui.UIText;
import org.eclipse.egit.ui.internal.components.RefSpecPage;
import org.eclipse.egit.ui.internal.components.RepositorySelection;
@@ -196,7 +197,9 @@ public class PushWizard extends Wizard {
spec.addURIRefUpdates(uri, ConfirmationPage
.copyUpdates(updates));
}
- return new PushOperation(localDb, spec, false, config);
+ int timeout = Activator.getDefault().getPreferenceStore().getInt(
+ UIPreferences.REMOTE_CONNECTION_TIMEOUT);
+ return new PushOperation(localDb, spec, false, config, timeout);
} catch (final IOException e) {
ErrorDialog.openError(getShell(),
UIText.PushWizard_cantPrepareUpdatesTitle,
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 1c51dde434..036f060134 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
@@ -815,6 +815,8 @@ LocalFileRevision_currentVersionTag=<current version>
NewRemoteWizard_CheckingUriTaskName=Checking URI {0}
NewRepositoryWizard_WizardTitle=Create a Git Repository
+RemoteConnectionPreferencePage_TimeoutLabel=&Remote connection timeout (seconds)
+RemoteConnectionPreferencePage_ZeroValueTooltip=0 is equivalent to no timeout
RemoteSelectionCombo_sourceName=&Source Repository:
RemoteSelectionCombo_sourceRef=R&ef:
RemoteSelectionCombo_destinationName=&Destination Repository:

Back to the top