// Copyright Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Xml; using EpicGames.Core; namespace AutomationTool.Tasks { /// /// Parameters for a spawn task /// public class OnExitTaskParameters { /// /// Executable to spawn. /// [TaskParameter] public string Command { get; set; } = String.Empty; /// /// Whether to execute on lease termination /// [TaskParameter(Optional = true)] public bool Lease { get; set; } = false; } /// /// Spawns an external executable and waits for it to complete. /// [TaskElement("OnExit", typeof(OnExitTaskParameters))] public class OnExitTask : BgTaskImpl { readonly OnExitTaskParameters _parameters; /// /// Construct a spawn task /// /// Parameters for the task public OnExitTask(OnExitTaskParameters parameters) { _parameters = parameters; } /// public override async Task ExecuteAsync(JobContext job, HashSet buildProducts, Dictionary> tagNameToFileSet) { string[] commands = _parameters.Command.Split('\n').Select(x => x.Trim()).ToArray(); await AddCleanupCommandsAsync(commands, _parameters.Lease); } /// public override void Write(XmlWriter writer) { Write(writer, _parameters); } /// public override IEnumerable FindConsumedTagNames() { yield break; } /// public override IEnumerable FindProducedTagNames() { yield break; } } }