00001
00002
00003
00004
00005 #ifndef __PACKAGEMANAGER_H__
00006 #define __PACKAGEMANAGER_H__
00007
00008 #include "packageversiondatabase.h"
00009 #include "packagedatabase.h"
00010 #include "package.h"
00011 #include "packageversion.h"
00012 #include "installeddatabase.h"
00013 #include "installedpackage.h"
00014 #include <vector>
00015 #include "pmstring.h"
00016 #include "pstream.h"
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 struct Virtual
00029 {
00030 PMString virtualString;
00031 PMString category;
00032 PMString name;
00033 PMString version;
00034 };
00035
00036
00037
00038
00039
00040 class PackageManager
00041 {
00042 public:
00043 PackageManager();
00044 PackageManager(Keyword acceptKeyword, PMString useFlags, std::vector<Virtual> virtuals);
00045 ~PackageManager();
00046
00047 std::vector<Package> SearchPackageName(PMString name);
00048 std::vector<Package> SearchRegExpName(PMString expression);
00049 std::vector<Package> SearchNameContains(PMString lookup);
00050 std::vector<Package> SearchRegExpDescription(PMString expression);
00051 std::vector<Package> SearchDescriptionContains(PMString lookup);
00052
00053 PackageVersion SearchSpecificVersion(Package searchPackage,PMString version);
00054 PackageVersion GetLatestVersion(Package searchPackage, bool hardMasked = false, PMString slot = "");
00055 PackageVersion GetLatestAvailableVersion(Package searchPackage, PMString slot = "");
00056 PackageVersion GetLatestVersionInstalled(Package passedPackage);
00057 PackageVersion GetVirtual(PMString virtualString);
00058
00059 std::vector<PackageVersion> FullSearchPackage(PMString searchString);
00060 std::vector<PackageVersion> GetVersions(Package searchPackage, bool hardMasked = false, PMString slot = "");
00061 std::vector<PackageVersion> GetAvailableVersions(Package searchPackage, PMString slot = "");
00062 std::vector<PackageVersion> GetVersionsInstalled(Package passedPackage);
00063 std::vector<PackageVersion> CalculateNotInstalledDependencies(PackageVersion version);
00064 std::vector<PackageVersion> CalculateAllDependencies(PackageVersion version);
00065
00066 bool SearchVersionExists(Package searchPackage,PMString version);
00067 bool IsVersionInstalled(PackageVersion passedVersion);
00068 bool IsPackageInstalled(Package passedPackage);
00069 bool IsPackageInWorld(Package passedPackage);
00070 bool IsSlotInstalled(Package passedPackage, PMString slot);
00071
00072 void CreateAllDatabases(bool clearCache = true,bool cacheFileSizes=false);
00073 void CreatePackageDatabases(bool clearCache = true, bool cacheFileSizes=false);
00074 void CreateInstalledDatabase();
00075 void SetPackageInstalled(PackageVersion version,bool upgrade = false,bool inWorld = true);
00076 void SetPackageRemoved(PackageVersion version,bool upgrade = false);
00077 void RegenWorldFile();
00078 void AddToWorld(Package toAdd);
00079 void RemoveFromWorld(Package toRemove);
00080
00081 void SetKeyword(PMString keyword);
00082 void SetKeyword(Keyword keyword);
00083 void AddUseFlag(PMString flag);
00084 void SetUseFlags(PMString flags);
00085 void SetVirtuals(std::vector<Virtual> virtuals);
00086 void AddVirtual(Virtual passedVirtual);
00087
00088 void SetHardMaskedPackages(std::vector<PMString> hardMasked);
00089 void SetUnstablePackages(std::vector<PMString> unStable);
00090 void SetStablePackages(std::vector<PMString> stable);
00091
00092 void FetchPackages(PackageVersion version, redi::ipstream& streamToOutput);
00093 void InstallPackage(PackageVersion version, redi::ipstream& streamToOutput, bool threaded = false, bool inWorld = true);
00094 void RemovePackage(PackageVersion version, redi::ipstream& streamToOutput, bool threaded = false);
00095
00096 Virtual GetVirtual(PackageVersion passedVersion);
00097
00098 std::vector<InstalledPackage> GetWorldPackages();
00099 std::vector<InstalledPackage> GetAllInstalledPackages();
00100 std::vector<InstalledPackage> FindRedundantPackages();
00101 std::vector<InstalledPackage> ReverseDependencies(PackageVersion passedVersion);
00102
00103 std::vector<PackageUpgrade> GetWorldUpdates();
00104 std::vector<PackageUpgrade> GetAllUpdates();
00105
00106 std::vector<PMString> GetVirtualsProvided();
00107 std::vector<PMString> FindRedundantSourceFiles();
00108
00109 protected:
00110 void _FillDatabase(bool cacheFileSizes);
00111 void _FillInstalledDatabase();
00112
00113 bool _DependenciesArrange(std::vector<PackageVersion>& hayStack, PackageVersion dependency, PackageVersion mainPackage,DependencyStage stage);
00114 bool _FindRegExpMatch(std::vector<PMString> hayStack, PMString needle);
00115 PMString PackageManager::_GetSlotFromPortageDB(PackageVersion version);
00116 PackageVersion _VirtualInList(std::vector<PackageVersion> list,PMString virtualString);
00117 PackageVersion _FulfillDependency(Dependency dependency);
00118
00119 PackageDatabase _packageNameDatabase;
00120 PackageVersionDatabase _packageVersionDatabase;
00121 InstalledDatabase _installedPackagesDatabase;
00122 Keyword _acceptKeyword;
00123 PMString _useFlags;
00124 std::vector<Virtual> _virtuals;
00125 std::vector<PMString> _hardMaskedPackages;
00126 std::vector<PMString> _unStablePackages;
00127 std::vector<PMString> _stablePackages;
00128 };
00129
00130 #endif