public void SaveRemote_null_remote_should_invoke_AddRemote_and_require_update() { const string remoteName = "a"; const string remoteUrl = "b"; const string output = "yes!"; _module.AddRemote(Arg.Any <string>(), Arg.Any <string>()).Returns(x => output); var result = _controller.SaveRemote(null, remoteName, remoteUrl, null, null); result.UserMessage.Should().Be(output); result.ShouldUpdateRemote.Should().BeTrue(); _module.Received(1).AddRemote(remoteName, remoteUrl); }
/// <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> /// 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)); }