| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- // -*- mode: cpp; mode: fold -*-
- // Description /*{{{*/
- /* ######################################################################
- The scenario file is designed to work as an intermediate file between
- APT and the resolver. Its on propose very similar to a dpkg status file
- ##################################################################### */
- /*}}}*/
- // Include Files /*{{{*/
- #include <config.h>
- #include <apt-pkg/edspindexfile.h>
- #include <apt-pkg/edsplistparser.h>
- #include <apt-pkg/error.h>
- #include <apt-pkg/fileutl.h>
- #include <apt-pkg/progress.h>
- #include <apt-pkg/debindexfile.h>
- #include <apt-pkg/indexfile.h>
- #include <apt-pkg/mmap.h>
- #include <apt-pkg/pkgcache.h>
- #include <apt-pkg/cacheiterators.h>
- #include <apt-pkg/pkgcachegen.h>
- #include <apt-pkg/pkgrecords.h>
- #include <stddef.h>
- #include <unistd.h>
- #include <string>
- /*}}}*/
- // edspIndex::edspIndex - Constructor /*{{{*/
- // ---------------------------------------------------------------------
- /* */
- edspIndex::edspIndex(std::string File) : debStatusIndex(File)
- {
- }
- /*}}}*/
- // StatusIndex::Merge - Load the index file into a cache /*{{{*/
- bool edspIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
- {
- FileFd Pkg;
- if (File != "stdin")
- Pkg.Open(File, FileFd::ReadOnly);
- else
- Pkg.OpenDescriptor(STDIN_FILENO, FileFd::ReadOnly);
- if (_error->PendingError() == true)
- return false;
- edspListParser Parser(&Pkg);
- if (_error->PendingError() == true)
- return false;
- if (Prog != NULL)
- Prog->SubProgress(0,File);
- if (Gen.SelectFile(File,std::string(),*this) == false)
- return _error->Error("Problem with SelectFile %s",File.c_str());
- // Store the IMS information
- pkgCache::PkgFileIterator CFile = Gen.GetCurFile();
- CFile->Size = Pkg.FileSize();
- CFile->mtime = Pkg.ModificationTime();
- map_stringitem_t const storage = Gen.StoreString(pkgCacheGenerator::MIXED, "edsp::scenario");
- CFile->Archive = storage;
- if (Gen.MergeList(Parser) == false)
- return _error->Error("Problem with MergeList %s",File.c_str());
- return true;
- }
- /*}}}*/
- // Index File types for APT /*{{{*/
- class edspIFType: public pkgIndexFile::Type
- {
- public:
- virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator) const
- {
- // we don't have a record parser for this type as the file is not presistent
- return NULL;
- };
- edspIFType() {Label = "EDSP scenario file";};
- };
- static edspIFType _apt_Universe;
- const pkgIndexFile::Type *edspIndex::GetType() const
- {
- return &_apt_Universe;
- }
- /*}}}*/
|