diff options
author | Mathias Kinzler | 2010-09-30 10:37:17 +0000 |
---|---|---|
committer | Chris Aniszczyk | 2010-10-01 16:18:13 +0000 |
commit | ed1d5bcd6fec50d583881bdc702437d52de91302 (patch) | |
tree | 06911bb5fdad76412cc3041b69667e6222c09dc7 | |
parent | 45adde21ec24f79c08416dbf6e0ae3b055242a32 (diff) | |
download | egit-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>
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: |