From 0320c22679e301f43673dd41e2df3e256f047c3a Mon Sep 17 00:00:00 2001 From: David Gardiner Date: Wed, 16 Jan 2019 14:05:21 +1030 Subject: [PATCH] Add NonInteractive property to NuGetRestoreSettings - Defaults to true (preserving current behaviour as the default) - Setting to false means NuGet.exe is free to prompt for user input/confirmation (useful when run interactively and when combined with authorisation providers) Implements #2345 --- .../NuGet/Restore/NuGetRestoreSettingsTests.cs | 10 ++++++++++ .../Unit/Tools/NuGet/Restore/NuGetRestorerTests.cs | 14 ++++++++++++++ .../Tools/NuGet/Restore/NuGetRestorer.cs | 6 +++++- .../Tools/NuGet/Restore/NugetRestoreSettings.cs | 11 +++++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/Cake.Common.Tests/Unit/Tools/NuGet/Restore/NuGetRestoreSettingsTests.cs b/src/Cake.Common.Tests/Unit/Tools/NuGet/Restore/NuGetRestoreSettingsTests.cs index 0fd3bd2517..a5b817cc56 100644 --- a/src/Cake.Common.Tests/Unit/Tools/NuGet/Restore/NuGetRestoreSettingsTests.cs +++ b/src/Cake.Common.Tests/Unit/Tools/NuGet/Restore/NuGetRestoreSettingsTests.cs @@ -30,6 +30,16 @@ public void Should_Set_RequireConsent_To_False_By_Default() // Then Assert.False(settings.RequireConsent); } + + [Fact] + public void Should_Set_NonInteractive_To_True_By_Default() + { + // Given, When + var settings = new NuGetRestoreSettings(); + + // Then + Assert.True(settings.NonInteractive); + } } } } \ No newline at end of file diff --git a/src/Cake.Common.Tests/Unit/Tools/NuGet/Restore/NuGetRestorerTests.cs b/src/Cake.Common.Tests/Unit/Tools/NuGet/Restore/NuGetRestorerTests.cs index adcc87fb58..fcf0d1eb8d 100644 --- a/src/Cake.Common.Tests/Unit/Tools/NuGet/Restore/NuGetRestorerTests.cs +++ b/src/Cake.Common.Tests/Unit/Tools/NuGet/Restore/NuGetRestorerTests.cs @@ -219,6 +219,20 @@ public void Should_Add_DisableParallelProcessing_To_Arguments_If_Set() "-NonInteractive", result.Args); } + [Fact] + public void Should_Remove_NonInteractive_From_Arguments_If_False() + { + // Given + var fixture = new NuGetRestorerFixture(); + fixture.Settings.NonInteractive = false; + + // When + var result = fixture.Run(); + + // Then + Assert.Equal("restore \"/Working/project.sln\"", result.Args); + } + [Theory] [InlineData(NuGetVerbosity.Detailed, "restore \"/Working/project.sln\" -Verbosity detailed -NonInteractive")] [InlineData(NuGetVerbosity.Normal, "restore \"/Working/project.sln\" -Verbosity normal -NonInteractive")] diff --git a/src/Cake.Common/Tools/NuGet/Restore/NuGetRestorer.cs b/src/Cake.Common/Tools/NuGet/Restore/NuGetRestorer.cs index ec6710d88b..80481d56d8 100644 --- a/src/Cake.Common/Tools/NuGet/Restore/NuGetRestorer.cs +++ b/src/Cake.Common/Tools/NuGet/Restore/NuGetRestorer.cs @@ -121,7 +121,11 @@ private ProcessArgumentBuilder GetArguments(FilePath targetFilePath, NuGetRestor builder.Append(settings.MSBuildVersion.Value.GetNuGetMSBuildVersionString()); } - builder.Append("-NonInteractive"); + // NonInteractive? + if (settings.NonInteractive) + { + builder.Append("-NonInteractive"); + } return builder; } diff --git a/src/Cake.Common/Tools/NuGet/Restore/NugetRestoreSettings.cs b/src/Cake.Common/Tools/NuGet/Restore/NugetRestoreSettings.cs index 32e7928d24..8c1ab24b77 100644 --- a/src/Cake.Common/Tools/NuGet/Restore/NugetRestoreSettings.cs +++ b/src/Cake.Common/Tools/NuGet/Restore/NugetRestoreSettings.cs @@ -72,5 +72,16 @@ public sealed class NuGetRestoreSettings : ToolSettings /// /// The version of MSBuild to be used with this command. public NuGetMSBuildVersion? MSBuildVersion { get; set; } + + /// + /// Gets or sets a value indicating whether or not NuGet suppresses prompts for user input or confirmations. + /// + /// + /// This setting is passed by NuGet.exe to any extensions such as authorization providers + /// + /// + /// false to allow NuGet to show prompts for user input or confirmations; otherwise, true. + /// + public bool NonInteractive { get; set; } = true; } } \ No newline at end of file