From 6d38011bb93451dd9da3294614d821c77ac91687 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 30 Mar 2011 17:23:43 +0200 Subject: add a first round of stuff needed for talking between APT and solvers based on a very early draft for EDSP by Stefano APT can now write a scenario as well as load most stuff from it. --- apt-pkg/edsp/edspsystem.cc | 117 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 apt-pkg/edsp/edspsystem.cc (limited to 'apt-pkg/edsp/edspsystem.cc') diff --git a/apt-pkg/edsp/edspsystem.cc b/apt-pkg/edsp/edspsystem.cc new file mode 100644 index 000000000..579ffc656 --- /dev/null +++ b/apt-pkg/edsp/edspsystem.cc @@ -0,0 +1,117 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +/* ###################################################################### + + This system provides the abstraction to use the universe file as the + only source of package information to be able to feed the created file + back to APT for its own consumption (eat your own dogfood). + + ##################################################################### */ + /*}}}*/ +// Include Files /*{{{*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + /*}}}*/ + +edspSystem edspSys; + +// System::debSystem - Constructor /*{{{*/ +edspSystem::edspSystem() +{ + StatusFile = 0; + + Label = "Debian APT solver interface"; + VS = &debVS; +} + /*}}}*/ +// System::~debSystem - Destructor /*{{{*/ +edspSystem::~edspSystem() +{ + delete StatusFile; +} + /*}}}*/ +// System::Lock - Get the lock /*{{{*/ +bool edspSystem::Lock() +{ + return true; +} + /*}}}*/ +// System::UnLock - Drop a lock /*{{{*/ +bool edspSystem::UnLock(bool NoErrors) +{ + return true; +} + /*}}}*/ +// System::CreatePM - Create the underlying package manager /*{{{*/ +// --------------------------------------------------------------------- +/* we can't use edsp input as input for real installations - just a + simulation can work, but everything else will fail bigtime */ +pkgPackageManager *edspSystem::CreatePM(pkgDepCache *Cache) const +{ + return NULL; +} + /*}}}*/ +// System::Initialize - Setup the configuration space.. /*{{{*/ +bool edspSystem::Initialize(Configuration &Cnf) +{ + Cnf.Set("Dir::State::extended_states", "/dev/null"); + Cnf.Set("Dir::State::status","/dev/null"); + Cnf.Set("Dir::State::lists","/dev/null"); + + Cnf.Set("Debug::NoLocking", "true"); + Cnf.Set("APT::Get::Simulate", "true"); + + if (StatusFile) { + delete StatusFile; + StatusFile = 0; + } + return true; +} + /*}}}*/ +// System::ArchiveSupported - Is a file format supported /*{{{*/ +bool edspSystem::ArchiveSupported(const char *Type) +{ + return false; +} + /*}}}*/ +// System::Score - Determine if we should use the edsp system /*{{{*/ +signed edspSystem::Score(Configuration const &Cnf) +{ + if (FileExists(Cnf.FindFile("Dir::State::universe","")) == true) + return 1000; + return -1000; +} + /*}}}*/ +// System::AddStatusFiles - Register the status files /*{{{*/ +bool edspSystem::AddStatusFiles(vector &List) +{ + if (StatusFile == 0) + StatusFile = new edspIndex(_config->FindFile("Dir::State::universe")); + List.push_back(StatusFile); + return true; +} + /*}}}*/ +// System::FindIndex - Get an index file for status files /*{{{*/ +bool edspSystem::FindIndex(pkgCache::PkgFileIterator File, + pkgIndexFile *&Found) const +{ + if (StatusFile == 0) + return false; + if (StatusFile->FindInCache(*File.Cache()) == File) + { + Found = StatusFile; + return true; + } + + return false; +} + /*}}}*/ -- cgit v1.2.3 From 41ceaf02483a826d5797cf0bd61bd7b6013733a8 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 31 Mar 2011 11:47:01 +0200 Subject: add a special scenario filename for using stdin --- apt-pkg/edsp/edspsystem.cc | 11 +++++++++-- 1 file changed, 9 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 579ffc656..c8e417b1d 100644 --- a/apt-pkg/edsp/edspsystem.cc +++ b/apt-pkg/edsp/edspsystem.cc @@ -86,8 +86,10 @@ bool edspSystem::ArchiveSupported(const char *Type) // System::Score - Determine if we should use the edsp system /*{{{*/ signed edspSystem::Score(Configuration const &Cnf) { + if (Cnf.Find("Dir::State::universe", "") == "stdin") + return 1000; if (FileExists(Cnf.FindFile("Dir::State::universe","")) == true) - return 1000; + return 1000; return -1000; } /*}}}*/ @@ -95,7 +97,12 @@ signed edspSystem::Score(Configuration const &Cnf) bool edspSystem::AddStatusFiles(vector &List) { if (StatusFile == 0) - StatusFile = new edspIndex(_config->FindFile("Dir::State::universe")); + { + if (_config->Find("Dir::State::universe", "") == "stdin") + StatusFile = new edspIndex("stdin"); + else + StatusFile = new edspIndex(_config->FindFile("Dir::State::universe")); + } List.push_back(StatusFile); return true; } -- cgit v1.2.3 From e0a78caad639a3fa8d50edf3374a06805ab86315 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 31 Mar 2011 11:58:24 +0200 Subject: rename the 'universe' to 'scenario' to reflect the naming in the draft --- apt-pkg/edsp/edspsystem.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'apt-pkg/edsp/edspsystem.cc') diff --git a/apt-pkg/edsp/edspsystem.cc b/apt-pkg/edsp/edspsystem.cc index c8e417b1d..3a0494e19 100644 --- a/apt-pkg/edsp/edspsystem.cc +++ b/apt-pkg/edsp/edspsystem.cc @@ -2,7 +2,7 @@ // Description /*{{{*/ /* ###################################################################### - This system provides the abstraction to use the universe file as the + This system provides the abstraction to use the scenario file as the only source of package information to be able to feed the created file back to APT for its own consumption (eat your own dogfood). @@ -86,9 +86,9 @@ bool edspSystem::ArchiveSupported(const char *Type) // System::Score - Determine if we should use the edsp system /*{{{*/ signed edspSystem::Score(Configuration const &Cnf) { - if (Cnf.Find("Dir::State::universe", "") == "stdin") + if (Cnf.Find("Dir::State::edsp::scenario", "") == "stdin") return 1000; - if (FileExists(Cnf.FindFile("Dir::State::universe","")) == true) + if (FileExists(Cnf.FindFile("Dir::State::edsp::scenario","")) == true) return 1000; return -1000; } @@ -98,10 +98,10 @@ bool edspSystem::AddStatusFiles(vector &List) { if (StatusFile == 0) { - if (_config->Find("Dir::State::universe", "") == "stdin") + if (_config->Find("Dir::State::edsp::scenario", "") == "stdin") StatusFile = new edspIndex("stdin"); else - StatusFile = new edspIndex(_config->FindFile("Dir::State::universe")); + StatusFile = new edspIndex(_config->FindFile("Dir::State::edsp::scenario")); } List.push_back(StatusFile); return true; -- cgit v1.2.3 From 85bcab87a3c6f8d4b1369a5a4bd5a73a28f41dce Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 31 Mar 2011 14:50:34 +0200 Subject: strip the Dir::state from the config name as it will never be there --- apt-pkg/edsp/edspsystem.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'apt-pkg/edsp/edspsystem.cc') diff --git a/apt-pkg/edsp/edspsystem.cc b/apt-pkg/edsp/edspsystem.cc index 3a0494e19..ac0bb8beb 100644 --- a/apt-pkg/edsp/edspsystem.cc +++ b/apt-pkg/edsp/edspsystem.cc @@ -86,9 +86,9 @@ bool edspSystem::ArchiveSupported(const char *Type) // System::Score - Determine if we should use the edsp system /*{{{*/ signed edspSystem::Score(Configuration const &Cnf) { - if (Cnf.Find("Dir::State::edsp::scenario", "") == "stdin") + if (Cnf.Find("edsp::scenario", "") == "stdin") return 1000; - if (FileExists(Cnf.FindFile("Dir::State::edsp::scenario","")) == true) + if (FileExists(Cnf.FindFile("edsp::scenario","")) == true) return 1000; return -1000; } @@ -98,10 +98,10 @@ bool edspSystem::AddStatusFiles(vector &List) { if (StatusFile == 0) { - if (_config->Find("Dir::State::edsp::scenario", "") == "stdin") + if (_config->Find("edsp::scenario", "") == "stdin") StatusFile = new edspIndex("stdin"); else - StatusFile = new edspIndex(_config->FindFile("Dir::State::edsp::scenario")); + StatusFile = new edspIndex(_config->FindFile("edsp::scenario")); } List.push_back(StatusFile); return true; -- cgit v1.2.3