+ if (ConflictPkg.CurrentVer() == Ver && List->IsNow(ConflictPkg))
+ {
+ cout << OutputInDepth(Depth) << Pkg.Name() << " conflicts with " << ConflictPkg.Name() << endl;
+ /* If a loop is not present or has not yet been detected, attempt to unpack packages
+ to resolve this conflict. If there is a loop present, remove packages to resolve this conflict */
+ if (!List->IsFlag(ConflictPkg,pkgOrderList::Loop)) {
+ if (Cache[ConflictPkg].Keep() == 0 && Cache[ConflictPkg].InstallVer != 0) {
+ if (Debug)
+ cout << OutputInDepth(Depth) << OutputInDepth(Depth) << "Unpacking " << ConflictPkg.Name() << " to prevent conflict" << endl;
+ List->Flag(Pkg,pkgOrderList::Loop);
+ SmartUnPack(ConflictPkg,false, Depth + 1);
+ // Remove loop to allow it to be used later if needed
+ List->RmFlag(Pkg,pkgOrderList::Loop);
+ } else {
+ if (EarlyRemove(ConflictPkg) == false)
+ return _error->Error("Internal Error, Could not early remove %s",ConflictPkg.Name());
+ }
+ } else {
+ if (!List->IsFlag(ConflictPkg,pkgOrderList::Removed)) {
+ if (Debug)
+ cout << OutputInDepth(Depth) << "Because of conficts knot, removing " << ConflictPkg.Name() << " to conflict violation" << endl;
+ if (EarlyRemove(ConflictPkg) == false)
+ return _error->Error("Internal Error, Could not early remove %s",ConflictPkg.Name());
+ }
+ }
+ }
+ }
+ }
+
+ // Check for breaks
+ if (End->Type == pkgCache::Dep::DpkgBreaks) {
+ SPtrArray<Version *> VList = End.AllTargets();
+ for (Version **I = VList; *I != 0; I++)
+ {
+ VerIterator Ver(Cache,*I);
+ PkgIterator BrokenPkg = Ver.ParentPkg();
+ VerIterator InstallVer(Cache,Cache[BrokenPkg].InstallVer);
+ if (BrokenPkg.CurrentVer() != Ver)