]> git.saurik.com Git - apt.git/blob - apt-pkg/edsp/edspsystem.cc
just-in-time creation for (explicit) negative deps
[apt.git] / apt-pkg / edsp / edspsystem.cc
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 /* ######################################################################
4
5 This system provides the abstraction to use the scenario file as the
6 only source of package information to be able to feed the created file
7 back to APT for its own consumption (eat your own dogfood).
8
9 ##################################################################### */
10 /*}}}*/
11 // Include Files /*{{{*/
12 #include <config.h>
13
14 #include <apt-pkg/configuration.h>
15 #include <apt-pkg/debversion.h>
16 #include <apt-pkg/edspindexfile.h>
17 #include <apt-pkg/edspsystem.h>
18 #include <apt-pkg/fileutl.h>
19 #include <apt-pkg/pkgcache.h>
20 #include <apt-pkg/cacheiterators.h>
21
22 #include <stddef.h>
23 #include <string>
24 #include <vector>
25
26 #include <apti18n.h>
27 /*}}}*/
28
29 // System::edspSystem - Constructor /*{{{*/
30 edspSystem::edspSystem() : pkgSystem("Debian APT solver interface", &debVS), d(NULL), StatusFile(NULL)
31 {
32 }
33 /*}}}*/
34 // System::~debSystem - Destructor /*{{{*/
35 edspSystem::~edspSystem()
36 {
37 delete StatusFile;
38 }
39 /*}}}*/
40 // System::Lock - Get the lock /*{{{*/
41 bool edspSystem::Lock()
42 {
43 return true;
44 }
45 /*}}}*/
46 // System::UnLock - Drop a lock /*{{{*/
47 bool edspSystem::UnLock(bool /*NoErrors*/)
48 {
49 return true;
50 }
51 /*}}}*/
52 // System::CreatePM - Create the underlying package manager /*{{{*/
53 // ---------------------------------------------------------------------
54 /* we can't use edsp input as input for real installations - just a
55 simulation can work, but everything else will fail bigtime */
56 pkgPackageManager *edspSystem::CreatePM(pkgDepCache * /*Cache*/) const
57 {
58 return NULL;
59 }
60 /*}}}*/
61 // System::Initialize - Setup the configuration space.. /*{{{*/
62 bool edspSystem::Initialize(Configuration &Cnf)
63 {
64 Cnf.Set("Dir::State::extended_states", "/dev/null");
65 Cnf.Set("Dir::State::status","/dev/null");
66 Cnf.Set("Dir::State::lists","/dev/null");
67
68 Cnf.Set("Debug::NoLocking", "true");
69 Cnf.Set("APT::Get::Simulate", "true");
70
71 if (StatusFile) {
72 delete StatusFile;
73 StatusFile = 0;
74 }
75 return true;
76 }
77 /*}}}*/
78 // System::ArchiveSupported - Is a file format supported /*{{{*/
79 bool edspSystem::ArchiveSupported(const char * /*Type*/)
80 {
81 return false;
82 }
83 /*}}}*/
84 // System::Score - Determine if we should use the edsp system /*{{{*/
85 signed edspSystem::Score(Configuration const &Cnf)
86 {
87 if (Cnf.Find("edsp::scenario", "") == "stdin")
88 return 1000;
89 if (RealFileExists(Cnf.FindFile("edsp::scenario","")) == true)
90 return 1000;
91 return -1000;
92 }
93 /*}}}*/
94 // System::AddStatusFiles - Register the status files /*{{{*/
95 bool edspSystem::AddStatusFiles(std::vector<pkgIndexFile *> &List)
96 {
97 if (StatusFile == 0)
98 {
99 if (_config->Find("edsp::scenario", "") == "stdin")
100 StatusFile = new edspIndex("stdin");
101 else
102 StatusFile = new edspIndex(_config->FindFile("edsp::scenario"));
103 }
104 List.push_back(StatusFile);
105 return true;
106 }
107 /*}}}*/
108 // System::FindIndex - Get an index file for status files /*{{{*/
109 bool edspSystem::FindIndex(pkgCache::PkgFileIterator File,
110 pkgIndexFile *&Found) const
111 {
112 if (StatusFile == 0)
113 return false;
114 if (StatusFile->FindInCache(*File.Cache()) == File)
115 {
116 Found = StatusFile;
117 return true;
118 }
119
120 return false;
121 }
122 /*}}}*/
123
124 APT_HIDDEN edspSystem edspSys;