Пример #1
0
 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;
 }
Пример #2
0
        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);
        }