private bool UpdateDependencies(bool toBeCompiled, ref Dictionary <string, MultiToolTaskWorkItem> workItems, string sources, string multiToolTaskDep) { if (toBeCompiled) { var enumerator = workItems.Values.GetEnumerator(); try { while (enumerator.MoveNext()) { var current = enumerator.Current; if (!current.ShouldAdd && current.Dependency == sources) { current.ShouldAdd = true; } } } finally { ((IDisposable)enumerator).Dispose(); } } MultiToolTaskWorkItem workItem = default(MultiToolTaskWorkItem); if (!toBeCompiled && workItems.TryGetValue(multiToolTaskDep, out workItem) && workItem.ShouldAdd) { toBeCompiled = true; } return(toBeCompiled); }
protected bool PrepareWorkItems(Type taskType, string[] environmentVariables, ref Dictionary <string, MultiToolTaskWorkItem> workItems) { string currentDirectory = Environment.CurrentDirectory; var strBuilder = new StringBuilder(); foreach (var package in tasksPerPackage) { foreach (var taskItems in package.Value) { if (taskItems.Count > 0) { var task = CreateTask(taskType, taskItems, currentDirectory, environmentVariables); var cmdLine = GenerateCommandLine(task, ref strBuilder, taskItems, currentDirectory); bool toBeCompiled = false; bool outOfDateCommandLine = false; string sources = FileTracker.FormatRootingMarker(taskItems.ToArray(), null); bool minimalRebuldFromTracking = true; if (!bool.TryParse(taskItems[0].GetMetadata("MinimalRebuildFromTracking"), out minimalRebuldFromTracking)) { minimalRebuldFromTracking = true; } CheckCommandLineOutOfDate(minimalRebuldFromTracking, taskItems, sources, task, cmdLine, ref toBeCompiled, ref outOfDateCommandLine); string multiToolTaskDep = taskItems[0].GetMetadata("MultiToolTaskDependency"); // Update dependencies of the existing work items toBeCompiled = UpdateDependencies(toBeCompiled, ref workItems, sources, multiToolTaskDep); // Create WorkItem var workItemToAdd = new MultiToolTaskWorkItem { Sourcekey = sources, Dependency = multiToolTaskDep, ShouldAdd = toBeCompiled, Task = task, OutOfDateCommandLine = outOfDateCommandLine }; workItems.Add(sources, workItemToAdd); if (cts.IsCancellationRequested) { return(false); } } } } return(true); }