From 6e2525a1d9c0930fea9fa65514d7b813f27997f0 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 8 Aug 2009 18:27:47 +0200 Subject: [doc/apt.conf.5.xml] mention the apt.conf.d dir Patch from Vincent McIntyre, thanks! (Closes: #520831) --- doc/apt.conf.5.xml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'doc') diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index 2b2430c83..85a7d961c 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -822,7 +822,17 @@ is commented. Files - /etc/apt/apt.conf + + /etc/apt/apt.conf + APT configuration file. + Configuration Item: Dir::Etc::Main. + + + /etc/apt/apt.conf.d/ + APT configuration file fragments. + Configuration Item: Dir::Etc::Parts. + + See Also -- cgit v1.2.3-70-g09d2 From b2fa014bbefa8fe91f9c5c96f5cc053f14117f11 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 9 Aug 2009 10:24:59 +0200 Subject: [doc/apt-mark.8.xml] improve manpage based on patch by Carl Chenet, thanks! (Closes: #510286) add also showauto and command synopsis --- debian/changelog | 2 ++ doc/apt-mark.8.xml | 48 ++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 40 insertions(+), 10 deletions(-) (limited to 'doc') diff --git a/debian/changelog b/debian/changelog index 841661c5a..7f8764c8e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,6 +13,8 @@ apt (0.7.22.3) unstable; urgency=low - mention the apt.conf.d dir (by Vincent McIntyre, Closes: #520831) * apt-inst/contrib/arfile.cc: - use sizeof instead strlen (by Marius Vollmer, Closes: #504325) + * doc/apt-mark.8.xml: + - improve manpage based on patch by Carl Chenet (Closes: #510286) [ George Danchev ] * cmdline/apt-cache.cc: diff --git a/doc/apt-mark.8.xml b/doc/apt-mark.8.xml index 1b7b02812..f078f2de5 100644 --- a/doc/apt-mark.8.xml +++ b/doc/apt-mark.8.xml @@ -15,7 +15,7 @@ &apt-email; &apt-product; - 2 November 2007 + 9 August 2009 @@ -32,11 +32,19 @@ - apt-mark - - - markautounmarkauto - package + apt-mark + + + + + + markauto + unmarkauto + + package + + showauto + @@ -49,7 +57,8 @@ other packages are installed to satisfy its dependencies, the dependencies are marked as being automatically installed. Once these automatically installed packages are no longer depended on - by any manually installed packages, they will be removed. + by any manually installed packages, they will be removed by e.g. + apt-get or aptitude. markauto @@ -67,16 +76,24 @@ depend on it. + + showauto + showauto is used to print a + list of manually installed packages with each package on a new line. + + options - + + + - Read/Write package stats from FILENAME + Read/Write package stats from FILENAME instead of the default location, which is extended_status in the directory defined by the Configuration Item: Dir::State. @@ -101,8 +118,19 @@ + Files + + /var/lib/apt/extended_states + Status list of auto-installed packages. + Configuration Item: Dir::State + sets the path to the extended_states file. + + + + + See Also - &apt-conf; + &apt-get;,&aptitude;,&apt-conf; Diagnostics -- cgit v1.2.3-70-g09d2 From e85b4cd500cc96a8ce0d35c5e63fe274bed5b917 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 12 Aug 2009 00:52:26 +0200 Subject: Add a Acquire::CompressionTypes config variable from there the acquire-items choose which compression file they should (try first to) download to easily add new or change the order of the compression types. And because it is easy now we directly add builtin lzma support. The compression ratio is better than bzip2 but we prefer the later for now as no (official) mirror uses lzma, so this would only generate useless hits on the servers. Maybe sometime in the future lzma will be the default... [apt-pkg/acquire-item.cc] - use configsettings for dynamic compression type use and order. Based on a patch by Jyrki Muukkonen, thanks! (LP: #71746) [apt-pkg/init.cc] - add default configuration for compression types and add lzma support. Order is now bzip2, lzma, gzip, none (Closes: #510526) [ftparchive/writer.cc] - add lzma support also here, patch for this (and inspiration for the one above) by Robert Millan, thanks! --- apt-pkg/acquire-item.cc | 79 ++++++++++++++++++++++++++++++------------------- apt-pkg/acquire-item.h | 10 ++----- apt-pkg/init.cc | 24 ++++++++++++++- debian/changelog | 9 ++++++ doc/apt.conf.5.xml | 15 ++++++++++ ftparchive/writer.cc | 2 ++ po/apt-all.pot | 18 +++++------ 7 files changed, 110 insertions(+), 47 deletions(-) (limited to 'doc') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 39ae327cb..ffbe66d7d 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -551,13 +551,24 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, if(comprExt.empty()) { // autoselect the compression method - if(FileExists("/bin/bzip2")) - CompressionExtension = ".bz2"; - else - CompressionExtension = ".gz"; - } else { - CompressionExtension = (comprExt == "plain" ? "" : comprExt); + Configuration::Item const *Opts = _config->Tree("Acquire::CompressionTypes"); + if (Opts != 0) + Opts = Opts->Child; + + const char dirBin[] = "Dir::Bin::"; + for (; Opts != 0; Opts = Opts->Next) + { + if (Opts->Tag.empty() == true || Opts->Value.empty() == true) + continue; + const string bin = _config->FindFile(string(dirBin).append(Opts->Value).c_str(),""); + if (bin != "" && !FileExists(bin)) + continue; + comprExt = '.' + Opts->Tag; + break; + } } + CompressionExtension = ((comprExt == "plain" || comprExt == ".") ? "" : comprExt); + Desc.URI = URI + CompressionExtension; Desc.Description = URIDesc; @@ -584,24 +595,32 @@ string pkgAcqIndex::Custom600Headers() /*}}}*/ void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) /*{{{*/ { - bool descChanged = false; - // no .bz2 found, retry with .gz - if(Desc.URI.substr(Desc.URI.size()-3) == "bz2") { - Desc.URI = Desc.URI.substr(0,Desc.URI.size()-3) + "gz"; - - new pkgAcqIndex(Owner, RealURI, Desc.Description,Desc.ShortDesc, - ExpectedHash, string(".gz")); - descChanged = true; - } - // no .gz found, retry with uncompressed - else if(Desc.URI.substr(Desc.URI.size()-2) == "gz") { - Desc.URI = Desc.URI.substr(0,Desc.URI.size()-2); + Configuration::Item const *Opts = _config->Tree("Acquire::CompressionTypes"); + if (Opts != 0) + Opts = Opts->Child; + + const char dirBin[] = "Dir::Bin::"; + for (; Opts != 0; Opts = Opts->Next) + { + if (Opts->Tag.empty() == true || Opts->Value.empty() == true) + continue; + + // jump over all already checked compression types + const unsigned int nameLen = Desc.URI.size() - Opts->Tag.size(); + if(Desc.URI.substr(nameLen) != Opts->Tag || Opts->Next == 0) + continue; + + // check if we need an external binary for this compression type + const string bin = _config->FindFile(string(dirBin).append(Opts->Next->Value).c_str(),""); + if (bin != "" && !FileExists(bin)) + continue; + + // retry with the next extension + Desc.URI = Desc.URI.substr(0, nameLen) + Opts->Next->Tag; + + new pkgAcqIndex(Owner, RealURI, Desc.Description, Desc.ShortDesc, + ExpectedHash, string(".").append(Opts->Next->Tag)); - new pkgAcqIndex(Owner, RealURI, Desc.Description,Desc.ShortDesc, - ExpectedHash, string("plain")); - descChanged = true; - } - if (descChanged) { Status = StatDone; Complete = false; Dequeue(); @@ -698,11 +717,11 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash, Local = true; string compExt = flExtension(flNotDir(URI(Desc.URI).Path)); - const char *decompProg; - if(compExt == "bz2") - decompProg = "bzip2"; - else if(compExt == "gz") - decompProg = "gzip"; + string decompProg; + + // get the binary name for your used compression type + decompProg = _config->Find(string("Acquire::CompressionTypes::").append(compExt),""); + if(decompProg.empty() == false); // flExtensions returns the full name if no extension is found // this is why we have this complicated compare operation here // FIMXE: add a new flJustExtension() that return "" if no @@ -717,9 +736,9 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash, Decompression = true; DestFile += ".decomp"; - Desc.URI = string(decompProg) + ":" + FileName; + Desc.URI = decompProg + ":" + FileName; QueueURI(Desc); - Mode = decompProg; + Mode = decompProg.c_str(); } /*}}}*/ // AcqIndexTrans::pkgAcqIndexTrans - Constructor /*{{{*/ diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 36a926a0f..3f073de5b 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -540,7 +540,9 @@ class pkgAcqIndex : public pkgAcquire::Item * * \param compressExt The compression-related extension with which * this index file should be downloaded, or "" to autodetect - * (".bz2" is used if bzip2 is installed, ".gz" otherwise). + * Compression types can be set with config Acquire::CompressionTypes, + * default is ".lzma" or ".bz2" (if the needed binaries are present) + * fallback is ".gz" or none. */ pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc, HashString ExpectedHash, string compressExt=""); @@ -569,12 +571,6 @@ class pkgAcqIndexTrans : public pkgAcqIndex * \param URIDesc A "URI-style" description of this index file. * * \param ShortDesc A brief description of this index file. - * - * \param ExpectedHash The expected hashsum of this index file. - * - * \param compressExt The compression-related extension with which - * this index file should be downloaded, or "" to autodetect - * (".bz2" is used if bzip2 is installed, ".gz" otherwise). */ pkgAcqIndexTrans(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc); diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index 63caade36..46017bf0c 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -103,7 +103,29 @@ bool pkgInitConfig(Configuration &Cnf) if (Res == false) return false; - + + // we load all config files, now check the configs and setup post-defaults: + // * check for CompressionTypes setup + { + Configuration::Item const *Opts = _config->Tree("Acquire::CompressionTypes"); + if (Opts != 0) + Opts = Opts->Child; + 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; + } + if (!foundBzip2) Cnf.Set("Acquire::CompressionTypes::bz2","bzip2"); + if (!foundLzma) Cnf.Set("Acquire::CompressionTypes::lzma","lzma"); + if (!foundGzip) Cnf.Set("Acquire::CompressionTypes::gz","gzip"); + Cnf.CndSet("Dir::Bin::lzma", "/usr/bin/lzma"); + Cnf.CndSet("Dir::Bin::bzip2", "/bin/bzip2"); + } + + + if (Cnf.FindB("Debug::pkgInitConfig",false) == true) Cnf.Dump(); diff --git a/debian/changelog b/debian/changelog index fa2a3f612..16394b067 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,6 +16,15 @@ apt (0.7.22.3) unstable; urgency=low - use sizeof instead strlen (by Marius Vollmer, Closes: #504325) * doc/apt-mark.8.xml: - improve manpage based on patch by Carl Chenet (Closes: #510286) + * apt-pkg/acquire-item.cc: + - use configsettings for dynamic compression type use and order. + Based on a patch by Jyrki Muukkonen, thanks! (LP: #71746) + * apt-pkg/init.cc: + - add default configuration for compression types and add lzma + support. Order is now bzip2, lzma, gzip, none (Closes: #510526) + * ftparchive/writer.cc: + - add lzma support also here, patch for this (and inspiration for + the one above) by Robert Millan, thanks! [ George Danchev ] * cmdline/apt-cache.cc: diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index 85a7d961c..d347bda67 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -303,6 +303,20 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; + CompressionTypes + List of compression types which are understood by the acquire methods. + Files like Packages can be available in various compression formats. + This list defines in which order the acquire methods will try to download these files. + Per default bzip2 compressed files will be prefered over + lzma, gzip and uncompressed files. The syntax for + the configuration fileentry (this option can't be set at runtime with the -o option) is + Acquire::CompressionTypes::FileExtension "Methodname"; + e.g. Acquire::CompressionTypes::bz2 "bzip2"; + Note that at runtime the Dir::Bin::Methodname 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 Dir::Bin::bzip2 "/bin/bzip2"; + + @@ -337,6 +351,7 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; Binary programs are pointed to by Dir::Bin. Dir::Bin::Methods specifies the location of the method handlers and gzip, + bzip2, lzma, dpkg, apt-get dpkg-source dpkg-buildpackage and apt-cache specify the location of the respective programs. diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc index 9d248ab86..293e851f5 100644 --- a/ftparchive/writer.cc +++ b/ftparchive/writer.cc @@ -815,9 +815,11 @@ ReleaseWriter::ReleaseWriter(string DB) AddPattern("Packages"); AddPattern("Packages.gz"); AddPattern("Packages.bz2"); + AddPattern("Packages.lzma"); AddPattern("Sources"); AddPattern("Sources.gz"); AddPattern("Sources.bz2"); + AddPattern("Sources.lzma"); AddPattern("Release"); AddPattern("md5sum.txt"); diff --git a/po/apt-all.pot b/po/apt-all.pot index 3ec999f76..8f3d4cf60 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-08-09 10:20+0200\n" +"POT-Creation-Date: 2009-08-10 23:54+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2364,12 +2364,12 @@ msgstr "" msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." msgstr "" -#: apt-pkg/init.cc:132 +#: apt-pkg/init.cc:154 #, c-format msgid "Packaging system '%s' is not supported" msgstr "" -#: apt-pkg/init.cc:148 +#: apt-pkg/init.cc:170 msgid "Unable to determine a suitable packaging system type" msgstr "" @@ -2506,35 +2506,35 @@ msgstr "" msgid "MD5Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:644 apt-pkg/acquire-item.cc:1406 +#: apt-pkg/acquire-item.cc:663 apt-pkg/acquire-item.cc:1425 msgid "Hash Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:1101 +#: apt-pkg/acquire-item.cc:1120 msgid "There is no public key available for the following key IDs:\n" msgstr "" -#: apt-pkg/acquire-item.cc:1211 +#: apt-pkg/acquire-item.cc:1230 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" msgstr "" -#: apt-pkg/acquire-item.cc:1270 +#: apt-pkg/acquire-item.cc:1289 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " "manually fix this package." msgstr "" -#: apt-pkg/acquire-item.cc:1311 +#: apt-pkg/acquire-item.cc:1330 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" -#: apt-pkg/acquire-item.cc:1398 +#: apt-pkg/acquire-item.cc:1417 msgid "Size mismatch" msgstr "" -- cgit v1.2.3-70-g09d2 From 90c2436367d7c136467296d7726e6934bd65fe66 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 12 Aug 2009 17:13:18 +0200 Subject: [doc/apt-get.8.xml] - update the source description to reflect what it actually does and how it can be used. (Closes: #413021) --- debian/changelog | 3 +++ doc/apt-get.8.xml | 39 +++++++++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 10 deletions(-) (limited to 'doc') diff --git a/debian/changelog b/debian/changelog index 7dbbcdf7a..597ca91ff 100644 --- a/debian/changelog +++ b/debian/changelog @@ -30,6 +30,9 @@ apt (0.7.22.3) unstable; urgency=low the one above) by Robert Millan, thanks! * apt-pkg/depcache.cc: - restore the --ignore-hold effect in the Is{Delete,Install}Ok hooks + * doc/apt-get.8.xml: + - update the source description to reflect what it actually does + and how it can be used. (Closes: #413021) [ George Danchev ] * cmdline/apt-cache.cc: diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml index 920f6b36e..8db2883c4 100644 --- a/doc/apt-get.8.xml +++ b/doc/apt-get.8.xml @@ -85,9 +85,19 @@ purge pkg source pkg - - =pkg_version_number - + + + + =pkg_version_number + + + /target_release_name + + + /target_release_codename + + + build-dep pkg @@ -240,13 +250,22 @@ source causes apt-get to fetch source packages. APT will examine the available packages to decide which source package to fetch. It will then find and download into the current directory the - newest available version of that source package. Source packages are - tracked separately from binary packages via deb-src type lines - in the &sources-list; file. This probably will mean that you will not - get the same source as the package you have installed or as you could - install. If the --compile options is specified then the package will be - compiled to a binary .deb using dpkg-buildpackage, if --download-only is - specified then the source package will not be unpacked. + newest available version of that source package while respect the + default release, set with the option APT::Default-Release, + the option or per package with with the + pkg/release syntax, if possible. + + Source packages are tracked separately + from binary packages via deb-src type lines + in the &sources-list; file. This means that you will need to add such a line + for each repository you want to get sources from. If you don't do this + you will properly get another (newer, older or none) source version than + the one you have installed or could install. + + If the options is specified + then the package will be compiled to a binary .deb using + dpkg-buildpackage, if + is specified then the source package will not be unpacked. A specific source version can be retrieved by postfixing the source name with an equals and then the version to fetch, similar to the mechanism -- cgit v1.2.3-70-g09d2 From e878aedb8b53b311295a2df55ce5e865b1ad92b9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 25 Aug 2009 15:32:40 +0200 Subject: "backport" the APT::Configuration class to apt-sid We can use it to simplify the internal code to operate with Acquire::CompressionTypes group. This also made it possible to set this setting with the -o flag. --- apt-pkg/acquire-item.cc | 62 ++++++++++++++--------------------- apt-pkg/aptconfiguration.cc | 78 +++++++++++++++++++++++++++++++++++++++++++++ apt-pkg/aptconfiguration.h | 46 ++++++++++++++++++++++++++ apt-pkg/init.cc | 22 ------------- apt-pkg/makefile | 5 +-- doc/apt.conf.5.xml | 2 +- po/apt-all.pot | 22 ++++++------- 7 files changed, 163 insertions(+), 74 deletions(-) create mode 100644 apt-pkg/aptconfiguration.cc create mode 100644 apt-pkg/aptconfiguration.h (limited to 'doc') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index ffbe66d7d..94341c81a 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -15,6 +15,7 @@ // Include Files /*{{{*/ #include #include +#include #include #include #include @@ -551,21 +552,11 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, if(comprExt.empty()) { // autoselect the compression method - Configuration::Item const *Opts = _config->Tree("Acquire::CompressionTypes"); - if (Opts != 0) - Opts = Opts->Child; - - const char dirBin[] = "Dir::Bin::"; - for (; Opts != 0; Opts = Opts->Next) - { - if (Opts->Tag.empty() == true || Opts->Value.empty() == true) - continue; - const string bin = _config->FindFile(string(dirBin).append(Opts->Value).c_str(),""); - if (bin != "" && !FileExists(bin)) - continue; - comprExt = '.' + Opts->Tag; - break; - } + std::vector types = APT::Configuration::getCompressionTypes(); + if (types.empty() == true) + comprExt = "plain"; + else + comprExt = "." + types[0]; } CompressionExtension = ((comprExt == "plain" || comprExt == ".") ? "" : comprExt); @@ -595,36 +586,31 @@ string pkgAcqIndex::Custom600Headers() /*}}}*/ void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) /*{{{*/ { - Configuration::Item const *Opts = _config->Tree("Acquire::CompressionTypes"); - if (Opts != 0) - Opts = Opts->Child; + std::vector types = APT::Configuration::getCompressionTypes(); - const char dirBin[] = "Dir::Bin::"; - for (; Opts != 0; Opts = Opts->Next) + for (std::vector::const_iterator t = types.begin(); + t != types.end(); t++) { - if (Opts->Tag.empty() == true || Opts->Value.empty() == true) + // jump over all already tried compression types + const unsigned int nameLen = Desc.URI.size() - (*t).size(); + if(Desc.URI.substr(nameLen) != *t) continue; - // jump over all already checked compression types - const unsigned int nameLen = Desc.URI.size() - Opts->Tag.size(); - if(Desc.URI.substr(nameLen) != Opts->Tag || Opts->Next == 0) - continue; - - // check if we need an external binary for this compression type - const string bin = _config->FindFile(string(dirBin).append(Opts->Next->Value).c_str(),""); - if (bin != "" && !FileExists(bin)) - continue; + // we want to try it with the next extension + t++; - // retry with the next extension - Desc.URI = Desc.URI.substr(0, nameLen) + Opts->Next->Tag; + if (t != types.end()) + { + Desc.URI = Desc.URI.substr(0, nameLen) + *t; - new pkgAcqIndex(Owner, RealURI, Desc.Description, Desc.ShortDesc, - ExpectedHash, string(".").append(Opts->Next->Tag)); + new pkgAcqIndex(Owner, RealURI, Desc.Description, Desc.ShortDesc, + ExpectedHash, string(".").append(*t)); - Status = StatDone; - Complete = false; - Dequeue(); - return; + Status = StatDone; + Complete = false; + Dequeue(); + return; + } } // on decompression failure, remove bad versions in partial/ diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc new file mode 100644 index 000000000..1a8e8262f --- /dev/null +++ b/apt-pkg/aptconfiguration.cc @@ -0,0 +1,78 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +/* ###################################################################### + + Provide access methods to various configuration settings, + setup defaults and returns validate settings. + + ##################################################################### */ + /*}}}*/ +// Include Files /*{{{*/ +#include +#include +#include + +#include +#include + /*}}}*/ +namespace APT { +// getCompressionTypes - Return Vector of usbale compressiontypes /*{{{*/ +// --------------------------------------------------------------------- +/* return a vector of compression types in the prefered order. */ +std::vector +const Configuration::getCompressionTypes(bool const &Cached) { + static std::vector types; + if (types.empty() == false) { + if (Cached == true) + return types; + else + types.clear(); + } + + // 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; + + // 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; + } + + // 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 + ::Configuration::Item const *Types = _config->Tree("Acquire::CompressionTypes"); + if (Types != 0) + Types = Types->Child; + + for (; Types != 0; Types = Types->Next) { + 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) + continue; + } + types.push_back(Types->Tag); + } + + return types; +} + /*}}}*/ +} diff --git a/apt-pkg/aptconfiguration.h b/apt-pkg/aptconfiguration.h new file mode 100644 index 000000000..6a123adce --- /dev/null +++ b/apt-pkg/aptconfiguration.h @@ -0,0 +1,46 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +/** \class APT::Configuration + * \brief Provide access methods to various configuration settings + * + * This class and their methods providing a layer around the usual access + * methods with _config to ensure that settings are correct and to be able + * to set defaults without the need to recheck it in every method again. + */ + /*}}}*/ +#ifndef APT_CONFIGURATION_H +#define APT_CONFIGURATION_H +// Include Files /*{{{*/ +#include +#include + /*}}}*/ +namespace APT { +class Configuration { /*{{{*/ +public: /*{{{*/ + /** \brief Returns a vector of usable Compression Types + * + * Files can be compressed in various ways to decrease the size of the + * download. Therefore the Acquiremethods support a few compression types + * and some archives provide also a few different types. This option + * group exists to give the user the choice to prefer one type over the + * other (some compression types are very resource intensive - great if you + * have a limited download, bad if you have a really lowpowered hardware.) + * + * This method ensures that the defaults are set and checks at runtime + * if the type can be used. E.g. the current default is to prefer bzip2 + * over lzma and gz - if the bzip2 binary is not available it has not much + * sense in downloading the bz2 file, therefore we will not return bz2 as + * a usable compression type. The availability is checked with the settings + * in the Dir::Bin group. + * + * \param Cached saves the result so we need to calculated it only once + * this parameter should ony be used for testing purposes. + * + * \return a vector of (all) Language Codes in the prefered usage order + */ + std::vector static const getCompressionTypes(bool const &Cached = true); + /*}}}*/ +}; + /*}}}*/ +} +#endif diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index 46017bf0c..15efb1a3d 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -104,28 +104,6 @@ bool pkgInitConfig(Configuration &Cnf) if (Res == false) return false; - // we load all config files, now check the configs and setup post-defaults: - // * check for CompressionTypes setup - { - Configuration::Item const *Opts = _config->Tree("Acquire::CompressionTypes"); - if (Opts != 0) - Opts = Opts->Child; - 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; - } - if (!foundBzip2) Cnf.Set("Acquire::CompressionTypes::bz2","bzip2"); - if (!foundLzma) Cnf.Set("Acquire::CompressionTypes::lzma","lzma"); - if (!foundGzip) Cnf.Set("Acquire::CompressionTypes::gz","gzip"); - Cnf.CndSet("Dir::Bin::lzma", "/usr/bin/lzma"); - Cnf.CndSet("Dir::Bin::bzip2", "/bin/bzip2"); - } - - - if (Cnf.FindB("Debug::pkgInitConfig",false) == true) Cnf.Dump(); diff --git a/apt-pkg/makefile b/apt-pkg/makefile index 92ef58967..679d97e70 100644 --- a/apt-pkg/makefile +++ b/apt-pkg/makefile @@ -34,14 +34,15 @@ SOURCE+= pkgcache.cc version.cc depcache.cc \ acquire-worker.cc acquire-method.cc init.cc clean.cc \ srcrecords.cc cachefile.cc versionmatch.cc policy.cc \ pkgsystem.cc indexfile.cc pkgcachegen.cc acquire-item.cc \ - indexrecords.cc vendor.cc vendorlist.cc cdrom.cc indexcopy.cc + indexrecords.cc vendor.cc vendorlist.cc cdrom.cc indexcopy.cc \ + aptconfiguration.cc HEADERS+= algorithms.h depcache.h pkgcachegen.h cacheiterators.h \ orderlist.h sourcelist.h packagemanager.h tagfile.h \ init.h pkgcache.h version.h progress.h pkgrecords.h \ acquire.h acquire-worker.h acquire-item.h acquire-method.h \ clean.h srcrecords.h cachefile.h versionmatch.h policy.h \ pkgsystem.h indexfile.h metaindex.h indexrecords.h vendor.h \ - vendorlist.h cdrom.h indexcopy.h + vendorlist.h cdrom.h indexcopy.h aptconfiguration.h # Source code for the debian specific components # In theory the deb headers do not need to be exported.. diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index d347bda67..59235f115 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -309,7 +309,7 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; This list defines in which order the acquire methods will try to download these files. Per default bzip2 compressed files will be prefered over lzma, gzip and uncompressed files. The syntax for - the configuration fileentry (this option can't be set at runtime with the -o option) is + the configuration fileentry is Acquire::CompressionTypes::FileExtension "Methodname"; e.g. Acquire::CompressionTypes::bz2 "bzip2"; Note that at runtime the Dir::Bin::Methodname will diff --git a/po/apt-all.pot b/po/apt-all.pot index b20a3fd92..518a3a1c1 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-08-12 14:46+0200\n" +"POT-Creation-Date: 2009-08-21 11:35+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2364,12 +2364,12 @@ msgstr "" msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." msgstr "" -#: apt-pkg/init.cc:154 +#: apt-pkg/init.cc:132 #, c-format msgid "Packaging system '%s' is not supported" msgstr "" -#: apt-pkg/init.cc:170 +#: apt-pkg/init.cc:148 msgid "Unable to determine a suitable packaging system type" msgstr "" @@ -2497,44 +2497,44 @@ msgstr "" msgid "IO Error saving source cache" msgstr "" -#: apt-pkg/acquire-item.cc:127 +#: apt-pkg/acquire-item.cc:128 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "" -#: apt-pkg/acquire-item.cc:394 +#: apt-pkg/acquire-item.cc:395 msgid "MD5Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:663 apt-pkg/acquire-item.cc:1425 +#: apt-pkg/acquire-item.cc:649 apt-pkg/acquire-item.cc:1411 msgid "Hash Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:1120 +#: apt-pkg/acquire-item.cc:1106 msgid "There is no public key available for the following key IDs:\n" msgstr "" -#: apt-pkg/acquire-item.cc:1230 +#: apt-pkg/acquire-item.cc:1216 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" msgstr "" -#: apt-pkg/acquire-item.cc:1289 +#: apt-pkg/acquire-item.cc:1275 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " "manually fix this package." msgstr "" -#: apt-pkg/acquire-item.cc:1330 +#: apt-pkg/acquire-item.cc:1316 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" -#: apt-pkg/acquire-item.cc:1417 +#: apt-pkg/acquire-item.cc:1403 msgid "Size mismatch" msgstr "" -- cgit v1.2.3-70-g09d2