]> git.saurik.com Git - apt.git/blame - apt-pkg/indexfile.h
Determine the candidate based on per-version pins, instead of old code
[apt.git] / apt-pkg / indexfile.h
CommitLineData
b2e465d6
AL
1// -*- mode: cpp; mode: fold -*-
2// Description /*{{{*/
b2e465d6
AL
3/* ######################################################################
4
5 Index File - Abstraction for an index of archive/source file.
6
a52f938b 7 There are 4 primary sorts of index files, all represented by this
b2e465d6
AL
8 class:
9
10 Binary index files
a52f938b 11 Binary translation files
1e3f4083 12 Binary index files describing the local system
b2e465d6
AL
13 Source index files
14
15 They are all bundled together here, and the interfaces for
16 sources.list, acquire, cache gen and record parsing all use this class
1e3f4083 17 to access the underlying representation.
b2e465d6
AL
18
19 ##################################################################### */
20 /*}}}*/
21#ifndef PKGLIB_INDEXFILE_H
22#define PKGLIB_INDEXFILE_H
23
b2e465d6
AL
24#include <apt-pkg/srcrecords.h>
25#include <apt-pkg/pkgrecords.h>
453b82a3
DK
26#include <apt-pkg/pkgcache.h>
27#include <apt-pkg/cacheiterators.h>
472ff00e 28#include <apt-pkg/macros.h>
0a843901 29
e3c1cfc7 30#include <map>
453b82a3
DK
31#include <string>
32
a4f6bdc8
DK
33#ifndef APT_8_CLEANER_HEADERS
34using std::string;
35#endif
453b82a3 36#ifndef APT_10_CLEANER_HEADERS
b2e465d6 37class pkgAcquire;
453b82a3
DK
38#endif
39
b2e465d6
AL
40class pkgCacheGenerator;
41class OpProgress;
472ff00e 42
e3c1cfc7
DK
43class IndexTarget /*{{{*/
44/** \brief Information about an index file. */
45{
46 public:
47 /** \brief A URI from which the index file can be downloaded. */
48 std::string URI;
49
50 /** \brief A description of the index file. */
51 std::string Description;
52
53 /** \brief A shorter description of the index file. */
54 std::string ShortDesc;
55
56 /** \brief The key by which this index file should be
57 looked up within the meta index file. */
58 std::string MetaKey;
59
60 /** \brief Is it okay if the file isn't found in the meta index */
61 bool IsOptional;
62
001c76fe
DK
63 /** \brief options with which this target was created
64 Prefer the usage of #Option if at all possible.
65 Beware: Not all of these options are intended for public use */
e3c1cfc7
DK
66 std::map<std::string, std::string> Options;
67
68 IndexTarget(std::string const &MetaKey, std::string const &ShortDesc,
69 std::string const &LongDesc, std::string const &URI, bool const IsOptional,
70 std::map<std::string, std::string> const &Options);
71
001c76fe
DK
72 enum OptionKeys {
73 SITE,
74 RELEASE,
75 COMPONENT,
76 LANGUAGE,
77 ARCHITECTURE,
78 BASE_URI,
79 REPO_URI,
80 CREATED_BY,
8881b11e
DK
81 TARGET_OF,
82 FILENAME,
3fd89e62 83 EXISTING_FILENAME,
001c76fe
DK
84 };
85 std::string Option(OptionKeys const Key) const;
8881b11e 86 std::string Format(std::string format) const;
e3c1cfc7
DK
87};
88 /*}}}*/
89
b2e465d6
AL
90class pkgIndexFile
91{
c8a4ce6c 92 void *d;
7db98ffc
MZ
93 protected:
94 bool Trusted;
e3c1cfc7 95
b2e465d6
AL
96 public:
97
98 class Type
99 {
100 public:
e3c1cfc7 101
b2e465d6
AL
102 // Global list of Items supported
103 static Type **GlobalList;
104 static unsigned long GlobalListLen;
a02db58f 105 static Type *GetType(const char *Type) APT_PURE;
b2e465d6
AL
106
107 const char *Label;
108
db5c1b54 109 virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator /*File*/) const {return 0;};
a49e7948 110 virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string /*File*/) const {return 0;};
b2e465d6 111 Type();
0432d731 112 virtual ~Type() {};
b2e465d6
AL
113 };
114
115 virtual const Type *GetType() const = 0;
116
117 // Return descriptive strings of various sorts
8f3ba4e8
DK
118 virtual std::string ArchiveInfo(pkgCache::VerIterator Ver) const;
119 virtual std::string SourceInfo(pkgSrcRecords::Parser const &Record,
b2e465d6 120 pkgSrcRecords::File const &File) const;
e3c1cfc7 121 virtual std::string Describe(bool Short = false) const = 0;
b2e465d6
AL
122
123 // Interface for acquire
8f3ba4e8 124 virtual std::string ArchiveURI(std::string /*File*/) const {return std::string();};
b2e465d6
AL
125
126 // Interface for the record parsers
127 virtual pkgSrcRecords::Parser *CreateSrcParser() const {return 0;};
128
129 // Interface for the Cache Generator
130 virtual bool Exists() const = 0;
131 virtual bool HasPackages() const = 0;
132 virtual unsigned long Size() const = 0;
65512241 133 virtual bool Merge(pkgCacheGenerator &/*Gen*/, OpProgress* /*Prog*/) const { return false; };
453b82a3 134 APT_DEPRECATED virtual bool Merge(pkgCacheGenerator &Gen, OpProgress &Prog) const
2e5f4e45 135 { return Merge(Gen, &Prog); };
65512241 136 virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,OpProgress* /*Prog*/) const {return true;};
453b82a3 137 APT_DEPRECATED virtual bool MergeFileProvides(pkgCacheGenerator &Gen, OpProgress &Prog) const
2e5f4e45 138 {return MergeFileProvides(Gen, &Prog);};
b2e465d6 139 virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
7db98ffc 140
770c32ec 141 static bool TranslationsAvailable();
a52f938b 142 static bool CheckLanguageCode(const char *Lang);
8f3ba4e8 143 static std::string LanguageCode();
a52f938b 144
7db98ffc 145 bool IsTrusted() const { return Trusted; };
e3c1cfc7
DK
146
147 pkgIndexFile(bool Trusted);
c8a4ce6c 148 virtual ~pkgIndexFile();
b2e465d6
AL
149};
150
e3c1cfc7
DK
151class pkgIndexTargetFile : public pkgIndexFile
152{
c8a4ce6c 153 void *d;
e3c1cfc7
DK
154protected:
155 IndexTarget const Target;
156
157 std::string IndexFileName() const;
158
159public:
160 virtual std::string ArchiveURI(std::string File) const;
161 virtual std::string Describe(bool Short = false) const;
162 virtual bool Exists() const;
163 virtual unsigned long Size() const;
164
165 pkgIndexTargetFile(IndexTarget const &Target, bool const Trusted);
c8a4ce6c 166 virtual ~pkgIndexTargetFile();
e3c1cfc7
DK
167};
168
b2e465d6 169#endif