/// <summary> /// Removes the specified remote from .git/config file. /// </summary> /// <param name="remote">Remote to remove.</param> /// <returns>Output of <see cref="IGitModule.RemoveRemote"/> operation.</returns> public string RemoveRemote(GitRemote remote) { if (remote == null) { throw new ArgumentNullException("remote"); } return(_module.RemoveRemote(remote.Name)); }
/// <summary> /// Saves the remote details by creating a new or updating an existing remote entry in .git/config file. /// </summary> /// <param name="remote">An existing remote instance or <see langword="null"/> if creating a new entry.</param> /// <param name="remoteName"> /// <para>The remote name.</para> /// <para>If updating an existing remote and the name changed, it will result in remote name change and prompt for "remote update".</para> /// </param> /// <param name="remoteUrl"> /// <para>The remote URL.</para> /// <para>If updating an existing remote and the URL changed, it will result in remote URL change and prompt for "remote update".</para> /// </param> /// <param name="remotePushUrl">An optional alternative remote push URL.</param> /// <param name="remotePuttySshKey">An optional Putty SSH key.</param> /// <returns>Result of the operation.</returns> public GitRemoteSaveResult SaveRemote(GitRemote remote, string remoteName, string remoteUrl, string remotePushUrl, string remotePuttySshKey) { if (string.IsNullOrWhiteSpace(remoteName)) { throw new ArgumentNullException(nameof(remoteName)); } remoteName = remoteName.Trim(); // if create a new remote or updated the url - we may need to perform "update remote" bool updateRemoteRequired = false; // if operation return anything back, relay that to the user var output = string.Empty; bool creatingNew = remote == null; bool remoteDisabled = false; if (creatingNew) { output = _module.AddRemote(remoteName, remoteUrl); updateRemoteRequired = true; } else { if (remote.Disabled) { // disabled branches can't updated as it poses to many problems, i.e. // - verify that the branch name is valid, and // - it does not duplicate an active branch name etc. return(new GitRemoteSaveResult(null, false)); } remoteDisabled = remote.Disabled; if (!string.Equals(remote.Name, remoteName, StringComparison.OrdinalIgnoreCase)) { // the name of the remote changed - perform rename output = _module.RenameRemote(remote.Name, remoteName); } if (!string.Equals(remote.Url, remoteUrl, StringComparison.OrdinalIgnoreCase)) { // the remote url changed - we may need to update remote updateRemoteRequired = true; } } UpdateSettings(remoteName, remoteDisabled, SettingKeyString.RemoteUrl, remoteUrl); UpdateSettings(remoteName, remoteDisabled, SettingKeyString.RemotePushUrl, remotePushUrl); UpdateSettings(remoteName, remoteDisabled, SettingKeyString.RemotePuttySshKey, remotePuttySshKey); return(new GitRemoteSaveResult(output, updateRemoteRequired)); }
/// <summary> /// Removes the specified remote from .git/config file. /// </summary> /// <param name="remote">Remote to remove.</param> /// <returns>Output of <see cref="IGitModule.RemoveRemote"/> operation, if the remote is active; otherwise <see cref="string.Empty"/>.</returns> public string RemoveRemote(GitRemote remote) { if (remote == null) { throw new ArgumentNullException(nameof(remote)); } if (!remote.Disabled) { return(_module.RemoveRemote(remote.Name)); } var sectionName = $"{DisabledSectionPrefix}{SectionRemote}.{remote.Name}"; _module.LocalConfigFile.RemoveConfigSection(sectionName, true); return(string.Empty); }
/// <summary> /// Saves the remote details by creating a new or updating an existing remote entry in .git/config file. /// </summary> /// <param name="remote">An existing remote instance or <see langword="null"/> if creating a new entry.</param> /// <param name="remoteName"> /// <para>The remote name.</para> /// <para>If updating an existing remote and the name changed, it will result in remote name change and prompt for "remote update".</para> /// </param> /// <param name="remoteUrl"> /// <para>The remote URL.</para> /// <para>If updating an existing remote and the URL changed, it will result in remote URL change and prompt for "remote update".</para> /// </param> /// <param name="remotePushUrl">An optional alternative remote push URL.</param> /// <param name="remotePuttySshKey">An optional Putty SSH key.</param> /// <returns>Result of the operation.</returns> public GitRemoteSaveResult SaveRemote(GitRemote remote, string remoteName, string remoteUrl, string remotePushUrl, string remotePuttySshKey) { if (string.IsNullOrWhiteSpace(remoteName)) { throw new ArgumentNullException("remoteName"); } remoteName = remoteName.Trim(); // if create a new remote or updated the url - we may need to perform "update remote" bool updateRemoteRequired = false; // if operation return anything back, relay that to the user var output = string.Empty; bool creatingNew = remote == null; if (creatingNew) { output = _module.AddRemote(remoteName, remoteUrl); updateRemoteRequired = true; } else { if (!string.Equals(remote.Name, remoteName, StringComparison.OrdinalIgnoreCase)) { // the name of the remote changed - perform rename output = _module.RenameRemote(remote.Name, remoteName); } if (!string.Equals(remote.Url, remoteUrl, StringComparison.OrdinalIgnoreCase)) { // the remote url changed - we may need to update remote updateRemoteRequired = true; } } UpdateSettings(string.Format(SettingKeyString.RemoteUrl, remoteName), remoteUrl); UpdateSettings(string.Format(SettingKeyString.RemotePushUrl, remoteName), remotePushUrl); UpdateSettings(string.Format(SettingKeyString.RemotePuttySshKey, remoteName), remotePuttySshKey); return(new GitRemoteSaveResult(output, updateRemoteRequired)); }
/// <summary> /// Returns the default remote for push operation. /// </summary> /// <param name="remote"></param> /// <param name="branch"></param> /// <returns>The <see cref="GitRef.Name"/> if found, otheriwse <see langword="null"/>.</returns> // TODO: moved verbatim from FormPush.cs, perhaps needs refactoring public string GetDefaultPushRemote(GitRemote remote, string branch) { if (remote == null) { throw new ArgumentNullException("remote"); } Func <string, string, bool> isSettingForBranch = (setting, branchName) => { var head = new GitRef(_module, string.Empty, setting); return(head.IsHead && head.Name.Equals(branchName, StringComparison.OrdinalIgnoreCase)); }; var remoteHead = remote.Push .Select(s => s.Split(':')) .Where(t => t.Length == 2) .Where(t => isSettingForBranch(t[0], branch)) .Select(t => new GitRef(_module, string.Empty, t[1])) .FirstOrDefault(h => h.IsHead); return(remoteHead == null ? null : remoteHead.Name); }
public void RemoveRemote_success() { var remote = new GitRemote { Name = "bla" }; _controller.RemoveRemote(remote); _module.Received(1).RemoveRemote(remote.Name); }
public void SaveRemote_should_update_settings(string remoteUrl, string remotePushUrl, string remotePuttySshKey) { var remote = new GitRemote { Name = "bla", Url = remoteUrl }; _controller.SaveRemote(remote, remote.Name, remoteUrl, remotePushUrl, remotePuttySshKey); Action<string, string> ensure = (setting, value) => { setting = string.Format(setting, remote.Name); if (!string.IsNullOrWhiteSpace(value)) { _module.Received(1).SetSetting(setting, value); } else { _module.Received(1).UnsetSetting(setting); } }; ensure(SettingKeyString.RemoteUrl, remoteUrl); ensure(SettingKeyString.RemotePushUrl, remotePushUrl); ensure(SettingKeyString.RemotePuttySshKey, remotePuttySshKey); }
public void SaveRemote_populated_remote_should_require_update_if_remoteUrl_mismatch() { const string remoteName = "a"; const string remoteUrl = "b"; const string output = "yes!"; var gitRemote = new GitRemote { Name = "old", Url = "old" }; _module.RenameRemote(Arg.Any<string>(), Arg.Any<string>()).Returns(x => output); var result = _controller.SaveRemote(gitRemote, remoteName, remoteUrl, null, null); result.UserMessage.Should().Be(output); result.ShouldUpdateRemote.Should().BeTrue(); _module.Received(1).RenameRemote(gitRemote.Name, remoteName); }
/// <summary> /// Saves the remote details by creating a new or updating an existing remote entry in .git/config file. /// </summary> /// <param name="remote">An existing remote instance or <see langword="null"/> if creating a new entry.</param> /// <param name="remoteName"> /// <para>The remote name.</para> /// <para>If updating an existing remote and the name changed, it will result in remote name change and prompt for "remote update".</para> /// </param> /// <param name="remoteUrl"> /// <para>The remote URL.</para> /// <para>If updating an existing remote and the URL changed, it will result in remote URL change and prompt for "remote update".</para> /// </param> /// <param name="remotePushUrl">An optional alternative remote push URL.</param> /// <param name="remotePuttySshKey">An optional Putty SSH key.</param> /// <returns>Result of the operation.</returns> public GitRemoteSaveResult SaveRemote(GitRemote remote, string remoteName, string remoteUrl, string remotePushUrl, string remotePuttySshKey) { if (string.IsNullOrWhiteSpace(remoteName)) { throw new ArgumentNullException("remoteName"); } remoteName = remoteName.Trim(); // if create a new remote or updated the url - we may need to perform "update remote" bool updateRemoteRequired = false; // if operation return anything back, relay that to the user var output = string.Empty; bool creatingNew = remote == null; if (creatingNew) { output = _module.AddRemote(remoteName, remoteUrl); updateRemoteRequired = true; } else { if (!string.Equals(remote.Name, remoteName, StringComparison.OrdinalIgnoreCase)) { // the name of the remote changed - perform rename output = _module.RenameRemote(remote.Name, remoteName); } if (!string.Equals(remote.Url, remoteUrl, StringComparison.OrdinalIgnoreCase)) { // the remote url changed - we may need to update remote updateRemoteRequired = true; } } UpdateSettings(string.Format(SettingKeyString.RemoteUrl, remoteName), remoteUrl); UpdateSettings(string.Format(SettingKeyString.RemotePushUrl, remoteName), remotePushUrl); UpdateSettings(string.Format(SettingKeyString.RemotePuttySshKey, remoteName), remotePuttySshKey); return new GitRemoteSaveResult(output, updateRemoteRequired); }
/// <summary> /// Removes the specified remote from .git/config file. /// </summary> /// <param name="remote">Remote to remove.</param> /// <returns>Output of <see cref="IGitModule.RemoveRemote"/> operation.</returns> public string RemoveRemote(GitRemote remote) { if (remote == null) { throw new ArgumentNullException("remote"); } return _module.RemoveRemote(remote.Name); }
/// <summary> /// Returns the default remote for push operation. /// </summary> /// <param name="remote"></param> /// <param name="branch"></param> /// <returns>The <see cref="GitRef.Name"/> if found, otheriwse <see langword="null"/>.</returns> // TODO: moved verbatim from FormPush.cs, perhaps needs refactoring public string GetDefaultPushRemote(GitRemote remote, string branch) { if (remote == null) { throw new ArgumentNullException("remote"); } Func<string, string, bool> isSettingForBranch = (setting, branchName) => { var head = new GitRef(_module, string.Empty, setting); return head.IsHead && head.Name.Equals(branchName, StringComparison.OrdinalIgnoreCase); }; var remoteHead = remote.Push .Select(s => s.Split(':')) .Where(t => t.Length == 2) .Where(t => isSettingForBranch(t[0], branch)) .Select(t => new GitRef(_module, string.Empty, t[1])) .FirstOrDefault(h => h.IsHead); return remoteHead == null ? null : remoteHead.Name; }
private void RemotesUpdated(object sender, EventArgs e) { _selectedRemote = _NO_TRANSLATE_Remotes.SelectedItem as GitRemote; if (_selectedRemote == null) { return; } if (TabControlTagBranch.SelectedTab == MultipleBranchTab) { UpdateMultiBranchView(); } EnableLoadSshButton(); // update the text box of the Remote Url combobox to show the URL of selected remote string pushUrl = _selectedRemote.PushUrl; if (pushUrl.IsNullOrEmpty()) { pushUrl = _selectedRemote.Url; } PushDestination.Text = pushUrl; if (string.IsNullOrEmpty(_NO_TRANSLATE_Branch.Text)) { // Doing this makes it pretty easy to accidentally create a branch on the remote. // But leaving it blank will do the 'default' thing, meaning all branches are pushed. // Solution: when pushing a branch that doesn't exist on the remote, ask what to do var currentBranch = new GitRef(Module, null, _currentBranchName, _selectedRemote.Name); _NO_TRANSLATE_Branch.Items.Add(currentBranch); _NO_TRANSLATE_Branch.SelectedItem = currentBranch; } BranchSelectedValueChanged(null, null); }
private void BindRemotesDropDown(string selectedRemoteName) { _NO_TRANSLATE_Remotes.SelectedIndexChanged -= RemotesUpdated; _NO_TRANSLATE_Remotes.TextUpdate -= RemotesUpdated; _NO_TRANSLATE_Remotes.Sorted = false; _NO_TRANSLATE_Remotes.DataSource = _gitRemoteController.Remotes; _NO_TRANSLATE_Remotes.DisplayMember = "Name"; _NO_TRANSLATE_Remotes.SelectedIndex = -1; _NO_TRANSLATE_Remotes.SelectedIndexChanged += RemotesUpdated; _NO_TRANSLATE_Remotes.TextUpdate += RemotesUpdated; if (selectedRemoteName.IsNullOrEmpty()) { selectedRemoteName = Module.GetSetting(string.Format(SettingKeyString.BranchRemote, _currentBranchName)); } _currentBranchRemote = _gitRemoteController.Remotes.FirstOrDefault(x => x.Name.Equals(selectedRemoteName, StringComparison.OrdinalIgnoreCase)); if (_currentBranchRemote != null) { _NO_TRANSLATE_Remotes.SelectedItem = _currentBranchRemote; } else if (_gitRemoteController.Remotes.Any()) { // we couldn't find the default assigned remote for the selected branch // it is usually gets mapped via FormRemotes -> "default pull behavior" tab // so pick the default user remote _NO_TRANSLATE_Remotes.SelectedIndex = 0; } else { _NO_TRANSLATE_Remotes.SelectedIndex = -1; } }
private void Remotes_SelectedIndexChanged(object sender, EventArgs e) { if (_selectedRemote == Remotes.SelectedItem) { return; } // reset all controls and disable all buttons until we have a selection New.Enabled = Delete.Enabled = false; RemoteName.Text = string.Empty; Url.Text = string.Empty; comboBoxPushUrl.Text = string.Empty; checkBoxSepPushUrl.Checked = false; PuttySshKey.Text = string.Empty; gbMgtPanel.Text = _gbMgtPanelHeaderNew.Text; _selectedRemote = Remotes.SelectedItem as GitRemote; if (_selectedRemote == null) { return; } New.Enabled = Delete.Enabled = true; RemoteName.Text = _selectedRemote.Name; Url.Text = _selectedRemote.Url; comboBoxPushUrl.Text = _selectedRemote.PushUrl; checkBoxSepPushUrl.Checked = !string.IsNullOrEmpty(_selectedRemote.PushUrl); PuttySshKey.Text = _selectedRemote.PuttySshKey; gbMgtPanel.Text = _gbMgtPanelHeaderEdit.Text; }