From 97445355c3371b9c1c7d96d59eb418dc503cd37b Mon Sep 17 00:00:00 2001 From: Matthieu MEZIL Date: Mon, 10 Oct 2022 14:03:53 -0700 Subject: [PATCH] DestinationFolder should trim pathes like it's done with Include. --- src/Artifacts.UnitTests/ArtifactsTests.cs | 55 +++++++++++++++++++++++ src/Artifacts/Tasks/RobocopyMetadata.cs | 3 +- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/Artifacts.UnitTests/ArtifactsTests.cs b/src/Artifacts.UnitTests/ArtifactsTests.cs index 727b43c7..5c9405e5 100644 --- a/src/Artifacts.UnitTests/ArtifactsTests.cs +++ b/src/Artifacts.UnitTests/ArtifactsTests.cs @@ -6,6 +6,7 @@ using Microsoft.Build.UnitTests.Common; using Microsoft.Build.Utilities.ProjectCreation; using Shouldly; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -139,6 +140,60 @@ public void DefaultArtifactsUseOutputPath(bool appendTargetFrameworkToOutputPath ignoreOrder: true); } + [Fact] + public void ArtifactsShouldTrimDestinationFolder() + { + DirectoryInfo baseOutputPath = CreateFiles( + Path.Combine("bin", "Debug"), + "foo.exe", + "foo.pdb", + "foo.exe.config", + "bar.dll", + "bar.pdb", + "bar.cs"); + + CreateFiles( + Path.Combine(baseOutputPath.FullName, "ref"), + "bar.dll"); + + DirectoryInfo artifactsPath = new DirectoryInfo(Path.Combine(TestRootPath, "artifacts")); + DirectoryInfo artifactsPath2 = new DirectoryInfo(Path.Combine(TestRootPath, "artifacts2")); + string artifactPathes = string.Concat(artifactsPath.FullName, ";", Environment.NewLine, artifactsPath2.FullName); + + string outputPath = $"{Path.Combine("bin", "Debug")}{Path.DirectorySeparatorChar}"; + + ProjectCreator.Templates.ProjectWithArtifacts( + outputPath: outputPath, + appendTargetFrameworkToOutputPath: false, + artifactsPath: artifactPathes) + .TryGetItems("Artifact", out IReadOnlyCollection artifactItems) + .TryGetPropertyValue("DefaultArtifactsSource", out string defaultArtifactsSource) + .TryBuild(out bool result, out BuildOutput buildOutput); + + result.ShouldBeTrue(buildOutput.GetConsoleLog()); + + defaultArtifactsSource.ShouldBe(outputPath); + + ProjectItem artifactItem = artifactItems.ShouldHaveSingleItem(); + + artifactItem.EvaluatedInclude.ShouldBe(defaultArtifactsSource); + artifactItem.GetMetadataValue("DestinationFolder").ShouldBe(artifactPathes); + + foreach (DirectoryInfo d in new[] { artifactsPath, artifactsPath2 }) + { + d.GetFiles("*", SearchOption.AllDirectories) + .Select(i => i.FullName) + .ShouldBe( + new[] + { + "bar.dll", + "foo.exe", + "foo.exe.config", + }.Select(i => Path.Combine(d.FullName, i)), + ignoreOrder: true); + } + } + [Theory] [InlineData(null)] [InlineData(true)] diff --git a/src/Artifacts/Tasks/RobocopyMetadata.cs b/src/Artifacts/Tasks/RobocopyMetadata.cs index 4449f6b7..ef9334e4 100644 --- a/src/Artifacts/Tasks/RobocopyMetadata.cs +++ b/src/Artifacts/Tasks/RobocopyMetadata.cs @@ -7,6 +7,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -98,7 +99,7 @@ public static bool TryParse(ITaskItem item, TaskLoggingHelper log, Func d.Trim())) { if (destination.StartsWith(@"\") && !destination.StartsWith(@"\\")) {