62505f7ed6732d4ca4fb82a4cf188df3fbac1a12
[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    virtual string IndexPath() const {return IndexFile(MainType());};
111
112    public:
113
114    virtual const Type *GetType() const;
115    
116    // Creates a RPMHandler suitable for usage with this object
117    virtual RPMHandler *CreateHandler() const
118            { return new RPMFileHandler(IndexPath()); };
119
120    // Stuff for accessing files on remote items
121    virtual string ArchiveInfo(pkgCache::VerIterator Ver) const;
122    virtual string ArchiveURI(string File) const;
123    
124    // Interface for acquire
125    virtual bool GetIndexes(pkgAcquire *Owner) const;
126    
127    // Interface for the Cache Generator
128    virtual bool HasPackages() const {return true;};
129    virtual bool Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const;
130    virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,
131                                   OpProgress &/*Prog*/) const;
132    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
133
134    rpmPkgListIndex(string URI,string Dist,string Section,
135                    pkgRepository *Repository) :
136            rpmListIndex(URI,Dist,Section,Repository)
137       {};
138 };
139
140
141 class rpmSrcListIndex : public rpmListIndex
142 {
143    protected:
144
145    virtual string MainType() const {return "srclist";}
146
147    public:
148
149    virtual const Type *GetType() const;
150
151    // Creates a RPMHandler suitable for usage with this object
152    virtual RPMHandler *CreateHandler() const
153            { return new RPMFileHandler(IndexPath()); };
154
155    // Stuff for accessing files on remote items
156    virtual string SourceInfo(pkgSrcRecords::Parser const &Record,
157                              pkgSrcRecords::File const &File) const;
158    virtual string ArchiveURI(string File) const;
159    
160    // Interface for acquire
161    virtual bool GetIndexes(pkgAcquire *Owner) const;
162
163    // Interface for the record parsers
164    virtual pkgSrcRecords::Parser *CreateSrcParser() const;
165    
166
167    rpmSrcListIndex(string URI,string Dist,string Section,
168                    pkgRepository *Repository) :
169            rpmListIndex(URI,Dist,Section,Repository)
170       {};
171 };
172
173 class rpmPkgDirIndex : public rpmPkgListIndex
174 {
175    protected:
176
177    virtual string MainType() const {return "pkgdir";}
178    virtual string IndexPath() const;   
179    virtual string ReleasePath() const;
180
181    public:
182
183    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
184    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
185
186    // Creates a RPMHandler suitable for usage with this object
187    virtual RPMHandler *CreateHandler() const
188            { return new RPMDirHandler(IndexPath()); };
189
190    virtual const Type *GetType() const;
191    
192    // Interface for the Cache Generator
193    virtual unsigned long Size() const;
194
195    rpmPkgDirIndex(string URI,string Dist,string Section,
196                    pkgRepository *Repository) :
197            rpmPkgListIndex(URI,Dist,Section,Repository)
198       {};
199 };
200
201 class rpmSrcDirIndex : public rpmSrcListIndex
202 {
203    protected:
204
205    virtual string MainType() const {return "srcdir";}
206    virtual string IndexPath() const;   
207
208    public:
209
210    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
211    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
212
213    // Creates a RPMHandler suitable for usage with this object
214    virtual RPMHandler *CreateHandler() const
215            { return new RPMDirHandler(IndexPath()); };
216
217    virtual const Type *GetType() const;
218    
219    // Interface for the Cache Generator
220    virtual unsigned long Size() const;
221
222    rpmSrcDirIndex(string URI,string Dist,string Section,
223                    pkgRepository *Repository) :
224            rpmSrcListIndex(URI,Dist,Section,Repository)
225       {};
226 };
227
228 class rpmSinglePkgIndex : public rpmPkgListIndex
229 {
230    protected:
231
232    string FilePath;
233
234    virtual string MainType() const {return "pkg";}
235    virtual string IndexPath() const {return FilePath;}
236
237    public:
238
239    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
240    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
241
242    // Creates a RPMHandler suitable for usage with this object
243    virtual RPMHandler *CreateHandler() const
244            { return new RPMSingleFileHandler(IndexPath()); };
245
246    virtual string ArchiveURI(string File) const;
247
248    virtual const Type *GetType() const;
249    
250    rpmSinglePkgIndex(string File) :
251            rpmPkgListIndex("", "", "", NULL), FilePath(File) {};
252 };
253
254 class rpmSingleSrcIndex : public rpmSrcListIndex
255 {
256    protected:
257
258    string FilePath;
259
260    virtual string MainType() const {return "src";}
261    virtual string IndexPath() const {return FilePath;}
262
263    public:
264
265    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
266    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
267
268    // Creates a RPMHandler suitable for usage with this object
269    virtual RPMHandler *CreateHandler() const
270            { return new RPMSingleFileHandler(IndexPath()); };
271
272    virtual string ArchiveURI(string File) const;
273
274    virtual const Type *GetType() const;
275    
276    rpmSingleSrcIndex(string File) :
277            rpmSrcListIndex("", "", "", NULL), FilePath(File) {};
278 };
279
280 class rpmRepomdIndex : public rpmIndexFile
281 {
282    protected:
283
284    string URI;
285    string Dist;
286    string Section;
287    pkgRepository *Repository;
288
289    string ReleaseFile(string Type) const;
290    string ReleaseURI(string Type) const;
291    string ReleaseInfo(string Type) const;
292
293    string Info(string Type) const;
294    string IndexFile(string Type) const;
295    string IndexURI(string Type) const;
296
297    virtual string MainType() const = 0;
298    virtual string IndexPath() const {return IndexFile(MainType());};
299    virtual string ReleasePath() const;
300
301    public:
302
303    // Creates a RPMHandler suitable for usage with this object
304    virtual RPMHandler *CreateHandler() const
305           { return new RPMRepomdHandler(IndexPath()); };
306
307    virtual bool GetReleases(pkgAcquire *Owner) const;
308
309    // Interface for the Cache Generator
310    virtual bool Exists() const;
311    virtual unsigned long Size() const {};
312
313    // Interface for acquire
314    virtual string Describe(bool Short) const;
315    virtual bool GetIndexes(pkgAcquire *Owner) const;
316    virtual string ChecksumType() {return "SHA1-Hash";};
317
318    virtual string ArchiveInfo(pkgCache::VerIterator Ver) const;
319    virtual string ArchiveURI(string File) const;
320
321    virtual bool Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const;
322    virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,
323                                   OpProgress &/*Prog*/) const;
324    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
325
326    rpmRepomdIndex(string URI,string Dist,string Section,
327                pkgRepository *Repository) :
328                        URI(URI), Dist(Dist), Section(Section),
329                Repository(Repository)
330        {};
331
332 };
333
334 class rpmRepomdPkgIndex : public rpmRepomdIndex
335 {
336    protected:
337
338    virtual string MainType() const {return "repomd";};
339
340    public:
341
342    virtual bool HasPackages() const {return true;};
343    virtual const Type *GetType() const;
344
345
346    rpmRepomdPkgIndex(string URI,string Dist,string Section,
347                      pkgRepository *Repository) :
348           rpmRepomdIndex(URI,Dist,Section,Repository) {};
349
350 };
351
352 class rpmRepomdSrcIndex : public rpmRepomdIndex
353 {
354    protected:
355
356    virtual string MainType() const {return "repomd-src";};
357
358    public:
359
360    virtual const Type *GetType() const;
361
362    // Stuff for accessing files on remote items
363    virtual string SourceInfo(pkgSrcRecords::Parser const &Record,
364                              pkgSrcRecords::File const &File) const;
365
366    // Interface for the record parsers
367    virtual pkgSrcRecords::Parser *CreateSrcParser() const;
368
369    rpmRepomdSrcIndex(string URI,string Dist,string Section,
370                      pkgRepository *Repository) :
371           rpmRepomdIndex(URI,Dist,Section,Repository) {};
372
373 };
374 #endif