28f2c98e9eda56500d09f1d19ff0e3a05654fcb0
[apt.git] / apt-pkg / rpm / rpmindexfile.h
1 // -*- mode: c++; 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/aptconf.h>
25 #include <apt-pkg/indexfile.h>
26 #include <apt-pkg/rpmhandler.h>
27
28 class RPMHandler;
29 class RPMDBHandler;
30 class pkgRepository;
31
32 class rpmIndexFile : public pkgIndexFile
33 {
34    
35    public:
36
37    virtual RPMHandler *CreateHandler() const = 0;
38    virtual bool HasPackages() const {return false;};
39
40 };
41
42 class rpmDatabaseIndex : public rpmIndexFile
43 {
44    public:
45
46    virtual const Type *GetType() const;
47
48    // Creates a RPMHandler suitable for usage with this object
49    virtual RPMHandler *CreateHandler() const;
50    
51    // Interface for acquire
52    virtual string Describe(bool Short) const {return "RPM Database";};
53    
54    // Interface for the Cache Generator
55    virtual bool Exists() const {return true;};
56    virtual unsigned long Size() const;
57    virtual bool HasPackages() const {return true;};
58    virtual bool Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const;
59    virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,
60                                   OpProgress &/*Prog*/) const;
61    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
62
63    rpmDatabaseIndex();
64 };
65
66 class rpmListIndex : public rpmIndexFile
67 {
68
69    protected:
70
71    string URI;
72    string Dist;
73    string Section;
74    pkgRepository *Repository;
75    
76    string ReleaseFile(string Type) const;
77    string ReleaseURI(string Type) const;   
78    string ReleaseInfo(string Type) const;   
79
80    string Info(string Type) const;
81    string IndexFile(string Type) const;
82    string IndexURI(string Type) const;   
83
84    virtual string MainType() const = 0;
85    virtual string IndexPath() const {return IndexFile(MainType());};
86    virtual string ReleasePath() const {return IndexFile("release");};
87
88    public:
89
90    virtual bool GetReleases(pkgAcquire *Owner) const;
91
92    // Interface for the Cache Generator
93    virtual bool Exists() const;
94    virtual unsigned long Size() const;
95
96    // Interface for acquire
97    virtual string Describe(bool Short) const;   
98
99    rpmListIndex(string URI,string Dist,string Section,
100                 pkgRepository *Repository) :
101                 URI(URI), Dist(Dist), Section(Section),
102                 Repository(Repository)
103         {};
104 };
105
106 class rpmPkgListIndex : public rpmListIndex
107 {
108    protected:
109
110    virtual string MainType() const {return "pkglist";}
111    virtual string IndexPath() const {return IndexFile(MainType());};
112
113    public:
114
115    virtual const Type *GetType() const;
116    
117    // Creates a RPMHandler suitable for usage with this object
118    virtual RPMHandler *CreateHandler() const
119            { return new RPMFileHandler(IndexPath()); };
120
121    // Stuff for accessing files on remote items
122    virtual string ArchiveInfo(pkgCache::VerIterator Ver) const;
123    virtual string ArchiveURI(string File) const;
124    
125    // Interface for acquire
126    virtual bool GetIndexes(pkgAcquire *Owner) const;
127    
128    // Interface for the Cache Generator
129    virtual bool HasPackages() const {return true;};
130    virtual bool Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const;
131    virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,
132                                   OpProgress &/*Prog*/) const;
133    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
134
135    rpmPkgListIndex(string URI,string Dist,string Section,
136                    pkgRepository *Repository) :
137            rpmListIndex(URI,Dist,Section,Repository)
138       {};
139 };
140
141
142 class rpmSrcListIndex : public rpmListIndex
143 {
144    protected:
145
146    virtual string MainType() const {return "srclist";}
147
148    public:
149
150    virtual const Type *GetType() const;
151
152    // Creates a RPMHandler suitable for usage with this object
153    virtual RPMHandler *CreateHandler() const
154            { return new RPMFileHandler(IndexPath()); };
155
156    // Stuff for accessing files on remote items
157    virtual string SourceInfo(pkgSrcRecords::Parser const &Record,
158                              pkgSrcRecords::File const &File) const;
159    virtual string ArchiveURI(string File) const;
160    
161    // Interface for acquire
162    virtual bool GetIndexes(pkgAcquire *Owner) const;
163
164    // Interface for the record parsers
165    virtual pkgSrcRecords::Parser *CreateSrcParser() const;
166    
167
168    rpmSrcListIndex(string URI,string Dist,string Section,
169                    pkgRepository *Repository) :
170            rpmListIndex(URI,Dist,Section,Repository)
171       {};
172 };
173
174 class rpmPkgDirIndex : public rpmPkgListIndex
175 {
176    protected:
177
178    virtual string MainType() const {return "pkgdir";}
179    virtual string IndexPath() const;   
180    virtual string ReleasePath() const;
181
182    public:
183
184    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
185    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
186
187    // Creates a RPMHandler suitable for usage with this object
188    virtual RPMHandler *CreateHandler() const
189            { return new RPMDirHandler(IndexPath()); };
190
191    virtual const Type *GetType() const;
192    
193    // Interface for the Cache Generator
194    virtual unsigned long Size() const;
195
196    rpmPkgDirIndex(string URI,string Dist,string Section,
197                    pkgRepository *Repository) :
198            rpmPkgListIndex(URI,Dist,Section,Repository)
199       {};
200 };
201
202 class rpmSrcDirIndex : public rpmSrcListIndex
203 {
204    protected:
205
206    virtual string MainType() const {return "srcdir";}
207    virtual string IndexPath() const;   
208
209    public:
210
211    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
212    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
213
214    // Creates a RPMHandler suitable for usage with this object
215    virtual RPMHandler *CreateHandler() const
216            { return new RPMDirHandler(IndexPath()); };
217
218    virtual const Type *GetType() const;
219    
220    // Interface for the Cache Generator
221    virtual unsigned long Size() const;
222
223    rpmSrcDirIndex(string URI,string Dist,string Section,
224                    pkgRepository *Repository) :
225            rpmSrcListIndex(URI,Dist,Section,Repository)
226       {};
227 };
228
229 class rpmSinglePkgIndex : public rpmPkgListIndex
230 {
231    protected:
232
233    string FilePath;
234
235    virtual string MainType() const {return "pkg";}
236    virtual string IndexPath() const {return FilePath;}
237
238    public:
239
240    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
241    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
242
243    // Creates a RPMHandler suitable for usage with this object
244    virtual RPMHandler *CreateHandler() const
245            { return new RPMSingleFileHandler(IndexPath()); };
246
247    virtual string ArchiveURI(string File) const;
248
249    virtual const Type *GetType() const;
250    
251    rpmSinglePkgIndex(string File) :
252            rpmPkgListIndex("", "", "", NULL), FilePath(File) {};
253 };
254
255 class rpmSingleSrcIndex : public rpmSrcListIndex
256 {
257    protected:
258
259    string FilePath;
260
261    virtual string MainType() const {return "src";}
262    virtual string IndexPath() const {return FilePath;}
263
264    public:
265
266    virtual bool GetReleases(pkgAcquire *Owner) const { return true; }
267    virtual bool GetIndexes(pkgAcquire *Owner) const { return true; }
268
269    // Creates a RPMHandler suitable for usage with this object
270    virtual RPMHandler *CreateHandler() const
271            { return new RPMSingleFileHandler(IndexPath()); };
272
273    virtual string ArchiveURI(string File) const;
274
275    virtual const Type *GetType() const;
276    
277    rpmSingleSrcIndex(string File) :
278            rpmSrcListIndex("", "", "", NULL), FilePath(File) {};
279 };
280
281 #ifdef APT_WITH_REPOMD
282 class rpmRepomdIndex : public rpmIndexFile
283 {
284    protected:
285
286    string URI;
287    string Dist;
288    string Section;
289    pkgRepository *Repository;
290
291    string ReleaseFile(string Type) const;
292    string ReleaseURI(string Type) const;
293    string ReleaseInfo(string Type) const;
294
295    string Info(string Type) const;
296    string IndexFile(string Type) const;
297    string IndexURI(string Type) const;
298
299    virtual string MainType() const = 0;
300    virtual string IndexPath() const {return IndexFile("primary");};
301    virtual string ReleasePath() const;
302
303    public:
304
305    // Creates a RPMHandler suitable for usage with this object
306    virtual RPMHandler *CreateHandler() const
307           { return new RPMRepomdHandler(IndexFile("primary")); };
308
309    virtual bool GetReleases(pkgAcquire *Owner) const;
310
311    // Interface for the Cache Generator
312    virtual bool Exists() const;
313    virtual unsigned long Size() const;
314
315    // Interface for acquire
316    virtual string Describe(bool Short) const;
317    virtual bool GetIndexes(pkgAcquire *Owner) const;
318    virtual string ChecksumType() {return "SHA1-Hash";};
319
320    virtual string ArchiveInfo(pkgCache::VerIterator Ver) const;
321    virtual string ArchiveURI(string File) const;
322
323    virtual bool Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const;
324    virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,
325                                   OpProgress &/*Prog*/) const;
326    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
327
328    // Interface for the source record parsers - repomd can have both binary
329    // and source packages in the same repository!
330    virtual pkgSrcRecords::Parser *CreateSrcParser() const;
331
332    rpmRepomdIndex(string URI,string Dist,string Section,
333                pkgRepository *Repository);
334
335 };
336
337 class rpmRepomdPkgIndex : public rpmRepomdIndex
338 {
339    protected:
340
341    virtual string MainType() const {return "repomd";};
342
343    public:
344
345    virtual bool HasPackages() const {return true;};
346    virtual const Type *GetType() const;
347
348
349    rpmRepomdPkgIndex(string URI,string Dist,string Section,
350                      pkgRepository *Repository) :
351           rpmRepomdIndex(URI,Dist,Section,Repository) {};
352
353 };
354
355 class rpmRepomdSrcIndex : public rpmRepomdIndex
356 {
357    protected:
358
359    virtual string MainType() const {return "repomd-src";};
360
361    public:
362
363    virtual const Type *GetType() const;
364
365    // Stuff for accessing files on remote items
366    virtual string SourceInfo(pkgSrcRecords::Parser const &Record,
367                              pkgSrcRecords::File const &File) const;
368
369    rpmRepomdSrcIndex(string URI,string Dist,string Section,
370                      pkgRepository *Repository) :
371           rpmRepomdIndex(URI,Dist,Section,Repository) {};
372
373 };
374
375 class rpmRepomdDBIndex : public rpmRepomdIndex
376 {
377    protected:
378
379    virtual string IndexPath() const {return IndexFile("primary_db");};
380
381    public:
382
383    // Creates a RPMHandler suitable for usage with this object
384    virtual RPMHandler *CreateHandler() const
385           { return new RPMSqliteHandler(IndexFile("primary_db")); };
386    virtual bool GetIndexes(pkgAcquire *Owner) const;
387    unsigned long Size() const;
388    virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,
389                                   OpProgress &/*Prog*/) const;
390
391
392    rpmRepomdDBIndex(string URI,string Dist,string Section,
393                      pkgRepository *Repository) :
394           rpmRepomdIndex(URI,Dist,Section,Repository) {};
395 };
396
397 class rpmRepomdDBPkgIndex : public rpmRepomdDBIndex
398 {
399    protected:
400
401    virtual string MainType() const {return "repodb";};
402
403    public:
404
405    virtual bool HasPackages() const {return true;};
406    virtual const Type *GetType() const;
407
408
409    rpmRepomdDBPkgIndex(string URI,string Dist,string Section,
410                      pkgRepository *Repository) :
411           rpmRepomdDBIndex(URI,Dist,Section,Repository) {};
412
413 };
414
415 class rpmRepomdDBSrcIndex : public rpmRepomdDBIndex
416 {
417    protected:
418
419    virtual string MainType() const {return "repodb-src";};
420
421    public:
422
423    virtual const Type *GetType() const;
424
425    rpmRepomdDBSrcIndex(string URI,string Dist,string Section,
426                      pkgRepository *Repository) :
427           rpmRepomdDBIndex(URI,Dist,Section,Repository) {};
428
429 };
430 #endif /* APT_WITH_REPOMD */
431
432 #endif