public async Task Initialize(InstallScript script) { _log.Length = 0; _script = script; _lines = (_script.DependencySorted ? (_script.Lines ?? Enumerable.Empty <InstallItem>()) : (await ExportProcessor.SortByDependencies(script.Lines, _conn).ConfigureAwait(false)) .Where(l => l.Type != InstallType.DependencyCheck) ).Where(l => l.Script != null && l.Type != InstallType.Warning).ToList(); _currLine = -1; }
public InstallScript Merge(IDiffDirectory baseDir, IDiffDirectory compareDir) { var docs = new List <Tuple <XmlDocument, string> >(); var metadata = baseDir.WriteAmlMergeScripts(compareDir, (path, prog) => { ProgressChanged?.Invoke(this, new ProgressChangedEventArgs("Reading files", prog / 2)); var doc = new XmlDocument(); docs.Add(Tuple.Create(doc, path)); return(new XmlNodeWriter(doc)); }); ProgressChanged?.Invoke(this, new ProgressChangedEventArgs("Performing cleanup", 50)); var allItems = docs .Where(d => d.Item1.DocumentElement != null) .SelectMany(d => d.Item1.DocumentElement .DescendantsAndSelf(el => el.LocalName == "Item")) .ToArray(); RemoveDeletesForItemsWithMultipleScripts(allItems); RemoveChangesToSystemProperties(allItems); var installScripts = docs .Where(d => d.Item1.DocumentElement != null) .SelectMany(d => XmlUtils.RootItems(d.Item1.DocumentElement) .Select(i => InstallItem.FromScript(i, d.Item2))) .ToArray(); ProgressChanged?.Invoke(this, new ProgressChangedEventArgs("Processing dependencies", 75)); var lines = (SortDependencies ? ExportProcessor.SortByDependencies(installScripts, metadata) : installScripts).ToList(); lines.RemoveWhere(i => i.Type == InstallType.DependencyCheck); var script = new InstallScript() { Created = DateTime.Now, Creator = Environment.UserName, Title = "MergeScript", Lines = lines }; lines.InsertRange(0, FillInNullsOnRequiredProperties(allItems, metadata)); ProgressChanged?.Invoke(this, new ProgressChangedEventArgs("Processing dependencies", 80)); return(script); }