summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2009-09-08 15:02:15 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2009-09-08 15:02:15 +0200
commit8bd02d8bd6bc46bc38924635afc09fdde50b6bf5 (patch)
treeb60199c56a24d6e2b1cda3cd837ca92632247c8e
parent6da747804c63f103f431706af80f793b86c41993 (diff)
Rework the CompressionTypes system by adding an Order subgroup to
simplify customisation of the order and improve the documentation about this setting group.
-rw-r--r--apt-pkg/aptconfiguration.cc56
-rw-r--r--debian/changelog3
-rw-r--r--doc/apt.conf.5.xml32
-rw-r--r--doc/examples/configure-index9
4 files changed, 69 insertions, 31 deletions
diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc
index 1a8e8262f..45ae9bed5 100644
--- a/apt-pkg/aptconfiguration.cc
+++ b/apt-pkg/aptconfiguration.cc
@@ -14,6 +14,7 @@
#include <vector>
#include <string>
+#include <algorithm>
/*}}}*/
namespace APT {
// getCompressionTypes - Return Vector of usbale compressiontypes /*{{{*/
@@ -29,41 +30,52 @@ const Configuration::getCompressionTypes(bool const &Cached) {
types.clear();
}
+ // setup the defaults for the compressiontypes => method mapping
+ _config->CndSet("Acquire::CompressionTypes::bz2","bzip2");
+ _config->CndSet("Acquire::CompressionTypes::lzma","lzma");
+ _config->CndSet("Acquire::CompressionTypes::gz","gzip");
+
// Set default application paths to check for optional compression types
_config->CndSet("Dir::Bin::lzma", "/usr/bin/lzma");
_config->CndSet("Dir::Bin::bzip2", "/bin/bzip2");
- ::Configuration::Item const *Opts = _config->Tree("Acquire::CompressionTypes");
- if (Opts != 0)
- Opts = Opts->Child;
+ // accept non-list order as override setting for config settings on commandline
+ std::string const overrideOrder = _config->Find("Acquire::CompressionTypes::Order","");
+ if (overrideOrder.empty() == false)
+ types.push_back(overrideOrder);
- // at first, move over the options to setup at least the default options
- bool foundLzma=false, foundBzip2=false, foundGzip=false;
- for (; Opts != 0; Opts = Opts->Next) {
- if (Opts->Value == "lzma")
- foundLzma = true;
- else if (Opts->Value == "bz2")
- foundBzip2 = true;
- else if (Opts->Value == "gz")
- foundGzip = true;
+ // load the order setting into our vector
+ std::vector<std::string> const order = _config->FindVector("Acquire::CompressionTypes::Order");
+ for (std::vector<std::string>::const_iterator o = order.begin();
+ o != order.end(); o++) {
+ if ((*o).empty() == true)
+ continue;
+ // ignore types we have no method ready to use
+ if (_config->Exists(string("Acquire::CompressionTypes::").append(*o)) == false)
+ continue;
+ // ignore types we have no app ready to use
+ string const appsetting = string("Dir::Bin::").append(*o);
+ if (_config->Exists(appsetting) == true) {
+ std::string const app = _config->FindFile(appsetting.c_str(), "");
+ if (app.empty() == false && FileExists(app) == false)
+ continue;
+ }
+ types.push_back(*o);
}
- // setup the defaults now
- if (!foundBzip2)
- _config->Set("Acquire::CompressionTypes::bz2","bzip2");
- if (!foundLzma)
- _config->Set("Acquire::CompressionTypes::lzma","lzma");
- if (!foundGzip)
- _config->Set("Acquire::CompressionTypes::gz","gzip");
-
- // move again over the option tree to finially calculate our result
+ // move again over the option tree to add all missing compression types
::Configuration::Item const *Types = _config->Tree("Acquire::CompressionTypes");
if (Types != 0)
Types = Types->Child;
for (; Types != 0; Types = Types->Next) {
+ if (Types->Tag == "Order" || Types->Tag.empty() == true)
+ continue;
+ // ignore types we already have in the vector
+ if (std::find(types.begin(),types.end(),Types->Tag) != types.end())
+ continue;
+ // ignore types we have no app ready to use
string const appsetting = string("Dir::Bin::").append(Types->Value);
- // ignore compression types we have no app ready to use
if (appsetting.empty() == false && _config->Exists(appsetting) == true) {
std::string const app = _config->FindFile(appsetting.c_str(), "");
if (app.empty() == false && FileExists(app) == false)
diff --git a/debian/changelog b/debian/changelog
index 3d8dc292a..5ddd84117 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -24,6 +24,9 @@ apt (0.7.24) UNRELEASED; urgency=low
- replace unknown multibytes with ? in UTF8ToCharset (Closes: #545208)
* doc/apt-get.8.xml:
- fix two little typos in the --simulate description.
+ * apt-pkg/aptconfiguration.cc, doc/apt.conf.5.xml:
+ - add an order subgroup to the compression types to simplify reordering
+ a bit and improve the documentation for this option group.
-- David Kalnischkies <kalnischkies@gmail.com> Fri, 28 Aug 2009 09:40:08 +0200
diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml
index e0ce0db40..92ac5ec04 100644
--- a/doc/apt.conf.5.xml
+++ b/doc/apt.conf.5.xml
@@ -90,7 +90,7 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};
<literal>#include</literal> will include the given file, unless the filename
ends in a slash, then the whole directory is included.
<literal>#clear</literal> is used to erase a part of the configuration tree. The
- specified element and all its descendents are erased.</para>
+ specified element and all its descendants are erased.</para>
<para>All of the APT tools take a -o option which allows an arbitrary configuration
directive to be specified on the command line. The syntax is a full option
@@ -312,16 +312,30 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};
<varlistentry><term>CompressionTypes</term>
<listitem><para>List of compression types which are understood by the acquire methods.
Files like <filename>Packages</filename> can be available in various compression formats.
- This list defines in which order the acquire methods will try to download these files.
- Per default <command>bzip2</command> compressed files will be prefered over
- <command>lzma</command>, <command>gzip</command> and uncompressed files. The syntax for
- the configuration fileentry is
+ Per default the acquire methods can decompress <command>bzip2</command>, <command>lzma</command>
+ and <command>gzip</command> compressed files, with this setting more formats can be added
+ on the fly or the used method can be changed. The syntax for this is:
<synopsis>Acquire::CompressionTypes::<replaceable>FileExtension</replaceable> "<replaceable>Methodname</replaceable>";</synopsis>
- e.g. <synopsis>Acquire::CompressionTypes::bz2 "bzip2";</synopsis>
- Note that at runtime the <literal>Dir::Bin::<replaceable>Methodname</replaceable></literal> will
+ </para><para>Also the <literal>Order</literal> subgroup can be used to define in which order
+ the acquire system will try to download the compressed files. The acquire system will try the first
+ and proceed with the next compression type in this list on error, so to prefer one over the other type
+ simple add the preferred type at first - not already added default types will be added at run time
+ to the end of the list, so e.g. <synopsis>Acquire::CompressionTypes::Order:: "gz";</synopsis> can
+ be used to prefer <command>gzip</command> compressed files over <command>bzip2</command> and <command>lzma</command>.
+ If <command>lzma</command> should be preferred over <command>gzip</command> and <command>bzip2</command> the
+ configure setting should look like this <synopsis>Acquire::CompressionTypes::Order { "lzma"; "gz"; };</synopsis>
+ It is not needed to add <literal>bz2</literal> explicit to the list as it will be added automatic.</para>
+ <para>Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</replaceable></literal> will
be checked: If this setting exists the method will only be used if this file exists, e.g. for
- the bzip2 method above (the inbuilt) setting is <literallayout>Dir::Bin::bzip2 "/bin/bzip2";</literallayout>
- </para></listitem>
+ the bzip2 method (the inbuilt) setting is <literallayout>Dir::Bin::bzip2 "/bin/bzip2";</literallayout>
+ Note also that list entries specified on the commandline will be added at the end of the list
+ specified in the configuration files, but before the default entries. To prefer a type in this case
+ over the ones specified in in the configuration files you can set the option direct - not in list style.
+ This will not override the defined list, it will only prefix the list with this type.</para>
+ <para>While it is possible to add an empty compression type to the order list, but APT in its current
+ version doesn't understand it correctly and will display many warnings about not downloaded files -
+ these warnings are most of the time false negatives. Future versions will maybe include a way to
+ really prefer uncompressed files to support the usage of local mirrors.</para></listitem>
</varlistentry>
</variablelist>
</para>
diff --git a/doc/examples/configure-index b/doc/examples/configure-index
index 5dc7b5246..8025fa4b4 100644
--- a/doc/examples/configure-index
+++ b/doc/examples/configure-index
@@ -246,6 +246,15 @@ Acquire
{
Options {"--ignore-time-conflict";} // not very useful on a normal system
};
+
+ CompressionTypes
+ {
+ bz2 "bzip2";
+ lzma "lzma";
+ gz "gzip";
+
+ Order { "gz"; "lzma"; "bz2"; };
+ };
};
// Directory layout