123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- // -*- mode: cpp; mode: fold -*-
- // Description /*{{{*/
- /* ######################################################################
- Index File - Abstraction for an index of archive/source file.
-
- There are 4 primary sorts of index files, all represented by this
- class:
-
- Binary index files
- Binary translation files
- Binary index files describing the local system
- Source index files
-
- They are all bundled together here, and the interfaces for
- sources.list, acquire, cache gen and record parsing all use this class
- to access the underlying representation.
-
- ##################################################################### */
- /*}}}*/
- #ifndef PKGLIB_INDEXFILE_H
- #define PKGLIB_INDEXFILE_H
- #include <apt-pkg/srcrecords.h>
- #include <apt-pkg/pkgrecords.h>
- #include <apt-pkg/pkgcache.h>
- #include <apt-pkg/cacheiterators.h>
- #include <apt-pkg/macros.h>
- #include <map>
- #include <string>
- #ifndef APT_8_CLEANER_HEADERS
- using std::string;
- #endif
- #ifndef APT_10_CLEANER_HEADERS
- class pkgAcquire;
- #endif
- class pkgCacheGenerator;
- class pkgCacheListParser;
- class OpProgress;
- class IndexTarget /*{{{*/
- /** \brief Information about an index file. */
- {
- public:
- /** \brief A URI from which the index file can be downloaded. */
- std::string URI;
- /** \brief A description of the index file. */
- std::string Description;
- /** \brief A shorter description of the index file. */
- std::string ShortDesc;
- /** \brief The key by which this index file should be
- looked up within the meta index file. */
- std::string MetaKey;
- /** \brief Is it okay if the file isn't found in the meta index */
- bool IsOptional;
- /** \brief If the file is downloaded compressed, do not unpack it */
- bool KeepCompressed;
- /** \brief options with which this target was created
- Prefer the usage of #Option if at all possible.
- Beware: Not all of these options are intended for public use */
- std::map<std::string, std::string> Options;
- IndexTarget(std::string const &MetaKey, std::string const &ShortDesc,
- std::string const &LongDesc, std::string const &URI, bool const IsOptional,
- bool const KeepCompressed, std::map<std::string, std::string> const &Options);
- enum OptionKeys {
- SITE,
- RELEASE,
- COMPONENT,
- LANGUAGE,
- ARCHITECTURE,
- BASE_URI,
- REPO_URI,
- CREATED_BY,
- TARGET_OF,
- FILENAME,
- EXISTING_FILENAME,
- PDIFFS,
- COMPRESSIONTYPES,
- DEFAULTENABLED,
- SOURCESENTRY,
- BY_HASH,
- KEEPCOMPRESSEDAS,
- FALLBACK_OF,
- IDENTIFIER,
- ALLOW_INSECURE,
- ALLOW_WEAK,
- ALLOW_DOWNGRADE_TO_INSECURE,
- };
- std::string Option(OptionKeys const Key) const;
- bool OptionBool(OptionKeys const Key) const;
- std::string Format(std::string format) const;
- };
- /*}}}*/
- class pkgIndexFile
- {
- void * const d;
- protected:
- bool Trusted;
- public:
- class Type
- {
- public:
- // Global list of Items supported
- static Type **GlobalList;
- static unsigned long GlobalListLen;
- static Type *GetType(const char * const Type) APT_PURE;
- const char *Label;
- virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator const &/*File*/) const {return 0;};
- virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string const &/*File*/) const {return 0;};
- Type();
- virtual ~Type() {};
- };
- virtual const Type *GetType() const = 0;
-
- // Return descriptive strings of various sorts
- virtual std::string ArchiveInfo(pkgCache::VerIterator const &Ver) const;
- virtual std::string SourceInfo(pkgSrcRecords::Parser const &Record,
- pkgSrcRecords::File const &File) const;
- virtual std::string Describe(bool const Short = false) const = 0;
- // Interface for acquire
- virtual std::string ArchiveURI(std::string const &/*File*/) const {return std::string();};
- // Interface for the record parsers
- virtual pkgSrcRecords::Parser *CreateSrcParser() const {return 0;};
-
- // Interface for the Cache Generator
- virtual bool Exists() const = 0;
- virtual bool HasPackages() const = 0;
- virtual unsigned long Size() const = 0;
- virtual bool Merge(pkgCacheGenerator &/*Gen*/, OpProgress* const /*Prog*/) { return true; };
- virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
- APT_DEPRECATED_MSG("These methods make no sense anymore with multi-language support") static bool TranslationsAvailable();
- /* No intern need for this method anymore as the check for correctness
- is already done in getLanguages(). Note also that this check is
- rather bad (doesn't take three character like ast into account).*/
- APT_DEPRECATED_MSG("These methods make no sense anymore with multi-language support") static bool CheckLanguageCode(const char * const Lang);
- /* As we have now possibly more than one LanguageCode this method is
- superseeded by a) private classmembers or b) getLanguages() */
- APT_DEPRECATED_MSG("These methods make no sense anymore with multi-language support") static std::string LanguageCode();
- bool IsTrusted() const { return Trusted; };
- explicit pkgIndexFile(bool const Trusted);
- virtual ~pkgIndexFile();
- };
- class pkgDebianIndexFile : public pkgIndexFile
- {
- protected:
- virtual std::string IndexFileName() const = 0;
- virtual std::string GetComponent() const = 0;
- virtual std::string GetArchitecture() const = 0;
- virtual std::string GetProgressDescription() const = 0;
- virtual uint8_t GetIndexFlags() const = 0;
- virtual bool OpenListFile(FileFd &Pkg, std::string const &FileName) = 0;
- APT_HIDDEN virtual pkgCacheListParser * CreateListParser(FileFd &Pkg);
- public:
- virtual bool Merge(pkgCacheGenerator &Gen, OpProgress* const Prog) APT_OVERRIDE;
- virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const APT_OVERRIDE;
- explicit pkgDebianIndexFile(bool const Trusted);
- virtual ~pkgDebianIndexFile();
- };
- class pkgDebianIndexTargetFile : public pkgDebianIndexFile
- {
- void * const d;
- protected:
- IndexTarget const Target;
- virtual std::string IndexFileName() const APT_OVERRIDE;
- virtual std::string GetComponent() const APT_OVERRIDE;
- virtual std::string GetArchitecture() const APT_OVERRIDE;
- virtual std::string GetProgressDescription() const APT_OVERRIDE;
- virtual bool OpenListFile(FileFd &Pkg, std::string const &FileName) APT_OVERRIDE;
- public:
- virtual std::string ArchiveURI(std::string const &File) const APT_OVERRIDE;
- virtual std::string Describe(bool const Short = false) const APT_OVERRIDE;
- virtual bool Exists() const APT_OVERRIDE;
- virtual unsigned long Size() const APT_OVERRIDE;
- pkgDebianIndexTargetFile(IndexTarget const &Target, bool const Trusted);
- virtual ~pkgDebianIndexTargetFile();
- };
- class pkgDebianIndexRealFile : public pkgDebianIndexFile
- {
- void * const d;
- protected:
- std::string File;
- virtual std::string IndexFileName() const APT_OVERRIDE;
- virtual std::string GetProgressDescription() const APT_OVERRIDE;
- virtual bool OpenListFile(FileFd &Pkg, std::string const &FileName) APT_OVERRIDE;
- public:
- virtual std::string Describe(bool const /*Short*/ = false) const APT_OVERRIDE;
- virtual bool Exists() const APT_OVERRIDE;
- virtual unsigned long Size() const APT_OVERRIDE;
- virtual std::string ArchiveURI(std::string const &/*File*/) const APT_OVERRIDE;
- pkgDebianIndexRealFile(std::string const &File, bool const Trusted);
- virtual ~pkgDebianIndexRealFile();
- };
- #endif
|