summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2010-03-26 22:38:50 +0100
committerDavid Kalnischkies <kalnischkies@gmail.com>2010-03-26 22:38:50 +0100
commit34f1d96cf5657b5e34cd9880dccfa2028fa16b13 (patch)
tree300bd83cccfc8872e99616826b0753e364450007
parent4e794c509becfd7e2bddfddc1205dc81397a48bd (diff)
Switch the TranslationWriter to use MultiCompress to be able to generate
the compressed files as we want them and to prevent the file to be replaced without a reason which could save us from steady redownloads of a file with the same content.
-rw-r--r--doc/apt-ftparchive.1.xml20
-rw-r--r--ftparchive/apt-ftparchive.cc13
-rw-r--r--ftparchive/writer.cc12
-rw-r--r--ftparchive/writer.h6
4 files changed, 33 insertions, 18 deletions
diff --git a/doc/apt-ftparchive.1.xml b/doc/apt-ftparchive.1.xml
index e639924ce..5bf47f32a 100644
--- a/doc/apt-ftparchive.1.xml
+++ b/doc/apt-ftparchive.1.xml
@@ -224,7 +224,13 @@
This is similar to <literal>Packages::Compress</literal>
except that it controls the compression for the Contents files.</para></listitem>
</varlistentry>
-
+
+ <varlistentry><term>Translation::Compress</term>
+ <listitem><para>
+ This is similar to <literal>Packages::Compress</literal>
+ except that it controls the compression for the Translation-en master file.</para></listitem>
+ </varlistentry>
+
<varlistentry><term>DeLinkLimit</term>
<listitem><para>
Specifies the number of kilobytes to delink (and
@@ -238,6 +244,12 @@
defaults to 0644. All index files are set to this mode with no regard
to the umask.</para></listitem>
</varlistentry>
+
+ <varlistentry><term>LongDescription</term>
+ <listitem><para>
+ Sets if long descriptions should be included in the Packages file or split
+ out into a master Translation-en file.</para></listitem>
+ </varlistentry>
</variablelist>
</refsect2>
@@ -297,12 +309,6 @@
<filename>$(DIST)/$(SECTION)/i18n/Translation-en</filename></para></listitem>
</varlistentry>
- <varlistentry><term>LongDescription</term>
- <listitem><para>
- Sets if long descriptions should be included in the Packages file or split
- out into a master Translation-en file.</para></listitem>
- </varlistentry>
-
<varlistentry><term>InternalPrefix</term>
<listitem><para>
Sets the path prefix that causes a symlink to be
diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc
index f3e91d90d..46831b385 100644
--- a/ftparchive/apt-ftparchive.cc
+++ b/ftparchive/apt-ftparchive.cc
@@ -134,8 +134,6 @@ void PackageMap::GetGeneral(Configuration &Setup,Configuration &Block)
PkgExt = Block.Find("Packages::Extensions",
Setup.Find("Default::Packages::Extensions",".deb").c_str());
- Permissions = Setup.FindI("Default::FileMode",0644);
-
if (FLFile.empty() == false)
FLFile = flCombine(Setup.Find("Dir::FileListDir"),FLFile);
@@ -458,8 +456,11 @@ void LoadTree(vector<PackageMap> &PkgList,Configuration &Setup)
string DFLFile = Setup.Find("TreeDefault::FileList", "");
string DSFLFile = Setup.Find("TreeDefault::SourceFileList", "");
- bool const LongDescription = Setup.FindB("TreeDefault::LongDescription",
+ int const Permissions = Setup.FindI("Default::FileMode",0644);
+
+ bool const LongDescription = Setup.FindB("Default::LongDescription",
_config->FindB("APT::FTPArchive::LongDescription", true));
+ string const TranslationCompress = Setup.Find("Default::Translation::Compress",". gzip").c_str();
// Process 'tree' type sections
const Configuration::Item *Top = Setup.Tree("tree");
@@ -479,13 +480,15 @@ void LoadTree(vector<PackageMap> &PkgList,Configuration &Setup)
{"$(SECTION)",&Section},
{"$(ARCH)",&Arch},
{}};
+ mode_t const Perms = Block.FindI("FileMode", Permissions);
bool const LongDesc = Block.FindB("LongDescription", LongDescription);
TranslationWriter *TransWriter;
if (DTrans.empty() == false && LongDesc == false)
{
string const TranslationFile = flCombine(Setup.FindDir("Dir::ArchiveDir"),
SubstVar(Block.Find("Translation", DTrans.c_str()), Vars));
- TransWriter = new TranslationWriter(TranslationFile);
+ string const TransCompress = Block.Find("Translation::Compress", TranslationCompress);
+ TransWriter = new TranslationWriter(TranslationFile, TransCompress, Perms);
}
else
TransWriter = NULL;
@@ -495,7 +498,7 @@ void LoadTree(vector<PackageMap> &PkgList,Configuration &Setup)
while (ParseQuoteWord(Archs,Arch) == true)
{
PackageMap Itm;
-
+ Itm.Permissions = Perms;
Itm.BinOverride = SubstVar(Block.Find("BinOverride"),Vars);
Itm.InternalPrefix = SubstVar(Block.Find("InternalPrefix",DIPrfx.c_str()),Vars);
diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc
index b395903b7..45a8d212b 100644
--- a/ftparchive/writer.cc
+++ b/ftparchive/writer.cc
@@ -499,13 +499,15 @@ bool PackagesWriter::DoPackage(string FileName)
// TranslationWriter::TranslationWriter - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* Create a Translation-Master file for this Packages file */
-TranslationWriter::TranslationWriter(string const &File) : Output(NULL),
+TranslationWriter::TranslationWriter(string const &File, string const &TransCompress,
+ mode_t const &Permissions) : Output(NULL),
RefCounter(0)
{
if (File.empty() == true)
return;
- Output = fopen(File.c_str(), "w");
+ Comp = new MultiCompress(File, TransCompress, Permissions);
+ Output = Comp->Input;
}
/*}}}*/
// TranslationWriter::DoPackage - Process a single package /*{{{*/
@@ -536,8 +538,10 @@ bool TranslationWriter::DoPackage(string const &Pkg, string const &Desc,
/* */
TranslationWriter::~TranslationWriter()
{
- if (Output != NULL)
- fclose(Output);
+ if (Comp == NULL)
+ return;
+
+ delete Comp;
}
/*}}}*/
diff --git a/ftparchive/writer.h b/ftparchive/writer.h
index 2afd1af1f..3123a7f46 100644
--- a/ftparchive/writer.h
+++ b/ftparchive/writer.h
@@ -22,6 +22,7 @@
#include <set>
#include "cachedb.h"
+#include "multicompress.h"
#include "override.h"
#include "apt-ftparchive.h"
@@ -75,6 +76,7 @@ class FTWScanner
class TranslationWriter
{
+ MultiCompress *Comp;
FILE *Output;
std::set<string> Included;
unsigned short RefCounter;
@@ -85,8 +87,8 @@ class TranslationWriter
unsigned short GetRefCounter() const { return RefCounter; };
bool DoPackage(string const &Pkg, string const &Desc, string const &MD5);
- TranslationWriter(string const &File);
- TranslationWriter() : Output(NULL), RefCounter(0) {};
+ TranslationWriter(string const &File, string const &TransCompress, mode_t const &Permissions);
+ TranslationWriter() : Comp(NULL), Output(NULL), RefCounter(0) {};
~TranslationWriter();
};