private void SaveClick(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(RemoteName.Text)) { return; } var remote = RemoteName.Text.Trim(); var remoteUrl = Url.Text.Trim(); var remotePushUrl = comboBoxPushUrl.Text.Trim(); bool creatingNew = _selectedRemote == null; try { // disable the control while saving tabControl1.Enabled = false; if ((string.IsNullOrEmpty(remotePushUrl) && checkBoxSepPushUrl.Checked) || (!string.IsNullOrEmpty(remotePushUrl) && remotePushUrl.Equals(remoteUrl, StringComparison.OrdinalIgnoreCase))) { checkBoxSepPushUrl.Checked = false; } if (creatingNew && !ValidateRemoteDoesNotExist(remote)) { return; } // update all other remote properties var result = _remotesManager.SaveRemote(_selectedRemote, remote, remoteUrl, checkBoxSepPushUrl.Checked ? remotePushUrl : null, PuttySshKey.Text); if (!string.IsNullOrEmpty(result.UserMessage)) { MessageBox.Show(this, result.UserMessage, _gitMessage.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } else { ThreadHelper.JoinableTaskFactory.Run(async() => { var repositoryHistory = await RepositoryHistoryManager.Remotes.LoadRecentHistoryAsync(); await this.SwitchToMainThreadAsync(); RemoteUpdate(repositoryHistory, _selectedRemote?.Url, remoteUrl); if (checkBoxSepPushUrl.Checked) { RemoteUpdate(repositoryHistory, _selectedRemote?.PushUrl, remotePushUrl); } await RepositoryHistoryManager.Remotes.SaveRecentHistoryAsync(repositoryHistory); }); } // if the user has just created a fresh new remote // there may be a need to configure it if (result.ShouldUpdateRemote && !string.IsNullOrEmpty(remoteUrl) && MessageBox.Show(this, _questionAutoPullBehaviour.Text, _questionAutoPullBehaviourCaption.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { UICommands.StartPullDialogAndPullImmediately( remote: remote, pullAction: AppSettings.PullAction.Fetch); _remotesManager.ConfigureRemotes(remote); UICommands.RepoChangedNotifier.Notify(); } } finally { // re-enable the control and re-initialize tabControl1.Enabled = true; Initialize(remote); } }