X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/43d017d69796a5093cb12506ec59285a34915b7f..e5a1f2ff4cd1300364c7c644958583a8af704173:/apt-pkg/algorithms.cc diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 210095810..967aba180 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: algorithms.cc,v 1.11 1998/11/14 07:20:06 jgg Exp $ +// $Id: algorithms.cc,v 1.16 1999/02/05 02:26:00 jgg Exp $ /* ###################################################################### Algorithms - A set of misc algorithms @@ -29,7 +29,7 @@ pkgProblemResolver *pkgProblemResolver::This = 0; // --------------------------------------------------------------------- /* */ pkgSimulate::pkgSimulate(pkgDepCache &Cache) : pkgPackageManager(Cache), - Sim(Cache) + Sim(Cache.GetMap()) { Flags = new unsigned char[Cache.HeaderP->PackageCount]; memset(Flags,0,sizeof(*Flags)*Cache.HeaderP->PackageCount); @@ -44,7 +44,7 @@ bool pkgSimulate::Install(PkgIterator iPkg,string /*File*/) PkgIterator Pkg = Sim.FindPkg(iPkg.Name()); Flags[Pkg->ID] = 1; - clog << "Inst " << Pkg.Name(); + cout << "Inst " << Pkg.Name(); Sim.MarkInstall(Pkg,false); // Look for broken conflicts+predepends. @@ -58,7 +58,7 @@ bool pkgSimulate::Install(PkgIterator iPkg,string /*File*/) { if ((Sim[D] & pkgDepCache::DepInstall) == 0) { - clog << " [" << I.Name() << " on " << D.TargetPkg().Name() << ']'; + cout << " [" << I.Name() << " on " << D.TargetPkg().Name() << ']'; if (D->Type == pkgCache::Dep::Conflicts) _error->Error("Fatal, conflicts violated %s",I.Name()); } @@ -68,7 +68,7 @@ bool pkgSimulate::Install(PkgIterator iPkg,string /*File*/) if (Sim.BrokenCount() != 0) ShortBreaks(); else - clog << endl; + cout << endl; return true; } /*}}}*/ @@ -86,7 +86,7 @@ bool pkgSimulate::Configure(PkgIterator iPkg) // Sim.MarkInstall(Pkg,false); if (Sim[Pkg].InstBroken() == true) { - clog << "Conf " << Pkg.Name() << " broken" << endl; + cout << "Conf " << Pkg.Name() << " broken" << endl; Sim.Update(); @@ -98,21 +98,21 @@ bool pkgSimulate::Configure(PkgIterator iPkg) continue; if (D->Type == pkgCache::Dep::Conflicts) - clog << " Conflicts:" << D.TargetPkg().Name(); + cout << " Conflicts:" << D.TargetPkg().Name(); else - clog << " Depends:" << D.TargetPkg().Name(); + cout << " Depends:" << D.TargetPkg().Name(); } - clog << endl; + cout << endl; _error->Error("Conf Broken %s",Pkg.Name()); } else - clog << "Conf " << Pkg.Name(); + cout << "Conf " << Pkg.Name(); if (Sim.BrokenCount() != 0) ShortBreaks(); else - clog << endl; + cout << endl; return true; } @@ -127,12 +127,12 @@ bool pkgSimulate::Remove(PkgIterator iPkg) Flags[Pkg->ID] = 3; Sim.MarkDelete(Pkg); - clog << "Remv " << Pkg.Name(); + cout << "Remv " << Pkg.Name(); if (Sim.BrokenCount() != 0) ShortBreaks(); else - clog << endl; + cout << endl; return true; } @@ -142,18 +142,18 @@ bool pkgSimulate::Remove(PkgIterator iPkg) /* */ void pkgSimulate::ShortBreaks() { - clog << " ["; + cout << " ["; for (PkgIterator I = Sim.PkgBegin(); I.end() == false; I++) { if (Sim[I].InstBroken() == true) { if (Flags[I->ID] == 0) - clog << I.Name() << ' '; + cout << I.Name() << ' '; /* else - clog << I.Name() << "! ";*/ + cout << I.Name() << "! ";*/ } } - clog << ']' << endl; + cout << ']' << endl; } /*}}}*/ // ApplyStatus - Adjust for non-ok packages /*{{{*/ @@ -165,6 +165,14 @@ bool pkgApplyStatus(pkgDepCache &Cache) { for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) { + // Only choice for a ReInstReq package is to reinstall + if (I->InstState == pkgCache::State::ReInstReq || + I->InstState == pkgCache::State::HoldReInstReq) + { + Cache.MarkKeep(I); + continue; + } + switch (I->CurrentState) { // This means installation failed somehow @@ -445,8 +453,12 @@ void pkgProblemResolver::MakeScores() /* Protected things are pushed really high up. This number should put them ahead of everything */ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) + { if ((Flags[I->ID] & Protected) != 0) Scores[I->ID] += 10000; + if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential) + Scores[I->ID] += 5000; + } delete [] OldScores; } @@ -686,8 +698,10 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) // Hm, the group is broken.. I have no idea how to handle this if (Start != End) { - clog << "Note, a broken or group was found in " << I.Name() << "." << endl; - Cache.MarkDelete(I); + if (Debug == true) + clog << "Note, a broken or group was found in " << I.Name() << "." << endl; + if ((Flags[I->ID] & Protected) != Protected) + Cache.MarkDelete(I); break; }