sdk/test/HelixTasks/CreateLocalHelixTestLayout.cs

61 строка
2.0 KiB
C#

// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using Microsoft.Build.Framework;
namespace Microsoft.DotNet.SdkCustomHelix.Sdk
{
public sealed class CreateLocalHelixTestLayout : Build.Utilities.Task
{
[Required]
public ITaskItem[] HelixCorrelationPayload { get; set; }
[Required]
public string TestOutputDirectory { get; set; }
public override bool Execute()
{
foreach (var payload in HelixCorrelationPayload)
{
var copyfrom = new DirectoryInfo(payload.GetMetadata("PayloadDirectory"));
var relativeDestinationPathOnHelix = payload.GetMetadata("Destination");
var destination = new DirectoryInfo(Path.Combine(TestOutputDirectory, relativeDestinationPathOnHelix));
if (Directory.Exists(destination.FullName))
{
Directory.Delete(destination.FullName, true);
}
CopyAll(copyfrom, destination);
}
Log.LogMessage($"set HELIX_CORRELATION_PAYLOAD={TestOutputDirectory}");
return true;
}
public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
{
if (source.FullName.ToLower() == target.FullName.ToLower())
{
return;
}
if (Directory.Exists(target.FullName) == false)
{
Directory.CreateDirectory(target.FullName);
}
foreach (FileInfo fi in source.GetFiles())
{
fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
}
foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
{
DirectoryInfo nextTargetSubDir =
target.CreateSubdirectory(diSourceSubDir.Name);
CopyAll(diSourceSubDir, nextTargetSubDir);
}
}
}
}