X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/331956f9b59c8c30cce977e8729991559d46005c..de24f8ce508edd02690947d8dff7f0a4090a67fe:/apt-pkg/algorithms.h diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index e539a410e..7f58c8eed 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -30,18 +30,22 @@ #ifndef PKGLIB_ALGORITHMS_H #define PKGLIB_ALGORITHMS_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/algorithms.h" -#endif #include #include #include +#include + +#ifndef APT_8_CLEANER_HEADERS +#include using std::ostream; +#endif + +class pkgAcquireStatus; -class pkgSimulate : public pkgPackageManager +class pkgSimulate : public pkgPackageManager /*{{{*/ { protected: @@ -50,7 +54,7 @@ class pkgSimulate : public pkgPackageManager pkgDepCache *Cache; public: - virtual VerIterator GetCandidateVer(PkgIterator Pkg) + virtual VerIterator GetCandidateVer(PkgIterator const &Pkg) { return (*Cache)[Pkg].CandidateVerIter(*Cache); } @@ -62,23 +66,28 @@ class pkgSimulate : public pkgPackageManager Policy iPolicy; pkgDepCache Sim; + pkgDepCache::ActionGroup group; // The Actuall installation implementation - virtual bool Install(PkgIterator Pkg,string File); + virtual bool Install(PkgIterator Pkg,std::string File); virtual bool Configure(PkgIterator Pkg); virtual bool Remove(PkgIterator Pkg,bool Purge); private: void ShortBreaks(); - void Describe(PkgIterator iPkg,ostream &out,bool Current,bool Candidate); + void Describe(PkgIterator iPkg,std::ostream &out,bool Current,bool Candidate); public: pkgSimulate(pkgDepCache *Cache); + ~pkgSimulate(); }; - -class pkgProblemResolver + /*}}}*/ +class pkgProblemResolver /*{{{*/ { + /** \brief dpointer placeholder (for later in case we need it) */ + void *d; + pkgDepCache &Cache; typedef pkgCache::PkgIterator PkgIterator; typedef pkgCache::VerIterator VerIterator; @@ -90,7 +99,7 @@ class pkgProblemResolver enum Flags {Protected = (1 << 0), PreInstalled = (1 << 1), Upgradable = (1 << 2), ReInstateTried = (1 << 3), ToRemove = (1 << 4)}; - signed short *Scores; + int *Scores; unsigned char *Flags; bool Debug; @@ -106,10 +115,16 @@ class pkgProblemResolver void MakeScores(); bool DoUpgrade(pkgCache::PkgIterator Pkg); + + bool ResolveInternal(bool const BrokenFix = false); + bool ResolveByKeepInternal(); + protected: + bool InstOrNewPolicyBroken(pkgCache::PkgIterator Pkg); + public: - inline void Protect(pkgCache::PkgIterator Pkg) {Flags[Pkg->ID] |= Protected;}; + inline void Protect(pkgCache::PkgIterator Pkg) {Flags[Pkg->ID] |= Protected; Cache.MarkProtected(Pkg);}; inline void Remove(pkgCache::PkgIterator Pkg) {Flags[Pkg->ID] |= ToRemove;}; inline void Clear(pkgCache::PkgIterator Pkg) {Flags[Pkg->ID] &= ~(Protected | ToRemove);}; @@ -118,13 +133,13 @@ class pkgProblemResolver // Try to resolve problems only by using keep bool ResolveByKeep(); - - void InstallProtect(); - + + __deprecated void InstallProtect(); + pkgProblemResolver(pkgDepCache *Cache); ~pkgProblemResolver(); }; - + /*}}}*/ bool pkgDistUpgrade(pkgDepCache &Cache); bool pkgApplyStatus(pkgDepCache &Cache); bool pkgFixBroken(pkgDepCache &Cache); @@ -133,27 +148,8 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache); void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List); +bool ListUpdate(pkgAcquireStatus &progress, pkgSourceList &List, int PulseInterval=0); +bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval = 0, + bool const RunUpdateScripts = true, bool const ListCleanup = true); -// class that can be subclassed by the client to bring in -// certain own packages into the root set (if the client returns -// True the package will be considered as part of the root set) -class InRootSetFunc -{ - public: - virtual bool InRootSet(const pkgCache::PkgIterator &pkg) {return false;}; - virtual ~InRootSetFunc() {}; -}; - - -// Mark all reachable packages with "pkgDepCache::StateCache.Marked=1" -// the root-set are all essential packages+everything that was not -// installed automatically -// -// If InRootSetFunc is set, it will be called for each PkgIterator. This -// is usefull for clients that have there own idea about the root-set -// -// Everything that is not reach can be removed -bool pkgMarkUsed(pkgDepCache &Cache); -bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc &f); - #endif