Skip to content

Commit ce57c36

Browse files
DestinationFolder should trim pathes like it's done with Include. (#393)
Co-authored-by: Jeff Kluge <[email protected]>
1 parent af69dc0 commit ce57c36

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

src/Artifacts.UnitTests/ArtifactsTests.cs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.Build.UnitTests.Common;
77
using Microsoft.Build.Utilities.ProjectCreation;
88
using Shouldly;
9+
using System;
910
using System.Collections.Generic;
1011
using System.IO;
1112
using System.Linq;
@@ -139,6 +140,60 @@ public void DefaultArtifactsUseOutputPath(bool appendTargetFrameworkToOutputPath
139140
ignoreOrder: true);
140141
}
141142

143+
[Fact]
144+
public void ArtifactsShouldTrimDestinationFolder()
145+
{
146+
DirectoryInfo baseOutputPath = CreateFiles(
147+
Path.Combine("bin", "Debug"),
148+
"foo.exe",
149+
"foo.pdb",
150+
"foo.exe.config",
151+
"bar.dll",
152+
"bar.pdb",
153+
"bar.cs");
154+
155+
CreateFiles(
156+
Path.Combine(baseOutputPath.FullName, "ref"),
157+
"bar.dll");
158+
159+
DirectoryInfo artifactsPath = new DirectoryInfo(Path.Combine(TestRootPath, "artifacts"));
160+
DirectoryInfo artifactsPath2 = new DirectoryInfo(Path.Combine(TestRootPath, "artifacts2"));
161+
string artifactPathes = string.Concat(artifactsPath.FullName, ";", Environment.NewLine, artifactsPath2.FullName);
162+
163+
string outputPath = $"{Path.Combine("bin", "Debug")}{Path.DirectorySeparatorChar}";
164+
165+
ProjectCreator.Templates.ProjectWithArtifacts(
166+
outputPath: outputPath,
167+
appendTargetFrameworkToOutputPath: false,
168+
artifactsPath: artifactPathes)
169+
.TryGetItems("Artifact", out IReadOnlyCollection<ProjectItem> artifactItems)
170+
.TryGetPropertyValue("DefaultArtifactsSource", out string defaultArtifactsSource)
171+
.TryBuild(out bool result, out BuildOutput buildOutput);
172+
173+
result.ShouldBeTrue(buildOutput.GetConsoleLog());
174+
175+
defaultArtifactsSource.ShouldBe(outputPath);
176+
177+
ProjectItem artifactItem = artifactItems.ShouldHaveSingleItem();
178+
179+
artifactItem.EvaluatedInclude.ShouldBe(defaultArtifactsSource);
180+
artifactItem.GetMetadataValue("DestinationFolder").ShouldBe(artifactPathes);
181+
182+
foreach (DirectoryInfo d in new[] { artifactsPath, artifactsPath2 })
183+
{
184+
d.GetFiles("*", SearchOption.AllDirectories)
185+
.Select(i => i.FullName)
186+
.ShouldBe(
187+
new[]
188+
{
189+
"bar.dll",
190+
"foo.exe",
191+
"foo.exe.config",
192+
}.Select(i => Path.Combine(d.FullName, i)),
193+
ignoreOrder: true);
194+
}
195+
}
196+
142197
[Theory]
143198
[InlineData(null)]
144199
[InlineData(true)]

src/Artifacts/Tasks/RobocopyMetadata.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System;
88
using System.Collections.Generic;
99
using System.IO;
10+
using System.Linq;
1011
using System.Text;
1112
using System.Text.RegularExpressions;
1213

@@ -98,7 +99,7 @@ public static bool TryParse(ITaskItem item, TaskLoggingHelper log, Func<string,
9899
OnlyNewer = item.GetMetadataBoolean(nameof(OnlyNewer), defaultValue: false),
99100
};
100101

101-
foreach (string destination in item.GetMetadata("DestinationFolder").Split(DestinationSplitter, StringSplitOptions.RemoveEmptyEntries))
102+
foreach (string destination in item.GetMetadata("DestinationFolder").Split(DestinationSplitter, StringSplitOptions.RemoveEmptyEntries).Select(d => d.Trim()))
102103
{
103104
if (destination.StartsWith(@"\") && !destination.StartsWith(@"\\"))
104105
{

0 commit comments

Comments
 (0)