From 622a1a6a5f4eb2e84df68112d263c8d9cad8911c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20=C5=9Amia=C5=82ek?= Date: Thu, 10 Oct 2019 22:59:52 +0200 Subject: [PATCH 1/9] Removed redundant checks --- Source/Cake.Paket.Addin/Pack/PaketPacker.cs | 6 +----- Source/Cake.Paket.Addin/Push/PaketPusher.cs | 6 +----- Source/Cake.Paket.Addin/Tooling/PaketTool.cs | 3 +-- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/Source/Cake.Paket.Addin/Pack/PaketPacker.cs b/Source/Cake.Paket.Addin/Pack/PaketPacker.cs index 34ed276..308490c 100644 --- a/Source/Cake.Paket.Addin/Pack/PaketPacker.cs +++ b/Source/Cake.Paket.Addin/Pack/PaketPacker.cs @@ -54,11 +54,7 @@ private ProcessArgumentBuilder GetArguments(DirectoryPath output, PaketPackSetti // output // output is the default argument - var outputDirectory = output.MakeAbsolute(Environment).FullPath; - if (!string.IsNullOrWhiteSpace(outputDirectory)) - { - builder.AppendQuoted(output.MakeAbsolute(Environment).FullPath); - } + builder.AppendQuoted(output.MakeAbsolute(Environment).FullPath); // buildconfig if (!string.IsNullOrWhiteSpace(settings.BuildConfig)) diff --git a/Source/Cake.Paket.Addin/Push/PaketPusher.cs b/Source/Cake.Paket.Addin/Push/PaketPusher.cs index 84b5ae4..56cbac2 100644 --- a/Source/Cake.Paket.Addin/Push/PaketPusher.cs +++ b/Source/Cake.Paket.Addin/Push/PaketPusher.cs @@ -54,11 +54,7 @@ private ProcessArgumentBuilder GetArguments(FilePath filePath, PaketPushSettings // file // file is the default argument - var targetPackage = filePath.MakeAbsolute(Environment).FullPath; - if (!string.IsNullOrWhiteSpace(targetPackage)) - { - builder.AppendQuoted(targetPackage); - } + builder.AppendQuoted(filePath.MakeAbsolute(Environment).FullPath); // url if (!string.IsNullOrWhiteSpace(settings.Url)) diff --git a/Source/Cake.Paket.Addin/Tooling/PaketTool.cs b/Source/Cake.Paket.Addin/Tooling/PaketTool.cs index beb6f22..9b9ff24 100644 --- a/Source/Cake.Paket.Addin/Tooling/PaketTool.cs +++ b/Source/Cake.Paket.Addin/Tooling/PaketTool.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using Cake.Core; using Cake.Core.IO; using Cake.Core.Tooling; @@ -61,7 +60,7 @@ protected sealed override IEnumerable GetToolExecutableNames() protected sealed override IEnumerable GetAlternativeToolPaths(TSettings settings) { var path = Resolver.ResolvePath(); - return path != null ? new[] { path } : Enumerable.Empty(); + return new[] { path }; } } } From d720824b76df4270983ae1bcaf28b1985680fe7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20=C5=9Amia=C5=82ek?= Date: Mon, 14 Oct 2019 20:33:37 +0200 Subject: [PATCH 2/9] Updated Paket.Restore.targets --- .paket/Paket.Restore.targets | 98 ++++++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 39 deletions(-) diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets index aed3c3f..a795558 100644 --- a/.paket/Paket.Restore.targets +++ b/.paket/Paket.Restore.targets @@ -7,7 +7,7 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) $(MSBuildVersion) - 15.0.0 + 15.0.0 false true @@ -27,44 +27,13 @@ $(PaketRootPath)paket.bootstrapper.exe $(PaketToolsPath)paket.bootstrapper.exe $([System.IO.Path]::GetDirectoryName("$(PaketBootStrapperExePath)"))\ - - - - - $(PaketRootPath)paket.exe - $(PaketToolsPath)paket.exe - $(PaketToolsPath)paket.exe - $(_PaketBootStrapperExeDir)paket.exe - paket.exe - - - $(PaketRootPath)paket - $(PaketToolsPath)paket - $(PaketToolsPath)paket - - - $(PaketRootPath)paket.exe - $(PaketToolsPath)paket.exe - - - $(PaketBootStrapperExeDir)paket.exe - - - paket - - - <_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)")) - dotnet "$(PaketExePath)" - $(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)" - "$(PaketExePath)" - - + "$(PaketBootStrapperExePath)" $(MonoPath) --runtime=v4.0.30319 "$(PaketBootStrapperExePath)" - + true true @@ -74,6 +43,57 @@ $(BaseIntermediateOutputPath.TrimEnd('\').TrimEnd('\/')) + + + + + + + + + + + dotnet paket + + + + + + $(PaketRootPath)paket.exe + $(PaketToolsPath)paket.exe + $(PaketToolsPath)paket.exe + $(_PaketBootStrapperExeDir)paket.exe + paket.exe + + + $(PaketRootPath)paket + $(PaketToolsPath)paket + $(PaketToolsPath)paket + + + $(PaketRootPath)paket.exe + $(PaketToolsPath)paket.exe + + + $(PaketBootStrapperExeDir)paket.exe + + + paket + + <_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)")) + dotnet "$(PaketExePath)" + $(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)" + "$(PaketExePath)" + + + + + + + + + + @@ -81,7 +101,7 @@ - + @@ -203,7 +223,7 @@ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0]) $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1]) $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[4]) - $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[5]) + $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[5]) %(PaketReferencesFileLinesInfo.PackageVersion) @@ -246,7 +266,7 @@ - + <_NuspecFilesNewLocation Include="$(PaketIntermediateOutputPath)\$(Configuration)\*.nuspec"/> @@ -300,7 +320,7 @@ DevelopmentDependency="$(DevelopmentDependency)" BuildOutputInPackage="@(_BuildOutputInPackage)" TargetPathsToSymbols="@(_TargetPathsToSymbols)" - SymbolPackageFormat="symbols.nupkg" + SymbolPackageFormat="$(SymbolPackageFormat)" TargetFrameworks="@(_TargetFrameworks)" AssemblyName="$(AssemblyName)" PackageOutputPath="$(PackageOutputAbsolutePath)" @@ -347,7 +367,7 @@ DevelopmentDependency="$(DevelopmentDependency)" BuildOutputInPackage="@(_BuildOutputInPackage)" TargetPathsToSymbols="@(_TargetPathsToSymbols)" - SymbolPackageFormat="symbols.nupkg" + SymbolPackageFormat="$(SymbolPackageFormat)" TargetFrameworks="@(_TargetFrameworks)" AssemblyName="$(AssemblyName)" PackageOutputPath="$(PackageOutputAbsolutePath)" From 6c604966062387c2e3598c908c607819ee721db7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20=C5=9Amia=C5=82ek?= Date: Mon, 14 Oct 2019 20:36:54 +0200 Subject: [PATCH 3/9] Added Pack interproject-references argument --- .../Pack/PaketInterprojectReferences.cs | 23 +++++++++++++ .../Pack/PaketPackSettings.cs | 7 +++- .../Pack/PaketPackSettingsExtensions.cs | 28 ++++++++++++++++ Source/Cake.Paket.Addin/Pack/PaketPacker.cs | 26 +++++++++++++++ .../Cake.Paket.Addin/Pack/PaketPackerTests.cs | 33 +++++++++++++++++++ 5 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 Source/Cake.Paket.Addin/Pack/PaketInterprojectReferences.cs create mode 100644 Source/Cake.Paket.Addin/Pack/PaketPackSettingsExtensions.cs diff --git a/Source/Cake.Paket.Addin/Pack/PaketInterprojectReferences.cs b/Source/Cake.Paket.Addin/Pack/PaketInterprojectReferences.cs new file mode 100644 index 0000000..a80c54f --- /dev/null +++ b/Source/Cake.Paket.Addin/Pack/PaketInterprojectReferences.cs @@ -0,0 +1,23 @@ +namespace Cake.Paket.Addin.Pack +{ + /// + /// Referenced project versions constraint used when overriding paket.template constraints. + /// + public enum PaketInterprojectReferences + { + /// Version constraint like: 1.2.3 + Min, + + /// Version constraint like: [1.2.3] + Fix, + + /// Version constraint like: [1.2.3,2.0.0) + KeepMajor, + + /// Version constraint like: [1.2.3,1.3.0) + KeepMinor, + + /// Version constraint like: [1.2.3,1.2.4) + KeepPatch, + } +} diff --git a/Source/Cake.Paket.Addin/Pack/PaketPackSettings.cs b/Source/Cake.Paket.Addin/Pack/PaketPackSettings.cs index 70a5b51..8bdfb80 100644 --- a/Source/Cake.Paket.Addin/Pack/PaketPackSettings.cs +++ b/Source/Cake.Paket.Addin/Pack/PaketPackSettings.cs @@ -28,6 +28,11 @@ public sealed class PaketPackSettings : ToolSettings /// public bool IncludeReferencedProjects { get; set; } + /// + /// Gets or sets the constraints for referenced project versions. + /// + public PaketInterprojectReferences? InterprojectReferences { get; set; } + /// /// Gets or sets a value indicating whether to enable lock-dependencies. /// @@ -73,4 +78,4 @@ public sealed class PaketPackSettings : ToolSettings /// public string Version { get; set; } } -} \ No newline at end of file +} diff --git a/Source/Cake.Paket.Addin/Pack/PaketPackSettingsExtensions.cs b/Source/Cake.Paket.Addin/Pack/PaketPackSettingsExtensions.cs new file mode 100644 index 0000000..a902893 --- /dev/null +++ b/Source/Cake.Paket.Addin/Pack/PaketPackSettingsExtensions.cs @@ -0,0 +1,28 @@ +using System; + +namespace Cake.Paket.Addin.Pack +{ + /// + /// Contains functionality related to . See Paket Pack for more details. + /// + public static class PaketPackSettingsExtensions + { + /// + /// Excludes paket.template file by package ID; may be repeated. + /// + /// The settings. + /// The excluded package ID. + /// The same instance so that multiple calls can be chained. + public static PaketPackSettings Exclude(this PaketPackSettings settings, string packageId) + { + if (settings == null) + { + throw new ArgumentNullException(nameof(settings)); + } + + settings.Exclusions.Add(packageId); + return settings; + } + } +} diff --git a/Source/Cake.Paket.Addin/Pack/PaketPacker.cs b/Source/Cake.Paket.Addin/Pack/PaketPacker.cs index 308490c..bb0f87a 100644 --- a/Source/Cake.Paket.Addin/Pack/PaketPacker.cs +++ b/Source/Cake.Paket.Addin/Pack/PaketPacker.cs @@ -142,7 +142,33 @@ private ProcessArgumentBuilder GetArguments(DirectoryPath output, PaketPackSetti builder.AppendQuoted(settings.ProjectUrl); } + if (settings.InterprojectReferences != null) + { + builder.Append("--interproject-references"); + builder.Append( + GetInterprojectReferencesName((PaketInterprojectReferences)settings.InterprojectReferences)); + } + return builder; } + + private string GetInterprojectReferencesName(PaketInterprojectReferences references) + { + switch (references) + { + case PaketInterprojectReferences.Min: + return "min"; + case PaketInterprojectReferences.Fix: + return "fix"; + case PaketInterprojectReferences.KeepMajor: + return "keep-major"; + case PaketInterprojectReferences.KeepMinor: + return "keep-minor"; + case PaketInterprojectReferences.KeepPatch: + return "keep-patch"; + default: + throw new ArgumentOutOfRangeException(nameof(references), references, null); + } + } } } diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs index 765c93f..48db6bb 100644 --- a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs @@ -1,5 +1,6 @@ using System; using Cake.Core; +using Cake.Paket.Addin.Pack; using Cake.Testing; using FluentAssertions; using Xunit; @@ -193,6 +194,38 @@ public void Should_Set_Version() result.Args.Should().Be(@"pack ""/Working/NuGet"" --version ""1.0.0"""); } + [Theory] + [InlineData(PaketInterprojectReferences.Min, "min")] + [InlineData(PaketInterprojectReferences.Fix, "fix")] + [InlineData(PaketInterprojectReferences.KeepMajor, "keep-major")] + [InlineData(PaketInterprojectReferences.KeepMinor, "keep-minor")] + [InlineData(PaketInterprojectReferences.KeepPatch, "keep-patch")] + public void Should_Set_InterprojectReferences(PaketInterprojectReferences referenceConstraint, string expected) + { + // Given + var fixture = new PaketPackerFixture { Settings = { InterprojectReferences = referenceConstraint } }; + + // When + var result = fixture.Run(); + + // Then + result.Args.Should().Be($@"pack ""/Working/NuGet"" --interproject-references {expected}"); + } + + [Fact] + public void Should_Throw_If_InterprojectReferences_Was_Out_Of_Range() + { + // Given + var fixture = new PaketPackerFixture + { Settings = { InterprojectReferences = (PaketInterprojectReferences)int.MaxValue } }; + + // When + Action result = () => fixture.Run(); + + // Then + result.ShouldThrow(); + } + [Fact] public void Should_Set_WorkingDirectory() { From 1b21b31a0ff52c626fed5f4cf0cfba1d1429318c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20=C5=9Amia=C5=82ek?= Date: Wed, 16 Oct 2019 21:11:37 +0200 Subject: [PATCH 4/9] Breaking: Support multiple Pack exclusions This breaks the old settings.Exclude = "package ID" behavior. Use settings.Exclude("package ID") now, even multiple times. --- .../Pack/PaketPackSettings.cs | 11 +++--- .../Pack/PaketPackSettingsExtensions.cs | 18 ++++++++++ Source/Cake.Paket.Addin/Pack/PaketPacker.cs | 4 +-- .../Cake.Paket.Addin/Pack/PaketPackerTests.cs | 35 +++++++++++++++++-- 4 files changed, 59 insertions(+), 9 deletions(-) diff --git a/Source/Cake.Paket.Addin/Pack/PaketPackSettings.cs b/Source/Cake.Paket.Addin/Pack/PaketPackSettings.cs index 8bdfb80..80b9a5f 100644 --- a/Source/Cake.Paket.Addin/Pack/PaketPackSettings.cs +++ b/Source/Cake.Paket.Addin/Pack/PaketPackSettings.cs @@ -1,4 +1,5 @@ -using Cake.Core.Tooling; +using System.Collections.Generic; +using Cake.Core.Tooling; namespace Cake.Paket.Addin.Pack { @@ -19,9 +20,9 @@ public sealed class PaketPackSettings : ToolSettings public string BuildPlatform { get; set; } /// - /// Gets or sets the exclude. + /// Gets the exclusions list. /// - public string Exclude { get; set; } + public List Exclusions { get; } = new List(); /// /// Gets or sets a value indicating whether to enable include-referenced-projects. @@ -59,9 +60,9 @@ public sealed class PaketPackSettings : ToolSettings public string ReleaseNotes { get; set; } /// - /// Gets or sets the specific-version. + /// Gets the specific-version list. /// - public string SpecificVersion { get; set; } + public List SpecificVersions { get; } = new List(); /// /// Gets or sets a value indicating whether to enable symbols. diff --git a/Source/Cake.Paket.Addin/Pack/PaketPackSettingsExtensions.cs b/Source/Cake.Paket.Addin/Pack/PaketPackSettingsExtensions.cs index a902893..3226f7d 100644 --- a/Source/Cake.Paket.Addin/Pack/PaketPackSettingsExtensions.cs +++ b/Source/Cake.Paket.Addin/Pack/PaketPackSettingsExtensions.cs @@ -24,5 +24,23 @@ public static PaketPackSettings Exclude(this PaketPackSettings settings, string settings.Exclusions.Add(packageId); return settings; } + + /// + /// Pins the version of the package with given ID. + /// + /// The settings. + /// The ID of package to pin the version. + /// The requested package version. + /// The same instance so that multiple calls can be chained. + public static PaketPackSettings SpecificVersion(this PaketPackSettings settings, string packageId, string version) + { + if (settings == null) + { + throw new ArgumentNullException(nameof(settings)); + } + + settings.SpecificVersions.Add(new PaketSpecificVersion(packageId, version)); + return settings; + } } } diff --git a/Source/Cake.Paket.Addin/Pack/PaketPacker.cs b/Source/Cake.Paket.Addin/Pack/PaketPacker.cs index bb0f87a..609ab83 100644 --- a/Source/Cake.Paket.Addin/Pack/PaketPacker.cs +++ b/Source/Cake.Paket.Addin/Pack/PaketPacker.cs @@ -85,10 +85,10 @@ private ProcessArgumentBuilder GetArguments(DirectoryPath output, PaketPackSetti } // exclude - if (!string.IsNullOrWhiteSpace(settings.Exclude)) + foreach (string exclusion in settings.Exclusions) { builder.Append("--exclude"); - builder.AppendQuoted(settings.Exclude); + builder.AppendQuoted(exclusion); } // specific-version diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs index 48db6bb..92c08e9 100644 --- a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs @@ -120,13 +120,31 @@ public void Should_Set_BuildPlatform() public void Should_Set_Exclude() { // Given - var fixture = new PaketPackerFixture { Settings = { Exclude = "Cake.Foo" } }; + var settings = new PaketPackSettings(); + settings.Exclusions.Add("Cake.Foo"); + settings.Exclusions.Add("Cake.Bar"); + var fixture = new PaketPackerFixture { Settings = settings }; // When var result = fixture.Run(); // Then - result.Args.Should().Be(@"pack ""/Working/NuGet"" --exclude ""Cake.Foo"""); + result.Args.Should().Be(@"pack ""/Working/NuGet"" --exclude ""Cake.Foo"" --exclude ""Cake.Bar"""); + } + + [Fact] + public void Should_Set_Exclude_With_Builder() + { + // Given + var settings = new PaketPackSettings(); + settings.Exclude("Cake.Foo").Exclude("Cake.Bar"); + var fixture = new PaketPackerFixture { Settings = settings }; + + // When + var result = fixture.Run(); + + // Then + result.Args.Should().Be(@"pack ""/Working/NuGet"" --exclude ""Cake.Foo"" --exclude ""Cake.Bar"""); } [Fact] @@ -320,6 +338,19 @@ public void Should_Throw_If_Settings_Are_Null() result.ShouldThrow().And.ParamName.Should().Be("settings"); } + [Fact] + public void Should_Throw_If_Settings_For_Exclusion_Are_Null() + { + // Given + PaketPackSettings settings = null; + + // When + Action result = () => settings.Exclude("id"); + + // Then + result.ShouldThrow().And.ParamName.Should().Be("settings"); + } + [Theory] [InlineData("/bin/tools/.paket/paket.exe", "/bin/tools/.paket/paket.exe")] [InlineData("./.paket/paket.exe", "/Working/.paket/paket.exe")] From 9d208a32fcf5e7960a76601b5df0c855091638fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20=C5=9Amia=C5=82ek?= Date: Sat, 19 Oct 2019 19:36:39 +0200 Subject: [PATCH 5/9] Added Pack specific-version argument --- Source/Cake.Paket.Addin/Pack/PaketPacker.cs | 5 ++-- .../Pack/PaketSpecificVersion.cs | 25 +++++++++++++++++++ .../Cake.Paket.Addin/Pack/PaketPackerTests.cs | 21 ++++++++++++++-- 3 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 Source/Cake.Paket.Addin/Pack/PaketSpecificVersion.cs diff --git a/Source/Cake.Paket.Addin/Pack/PaketPacker.cs b/Source/Cake.Paket.Addin/Pack/PaketPacker.cs index 609ab83..d93c1ad 100644 --- a/Source/Cake.Paket.Addin/Pack/PaketPacker.cs +++ b/Source/Cake.Paket.Addin/Pack/PaketPacker.cs @@ -92,10 +92,11 @@ private ProcessArgumentBuilder GetArguments(DirectoryPath output, PaketPackSetti } // specific-version - if (!string.IsNullOrWhiteSpace(settings.SpecificVersion)) + foreach (PaketSpecificVersion version in settings.SpecificVersions) { builder.Append("--specific-version"); - builder.AppendQuoted(settings.SpecificVersion); + builder.AppendQuoted(version.PackageId); + builder.AppendQuoted(version.Version); } // ReleaseNotes diff --git a/Source/Cake.Paket.Addin/Pack/PaketSpecificVersion.cs b/Source/Cake.Paket.Addin/Pack/PaketSpecificVersion.cs new file mode 100644 index 0000000..210881f --- /dev/null +++ b/Source/Cake.Paket.Addin/Pack/PaketSpecificVersion.cs @@ -0,0 +1,25 @@ +namespace Cake.Paket.Addin.Pack +{ + /// + /// Version number to use for package ID. + /// + public struct PaketSpecificVersion + { + /// + /// Initializes a new instance of the struct. + /// + /// Package ID. + /// Package version. + public PaketSpecificVersion(string packageId, string version) + { + PackageId = packageId; + Version = version; + } + + /// Gets the Package ID. + public string PackageId { get; } + + /// Gets the Package version. + public string Version { get; } + } +} diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs index 92c08e9..a3f8de9 100644 --- a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs @@ -177,13 +177,17 @@ public void Should_Set_ReleaseNotes() public void Should_Set_SpecificVersion() { // Given - var fixture = new PaketPackerFixture { Settings = { SpecificVersion = "Cake.Foo 0.0.0" } }; + var settings = new PaketPackSettings(); + settings + .SpecificVersion("Cake.Foo", "0.0.1") + .SpecificVersion("Cake.Bar", "0.0.2"); + var fixture = new PaketPackerFixture { Settings = settings }; // When var result = fixture.Run(); // Then - result.Args.Should().Be(@"pack ""/Working/NuGet"" --specific-version ""Cake.Foo 0.0.0"""); + result.Args.Should().Be(@"pack ""/Working/NuGet"" --specific-version ""Cake.Foo"" ""0.0.1"" --specific-version ""Cake.Bar"" ""0.0.2"""); } [Fact] @@ -351,6 +355,19 @@ public void Should_Throw_If_Settings_For_Exclusion_Are_Null() result.ShouldThrow().And.ParamName.Should().Be("settings"); } + [Fact] + public void Should_Throw_If_Settings_For_SpecificVersion_Are_Null() + { + // Given + PaketPackSettings settings = null; + + // When + Action result = () => settings.SpecificVersion("id", "0.0.1"); + + // Then + result.ShouldThrow().And.ParamName.Should().Be("settings"); + } + [Theory] [InlineData("/bin/tools/.paket/paket.exe", "/bin/tools/.paket/paket.exe")] [InlineData("./.paket/paket.exe", "/Working/.paket/paket.exe")] From d1e978231acbf90a6a1d1c17e3f3e362009463d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20=C5=9Amia=C5=82ek?= Date: Sat, 19 Oct 2019 20:30:16 +0200 Subject: [PATCH 6/9] Cleaned up tests --- .gitignore | 1 + .../Cake.Paket.Addin/Pack/PaketPackerFixture.cs | 2 +- .../Cake.Paket.Addin/Pack/PaketPackerTests.cs | 2 +- .../Cake.Paket.Addin/Push/PaketPusherFixture.cs | 2 +- .../Cake.Paket.Addin/Push/PaketPusherTests.cs | 2 +- .../Cake.Paket.Module/PaketPackageInstallerTests.cs | 2 +- Source/Cake.Paket.UnitTests/Cake.Paket.UnitTests.csproj | 8 ++++++++ 7 files changed, 14 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index e7754c1..6aad8fa 100644 --- a/.gitignore +++ b/.gitignore @@ -84,3 +84,4 @@ nuspec/** # Auto-generated XML documentation Source/Cake.Paket.Addin/Cake.Paket.Addin.xml Source/Cake.Paket.Module/Cake.Paket.Module.xml +Source/Cake.Paket.UnitTests/Cake.Paket.UnitTests.xml diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerFixture.cs b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerFixture.cs index 5211830..c87919c 100644 --- a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerFixture.cs +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerFixture.cs @@ -29,7 +29,7 @@ internal PaketPackerFixture() private ICakeArguments FakeArguments { get; } /// - /// Runs PaketPacker tool + /// Runs PaketPacker tool. /// protected override void RunTool() { diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs index a3f8de9..a1634b5 100644 --- a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Pack/PaketPackerTests.cs @@ -8,7 +8,7 @@ namespace Cake.Paket.UnitTests.Cake.Paket.Addin.Pack { /// - /// PaketPacker unit tests + /// PaketPacker unit tests. /// public sealed class PaketPackerTests { diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Push/PaketPusherFixture.cs b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Push/PaketPusherFixture.cs index 969b991..03942bf 100644 --- a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Push/PaketPusherFixture.cs +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Push/PaketPusherFixture.cs @@ -29,7 +29,7 @@ internal PaketPusherFixture() private ICakeArguments FakeArguments { get; } /// - /// Runs PaketPusher tool + /// Runs PaketPusher tool. /// protected override void RunTool() { diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Push/PaketPusherTests.cs b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Push/PaketPusherTests.cs index 82a639e..11be471 100644 --- a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Push/PaketPusherTests.cs +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Push/PaketPusherTests.cs @@ -7,7 +7,7 @@ namespace Cake.Paket.UnitTests.Cake.Paket.Addin.Push { /// - /// PaketPusher unit tests + /// PaketPusher unit tests. /// public sealed class PaketPusherTests { diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.Module/PaketPackageInstallerTests.cs b/Source/Cake.Paket.UnitTests/Cake.Paket.Module/PaketPackageInstallerTests.cs index 704d49f..68d0ed9 100644 --- a/Source/Cake.Paket.UnitTests/Cake.Paket.Module/PaketPackageInstallerTests.cs +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.Module/PaketPackageInstallerTests.cs @@ -6,7 +6,7 @@ namespace Cake.Paket.UnitTests.Cake.Paket.Module { /// - /// PaketPackageInstaller unit tests + /// PaketPackageInstaller unit tests. /// public sealed class PaketPackageInstallerTests { diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.UnitTests.csproj b/Source/Cake.Paket.UnitTests/Cake.Paket.UnitTests.csproj index c5f0e93..3649a67 100644 --- a/Source/Cake.Paket.UnitTests/Cake.Paket.UnitTests.csproj +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.UnitTests.csproj @@ -5,6 +5,14 @@ false Full false + $(OutputPath)$(AssemblyName).xml + + $(NoWarn),1573,1591,1712,SA1600 ..\Cake.Paket.ruleset From b7a5c9b28d56a0572d6ab67fc53938094ade5346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20=C5=9Amia=C5=82ek?= Date: Mon, 21 Oct 2019 19:23:48 +0200 Subject: [PATCH 7/9] Updated solution + added solution-wide files --- Source/Cake.Paket.sln | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Source/Cake.Paket.sln b/Source/Cake.Paket.sln index 477de7c..cae345a 100644 --- a/Source/Cake.Paket.sln +++ b/Source/Cake.Paket.sln @@ -3,11 +3,16 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29123.88 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cake.Paket.Module", "Cake.Paket.Module\Cake.Paket.Module.csproj", "{697766FE-5C62-454A-AC87-E52A041B9DB7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cake.Paket.Module", "Cake.Paket.Module\Cake.Paket.Module.csproj", "{697766FE-5C62-454A-AC87-E52A041B9DB7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cake.Paket.Addin", "Cake.Paket.Addin\Cake.Paket.Addin.csproj", "{C2116574-387C-4EAD-A288-569CC34EE6C0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cake.Paket.Addin", "Cake.Paket.Addin\Cake.Paket.Addin.csproj", "{C2116574-387C-4EAD-A288-569CC34EE6C0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cake.Paket.UnitTests", "Cake.Paket.UnitTests\Cake.Paket.UnitTests.csproj", "{2390A26D-7600-4CBA-864D-E32948F26A40}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cake.Paket.UnitTests", "Cake.Paket.UnitTests\Cake.Paket.UnitTests.csproj", "{2390A26D-7600-4CBA-864D-E32948F26A40}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".solution", ".solution", "{12BB683E-3999-4DD4-B5AF-2F59EE48FE83}" + ProjectSection(SolutionItems) = preProject + Cake.Paket.ruleset = Cake.Paket.ruleset + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -31,4 +36,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {15E7CE04-D312-4633-999E-6FCA2B9C6087} + EndGlobalSection EndGlobal From 6a41c0142d2b501d612b0c3a521041633cd7e580 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20=C5=9Amia=C5=82ek?= Date: Mon, 21 Oct 2019 19:24:22 +0200 Subject: [PATCH 8/9] Added Restore tests --- .../Restore/PaketRestorerFixture.cs | 38 +++++ .../Restore/PaketRestorerTests.cs | 135 ++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerFixture.cs create mode 100644 Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerTests.cs diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerFixture.cs b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerFixture.cs new file mode 100644 index 0000000..137fe2b --- /dev/null +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerFixture.cs @@ -0,0 +1,38 @@ +using Cake.Core; +using Cake.Core.IO; +using Cake.Paket.Addin.Restore; +using Cake.Paket.Addin.Tooling; +using Cake.Testing; +using Cake.Testing.Fixtures; +using NSubstitute; + +namespace Cake.Paket.UnitTests.Cake.Paket.Addin.Restore +{ + /// + /// Mock of PaketRestorer class. + /// + internal class PaketRestorerFixture : ToolFixture + { + /// + /// Initializes a new instance of the class with the directory output = NuGet. + /// + internal PaketRestorerFixture() + : base("paket.exe") + { + FakeDirectory fakeDirectory = FileSystem.CreateDirectory("NuGet"); + FakeArguments = Substitute.For(); + } + + private ICakeArguments FakeArguments { get; } + + /// + /// Runs PaketPacker tool. + /// + protected override void RunTool() + { + var resolver = new PaketToolResolver(FileSystem, Environment, Tools, ProcessRunner, FakeArguments, new FakeLog()); + var restorer = new PaketRestorer(FileSystem, Environment, Tools, ProcessRunner, resolver); + restorer.Restore(Settings); + } + } +} diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerTests.cs b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerTests.cs new file mode 100644 index 0000000..8c7ee52 --- /dev/null +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerTests.cs @@ -0,0 +1,135 @@ +using System; +using Cake.Core; +using Cake.Paket.Addin.Restore; +using Cake.Testing; +using FluentAssertions; +using Xunit; + +namespace Cake.Paket.UnitTests.Cake.Paket.Addin.Restore +{ + /// + /// PaketRestorer unit tests. + /// + public sealed class PaketRestorerTests + { + [Fact] + public void Should_Add_Force() + { + // Given + var fixture = new PaketRestorerFixture { Settings = { Force = true } }; + + // When + var result = fixture.Run(); + + // Then + result.Args.Should().Be(@"restore --force"); + } + + [Fact] + public void Should_Add_OnlyReferenced() + { + // Given + var fixture = new PaketRestorerFixture { Settings = { OnlyReferenced = true } }; + + // When + var result = fixture.Run(); + + // Then + result.Args.Should().Be(@"restore --only-referenced"); + } + + [Fact] + public void Should_Add_TouchAffectedRefs() + { + // Given + var fixture = new PaketRestorerFixture { Settings = { TouchAffectedRefs = true } }; + + // When + var result = fixture.Run(); + + // Then + result.Args.Should().Be(@"restore --touch-affected-refs"); + } + + [Fact] + public void Should_Add_IgnoreChecks() + { + // Given + var fixture = new PaketRestorerFixture { Settings = { IgnoreChecks = true } }; + + // When + var result = fixture.Run(); + + // Then + result.Args.Should().Be(@"restore --ignore-checks"); + } + + [Fact] + public void Should_Add_FailOnChecks() + { + // Given + var fixture = new PaketRestorerFixture { Settings = { FailOnChecks = true } }; + + // When + var result = fixture.Run(); + + // Then + result.Args.Should().Be(@"restore --fail-on-checks"); + } + + [Fact] + public void Should_Set_Group() + { + // Given + var fixture = new PaketRestorerFixture { Settings = { Group = "BuildGroup" } }; + + // When + var result = fixture.Run(); + + // Then + result.Args.Should().Be(@"restore --group ""BuildGroup"""); + } + + [Fact] + public void Should_Set_Project() + { + // Given + var fixture = new PaketRestorerFixture { Settings = { Project = "ProjectName" } }; + + // When + var result = fixture.Run(); + + // Then + result.Args.Should().Be(@"restore --project ""ProjectName"""); + } + + [Fact] + public void Should_Throw_If_Settings_Are_Null() + { + // Given + var fixture = new PaketRestorerFixture { Settings = null }; + + // When + Action result = () => fixture.Run(); + + // Then + result.ShouldThrow().And.ParamName.Should().Be("settings"); + } + + [Theory] + [InlineData("/bin/tools/.paket/paket.exe", "/bin/tools/.paket/paket.exe")] + [InlineData("./.paket/paket.exe", "/Working/.paket/paket.exe")] + public void Should_Use_Paket_Executable_From_Tool_Path_If_Provided(string toolPath, string expected) + { + // Given + var fixture = new PaketRestorerFixture { Settings = { ToolPath = toolPath } }; + fixture.GivenSettingsToolPathExist(); + + // When + var result = fixture.Run(); + + // Then + result.Path.FullPath.Should().Be(expected); + } + } +} From 5f1a5b0bd7848ae0a5934e504354870c1decfa60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20=C5=9Amia=C5=82ek?= Date: Mon, 21 Oct 2019 19:24:49 +0200 Subject: [PATCH 9/9] Added missing Restore arguments --- .../Restore/PaketRestoreSettings.cs | 9 +++--- .../Restore/PaketRestoreSettingsExtensions.cs | 28 +++++++++++++++++++ .../Cake.Paket.Addin/Restore/PaketRestorer.cs | 6 ++-- .../Restore/PaketRestorerTests.cs | 28 +++++++++++++++++++ 4 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 Source/Cake.Paket.Addin/Restore/PaketRestoreSettingsExtensions.cs diff --git a/Source/Cake.Paket.Addin/Restore/PaketRestoreSettings.cs b/Source/Cake.Paket.Addin/Restore/PaketRestoreSettings.cs index 7fd825f..e5082c2 100644 --- a/Source/Cake.Paket.Addin/Restore/PaketRestoreSettings.cs +++ b/Source/Cake.Paket.Addin/Restore/PaketRestoreSettings.cs @@ -1,4 +1,5 @@ -using Cake.Core.Tooling; +using System.Collections.Generic; +using Cake.Core.Tooling; namespace Cake.Paket.Addin.Restore { @@ -41,9 +42,9 @@ public sealed class PaketRestoreSettings : ToolSettings public string Project { get; set; } /// - /// Gets or sets value to restore all packages from the given paket.references files. + /// Gets the list of paket.references files paths to restore packages from. /// - public string ReferencesFiles { get; set; } + public List ReferencesFiles { get; } = new List(); /// /// Gets or sets a value indicating whether to touch project files referencing packages which @@ -51,4 +52,4 @@ public sealed class PaketRestoreSettings : ToolSettings /// public bool TouchAffectedRefs { get; set; } } -} \ No newline at end of file +} diff --git a/Source/Cake.Paket.Addin/Restore/PaketRestoreSettingsExtensions.cs b/Source/Cake.Paket.Addin/Restore/PaketRestoreSettingsExtensions.cs new file mode 100644 index 0000000..a638525 --- /dev/null +++ b/Source/Cake.Paket.Addin/Restore/PaketRestoreSettingsExtensions.cs @@ -0,0 +1,28 @@ +using System; + +namespace Cake.Paket.Addin.Restore +{ + /// + /// Contains functionality related to . See Paket Restore for more details. + /// + public static class PaketRestoreSettingsExtensions + { + /// + /// Restore packages from a paket.references file; may be repeated. + /// + /// The settings. + /// The path of paket.references file, from which to restore files. + /// The same instance so that multiple calls can be chained. + public static PaketRestoreSettings WithReferencesFile(this PaketRestoreSettings settings, string path) + { + if (settings == null) + { + throw new ArgumentNullException(nameof(settings)); + } + + settings.ReferencesFiles.Add(path); + return settings; + } + } +} diff --git a/Source/Cake.Paket.Addin/Restore/PaketRestorer.cs b/Source/Cake.Paket.Addin/Restore/PaketRestorer.cs index 1d39444..2f9dbff 100644 --- a/Source/Cake.Paket.Addin/Restore/PaketRestorer.cs +++ b/Source/Cake.Paket.Addin/Restore/PaketRestorer.cs @@ -88,10 +88,10 @@ private ProcessArgumentBuilder GetArguments(PaketRestoreSettings settings) } // references-files - if (!string.IsNullOrWhiteSpace(settings.ReferencesFiles)) + foreach (string path in settings.ReferencesFiles) { - builder.Append("--references-files"); - builder.AppendQuoted(settings.ReferencesFiles); + builder.Append("--references-file"); + builder.AppendQuoted(path); } return builder; diff --git a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerTests.cs b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerTests.cs index 8c7ee52..0b71e92 100644 --- a/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerTests.cs +++ b/Source/Cake.Paket.UnitTests/Cake.Paket.Addin/Restore/PaketRestorerTests.cs @@ -103,6 +103,21 @@ public void Should_Set_Project() result.Args.Should().Be(@"restore --project ""ProjectName"""); } + [Fact] + public void Should_Set_ReferencesFiles() + { + // Given + var settings = new PaketRestoreSettings(); + settings.WithReferencesFile("path1/paket.references").WithReferencesFile("path2/paket.references"); + var fixture = new PaketRestorerFixture { Settings = settings }; + + // When + var result = fixture.Run(); + + // Then + result.Args.Should().Be(@"restore --references-file ""path1/paket.references"" --references-file ""path2/paket.references"""); + } + [Fact] public void Should_Throw_If_Settings_Are_Null() { @@ -116,6 +131,19 @@ public void Should_Throw_If_Settings_Are_Null() result.ShouldThrow().And.ParamName.Should().Be("settings"); } + [Fact] + public void Should_Throw_If_Settings_For_ReferencesFile_Are_Null() + { + // Given + PaketRestoreSettings settings = null; + + // When + Action result = () => settings.WithReferencesFile("path/paket.template"); + + // Then + result.ShouldThrow().And.ParamName.Should().Be("settings"); + } + [Theory] [InlineData("/bin/tools/.paket/paket.exe", "/bin/tools/.paket/paket.exe")] [InlineData("./.paket/paket.exe", "/Working/.paket/paket.exe")]