1 // -*- mode: cpp; mode: fold -*-
3 // $Id: writer.h,v 1.4.2.2 2003/12/26 22:55:43 mdz Exp $
4 /* ######################################################################
8 The file writer classes. These write various types of output, sources,
11 ##################################################################### */
26 #include "apt-ftparchive.h"
37 vector
<string
> Patterns
;
39 const char *OriginalPath
;
42 // Stuff for the delinker
45 static FTWScanner
*Owner
;
46 static int ScannerFTW(const char *File
,const struct stat
*sb
,int Flag
);
47 static int ScannerFile(const char *File
, bool const &ReadLink
);
49 bool Delink(string
&FileName
,const char *OriginalPath
,
50 unsigned long &Bytes
,off_t
const &FileSize
);
52 inline void NewLine(unsigned const &Priority
)
54 if (ErrorPrinted
== false && Quiet
<= Priority
)
63 unsigned long DeLinkLimit
;
64 string InternalPrefix
;
66 virtual bool DoPackage(string FileName
) = 0;
67 bool RecursiveScan(string
const &Dir
);
68 bool LoadFileList(string
const &BaseDir
,string
const &File
);
69 void ClearPatterns() { Patterns
.clear(); };
70 void AddPattern(string
const &Pattern
) { Patterns
.push_back(Pattern
); };
71 bool SetExts(string
const &Vals
);
73 FTWScanner(string
const &Arch
= string());
76 class TranslationWriter
79 std::set
<string
> Included
;
80 unsigned short RefCounter
;
83 void IncreaseRefCounter() { ++RefCounter
; };
84 unsigned short DecreaseRefCounter() { return (RefCounter
== 0) ? 0 : --RefCounter
; };
85 unsigned short GetRefCounter() const { return RefCounter
; };
86 bool DoPackage(string
const &Pkg
, string
const &Desc
, string
const &MD5
);
88 TranslationWriter(string
const &File
);
89 TranslationWriter() : Output(NULL
), RefCounter(0) {};
93 class PackagesWriter
: public FTWScanner
107 bool LongDescription
;
113 struct CacheDB::Stats
&Stats
;
114 TranslationWriter
*TransWriter
;
116 inline bool ReadOverride(string
const &File
) {return Over
.ReadOverride(File
);};
117 inline bool ReadExtraOverride(string
const &File
)
118 {return Over
.ReadExtraOverride(File
);};
119 virtual bool DoPackage(string FileName
);
121 PackagesWriter(string
const &DB
,string
const &Overrides
,string
const &ExtOverrides
=string(),
122 string
const &Arch
=string());
123 virtual ~PackagesWriter() {};
126 class ContentsWriter
: public FTWScanner
136 struct CacheDB::Stats
&Stats
;
139 bool DoPackage(string FileName
,string Package
);
140 virtual bool DoPackage(string FileName
)
141 {return DoPackage(FileName
,string());};
142 bool ReadFromPkgs(string
const &PkgFile
,string
const &PkgCompress
);
144 void Finish() {Gen
.Print(Output
);};
145 inline bool ReadyDB(string
const &DB
) {return Db
.ReadyDB(DB
);};
147 ContentsWriter(string
const &DB
, string
const &Arch
= string());
148 virtual ~ContentsWriter() {};
151 class SourcesWriter
: public FTWScanner
156 unsigned long BufSize
;
166 struct CacheDB::Stats Stats
;
168 virtual bool DoPackage(string FileName
);
170 SourcesWriter(string
const &BOverrides
,string
const &SOverrides
,
171 string
const &ExtOverrides
=string());
172 virtual ~SourcesWriter() {free(Buffer
);};
175 class ReleaseWriter
: public FTWScanner
178 ReleaseWriter(string
const &DB
);
179 virtual bool DoPackage(string FileName
);
193 // Limited by FileFd::Size()
197 map
<string
,struct CheckSum
> CheckSums
;