#ifndef PKGLIB_ALGORITHMS_H
#define PKGLIB_ALGORITHMS_H
-#ifdef __GNUG__
-#pragma interface "apt-pkg/algorithms.h"
-#endif
#include <apt-pkg/packagemanager.h>
#include <apt-pkg/depcache.h>
+#include <apt-pkg/acquire.h>
#include <iostream>
using std::ostream;
-class pkgSimulate : public pkgPackageManager
+class pkgSimulate : public pkgPackageManager /*{{{*/
{
protected:
pkgDepCache *Cache;
public:
- virtual VerIterator GetCandidateVer(PkgIterator Pkg)
+ virtual VerIterator GetCandidateVer(PkgIterator const &Pkg)
{
return (*Cache)[Pkg].CandidateVerIter(*Cache);
}
Policy iPolicy;
pkgDepCache Sim;
+ pkgDepCache::ActionGroup group;
// The Actuall installation implementation
virtual bool Install(PkgIterator Pkg,string File);
pkgSimulate(pkgDepCache *Cache);
};
-
-class pkgProblemResolver
+ /*}}}*/
+class pkgProblemResolver /*{{{*/
{
pkgDepCache &Cache;
typedef pkgCache::PkgIterator PkgIterator;
void MakeScores();
bool DoUpgrade(pkgCache::PkgIterator Pkg);
+ 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);};
// Try to resolve problems only by using keep
bool ResolveByKeep();
-
+
+ // Install all protected packages
void InstallProtect();
pkgProblemResolver(pkgDepCache *Cache);
~pkgProblemResolver();
};
-
+ /*}}}*/
bool pkgDistUpgrade(pkgDepCache &Cache);
bool pkgApplyStatus(pkgDepCache &Cache);
bool pkgFixBroken(pkgDepCache &Cache);
void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List);
-
-// callback function that can be used by the client to bring in
-// certain own packages into the root set
-typedef bool (*InRootSetFunc)(pkgCache::PkgIterator);
-
-// Mark all reachable packages with pkgDepCache::StateCache.Marked
-// the root-set are all essential packages+everything that was installed
-// manually
-//
-// 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, InRootSetFunc f=NULL);
-
+bool ListUpdate(pkgAcquireStatus &progress, pkgSourceList &List, int PulseInterval=0);
#endif