]> git.saurik.com Git - apt.git/blame - apt-pkg/sourcelist.h
tests: don't do boundless string compares with data()
[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;
14341a7e 49class CommandLine;
472ff00e 50
0dc0b42d 51class pkgSourceList
6c139d6e 52{
6c55f07a 53 void * const d;
5465192b 54 std::vector<pkgIndexFile*> VolatileFiles;
6c139d6e 55 public:
0dc0b42d 56
b2e465d6
AL
57 // List of supported source list types
58 class Type
6c139d6e 59 {
b2e465d6 60 public:
0dc0b42d 61
b2e465d6
AL
62 // Global list of Items supported
63 static Type **GlobalList;
64 static unsigned long GlobalListLen;
a02db58f 65 static Type *GetType(const char *Type) APT_PURE;
b2e465d6 66
463c8d80
DK
67 char const * const Name;
68 char const * const Label;
b2e465d6 69
73688d27 70 bool FixupURI(std::string &URI) const;
7037aab5
MV
71 virtual bool ParseStanza(std::vector<metaIndex *> &List,
72 pkgTagSection &Tags,
81460e32 73 unsigned int const stanza_n,
7037aab5 74 FileFd &Fd);
b9dadc24 75 virtual bool ParseLine(std::vector<metaIndex *> &List,
b2e465d6 76 const char *Buffer,
81460e32 77 unsigned int const CurLine,std::string const &File) const;
73688d27 78 virtual bool CreateItem(std::vector<metaIndex *> &List,std::string const &URI,
b9dadc24
DK
79 std::string const &Dist,std::string const &Section,
80 std::map<std::string, std::string> const &Options) const = 0;
463c8d80
DK
81 Type(char const * const Name, char const * const Label);
82 virtual ~Type();
6c139d6e 83 };
0dc0b42d 84
b9dadc24 85 typedef std::vector<metaIndex *>::const_iterator const_iterator;
0dc0b42d
DK
86
87 protected:
88
89 std::vector<metaIndex *> SrcList;
a7c835af 90
81460e32
DK
91 private:
92 APT_HIDDEN bool ParseFileDeb822(std::string const &File);
93 APT_HIDDEN bool ParseFileOldStyle(std::string const &File);
6f447813 94
0dc0b42d
DK
95 public:
96
6c139d6e 97 bool ReadMainList();
81460e32 98 bool Read(std::string const &File);
34b53501
MV
99
100 // CNC:2003-03-03
101 void Reset();
81460e32
DK
102 bool ReadAppend(std::string const &File);
103 bool ReadSourceDir(std::string const &Dir);
6c139d6e
AL
104
105 // List accessors
a7c835af
AL
106 inline const_iterator begin() const {return SrcList.begin();};
107 inline const_iterator end() const {return SrcList.end();};
108 inline unsigned int size() const {return SrcList.size();};
109 inline bool empty() const {return SrcList.empty();};
0118833a 110
b2e465d6
AL
111 bool FindIndex(pkgCache::PkgFileIterator File,
112 pkgIndexFile *&Found) const;
b3d44315 113 bool GetIndexes(pkgAcquire *Owner, bool GetAll=false) const;
b2e465d6 114
2ec858bc
MV
115 // query last-modified time
116 time_t GetLastModifiedTime();
117
5465192b
DK
118 /** \brief add file for parsing, but not to the cache
119 *
120 * pkgIndexFiles origining from pkgSourcesList are included in
121 * srcpkgcache, the status files added via #AddStatusFiles are
122 * included in pkgcache, but these files here are not included in
123 * any cache to have the possibility of having a file included just
124 * for a single run like a local .deb/.dsc file.
125 *
126 * The volatile files do not count as "normal" sourceslist entries,
127 * can't be iterated over with #begin and #end and can't be
128 * downloaded, but they can be found via #FindIndex.
129 *
130 * @param File is an index file; pointer-ownership is transferred
131 */
132 void AddVolatileFile(pkgIndexFile * const File);
14341a7e 133 bool AddVolatileFile(std::string const &File);
92296fe4
DK
134 bool AddVolatileFile(std::string const &File, std::vector<std::string> * const VolatileCmdL);
135 APT_DEPRECATED_MSG("Use the overload with string-vector") void AddVolatileFiles(CommandLine &CmdL, std::vector<const char*> * const VolatileCmdL);
136 void AddVolatileFiles(CommandLine &CmdL, std::vector<std::string> * const VolatileCmdL);
14341a7e 137
5465192b
DK
138 /** @return list of files registered with #AddVolatileFile */
139 std::vector<pkgIndexFile*> GetVolatileFiles() const;
140
6c139d6e 141 pkgSourceList();
c8a4ce6c 142 virtual ~pkgSourceList();
6c139d6e
AL
143};
144
6c139d6e 145#endif