apt @VERSION@
packagemanager.h
00001 // -*- mode: cpp; mode: fold -*-
00002 // Description                                                          /*{{{*/
00003 // $Id: packagemanager.h,v 1.14 2001/05/07 04:24:08 jgg Exp $
00004 /* ######################################################################
00005 
00006    Package Manager - Abstacts the package manager
00007 
00008    Three steps are 
00009      - Aquiration of archives (stores the list of final file names)
00010      - Sorting of operations
00011      - Invokation of package manager
00012    
00013    This is the final stage when the package cache entities get converted
00014    into file names and the state stored in a DepCache is transformed
00015    into a series of operations.
00016 
00017    In the final scheme of things this may serve as a director class to
00018    access the actual install methods based on the file type being
00019    installed.
00020    
00021    ##################################################################### */
00022                                                                         /*}}}*/
00023 #ifndef PKGLIB_PACKAGEMANAGER_H
00024 #define PKGLIB_PACKAGEMANAGER_H
00025 
00026 #include <apt-pkg/pkgcache.h>
00027 
00028 #include <string>
00029 #include <iostream>
00030 #include <set>
00031 
00032 class pkgAcquire;
00033 class pkgDepCache;
00034 class pkgSourceList;
00035 class pkgOrderList;
00036 class pkgRecords;
00037 class pkgPackageManager : protected pkgCache::Namespace
00038 {
00039    public:
00040    
00041    enum OrderResult {Completed,Failed,Incomplete};
00042    static bool SigINTStop;
00043    
00044    protected:
00045    std::string *FileNames;
00046    pkgDepCache &Cache;
00047    pkgOrderList *List;
00048    bool Debug;
00049    bool NoImmConfigure;
00050    bool ImmConfigureAll;
00051 
00058    std::set<std::string> disappearedPkgs;
00059 
00060    void ImmediateAdd(PkgIterator P, bool UseInstallVer, unsigned const int &Depth = 0);
00061    virtual OrderResult OrderInstall();
00062    bool CheckRConflicts(PkgIterator Pkg,DepIterator Dep,const char *Ver);
00063    bool CreateOrderList();
00064    
00065    // Analysis helpers
00066    bool DepAlwaysTrue(DepIterator D);
00067    
00068    // Install helpers
00069    bool ConfigureAll();
00070    bool SmartConfigure(PkgIterator Pkg, int const Depth);
00071    //FIXME: merge on abi break
00072    bool SmartUnPack(PkgIterator Pkg);
00073    bool SmartUnPack(PkgIterator Pkg, bool const Immediate, int const Depth);
00074    bool SmartRemove(PkgIterator Pkg);
00075    bool EarlyRemove(PkgIterator Pkg);  
00076    
00077    // The Actual installation implementation
00078    virtual bool Install(PkgIterator /*Pkg*/,std::string /*File*/) {return false;};
00079    virtual bool Configure(PkgIterator /*Pkg*/) {return false;};
00080    virtual bool Remove(PkgIterator /*Pkg*/,bool /*Purge*/=false) {return false;};
00081    virtual bool Go(int statusFd=-1) {return true;};
00082    virtual void Reset() {};
00083 
00084    // the result of the operation
00085    OrderResult Res;
00086 
00087    public:
00088       
00089    // Main action members
00090    bool GetArchives(pkgAcquire *Owner,pkgSourceList *Sources,
00091                     pkgRecords *Recs);
00092 
00093    // Do the installation 
00094    OrderResult DoInstall(int statusFd=-1);
00095 
00096    // stuff that needs to be done before the fork() of a library that
00097    // uses apt
00098    OrderResult DoInstallPreFork() {
00099       Res = OrderInstall();
00100       return Res;
00101    };
00102 
00103    // stuff that needs to be done after the fork
00104    OrderResult DoInstallPostFork(int statusFd=-1);
00105    bool FixMissing();
00106 
00108    inline std::set<std::string> GetDisappearedPackages() { return disappearedPkgs; };
00109 
00110    pkgPackageManager(pkgDepCache *Cache);
00111    virtual ~pkgPackageManager();
00112 };
00113 
00114 #endif