- initial import of revision 374 from cnc
[apt.git] / apt-pkg / rpm / rpmindexfile.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description                                                          /*{{{*/
3 // $Id $
4 /* ######################################################################
5
6    RPM Index Files
7    
8    There are three sorts currently
9    
10    pkglist files
11    The system RPM database
12    srclist files
13    
14    ##################################################################### 
15  */
16                                                                         /*}}}*/
17 #ifndef PKGLIB_RPMINDEXFILE_H
18 #define PKGLIB_RPMINDEXFILE_H
19
20 #ifdef __GNUG__
21 #pragma interface "apt-pkg/rpmindexfile.h"
22 #endif
23
24 #include <apt-pkg/indexfile.h>
25 #include <apt-pkg/rpmhandler.h>
26
27 class RPMHandler;
28 class RPMDBHandler;
29 class pkgRepository;
30
31 class rpmIndexFile : public pkgIndexFile
32 {
33    
34    public:
35
36    virtual RPMHandler *CreateHandler() const = 0;
37    virtual bool HasPackages() const {return false;};
38
39 };
40
41 class rpmDatabaseIndex : public rpmIndexFile
42 {
43    public:
44
45    virtual const Type *GetType() const;
46
47    // Creates a RPMHandler suitable for usage with this object
48    virtual RPMHandler *CreateHandler() const;
49    
50    // Interface for acquire
51    virtual string Describe(bool Short) const {return "RPM Database";};
52    
53    // Interface for the Cache Generator
54    virtual bool Exists() const {return true;};
55    virtual unsigned long Size() const;
56    virtual bool HasPackages() const {return true;};
57    virtual bool Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const;
58    virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,
59                                   OpProgress &/*Prog*/) const;
60    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
61
62    rpmDatabaseIndex();
63 };
64
65 class rpmListIndex : public rpmIndexFile
66 {
67
68    protected:
69
70    string URI;
71    string Dist;
72    string Section;
73    pkgRepository *Repository;
74    
75    string ReleaseFile(string Type) const;
76    string ReleaseURI(string Type) const;   
77    string ReleaseInfo(string Type) const;   
78
79    string Info(string Type) const;
80    string IndexFile(string Type) const;
81    string IndexURI(string Type) const;   
82
83    virtual string MainType() const = 0;
84    virtual string IndexPath() const {return IndexFile(MainType());};
85    virtual string ReleasePath() const {return IndexFile("release");};
86
87    public:
88
89    virtual bool GetReleases(pkgAcquire *Owner) const;
90
91    // Interface for the Cache Generator
92    virtual bool Exists() const;
93    virtual unsigned long Size() const;
94
95    // Interface for acquire
96    virtual string Describe(bool Short) const;   
97
98    rpmListIndex(string URI,string Dist,string Section,
99                 pkgRepository *Repository) :
100                 URI(URI), Dist(Dist), Section(Section),
101                 Repository(Repository)
102         {};
103 };
104
105 class rpmPkgListIndex : public rpmListIndex
106 {
107    protected:
108
109    virtual string MainType() const {return "pkglist";}
110
111    public:
112
113    virtual const Type *GetType() const;
114    
115    // Creates a RPMHandler suitable for usage with this object
116    virtual RPMHandler *CreateHandler() const
117            { return new RPMFileHandler(IndexPath()); };
118
119    // Stuff for accessing files on remote items
120    virtual string ArchiveInfo(pkgCache::VerIterator Ver) const;
121    virtual string ArchiveURI(string File) const;
122    
123    // Interface for acquire
124    virtual bool GetIndexes(pkgAcquire *Owner) const;
125    
126    // Interface for the Cache Generator
127    virtual bool HasPackages() const {return true;};
128    virtual bool Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const;
129    virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,
130                                   OpProgress &/*Prog*/) const;
131    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
132
133    rpmPkgListIndex(string URI,string Dist,string Section,
134                    pkgRepository *Repository) :
135            rpmListIndex(URI,Dist,Section,Repository)
136       {};
137 };
138
139
140 class rpmSrcListIndex : public rpmListIndex
141 {
142    protected:
143
144    virtual string MainType() const {return "srclist";}
145
146    public:
147
148    virtual const Type *GetType() const;
149
150    // Creates a RPMHandler suitable for usage with this object
151    virtual RPMHandler *CreateHandler() const
152            { return new RPMFileHandler(IndexPath()); };
153
154    // Stuff for accessing files on remote items
155    virtual string SourceInfo(pkgSrcRecords::Parser const &Record,
156                              pkgSrcRecords::File const &File) const;
157    virtual string ArchiveURI(string File) const;
158    
159    // Interface for acquire
160    virtual bool GetIndexes(pkgAcquire *Owner) const;
161
162    // Interface for the record parsers
163    virtual pkgSrcRecords::Parser *CreateSrcParser() const;
164    
165
166    rpmSrcListIndex(string URI,string Dist,string Section,
167                    pkgRepository *Repository) :
168            rpmListIndex(URI,Dist,Section,Repository)
169       {};
170 };
171
172 class rpmPkgDirIndex : public rpmPkgListIndex
173 {
174    protected:
175
176    virtual string MainType() const {return "pkgdir";}
177    virtual string IndexPath() const;   
178    virtual string ReleasePath() const;
179
180    public:
181
182    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
183    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
184
185    // Creates a RPMHandler suitable for usage with this object
186    virtual RPMHandler *CreateHandler() const
187            { return new RPMDirHandler(IndexPath()); };
188
189    virtual const Type *GetType() const;
190    
191    // Interface for the Cache Generator
192    virtual unsigned long Size() const;
193
194    rpmPkgDirIndex(string URI,string Dist,string Section,
195                    pkgRepository *Repository) :
196            rpmPkgListIndex(URI,Dist,Section,Repository)
197       {};
198 };
199
200 class rpmSrcDirIndex : public rpmSrcListIndex
201 {
202    protected:
203
204    virtual string MainType() const {return "srcdir";}
205    virtual string IndexPath() const;   
206
207    public:
208
209    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
210    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
211
212    // Creates a RPMHandler suitable for usage with this object
213    virtual RPMHandler *CreateHandler() const
214            { return new RPMDirHandler(IndexPath()); };
215
216    virtual const Type *GetType() const;
217    
218    // Interface for the Cache Generator
219    virtual unsigned long Size() const;
220
221    rpmSrcDirIndex(string URI,string Dist,string Section,
222                    pkgRepository *Repository) :
223            rpmSrcListIndex(URI,Dist,Section,Repository)
224       {};
225 };
226
227 class rpmSinglePkgIndex : public rpmPkgListIndex
228 {
229    protected:
230
231    string FilePath;
232
233    virtual string MainType() const {return "pkg";}
234    virtual string IndexPath() const {return FilePath;}
235
236    public:
237
238    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
239    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
240
241    // Creates a RPMHandler suitable for usage with this object
242    virtual RPMHandler *CreateHandler() const
243            { return new RPMSingleFileHandler(IndexPath()); };
244
245    virtual string ArchiveURI(string File) const;
246
247    virtual const Type *GetType() const;
248    
249    rpmSinglePkgIndex(string File) :
250            rpmPkgListIndex("", "", "", NULL), FilePath(File) {};
251 };
252
253 class rpmSingleSrcIndex : public rpmSrcListIndex
254 {
255    protected:
256
257    string FilePath;
258
259    virtual string MainType() const {return "src";}
260    virtual string IndexPath() const {return FilePath;}
261
262    public:
263
264    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
265    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
266
267    // Creates a RPMHandler suitable for usage with this object
268    virtual RPMHandler *CreateHandler() const
269            { return new RPMSingleFileHandler(IndexPath()); };
270
271    virtual string ArchiveURI(string File) const;
272
273    virtual const Type *GetType() const;
274    
275    rpmSingleSrcIndex(string File) :
276            rpmSrcListIndex("", "", "", NULL), FilePath(File) {};
277 };
278
279 #endif