From 188a6fcf4f13df1fd362a0aff27a23493ddd1ec5 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 8 Sep 2015 22:14:11 +0200 Subject: implement autobit and pinning in EDSP solver 'apt' The parser creates a preferences as well as an extended states file based on the EDSP scenario file, which isn't the most efficient way of dealing with this as thes text files have to be parsed again by another layer of the code, but it needs the least changes and works good enough for now. The 'apt' solver is in the end just a test solver like dump. --- apt-pkg/edsp/edspsystem.cc | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) (limited to 'apt-pkg/edsp/edspsystem.cc') diff --git a/apt-pkg/edsp/edspsystem.cc b/apt-pkg/edsp/edspsystem.cc index f577efcbd..c52d537f3 100644 --- a/apt-pkg/edsp/edspsystem.cc +++ b/apt-pkg/edsp/edspsystem.cc @@ -17,15 +17,55 @@ #include #include #include +#include #include +#include + #include #include /*}}}*/ +class edspSystemPrivate { + std::string tempDir; + std::string tempStatesFile; + std::string tempPrefsFile; + +public: + edspSystemPrivate() {} + + void Initialize(Configuration &Cnf) + { + DeInitialize(); + Cnf.Set("Dir::State::extended_states", "/dev/null"); + Cnf.Set("Dir::Etc::preferences", "/dev/null"); + std::string const tmp = GetTempDir(); + char tmpname[100]; + snprintf(tmpname, sizeof(tmpname), "%s/apt-edsp-solver-XXXXXX", tmp.c_str()); + if (NULL == mkdtemp(tmpname)) + return; + tempDir = tmpname; + tempStatesFile = flCombine(tempDir, "extended_states"); + Cnf.Set("Dir::State::extended_states", tempStatesFile); + tempPrefsFile = flCombine(tempDir, "apt_preferences"); + Cnf.Set("Dir::Etc::preferences", tempPrefsFile); + } + + void DeInitialize() + { + if (tempDir.empty()) + return; + + unlink(tempStatesFile.c_str()); + unlink(tempPrefsFile.c_str()); + rmdir(tempDir.c_str()); + } + + ~edspSystemPrivate() { DeInitialize(); } +}; // System::edspSystem - Constructor /*{{{*/ -edspSystem::edspSystem() : pkgSystem("Debian APT solver interface", &debVS), d(NULL), StatusFile(NULL) +edspSystem::edspSystem() : pkgSystem("Debian APT solver interface", &debVS), d(new edspSystemPrivate()), StatusFile(NULL) { } /*}}}*/ @@ -33,6 +73,7 @@ edspSystem::edspSystem() : pkgSystem("Debian APT solver interface", &debVS), d(N edspSystem::~edspSystem() { delete StatusFile; + delete d; } /*}}}*/ // System::Lock - Get the lock /*{{{*/ @@ -59,7 +100,8 @@ pkgPackageManager *edspSystem::CreatePM(pkgDepCache * /*Cache*/) const // System::Initialize - Setup the configuration space.. /*{{{*/ bool edspSystem::Initialize(Configuration &Cnf) { - Cnf.Set("Dir::State::extended_states", "/dev/null"); + d->Initialize(Cnf); + Cnf.Set("Dir::Etc::preferencesparts", "/dev/null"); Cnf.Set("Dir::State::status","/dev/null"); Cnf.Set("Dir::State::lists","/dev/null"); -- cgit v1.2.3