Exemplo n.º 1
0
        private static void CollectNode(IPackageGraphNode node, ICollection <IPackageGraphNode> collectedNodes)
        {
            if (!collectedNodes.Contains(node))
            {
                collectedNodes.Add(node);
            }

            foreach (var dependent in node.Dependents)
            {
                CollectNode(dependent, collectedNodes);
            }
        }
Exemplo n.º 2
0
        private void Accumulate(IPackageGraphNode node, Func <IPackageGraphNode, bool> condition,
                                Action <IPackageGraphNode, List <IPackageGraphNode> > action, List <IPackageGraphNode> accu)
        {
            if (condition(node))
            {
                action(node, accu);
            }

            foreach (var nodeDependency in node.Dependencies)
            {
                Accumulate(nodeDependency, condition, action, accu);
            }
        }
Exemplo n.º 3
0
        private void FlattenNode(IPackageGraphNode package, ICollection <PackageId> flatList)
        {
            if (flatList.Contains(package.Package))
            {
                return;
            }

            foreach (var dependency in package.Dependencies)
            {
                FlattenNode(dependency, flatList);
            }

            flatList.Add(package.Package);
        }
Exemplo n.º 4
0
        private void MarkPackages(IPackageGraphNode package, ICollection <PackageId> targetPackages,
                                  ICollection <IPackageGraphNode> collectedPackages, IDictionary <PackageId, Mark> marks, Mark currentMark,
                                  bool excludeNonExclusiveDependencies)
        {
            if (targetPackages.Contains(package.Package))
            {
                marks[package.Package] = Mark.Include;
                currentMark            = Mark.Tentative;
            }
            else if (excludeNonExclusiveDependencies)
            {
                Mark mark;

                if (currentMark == Mark.DoNotInclude)
                {
                    marks[package.Package] = Mark.DoNotInclude;
                }
                else if (marks.TryGetValue(package.Package, out mark))
                {
                    if (mark == Mark.DoNotInclude)
                    {
                        currentMark = Mark.DoNotInclude;
                    }
                }
            }

            if (currentMark == Mark.Tentative && !collectedPackages.Contains(package))
            {
                marks[package.Package] = Mark.Tentative;
                collectedPackages.Add(package);
            }

            foreach (var dependency in package.Dependencies)
            {
                MarkPackages(dependency, targetPackages, collectedPackages, marks, currentMark, excludeNonExclusiveDependencies);
            }
        }