xamarin-macios/msbuild/Xamarin.MacDev.Tasks/Tasks/Ditto.cs

52 строки
1.4 KiB
C#

using System.Collections.Generic;
using System.IO;
using System.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using Xamarin.Messaging.Build.Client;
namespace Xamarin.MacDev.Tasks
{
public class Ditto : DittoTaskBase, ITaskCallback
{
public override bool Execute ()
{
if (ShouldExecuteRemotely ()) {
var taskRunner = new TaskRunner (SessionId, BuildEngine4);
taskRunner.FixReferencedItems (new ITaskItem [] { Source });
return taskRunner.RunAsync (this).Result;
}
return base.Execute ();
}
public override void Cancel ()
{
base.Cancel ();
if (ShouldExecuteRemotely ())
BuildConnection.CancelAsync (SessionId, BuildEngine4).Wait ();
}
public IEnumerable<ITaskItem> GetAdditionalItemsToBeCopied ()
{
if (!Directory.Exists(Source.ItemSpec))
return Enumerable.Empty<ITaskItem> ();
if (!CopyFromWindows)
return Enumerable.Empty<ITaskItem> ();
// TaskRunner doesn't know how to copy directories to Mac but `ditto` can take directories (and that's why we use ditto often).
// If Source is a directory path, let's add each file within it as an TaskItem, as TaskRunner knows how to copy files to Mac.
return Directory.GetFiles (Source.ItemSpec, "*", SearchOption.AllDirectories)
.Select(f => new TaskItem(f));
}
public bool ShouldCopyToBuildServer (ITaskItem item) => true;
public bool ShouldCreateOutputFile (ITaskItem item) => true;
}
}