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 /org.eclipse.egit.ui/src/org/eclipse/egit | |
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>
Diffstat (limited to 'org.eclipse.egit.ui/src/org/eclipse/egit')
10 files changed, 83 insertions, 9 deletions
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: |