+ VerIterator InstallVer(Cache,Cache[BrokenPkg].InstallVer);
+ bool circle = false;
+ for (pkgCache::DepIterator D = InstallVer.DependsList(); D.end() == false; ++D)
+ {
+ if (D->Type != pkgCache::Dep::PreDepends)
+ continue;
+ SPtrArray<Version *> VL = D.AllTargets();
+ for (Version **I = VL; *I != 0; ++I)
+ {
+ VerIterator V(Cache,*I);
+ PkgIterator P = V.ParentPkg();
+ // we are checking for installation as an easy 'protection' against or-groups and (unchosen) providers
+ if (P->CurrentVer == 0 || P != Pkg || (P.CurrentVer() != V && Cache[P].InstallVer != V))
+ continue;
+ circle = true;
+ break;
+ }
+ if (circle == true)
+ break;
+ }
+ if (circle == true)
+ {
+ if (Debug)
+ cout << OutputInDepth(Depth) << " Avoiding " << End << " avoided as " << BrokenPkg.FullName() << " has a pre-depends on " << Pkg.FullName() << std::endl;
+ continue;
+ }
+ else