Пример #1
0
            public void RegisterInvalidItem(string id, PluginDependencyType type)
            {
                DependencyError error = errors.Find(e => e.type == type);

                if (error == null)
                {
                    error = new DependencyError()
                    {
                        type = type
                    };
                    errors.Add(error);
                }

                error.invalidItems.Add(id);
            }
Пример #2
0
        private async Task CreateAsync(IEnumerable <BuildItem> items)
        {
            var scriptsToDependencies = items.ToDictionary(x => x, y => y.Dependencies.ToList());
            Action <BuildItem>            onSuccess = i => i.ReportSuccess();
            Action <BuildItem, Exception> onFailure = (i, ex) =>
            {
                // Script failed, set its status
                i.ReportError(new BuildError(ex));

                // Set status of referencers
                DependencyError.SetDependencyErrorStatus(i.Referencers, Enumerable.Repeat(i, 1));
            };

            await ApplyScriptsAsync(scriptsToDependencies, new ScriptCreateExecutor(_connection, _transaction),
                                    x => x.Referencers, y => y.Status == BuildItem.BuildStatusType.None, onSuccess, onFailure);
        }
Пример #3
0
        private ICollection <BuildItem> CreateItems(IDictionary <ScriptFile, ISet <DatabaseObject> > scriptDependencies, ISet <DatabaseObject> existingObjects)
        {
            var buildItems = new Dictionary <DatabaseObject, BuildItem>(scriptDependencies.Count, new DatabaseObjectComparer());
            var buildItemToDependencies = new Dictionary <BuildItem, List <BuildItem> >(scriptDependencies.Count);
            var buildItemToReferencers  = new Dictionary <BuildItem, List <BuildItem> >(scriptDependencies.Count);

            foreach (var s in scriptDependencies)
            {
                var  dependencies = new List <BuildItem>();
                var  referencers  = new List <BuildItem>();
                bool objectExists = existingObjects.Contains(s.Key.ScriptObject);
                var  bi           = new BuildItem(s.Key, dependencies, referencers, objectExists);
                buildItemToDependencies.Add(bi, dependencies);
                buildItemToReferencers.Add(bi, referencers);
                buildItems.Add(bi.DatabaseObject, bi);
            }

            foreach (var item in buildItems)
            {
                var itemDependencies = scriptDependencies[item.Value.Script].Select(x => buildItems[x]);
                buildItemToDependencies[item.Value].AddRange(itemDependencies);
                var itemReferencers = buildItems.Values.Where(x => scriptDependencies[x.Script].Contains(item.Key));
                buildItemToReferencers[item.Value].AddRange(itemReferencers);
            }

            foreach (var item in buildItems.Values)
            {
                if (item.Status == BuildItem.BuildStatusType.ScriptError)
                {
                    DependencyError.SetDependencyErrorStatus(item.Referencers, Enumerable.Repeat(item, 1));
                }

                if (item.BuildAction == BuildItem.BuildActionType.DropAndCreate)
                {
                    SetDropCreateBuildAction(item.Referencers);
                }
            }

            return(buildItems.Values);
        }