protected virtual bool VisitDependency(T package, Func <T, bool?> dependency) { var result = SuccessfulPackages.Select(dependency) .FirstOrDefault(_ => _ != null); if (result == true) { return(true); } if (result == false) { var incompatible = SuccessfulPackages.First(_ => dependency(_) == false); IncompatiblePackages.Add(incompatible); SuccessfulPackages.Remove(incompatible); return(false); } var matchingPackages = Strategy(Packages .Except(IncompatiblePackages) .Where(_ => dependency(_) == true)) .ToList(); var b = VisitPackages(matchingPackages); return(b); }
public DependencyResolutionResult(IPackageDescriptor descriptor, IEnumerable <ResolvedPackage> successfulPackages, IEnumerable <ResolvedPackage> conflictingPackages, IEnumerable <ResolvedPackage> missingPackages) { Descriptor = descriptor; SuccessfulPackages = successfulPackages.ToList().AsReadOnly(); DiscardedPackages = conflictingPackages.ToList().AsReadOnly(); MissingPackages = missingPackages.ToList().AsReadOnly(); //IsSuccess = !(MissingPackages.Any() || DiscardedPackages.Any()); IsSuccess = !(MissingPackages.Any(x => SuccessfulPackages.None(s => s.Identifier.Name.EqualsNoCase(x.Identifier.Name))) || DiscardedPackages.Any(x => SuccessfulPackages.None(s => s.Identifier.Name.EqualsNoCase(x.Identifier.Name)))); }
protected override bool VisitDependency(IPackageInfo package, Func <IPackageInfo, bool?> dependency) { using (Push(_funcToDep[dependency])) { var existingPackage = SuccessfulPackages.FirstOrDefault(_ => dependency(_) == true); var depSuccess = base.VisitDependency(package, dependency); if (depSuccess && existingPackage != null) { using (Push(existingPackage.Identifier)) Success.Add(new CallStack(_currentNode)); } WriteDebug(depSuccess ? "D:OK" : "D:FAIL"); return(depSuccess); } }