]> git.saurik.com Git - apt.git/blame - apt-pkg/sourcelist.h
implement autobit and pinning in EDSP solver 'apt'
[apt.git] / apt-pkg / sourcelist.h
CommitLineData
6c139d6e
AL
1// -*- mode: cpp; mode: fold -*-
2// Description /*{{{*/
6c139d6e
AL
3/* ######################################################################
4
5 SourceList - Manage a list of sources
6
7 The Source List class provides access to a list of sources. It
6fc33863
AL
8 can read them from a file and generate a list of all the distinct
9 sources.
10
11 All sources have a type associated with them that defines the layout
12 of the archive. The exact format of the file is documented in
13 files.sgml.
b2e465d6
AL
14
15 The types are mapped through a list of type definitions which handle
a7c835af
AL
16 the actual construction of the back end type. After loading a source
17 list all you have is a list of package index files that have the ability
b2e465d6 18 to be Acquired.
6c139d6e
AL
19
20 ##################################################################### */
21 /*}}}*/
6c139d6e
AL
22#ifndef PKGLIB_SOURCELIST_H
23#define PKGLIB_SOURCELIST_H
24
453b82a3
DK
25#include <apt-pkg/pkgcache.h>
26#include <apt-pkg/cacheiterators.h>
a02db58f 27#include <apt-pkg/macros.h>
453b82a3
DK
28
29#include <time.h>
30
6c139d6e
AL
31#include <string>
32#include <vector>
5dd4c8b8 33#include <map>
0a843901 34
453b82a3
DK
35#ifndef APT_8_CLEANER_HEADERS
36#include <apt-pkg/tagfile.h>
37#endif
b9dadc24
DK
38#ifndef APT_8_CLEANER_HEADERS
39#include <apt-pkg/metaindex.h>
0a843901
AL
40using std::string;
41using std::vector;
b9dadc24 42#endif
6c139d6e 43
453b82a3
DK
44class FileFd;
45class pkgTagSection;
472ff00e
DK
46class pkgAcquire;
47class pkgIndexFile;
48class metaIndex;
49
0dc0b42d 50class pkgSourceList
6c139d6e 51{
6c55f07a 52 void * const d;
5465192b 53 std::vector<pkgIndexFile*> VolatileFiles;
6c139d6e 54 public:
0dc0b42d 55
b2e465d6
AL
56 // List of supported source list types
57 class Type
6c139d6e 58 {
b2e465d6 59 public:
0dc0b42d 60
b2e465d6
AL
61 // Global list of Items supported
62 static Type **GlobalList;
63 static unsigned long GlobalListLen;
a02db58f 64 static Type *GetType(const char *Type) APT_PURE;
b2e465d6 65
463c8d80
DK
66 char const * const Name;
67 char const * const Label;
b2e465d6 68
73688d27 69 bool FixupURI(std::string &URI) const;
7037aab5
MV
70 virtual bool ParseStanza(std::vector<metaIndex *> &List,
71 pkgTagSection &Tags,
81460e32 72 unsigned int const stanza_n,
7037aab5 73 FileFd &Fd);
b9dadc24 74 virtual bool ParseLine(std::vector<metaIndex *> &List,
b2e465d6 75 const char *Buffer,
81460e32 76 unsigned int const CurLine,std::string const &File) const;
73688d27 77 virtual bool CreateItem(std::vector<metaIndex *> &List,std::string const &URI,
b9dadc24
DK
78 std::string const &Dist,std::string const &Section,
79 std::map<std::string, std::string> const &Options) const = 0;
463c8d80
DK
80 Type(char const * const Name, char const * const Label);
81 virtual ~Type();
6c139d6e 82 };
0dc0b42d 83
b9dadc24 84 typedef std::vector<metaIndex *>::const_iterator const_iterator;
0dc0b42d
DK
85
86 protected:
87
88 std::vector<metaIndex *> SrcList;
a7c835af 89
81460e32
DK
90 private:
91 APT_HIDDEN bool ParseFileDeb822(std::string const &File);
92 APT_HIDDEN bool ParseFileOldStyle(std::string const &File);
6f447813 93
0dc0b42d
DK
94 public:
95
6c139d6e 96 bool ReadMainList();
81460e32 97 bool Read(std::string const &File);
34b53501
MV
98
99 // CNC:2003-03-03
100 void Reset();
81460e32
DK
101 bool ReadAppend(std::string const &File);
102 bool ReadSourceDir(std::string const &Dir);
6c139d6e
AL
103
104 // List accessors
a7c835af
AL
105 inline const_iterator begin() const {return SrcList.begin();};
106 inline const_iterator end() const {return SrcList.end();};
107 inline unsigned int size() const {return SrcList.size();};
108 inline bool empty() const {return SrcList.empty();};
0118833a 109
b2e465d6
AL
110 bool FindIndex(pkgCache::PkgFileIterator File,
111 pkgIndexFile *&Found) const;
b3d44315 112 bool GetIndexes(pkgAcquire *Owner, bool GetAll=false) const;
b2e465d6 113
2ec858bc
MV
114 // query last-modified time
115 time_t GetLastModifiedTime();
116
5465192b
DK
117 /** \brief add file for parsing, but not to the cache
118 *
119 * pkgIndexFiles origining from pkgSourcesList are included in
120 * srcpkgcache, the status files added via #AddStatusFiles are
121 * included in pkgcache, but these files here are not included in
122 * any cache to have the possibility of having a file included just
123 * for a single run like a local .deb/.dsc file.
124 *
125 * The volatile files do not count as "normal" sourceslist entries,
126 * can't be iterated over with #begin and #end and can't be
127 * downloaded, but they can be found via #FindIndex.
128 *
129 * @param File is an index file; pointer-ownership is transferred
130 */
131 void AddVolatileFile(pkgIndexFile * const File);
132 /** @return list of files registered with #AddVolatileFile */
133 std::vector<pkgIndexFile*> GetVolatileFiles() const;
134
6c139d6e 135 pkgSourceList();
c8a4ce6c 136 virtual ~pkgSourceList();
6c139d6e
AL
137};
138
6c139d6e 139#endif