1 // -*- mode: cpp; mode: fold -*-
3 /* ######################################################################
5 SourceList - Manage a list of sources
7 The Source List class provides access to a list of sources. It
8 can read them from a file and generate a list of all the distinct
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
15 The types are mapped through a list of type definitions which handle
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
20 ##################################################################### */
22 #ifndef PKGLIB_SOURCELIST_H
23 #define PKGLIB_SOURCELIST_H
25 #include <apt-pkg/pkgcache.h>
26 #include <apt-pkg/cacheiterators.h>
27 #include <apt-pkg/macros.h>
35 #ifndef APT_8_CLEANER_HEADERS
36 #include <apt-pkg/tagfile.h>
38 #ifndef APT_8_CLEANER_HEADERS
39 #include <apt-pkg/metaindex.h>
54 std::vector
<pkgIndexFile
*> VolatileFiles
;
57 // List of supported source list types
62 // Global list of Items supported
63 static Type
**GlobalList
;
64 static unsigned long GlobalListLen
;
65 static Type
*GetType(const char *Type
) APT_PURE
;
67 char const * const Name
;
68 char const * const Label
;
70 bool FixupURI(std::string
&URI
) const;
71 virtual bool ParseStanza(std::vector
<metaIndex
*> &List
,
73 unsigned int const stanza_n
,
75 virtual bool ParseLine(std::vector
<metaIndex
*> &List
,
77 unsigned int const CurLine
,std::string
const &File
) const;
78 virtual bool CreateItem(std::vector
<metaIndex
*> &List
,std::string
const &URI
,
79 std::string
const &Dist
,std::string
const &Section
,
80 std::map
<std::string
, std::string
> const &Options
) const = 0;
81 Type(char const * const Name
, char const * const Label
);
85 typedef std::vector
<metaIndex
*>::const_iterator const_iterator
;
89 std::vector
<metaIndex
*> SrcList
;
92 APT_HIDDEN
bool ParseFileDeb822(std::string
const &File
);
93 APT_HIDDEN
bool ParseFileOldStyle(std::string
const &File
);
98 bool Read(std::string
const &File
);
102 bool ReadAppend(std::string
const &File
);
103 bool ReadSourceDir(std::string
const &Dir
);
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();};
111 bool FindIndex(pkgCache::PkgFileIterator File
,
112 pkgIndexFile
*&Found
) const;
113 bool GetIndexes(pkgAcquire
*Owner
, bool GetAll
=false) const;
115 // query last-modified time
116 time_t GetLastModifiedTime();
118 /** \brief add file for parsing, but not to the cache
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.
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.
130 * @param File is an index file; pointer-ownership is transferred
132 void AddVolatileFile(pkgIndexFile
* const File
);
133 bool AddVolatileFile(std::string
const &File
);
134 void AddVolatileFiles(CommandLine
&CmdL
, std::vector
<const char*> * const VolatileCmdL
);
136 /** @return list of files registered with #AddVolatileFile */
137 std::vector
<pkgIndexFile
*> GetVolatileFiles() const;
140 virtual ~pkgSourceList();