Exemplo n.º 1
0
        public bool VisitFrom(IEnumerable <PackageDependency> dependencies, PackageVisitor visitor)
        {
            var nodes = (dependencies ?? Leafs()).Where(x => _byName.ContainsKey(x.Name)).ToList();

            var expectedVisits = GetExpectedVisitCounts(nodes).ToDictionary(x => x.Key, x => x.Value.Count);

            return(nodes.All(package => _byName.ContainsKey(package.Name) && VisitDependencyNode(null, package, _byName[package.Name], visitor, expectedVisits)));
        }
Exemplo n.º 2
0
 bool VisitDependencyNode(IPackageInfo from, PackageDependency dependency, IPackageInfo to, PackageVisitor visitor, Dictionary<string,int> visitsLeft)
 {
     if (!visitor(from, dependency, to)) return false;
     if (DecreaseVisitCount(visitsLeft, to.Name) <= 0)
     {
         foreach (var dependencyNode in to.Dependencies)
             if (!VisitDependencyNode(to, dependencyNode, _byName[dependencyNode.Name], visitor, visitsLeft))
                 return false;
     }
     return true;
 }
Exemplo n.º 3
0
        public bool VisitFromLeafs(PackageVisitor visitor, IEnumerable<PackageDependency> dependencies = null)
        {
            var byDependents = new Dictionary<string, List<string>>();

            var nodes = (dependencies ?? Leafs()).ToList();

            nodes.ForEach(x => VisitDependencyNode(null, x, _byName[x.Name], (from, dep, to) =>
            {
                if (from == null) return true;
                List<string> dependents;
                if (!byDependents.TryGetValue(to.Name, out dependents))
                    byDependents[to.Name] = dependents = new List<string>();
                if (!dependents.Contains(from.Name))
                    dependents.Add(from.Name);
                return true;
            }, new Dictionary<string, int>()));
            var expectedVisits = byDependents.ToDictionary(x => x.Key, x => x.Value.Count);
            foreach (var package in nodes)
                if (!VisitDependencyNode(null, package, _byName[package.Name], visitor, expectedVisits))
                    return false;
            return true;
        }
Exemplo n.º 4
0
 public bool VisitFrom(PackageVisitor visitor)
 {
     return(VisitFrom(null, visitor));
 }
Exemplo n.º 5
0
        bool VisitDependencyNode(IPackageInfo from, PackageDependency dependency, IPackageInfo to, PackageVisitor visitor, Dictionary <string, int> visitsLeft)
        {
            var visitResult = visitor(from, dependency, to);

            return(visitResult &&
                   (DecreaseVisitCount(visitsLeft, to.Name) != 0 ||
                    to.Dependencies.All(dependencyNode => !_byName.ContainsKey(dependencyNode.Name) || VisitDependencyNode(to, dependencyNode, _byName[dependencyNode.Name], visitor, visitsLeft))));
        }