]> git.saurik.com Git - apt.git/commitdiff
g++ 4.7 fixes
authorMichael Vogt <michael.vogt@ubuntu.com>
Mon, 2 Jan 2012 14:15:54 +0000 (15:15 +0100)
committerMichael Vogt <michael.vogt@ubuntu.com>
Mon, 2 Jan 2012 14:15:54 +0000 (15:15 +0100)
114 files changed:
.bzrignore
apt-inst/contrib/arfile.h
apt-inst/contrib/extracttar.h
apt-inst/database.h
apt-inst/deb/debfile.h
apt-pkg/acquire-item.cc
apt-pkg/acquire-item.h
apt-pkg/acquire-method.h
apt-pkg/acquire.h
apt-pkg/algorithms.h
apt-pkg/cachefile.h
apt-pkg/cacheset.cc
apt-pkg/cacheset.h
apt-pkg/cdrom.cc
apt-pkg/cdrom.h
apt-pkg/contrib/cdromutl.h
apt-pkg/contrib/cmndline.h
apt-pkg/contrib/configuration.h
apt-pkg/contrib/fileutl.cc
apt-pkg/contrib/fileutl.h
apt-pkg/contrib/hashes.cc
apt-pkg/contrib/hashes.h
apt-pkg/contrib/hashsum.cc
apt-pkg/contrib/hashsum_template.h
apt-pkg/contrib/md5.h
apt-pkg/contrib/mmap.cc
apt-pkg/contrib/mmap.h
apt-pkg/contrib/netrc.h
apt-pkg/contrib/progress.h
apt-pkg/contrib/sha1.h
apt-pkg/contrib/strutl.h
apt-pkg/deb/debindexfile.cc
apt-pkg/deb/deblistparser.cc
apt-pkg/deb/deblistparser.h
apt-pkg/deb/debmetaindex.h
apt-pkg/deb/debrecords.cc
apt-pkg/deb/debrecords.h
apt-pkg/deb/debsrcrecords.h
apt-pkg/deb/dpkgpm.h
apt-pkg/depcache.cc
apt-pkg/depcache.h
apt-pkg/edsp.h
apt-pkg/edsp/edspindexfile.cc
apt-pkg/edsp/edspindexfile.h
apt-pkg/edsp/edsplistparser.h
apt-pkg/indexcopy.cc
apt-pkg/indexcopy.h
apt-pkg/indexfile.h
apt-pkg/indexrecords.h
apt-pkg/init.h
apt-pkg/metaindex.h
apt-pkg/packagemanager.h
apt-pkg/pkgcache.h
apt-pkg/pkgcachegen.cc
apt-pkg/pkgsystem.h
apt-pkg/policy.h
apt-pkg/sourcelist.h
apt-pkg/srcrecords.cc
apt-pkg/srcrecords.h
apt-pkg/tagfile.h
apt-pkg/vendor.h
apt-pkg/vendorlist.h
apt-pkg/version.h
apt-pkg/versionmatch.h
buildlib/config.h.in
cmdline/apt-cache.cc
cmdline/apt-config.cc
cmdline/apt-extracttemplates.h
cmdline/apt-get.cc
cmdline/apt-mark.cc
configure.in
debian/changelog
debian/control
debian/libapt-inst1.4.install [deleted file]
debian/libapt-inst1.4.install.in [new file with mode: 0644]
debian/libapt-pkg-dev.dirs [deleted file]
debian/libapt-pkg-dev.install [deleted file]
debian/libapt-pkg-dev.install.in [new file with mode: 0644]
debian/libapt-pkg4.12.install [deleted file]
debian/libapt-pkg4.12.install.in [new file with mode: 0644]
debian/rules
doc/apt-get.8.xml
doc/apt-key.8.xml
doc/apt.conf.5.xml
doc/manpage-style.xsl
doc/po/de.po
doc/po/es.po
doc/po/fr.po
doc/po/ja.po
doc/po/pl.po
doc/po/pt.po
doc/sources.list.5.xml
ftparchive/cachedb.cc
ftparchive/multicompress.cc
ftparchive/multicompress.h
ftparchive/writer.cc
methods/cdrom.cc
methods/copy.cc
methods/file.cc
methods/ftp.cc
methods/gzip.cc
methods/http.cc
methods/https.cc
methods/rred.cc
methods/rsh.cc
po/apt-all.pot
po/fr.po
po/nl.po
test/integration/Packages-pdiff-usage-new
test/integration/framework
test/integration/test-multiarch-foreign [new file with mode: 0755]
test/libapt/cdromfindpackages_test.cc [new file with mode: 0644]
test/libapt/makefile
test/libapt/run-tests

index 7c4b11b10c5151cf674421f69786f638cf4db6b3..dab38cf712c8add75bc78d6f19be6d2b5b29417f 100644 (file)
@@ -10,6 +10,8 @@ build/
 configure
 buildlib/config.sub
 buildlib/config.guess
+debian/libapt-pkg[0-9]*.install
+debian/libapt-inst[0-9]*.install
 
 # abichecker related files/dir
 abicheck/apt_build.xml
index 2be1323d1d97ffd375f99d94ce6ae93c60efc390..0f62a34a06bd41025bb88c9c1013c7fcccc3fa3e 100644 (file)
@@ -17,6 +17,9 @@
 
 
 #include <string>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+#endif
 
 class FileFd;
 
index 8754e8dcc0166399c438dc2af20dcb3aaef929a4..4b29df3141ae71dfbd54c08fae1b5f381f17a899 100644 (file)
 
 #include <string>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/dirstream.h>
+#include <algorithm>
+using std::min;
+#endif
+
 class pkgDirStream;
 
 class ExtractTar
index ccfee3797a134c2a115c8439e7102a2e9e98bace..64e149f98c8b3cc980bed5ae57c2cd2995bae594 100644 (file)
 
 #include <string>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/filelist.h>
+#endif
+
 class pkgFLCache;
 class OpProgress;
 
index 2c4734f9ed47ea3ed3be06b7cad10a98672ceb67..5e1ea1d2f3e505f90ed801c327ad3a9f9b75413a 100644 (file)
 #include <apt-pkg/tagfile.h>
 #include <apt-pkg/pkgcache.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/database.h>
+#endif
+
 class FileFd;
 class pkgDataBase;
 
index 453fce1093bd297e27fdf59b609f539cd852aea2..f231c42b4219e7e0e871376fd98f9423934ba438 100644 (file)
@@ -438,7 +438,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile)          /*{{{*/
 
       FileFd fd(CurrentPackagesFile, FileFd::ReadOnly);
       SHA1Summation SHA1;
-      SHA1.AddFD(fd.Fd(), fd.Size());
+      SHA1.AddFD(fd);
       string const local_sha1 = SHA1.Result();
 
       if(local_sha1 == ServerSha1) 
@@ -669,7 +669,7 @@ bool pkgAcqIndexDiffs::QueueNextDiff()                                      /*{{{*/
 
    FileFd fd(FinalFile, FileFd::ReadOnly);
    SHA1Summation SHA1;
-   SHA1.AddFD(fd.Fd(), fd.Size());
+   SHA1.AddFD(fd);
    string local_sha1 = string(SHA1.Result());
    if(Debug)
       std::clog << "QueueNextDiff: " 
index 27b8e887bba7a4d4440930321a7546a53675227b..51d539450b012b69e3d3603b7d01eee9c18370dd 100644 (file)
 #include <apt-pkg/weakptr.h>
 #include <apt-pkg/pkgcache.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/vendor.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/indexrecords.h>
+#endif
+
 /** \addtogroup acquire
  *  @{
  *
index c3f042ee061d999efb786fbfb7a064efd4aee8bf..2dd9ad685877682058b8a1f1527f5459f3484835 100644 (file)
 #include <string>
 #include <vector>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/strutl.h>
+#endif
+
 class Hashes;
 class pkgAcqMethod
 {
index 93772403d5c37e8b369698d3ef05e726636fd261..3d5d7a4b78a9aa522af324e04537f52289995213 100644 (file)
 #include <sys/time.h>
 #include <unistd.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::vector;
+using std::string;
+#endif
+
 class pkgAcquireStatus;
 
 /** \brief The core download scheduler.                                        {{{
index 948fe110312689e06d05130a5e1e849a388d5692..185d11e963da1c374258f902974e348335e687c0 100644 (file)
 
 #include <iostream>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/acquire.h>
+using std::ostream;
+#endif
+
 class pkgAcquireStatus;
 
 class pkgSimulate : public pkgPackageManager                           /*{{{*/
index b56e4285563729516967c93b72d810f174efb791..802b12b619dd8b233a16a2cab0679613e5868c1b 100644 (file)
 #include <apt-pkg/depcache.h>
 #include <apt-pkg/macros.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/acquire.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/sourcelist.h>
+#endif
+
 class pkgPolicy;
 class pkgSourceList;
 class OpProgress;
index 6b95eab709c3b9234d6acb600fef9b46165cfb35..b892ab4bfd9a69964c3c0762d63c4e187347f7d2 100644 (file)
@@ -29,7 +29,7 @@
                                                                        /*}}}*/
 namespace APT {
 // FromTask - Return all packages in the cache from a specific task    /*{{{*/
-PackageSet PackageSet::FromTask(pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) {
+bool PackageContainerInterface::FromTask(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) {
        size_t const archfound = pattern.find_last_of(':');
        std::string arch = "native";
        if (archfound != std::string::npos) {
@@ -38,13 +38,16 @@ PackageSet PackageSet::FromTask(pkgCacheFile &Cache, std::string pattern, CacheS
        }
 
        if (pattern[pattern.length() -1] != '^')
-               return APT::PackageSet(TASK);
+               return false;
        pattern.erase(pattern.length()-1);
 
        if (unlikely(Cache.GetPkgCache() == 0 || Cache.GetDepCache() == 0))
-               return APT::PackageSet(TASK);
+               return false;
+
+       bool const wasEmpty = pci->empty();
+       if (wasEmpty == true)
+               pci->setConstructor(TASK);
 
-       PackageSet pkgset(TASK);
        // get the records
        pkgRecords Recs(Cache);
 
@@ -54,9 +57,10 @@ PackageSet PackageSet::FromTask(pkgCacheFile &Cache, std::string pattern, CacheS
        snprintf(S, sizeof(S), "^Task:.*[, ]%s([, ]|$)", pattern.c_str());
        if(regcomp(&Pattern,S, REG_EXTENDED | REG_NOSUB | REG_NEWLINE) != 0) {
                _error->Error("Failed to compile task regexp");
-               return pkgset;
+               return false;
        }
 
+       bool found = false;
        for (pkgCache::GrpIterator Grp = Cache->GrpBegin(); Grp.end() == false; ++Grp) {
                pkgCache::PkgIterator Pkg = Grp.FindPkg(arch);
                if (Pkg.end() == true)
@@ -75,22 +79,33 @@ PackageSet PackageSet::FromTask(pkgCacheFile &Cache, std::string pattern, CacheS
                if (regexec(&Pattern, buf, 0, 0, 0) != 0)
                        continue;
 
-               pkgset.insert(Pkg);
+               pci->insert(Pkg);
+               helper.showTaskSelection(Pkg, pattern);
+               found = true;
        }
        regfree(&Pattern);
 
-       if (pkgset.empty() == true)
-               return helper.canNotFindTask(Cache, pattern);
+       if (found == false) {
+               helper.canNotFindTask(pci, Cache, pattern);
+               pci->setConstructor(UNKNOWN);
+               return false;
+       }
+
+       if (wasEmpty == false && pci->getConstructor() != UNKNOWN)
+               pci->setConstructor(UNKNOWN);
 
-       helper.showTaskSelection(pkgset, pattern);
-       return pkgset;
+       return true;
 }
                                                                        /*}}}*/
 // FromRegEx - Return all packages in the cache matching a pattern     /*{{{*/
-PackageSet PackageSet::FromRegEx(pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) {
+bool PackageContainerInterface::FromRegEx(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) {
        static const char * const isregex = ".?+*|[^$";
        if (pattern.find_first_of(isregex) == std::string::npos)
-               return PackageSet(REGEX);
+               return false;
+
+       bool const wasEmpty = pci->empty();
+       if (wasEmpty == true)
+               pci->setConstructor(REGEX);
 
        size_t archfound = pattern.find_last_of(':');
        std::string arch = "native";
@@ -103,11 +118,11 @@ PackageSet PackageSet::FromRegEx(pkgCacheFile &Cache, std::string pattern, Cache
        }
 
        if (unlikely(Cache.GetPkgCache() == 0))
-               return PackageSet(REGEX);
+               return false;
 
        APT::CacheFilter::PackageNameMatchesRegEx regexfilter(pattern);
 
-       PackageSet pkgset(REGEX);
+       bool found = false;
        for (pkgCache::GrpIterator Grp = Cache.GetPkgCache()->GrpBegin(); Grp.end() == false; ++Grp) {
                if (regexfilter(Grp) == false)
                        continue;
@@ -123,18 +138,25 @@ PackageSet PackageSet::FromRegEx(pkgCacheFile &Cache, std::string pattern, Cache
                                continue;
                }
 
-               pkgset.insert(Pkg);
+               pci->insert(Pkg);
+               helper.showRegExSelection(Pkg, pattern);
+               found = true;
        }
 
-       if (pkgset.empty() == true)
-               return helper.canNotFindRegEx(Cache, pattern);
+       if (found == false) {
+               helper.canNotFindRegEx(pci, Cache, pattern);
+               pci->setConstructor(UNKNOWN);
+               return false;
+       }
+
+       if (wasEmpty == false && pci->getConstructor() != UNKNOWN)
+               pci->setConstructor(UNKNOWN);
 
-       helper.showRegExSelection(pkgset, pattern);
-       return pkgset;
+       return true;
 }
                                                                        /*}}}*/
 // FromName - Returns the package defined  by this string              /*{{{*/
-pkgCache::PkgIterator PackageSet::FromName(pkgCacheFile &Cache,
+pkgCache::PkgIterator PackageContainerInterface::FromName(pkgCacheFile &Cache,
                        std::string const &str, CacheSetHelper &helper) {
        std::string pkg = str;
        size_t archfound = pkg.find_last_of(':');
@@ -160,144 +182,131 @@ pkgCache::PkgIterator PackageSet::FromName(pkgCacheFile &Cache,
        return Pkg;
 }
                                                                        /*}}}*/
-// GroupedFromCommandLine - Return all versions specified on commandline/*{{{*/
-std::map<unsigned short, PackageSet> PackageSet::GroupedFromCommandLine(
-               pkgCacheFile &Cache, const char **cmdline,
-               std::list<PackageSet::Modifier> const &mods,
-               unsigned short const &fallback, CacheSetHelper &helper) {
-       std::map<unsigned short, PackageSet> pkgsets;
-       for (const char **I = cmdline; *I != 0; ++I) {
-               unsigned short modID = fallback;
-               std::string str = *I;
-               bool modifierPresent = false;
-               for (std::list<PackageSet::Modifier>::const_iterator mod = mods.begin();
-                    mod != mods.end(); ++mod) {
-                       size_t const alength = strlen(mod->Alias);
-                       switch(mod->Pos) {
-                       case PackageSet::Modifier::POSTFIX:
-                               if (str.compare(str.length() - alength, alength,
-                                               mod->Alias, 0, alength) != 0)
-                                       continue;
-                               str.erase(str.length() - alength);
-                               modID = mod->ID;
-                               break;
-                       case PackageSet::Modifier::PREFIX:
-                               continue;
-                       case PackageSet::Modifier::NONE:
-                               continue;
-                       }
-                       modifierPresent = true;
-                       break;
-               }
-               if (modifierPresent == true) {
-                       bool const errors = helper.showErrors(false);
-                       pkgCache::PkgIterator Pkg = FromName(Cache, *I, helper);
-                       helper.showErrors(errors);
-                       if (Pkg.end() == false) {
-                               pkgsets[fallback].insert(Pkg);
-                               continue;
-                       }
-               }
-               pkgsets[modID].insert(PackageSet::FromString(Cache, str, helper));
-       }
-       return pkgsets;
-}
-                                                                       /*}}}*/
-// FromCommandLine - Return all packages specified on commandline      /*{{{*/
-PackageSet PackageSet::FromCommandLine(pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper) {
-       PackageSet pkgset;
-       for (const char **I = cmdline; *I != 0; ++I) {
-               PackageSet pset = FromString(Cache, *I, helper);
-               pkgset.insert(pset.begin(), pset.end());
-       }
-       return pkgset;
-}
-                                                                       /*}}}*/
 // FromString - Return all packages matching a specific string         /*{{{*/
-PackageSet PackageSet::FromString(pkgCacheFile &Cache, std::string const &str, CacheSetHelper &helper) {
+bool PackageContainerInterface::FromString(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &str, CacheSetHelper &helper) {
+       bool found = true;
        _error->PushToStack();
 
-       PackageSet pkgset;
        pkgCache::PkgIterator Pkg = FromName(Cache, str, helper);
        if (Pkg.end() == false)
-               pkgset.insert(Pkg);
-       else {
-               pkgset = FromTask(Cache, str, helper);
-               if (pkgset.empty() == true) {
-                       pkgset = FromRegEx(Cache, str, helper);
-                       if (pkgset.empty() == true)
-                               pkgset = helper.canNotFindPackage(Cache, str);
-               }
+               pci->insert(Pkg);
+       else if (FromTask(pci, Cache, str, helper) == false &&
+                FromRegEx(pci, Cache, str, helper) == false)
+       {
+               helper.canNotFindPackage(pci, Cache, str);
+               found = false;
        }
 
-       if (pkgset.empty() == false)
+       if (found == true)
                _error->RevertToStack();
        else
                _error->MergeWithStack();
-       return pkgset;
+       return found;
 }
                                                                        /*}}}*/
-// GroupedFromCommandLine - Return all versions specified on commandline/*{{{*/
-std::map<unsigned short, VersionSet> VersionSet::GroupedFromCommandLine(
-               pkgCacheFile &Cache, const char **cmdline,
-               std::list<VersionSet::Modifier> const &mods,
-               unsigned short const &fallback, CacheSetHelper &helper) {
-       std::map<unsigned short, VersionSet> versets;
-       for (const char **I = cmdline; *I != 0; ++I) {
-               unsigned short modID = fallback;
-               VersionSet::Version select = VersionSet::NEWEST;
-               std::string str = *I;
-               bool modifierPresent = false;
-               for (std::list<VersionSet::Modifier>::const_iterator mod = mods.begin();
-                    mod != mods.end(); ++mod) {
-                       if (modID == fallback && mod->ID == fallback)
-                               select = mod->SelectVersion;
-                       size_t const alength = strlen(mod->Alias);
-                       switch(mod->Pos) {
-                       case VersionSet::Modifier::POSTFIX:
-                               if (str.compare(str.length() - alength, alength,
-                                               mod->Alias, 0, alength) != 0)
-                                       continue;
-                               str.erase(str.length() - alength);
-                               modID = mod->ID;
-                               select = mod->SelectVersion;
-                               break;
-                       case VersionSet::Modifier::PREFIX:
-                               continue;
-                       case VersionSet::Modifier::NONE:
+// FromCommandLine - Return all packages specified on commandline      /*{{{*/
+bool PackageContainerInterface::FromCommandLine(PackageContainerInterface * const pci, pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper) {
+       bool found = false;
+       for (const char **I = cmdline; *I != 0; ++I)
+               found |= PackageContainerInterface::FromString(pci, Cache, *I, helper);
+       return found;
+}
+                                                                       /*}}}*/
+// FromModifierCommandLine - helper doing the work for PKG:GroupedFromCommandLine      /*{{{*/
+bool PackageContainerInterface::FromModifierCommandLine(unsigned short &modID, PackageContainerInterface * const pci,
+                                                       pkgCacheFile &Cache, const char * cmdline,
+                                                       std::list<Modifier> const &mods, CacheSetHelper &helper) {
+       std::string str = cmdline;
+       bool modifierPresent = false;
+       for (std::list<Modifier>::const_iterator mod = mods.begin();
+            mod != mods.end(); ++mod) {
+               size_t const alength = strlen(mod->Alias);
+               switch(mod->Pos) {
+               case Modifier::POSTFIX:
+                       if (str.compare(str.length() - alength, alength,
+                                       mod->Alias, 0, alength) != 0)
                                continue;
-                       }
-                       modifierPresent = true;
+                       str.erase(str.length() - alength);
+                       modID = mod->ID;
                        break;
+               case Modifier::PREFIX:
+                       continue;
+               case Modifier::NONE:
+                       continue;
                }
-
-               if (modifierPresent == true) {
-                       bool const errors = helper.showErrors(false);
-                       VersionSet const vset = VersionSet::FromString(Cache, std::string(*I), select, helper, true);
-                       helper.showErrors(errors);
-                       if (vset.empty() == false) {
-                               versets[fallback].insert(vset);
+               modifierPresent = true;
+               break;
+       }
+       if (modifierPresent == true) {
+               bool const errors = helper.showErrors(false);
+               pkgCache::PkgIterator Pkg = FromName(Cache, cmdline, helper);
+               helper.showErrors(errors);
+               if (Pkg.end() == false) {
+                       pci->insert(Pkg);
+                       return true;
+               }
+       }
+       return FromString(pci, Cache, str, helper);
+}
+                                                                       /*}}}*/
+// FromModifierCommandLine - helper doing the work for VER:GroupedFromCommandLine      /*{{{*/
+bool VersionContainerInterface::FromModifierCommandLine(unsigned short &modID,
+                                                       VersionContainerInterface * const vci,
+                                                       pkgCacheFile &Cache, const char * cmdline,
+                                                       std::list<Modifier> const &mods,
+                                                       CacheSetHelper &helper) {
+       Version select = NEWEST;
+       std::string str = cmdline;
+       bool modifierPresent = false;
+       unsigned short fallback = modID;
+       for (std::list<Modifier>::const_iterator mod = mods.begin();
+            mod != mods.end(); ++mod) {
+               if (modID == fallback && mod->ID == fallback)
+                       select = mod->SelectVersion;
+               size_t const alength = strlen(mod->Alias);
+               switch(mod->Pos) {
+               case Modifier::POSTFIX:
+                       if (str.compare(str.length() - alength, alength,
+                                       mod->Alias, 0, alength) != 0)
                                continue;
-                       }
+                       str.erase(str.length() - alength);
+                       modID = mod->ID;
+                       select = mod->SelectVersion;
+                       break;
+               case Modifier::PREFIX:
+                       continue;
+               case Modifier::NONE:
+                       continue;
                }
-               versets[modID].insert(VersionSet::FromString(Cache, str, select , helper));
+               modifierPresent = true;
+               break;
        }
-       return versets;
+
+       if (modifierPresent == true) {
+               bool const errors = helper.showErrors(false);
+               bool const found = VersionContainerInterface::FromString(vci, Cache, cmdline, select, helper, true);
+               helper.showErrors(errors);
+               if (found == true)
+                       return true;
+       }
+       return FromString(vci, Cache, str, select, helper);
 }
                                                                        /*}}}*/
 // FromCommandLine - Return all versions specified on commandline      /*{{{*/
-APT::VersionSet VersionSet::FromCommandLine(pkgCacheFile &Cache, const char **cmdline,
-               APT::VersionSet::Version const &fallback, CacheSetHelper &helper) {
-       VersionSet verset;
+bool VersionContainerInterface::FromCommandLine(VersionContainerInterface * const vci,
+                                               pkgCacheFile &Cache, const char **cmdline,
+                                               Version const &fallback, CacheSetHelper &helper) {
+       bool found = false;
        for (const char **I = cmdline; *I != 0; ++I)
-               verset.insert(VersionSet::FromString(Cache, *I, fallback, helper));
-       return verset;
+               found |= VersionContainerInterface::FromString(vci, Cache, *I, fallback, helper);
+       return found;
 }
                                                                        /*}}}*/
 // FromString - Returns all versions spedcified by a string            /*{{{*/
-APT::VersionSet VersionSet::FromString(pkgCacheFile &Cache, std::string pkg,
-               APT::VersionSet::Version const &fallback, CacheSetHelper &helper,
-               bool const &onlyFromName) {
+bool VersionContainerInterface::FromString(VersionContainerInterface * const vci,
+                                          pkgCacheFile &Cache, std::string pkg,
+                                          Version const &fallback, CacheSetHelper &helper,
+                                          bool const onlyFromName) {
        std::string ver;
        bool verIsRel = false;
        size_t const vertag = pkg.find_last_of("/=");
@@ -308,19 +317,20 @@ APT::VersionSet VersionSet::FromString(pkgCacheFile &Cache, std::string pkg,
        }
        PackageSet pkgset;
        if (onlyFromName == false)
-               pkgset = PackageSet::FromString(Cache, pkg, helper);
+               PackageContainerInterface::FromString(&pkgset, Cache, pkg, helper);
        else {
-               pkgset.insert(PackageSet::FromName(Cache, pkg, helper));
+               pkgset.insert(PackageContainerInterface::FromName(Cache, pkg, helper));
        }
 
-       VersionSet verset;
        bool errors = true;
        if (pkgset.getConstructor() != PackageSet::UNKNOWN)
                errors = helper.showErrors(false);
+
+       bool found = false;
        for (PackageSet::const_iterator P = pkgset.begin();
             P != pkgset.end(); ++P) {
                if (vertag == std::string::npos) {
-                       verset.insert(VersionSet::FromPackage(Cache, P, fallback, helper));
+                       found |= VersionContainerInterface::FromPackage(vci, Cache, P, fallback, helper);
                        continue;
                }
                pkgCache::VerIterator V;
@@ -350,75 +360,78 @@ APT::VersionSet VersionSet::FromString(pkgCacheFile &Cache, std::string pkg,
                if (V.end() == true)
                        continue;
                helper.showSelectedVersion(P, V, ver, verIsRel);
-               verset.insert(V);
+               vci->insert(V);
+               found = true;
        }
        if (pkgset.getConstructor() != PackageSet::UNKNOWN)
                helper.showErrors(errors);
-       return verset;
+       return found;
 }
                                                                        /*}}}*/
 // FromPackage - versions from package based on fallback               /*{{{*/
-VersionSet VersionSet::FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P,
-               VersionSet::Version const &fallback, CacheSetHelper &helper) {
-       VersionSet verset;
+bool VersionContainerInterface::FromPackage(VersionContainerInterface * const vci,
+                                           pkgCacheFile &Cache,
+                                           pkgCache::PkgIterator const &P,
+                                           Version const &fallback,
+                                           CacheSetHelper &helper) {
        pkgCache::VerIterator V;
        bool showErrors;
+       bool found = false;
        switch(fallback) {
-       case VersionSet::ALL:
+       case ALL:
                if (P->VersionList != 0)
                        for (V = P.VersionList(); V.end() != true; ++V)
-                               verset.insert(V);
+                               found |= vci->insert(V);
                else
-                       verset.insert(helper.canNotFindAllVer(Cache, P));
+                       helper.canNotFindAllVer(vci, Cache, P);
                break;
-       case VersionSet::CANDANDINST:
-               verset.insert(getInstalledVer(Cache, P, helper));
-               verset.insert(getCandidateVer(Cache, P, helper));
+       case CANDANDINST:
+               found |= vci->insert(getInstalledVer(Cache, P, helper));
+               found |= vci->insert(getCandidateVer(Cache, P, helper));
                break;
-       case VersionSet::CANDIDATE:
-               verset.insert(getCandidateVer(Cache, P, helper));
+       case CANDIDATE:
+               found |= vci->insert(getCandidateVer(Cache, P, helper));
                break;
-       case VersionSet::INSTALLED:
-               verset.insert(getInstalledVer(Cache, P, helper));
+       case INSTALLED:
+               found |= vci->insert(getInstalledVer(Cache, P, helper));
                break;
-       case VersionSet::CANDINST:
+       case CANDINST:
                showErrors = helper.showErrors(false);
                V = getCandidateVer(Cache, P, helper);
                if (V.end() == true)
                        V = getInstalledVer(Cache, P, helper);
                helper.showErrors(showErrors);
                if (V.end() == false)
-                       verset.insert(V);
+                       found |= vci->insert(V);
                else
-                       verset.insert(helper.canNotFindInstCandVer(Cache, P));
+                       helper.canNotFindInstCandVer(vci, Cache, P);
                break;
-       case VersionSet::INSTCAND:
+       case INSTCAND:
                showErrors = helper.showErrors(false);
                V = getInstalledVer(Cache, P, helper);
                if (V.end() == true)
                        V = getCandidateVer(Cache, P, helper);
                helper.showErrors(showErrors);
                if (V.end() == false)
-                       verset.insert(V);
+                       found |= vci->insert(V);
                else
-                       verset.insert(helper.canNotFindInstCandVer(Cache, P));
+                       helper.canNotFindInstCandVer(vci, Cache, P);
                break;
-       case VersionSet::NEWEST:
+       case NEWEST:
                if (P->VersionList != 0)
-                       verset.insert(P.VersionList());
+                       found |= vci->insert(P.VersionList());
                else
-                       verset.insert(helper.canNotFindNewestVer(Cache, P));
+                       helper.canNotFindNewestVer(Cache, P);
                break;
        }
-       return verset;
+       return found;
 }
                                                                        /*}}}*/
 // getCandidateVer - Returns the candidate version of the given package        /*{{{*/
-pkgCache::VerIterator VersionSet::getCandidateVer(pkgCacheFile &Cache,
+pkgCache::VerIterator VersionContainerInterface::getCandidateVer(pkgCacheFile &Cache,
                pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper) {
        pkgCache::VerIterator Cand;
-       if (Cache.IsPolicyBuilt() == true || Cache.IsDepCacheBuilt() == false)
-       {
+       if (Cache.IsPolicyBuilt() == true || Cache.IsDepCacheBuilt() == false) {
                if (unlikely(Cache.GetPolicy() == 0))
                        return pkgCache::VerIterator(Cache);
                Cand = Cache.GetPolicy()->GetCandidateVer(Pkg);
@@ -431,13 +444,14 @@ pkgCache::VerIterator VersionSet::getCandidateVer(pkgCacheFile &Cache,
 }
                                                                        /*}}}*/
 // getInstalledVer - Returns the installed version of the given package        /*{{{*/
-pkgCache::VerIterator VersionSet::getInstalledVer(pkgCacheFile &Cache,
+pkgCache::VerIterator VersionContainerInterface::getInstalledVer(pkgCacheFile &Cache,
                pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper) {
        if (Pkg->CurrentVer == 0)
                return helper.canNotFindInstalledVer(Cache, Pkg);
        return Pkg.CurrentVer();
 }
                                                                        /*}}}*/
+
 // canNotFindPkgName - handle the case no package has this name                /*{{{*/
 pkgCache::PkgIterator CacheSetHelper::canNotFindPkgName(pkgCacheFile &Cache,
                        std::string const &str) {
@@ -447,46 +461,40 @@ pkgCache::PkgIterator CacheSetHelper::canNotFindPkgName(pkgCacheFile &Cache,
 }
                                                                        /*}}}*/
 // canNotFindTask - handle the case no package is found for a task     /*{{{*/
-PackageSet CacheSetHelper::canNotFindTask(pkgCacheFile &Cache, std::string pattern) {
+void CacheSetHelper::canNotFindTask(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern) {
        if (ShowError == true)
                _error->Insert(ErrorType, _("Couldn't find task '%s'"), pattern.c_str());
-       return PackageSet();
 }
                                                                        /*}}}*/
 // canNotFindRegEx - handle the case no package is found by a regex    /*{{{*/
-PackageSet CacheSetHelper::canNotFindRegEx(pkgCacheFile &Cache, std::string pattern) {
+void CacheSetHelper::canNotFindRegEx(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern) {
        if (ShowError == true)
                _error->Insert(ErrorType, _("Couldn't find any package by regex '%s'"), pattern.c_str());
-       return PackageSet();
 }
                                                                        /*}}}*/
 // canNotFindPackage - handle the case no package is found from a string/*{{{*/
-PackageSet CacheSetHelper::canNotFindPackage(pkgCacheFile &Cache, std::string const &str) {
-       return PackageSet();
+void CacheSetHelper::canNotFindPackage(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &str) {
 }
                                                                        /*}}}*/
 // canNotFindAllVer                                                    /*{{{*/
-VersionSet CacheSetHelper::canNotFindAllVer(pkgCacheFile &Cache,
+void CacheSetHelper::canNotFindAllVer(VersionContainerInterface * const vci, pkgCacheFile &Cache,
                pkgCache::PkgIterator const &Pkg) {
        if (ShowError == true)
                _error->Insert(ErrorType, _("Can't select versions from package '%s' as it is purely virtual"), Pkg.FullName(true).c_str());
-       return VersionSet();
 }
                                                                        /*}}}*/
 // canNotFindInstCandVer                                               /*{{{*/
-VersionSet CacheSetHelper::canNotFindInstCandVer(pkgCacheFile &Cache,
+void CacheSetHelper::canNotFindInstCandVer(VersionContainerInterface * const vci, pkgCacheFile &Cache,
                pkgCache::PkgIterator const &Pkg) {
        if (ShowError == true)
                _error->Insert(ErrorType, _("Can't select installed nor candidate version from package '%s' as it has neither of them"), Pkg.FullName(true).c_str());
-       return VersionSet();
 }
                                                                        /*}}}*/
 // canNotFindInstCandVer                                               /*{{{*/
-VersionSet CacheSetHelper::canNotFindCandInstVer(pkgCacheFile &Cache,
+void CacheSetHelper::canNotFindCandInstVer(VersionContainerInterface * const vci, pkgCacheFile &Cache,
                pkgCache::PkgIterator const &Pkg) {
        if (ShowError == true)
                _error->Insert(ErrorType, _("Can't select installed nor candidate version from package '%s' as it has neither of them"), Pkg.FullName(true).c_str());
-       return VersionSet();
 }
                                                                        /*}}}*/
 // canNotFindNewestVer                                                 /*{{{*/
@@ -513,4 +521,21 @@ pkgCache::VerIterator CacheSetHelper::canNotFindInstalledVer(pkgCacheFile &Cache
        return pkgCache::VerIterator(Cache, 0);
 }
                                                                        /*}}}*/
+// showTaskSelection                                                   /*{{{*/
+void CacheSetHelper::showTaskSelection(pkgCache::PkgIterator const &pkg,
+                                      std::string const &pattern) {
+}
+                                                                       /*}}}*/
+// showRegExSelection                                                  /*{{{*/
+void CacheSetHelper::showRegExSelection(pkgCache::PkgIterator const &pkg,
+                                       std::string const &pattern) {
+}
+                                                                       /*}}}*/
+// showSelectedVersion                                                 /*{{{*/
+void CacheSetHelper::showSelectedVersion(pkgCache::PkgIterator const &Pkg,
+                                        pkgCache::VerIterator const Ver,
+                                        std::string const &ver,
+                                        bool const verIsRel) {
+}
+                                                                       /*}}}*/
 }
index 3b1118bdca181b9f39cf9785d06c82f7dc524da8..91d7eec1cfb0311a8d412fe5e51c5497d163a58f 100644 (file)
 #include <list>
 #include <map>
 #include <set>
+#include <list>
 #include <string>
+#include <iterator>
 
 #include <apt-pkg/error.h>
 #include <apt-pkg/pkgcache.h>
+
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/cachefile.h>
+#endif
                                                                        /*}}}*/
 
 class pkgCacheFile;
 
 namespace APT {
-class PackageSet;
-class VersionSet;
+class PackageContainerInterface;
+class VersionContainerInterface;
+
 class CacheSetHelper {                                                 /*{{{*/
 /** \class APT::CacheSetHelper
     Simple base class with a lot of virtual methods which can be overridden
@@ -35,25 +42,28 @@ class CacheSetHelper {                                                      /*{{{*/
     printed out.
 */
 public:                                                                        /*{{{*/
-       CacheSetHelper(bool const &ShowError = true,
+       CacheSetHelper(bool const ShowError = true,
                GlobalError::MsgType ErrorType = GlobalError::ERROR) :
                        ShowError(ShowError), ErrorType(ErrorType) {};
        virtual ~CacheSetHelper() {};
 
-       virtual void showTaskSelection(PackageSet const &pkgset, std::string const &pattern) {};
-       virtual void showRegExSelection(PackageSet const &pkgset, std::string const &pattern) {};
+       virtual void showTaskSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern);
+       virtual void showRegExSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern);
        virtual void showSelectedVersion(pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const Ver,
-                                std::string const &ver, bool const &verIsRel) {};
+                                std::string const &ver, bool const verIsRel);
 
-       virtual pkgCache::PkgIterator canNotFindPkgName(pkgCacheFile &Cache, std::string const &str);
-       virtual PackageSet canNotFindTask(pkgCacheFile &Cache, std::string pattern);
-       virtual PackageSet canNotFindRegEx(pkgCacheFile &Cache, std::string pattern);
-       virtual PackageSet canNotFindPackage(pkgCacheFile &Cache, std::string const &str);
-       virtual VersionSet canNotFindAllVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg);
-       virtual VersionSet canNotFindInstCandVer(pkgCacheFile &Cache,
+       virtual void canNotFindTask(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern);
+       virtual void canNotFindRegEx(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern);
+       virtual void canNotFindPackage(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &str);
+
+       virtual void canNotFindAllVer(VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg);
+       virtual void canNotFindInstCandVer(VersionContainerInterface * const vci, pkgCacheFile &Cache,
                                pkgCache::PkgIterator const &Pkg);
-       virtual VersionSet canNotFindCandInstVer(pkgCacheFile &Cache,
+       virtual void canNotFindCandInstVer(VersionContainerInterface * const vci,
+                               pkgCacheFile &Cache,
                                pkgCache::PkgIterator const &Pkg);
+
+       virtual pkgCache::PkgIterator canNotFindPkgName(pkgCacheFile &Cache, std::string const &str);
        virtual pkgCache::VerIterator canNotFindNewestVer(pkgCacheFile &Cache,
                                pkgCache::PkgIterator const &Pkg);
        virtual pkgCache::VerIterator canNotFindCandidateVer(pkgCacheFile &Cache,
@@ -62,7 +72,7 @@ public:                                                                       /*{{{*/
                                pkgCache::PkgIterator const &Pkg);
 
        bool showErrors() const { return ShowError; };
-       bool showErrors(bool const &newValue) { if (ShowError == newValue) return ShowError; else return ((ShowError = newValue) == false); };
+       bool showErrors(bool const newValue) { if (ShowError == newValue) return ShowError; else return ((ShowError = newValue) == false); };
        GlobalError::MsgType errorType() const { return ErrorType; };
        GlobalError::MsgType errorType(GlobalError::MsgType const &newValue)
        {
@@ -79,53 +89,134 @@ protected:
        bool ShowError;
        GlobalError::MsgType ErrorType;
 };                                                                     /*}}}*/
-class PackageSet : public std::set<pkgCache::PkgIterator> {            /*{{{*/
-/** \class APT::PackageSet
-
-    Simple wrapper around a std::set to provide a similar interface to
-    a set of packages as to the complete set of all packages in the
-    pkgCache. */
-public:                                                                        /*{{{*/
-       /** \brief smell like a pkgCache::PkgIterator */
-       class const_iterator : public std::set<pkgCache::PkgIterator>::const_iterator {/*{{{*/
+class PackageContainerInterface {                                      /*{{{*/
+/** \class PackageContainerInterface
+
+ * Interface ensuring that all operations can be executed on the yet to
+ * define concrete PackageContainer - access to all methods is possible,
+ * but in general the wrappers provided by the PackageContainer template
+ * are nicer to use.
+
+ * This class mostly protects use from the need to write all implementation
+ * of the methods working on containers in the template */
+public:
+       class const_iterator {                                          /*{{{*/
        public:
-               const_iterator(std::set<pkgCache::PkgIterator>::const_iterator x) :
-                        std::set<pkgCache::PkgIterator>::const_iterator(x) {}
-
-               operator pkgCache::PkgIterator(void) { return **this; }
-
-               inline const char *Name() const {return (**this).Name(); }
-               inline std::string FullName(bool const &Pretty) const { return (**this).FullName(Pretty); }
-               inline std::string FullName() const { return (**this).FullName(); }
-               inline const char *Section() const {return (**this).Section(); }
-               inline bool Purge() const {return (**this).Purge(); }
-               inline const char *Arch() const {return (**this).Arch(); }
-               inline pkgCache::GrpIterator Group() const { return (**this).Group(); }
-               inline pkgCache::VerIterator VersionList() const { return (**this).VersionList(); }
-               inline pkgCache::VerIterator CurrentVer() const { return (**this).CurrentVer(); }
-               inline pkgCache::DepIterator RevDependsList() const { return (**this).RevDependsList(); }
-               inline pkgCache::PrvIterator ProvidesList() const { return (**this).ProvidesList(); }
-               inline pkgCache::PkgIterator::OkState State() const { return (**this).State(); }
-               inline const char *CandVersion() const { return (**this).CandVersion(); }
-               inline const char *CurVersion() const { return (**this).CurVersion(); }
-               inline pkgCache *Cache() const { return (**this).Cache(); };
-               inline unsigned long Index() const {return (**this).Index();};
+               virtual pkgCache::PkgIterator getPkg() const = 0;
+               operator pkgCache::PkgIterator(void) const { return getPkg(); }
+
+               inline const char *Name() const {return getPkg().Name(); }
+               inline std::string FullName(bool const Pretty) const { return getPkg().FullName(Pretty); }
+               inline std::string FullName() const { return getPkg().FullName(); }
+               inline const char *Section() const {return getPkg().Section(); }
+               inline bool Purge() const {return getPkg().Purge(); }
+               inline const char *Arch() const {return getPkg().Arch(); }
+               inline pkgCache::GrpIterator Group() const { return getPkg().Group(); }
+               inline pkgCache::VerIterator VersionList() const { return getPkg().VersionList(); }
+               inline pkgCache::VerIterator CurrentVer() const { return getPkg().CurrentVer(); }
+               inline pkgCache::DepIterator RevDependsList() const { return getPkg().RevDependsList(); }
+               inline pkgCache::PrvIterator ProvidesList() const { return getPkg().ProvidesList(); }
+               inline pkgCache::PkgIterator::OkState State() const { return getPkg().State(); }
+               inline const char *CandVersion() const { return getPkg().CandVersion(); }
+               inline const char *CurVersion() const { return getPkg().CurVersion(); }
+               inline pkgCache *Cache() const { return getPkg().Cache(); };
+               inline unsigned long Index() const {return getPkg().Index();};
                // we have only valid iterators here
                inline bool end() const { return false; };
 
-               friend std::ostream& operator<<(std::ostream& out, const_iterator i) { return operator<<(out, (*i)); }
+               inline pkgCache::Package const * operator->() const {return &*getPkg();};
+       };
+                                                                       /*}}}*/
+
+       virtual bool insert(pkgCache::PkgIterator const &P) = 0;
+       virtual bool empty() const = 0;
+       virtual void clear() = 0;
+
+       enum Constructor { UNKNOWN, REGEX, TASK };
+       virtual void setConstructor(Constructor const &con) = 0;
+       virtual Constructor getConstructor() const = 0;
+
+       static bool FromTask(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper);
+       static bool FromRegEx(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper);
+       static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper);
+       static bool FromString(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper);
+       static bool FromCommandLine(PackageContainerInterface * const pci, pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper);
+
+       struct Modifier {
+               enum Position { NONE, PREFIX, POSTFIX };
+               unsigned short ID;
+               const char * const Alias;
+               Position Pos;
+               Modifier (unsigned short const &id, const char * const alias, Position const &pos) : ID(id), Alias(alias), Pos(pos) {};
+       };
 
-               inline pkgCache::Package const * operator->() const {
-                       return &***this;
-               };
+       static bool FromModifierCommandLine(unsigned short &modID, PackageContainerInterface * const pci,
+                                           pkgCacheFile &Cache, const char * cmdline,
+                                           std::list<Modifier> const &mods, CacheSetHelper &helper);
+};
+                                                                       /*}}}*/
+template<class Container> class PackageContainer : public PackageContainerInterface {/*{{{*/
+/** \class APT::PackageContainer
+
+    Simple wrapper around a container class like std::set to provide a similar
+    interface to a set of packages as to the complete set of all packages in the
+    pkgCache. */
+       Container _cont;
+public:                                                                        /*{{{*/
+       /** \brief smell like a pkgCache::PkgIterator */
+       class const_iterator : public PackageContainerInterface::const_iterator,/*{{{*/
+                              public std::iterator<std::forward_iterator_tag, typename Container::const_iterator> {
+               typename Container::const_iterator _iter;
+       public:
+               const_iterator(typename Container::const_iterator i) : _iter(i) {}
+               pkgCache::PkgIterator getPkg(void) const { return *_iter; }
+               inline pkgCache::PkgIterator operator*(void) const { return *_iter; };
+               operator typename Container::const_iterator(void) const { return _iter; }
+               inline const_iterator& operator++() { ++_iter; return *this; }
+               inline const_iterator operator++(int) { const_iterator tmp(*this); operator++(); return tmp; }
+               inline bool operator!=(const_iterator const &i) const { return _iter != i._iter; };
+               inline bool operator==(const_iterator const &i) const { return _iter == i._iter; };
+               friend std::ostream& operator<<(std::ostream& out, const_iterator i) { return operator<<(out, *i); }
+       };
+       class iterator : public PackageContainerInterface::const_iterator,
+                        public std::iterator<std::forward_iterator_tag, typename Container::iterator> {
+               typename Container::iterator _iter;
+       public:
+               iterator(typename Container::iterator i) : _iter(i) {}
+               pkgCache::PkgIterator getPkg(void) const { return *_iter; }
+               inline pkgCache::PkgIterator operator*(void) const { return *_iter; };
+               operator typename Container::iterator(void) const { return _iter; }
+               operator typename PackageContainer<Container>::const_iterator() { return PackageContainer<Container>::const_iterator(_iter); }
+               inline iterator& operator++() { ++_iter; return *this; }
+               inline iterator operator++(int) { iterator tmp(*this); operator++(); return tmp; }
+               inline bool operator!=(iterator const &i) const { return _iter != i._iter; };
+               inline bool operator==(iterator const &i) const { return _iter == i._iter; };
+               friend std::ostream& operator<<(std::ostream& out, iterator i) { return operator<<(out, *i); }
        };
-       // 103. set::iterator is required to be modifiable, but this allows modification of keys
-       typedef APT::PackageSet::const_iterator iterator;
                                                                        /*}}}*/
 
-       using std::set<pkgCache::PkgIterator>::insert;
-       inline void insert(pkgCache::PkgIterator const &P) { if (P.end() == false) std::set<pkgCache::PkgIterator>::insert(P); };
-       inline void insert(PackageSet const &pkgset) { insert(pkgset.begin(), pkgset.end()); };
+       bool insert(pkgCache::PkgIterator const &P) { if (P.end() == true) return false; _cont.insert(P); return true; };
+       template<class Cont> void insert(PackageContainer<Cont> const &pkgcont) { _cont.insert((typename Cont::const_iterator)pkgcont.begin(), (typename Cont::const_iterator)pkgcont.end()); };
+       void insert(const_iterator begin, const_iterator end) { _cont.insert(begin, end); };
+
+       bool empty() const { return _cont.empty(); };
+       void clear() { return _cont.clear(); };
+       void erase(iterator position) { _cont.erase((typename Container::iterator)position); };
+       size_t erase(const pkgCache::PkgIterator x) { return _cont.erase(x); };
+       void erase(iterator first, iterator last) { _cont.erase(first, last); };
+       size_t size() const { return _cont.size(); };
+
+       const_iterator begin() const { return const_iterator(_cont.begin()); };
+       const_iterator end() const { return const_iterator(_cont.end()); };
+       iterator begin() { return iterator(_cont.begin()); };
+       iterator end() { return iterator(_cont.end()); };
+       const_iterator find(pkgCache::PkgIterator const &P) const { return const_iterator(_cont.find(P)); };
+
+       void setConstructor(Constructor const &by) { ConstructedBy = by; };
+       Constructor getConstructor() const { return ConstructedBy; };
+
+       PackageContainer() : ConstructedBy(UNKNOWN) {};
+       PackageContainer(Constructor const &by) : ConstructedBy(by) {};
 
        /** \brief returns all packages in the cache who belong to the given task
 
@@ -135,8 +226,12 @@ public:                                                                    /*{{{*/
            \param Cache the packages are in
            \param pattern name of the task
            \param helper responsible for error and message handling */
-       static APT::PackageSet FromTask(pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper);
-       static APT::PackageSet FromTask(pkgCacheFile &Cache, std::string const &pattern) {
+       static PackageContainer FromTask(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) {
+               PackageContainer cont(TASK);
+               PackageContainerInterface::FromTask(&cont, Cache, pattern, helper);
+               return cont;
+       }
+       static PackageContainer FromTask(pkgCacheFile &Cache, std::string const &pattern) {
                CacheSetHelper helper;
                return FromTask(Cache, pattern, helper);
        }
@@ -149,32 +244,43 @@ public:                                                                   /*{{{*/
            \param Cache the packages are in
            \param pattern regular expression for package names
            \param helper responsible for error and message handling */
-       static APT::PackageSet FromRegEx(pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper);
-       static APT::PackageSet FromRegEx(pkgCacheFile &Cache, std::string const &pattern) {
+       static PackageContainer FromRegEx(pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) {
+               PackageContainer cont(REGEX);
+               PackageContainerInterface::FromRegEx(&cont, Cache, pattern, helper);
+               return cont;
+       }
+
+       static PackageContainer FromRegEx(pkgCacheFile &Cache, std::string const &pattern) {
                CacheSetHelper helper;
                return FromRegEx(Cache, pattern, helper);
        }
 
-       /** \brief returns all packages specified by a string
+       /** \brief returns a package specified by a string
 
-           \param Cache the packages are in
-           \param string String the package name(s) should be extracted from
+           \param Cache the package is in
+           \param pattern String the package name should be extracted from
            \param helper responsible for error and message handling */
-       static APT::PackageSet FromString(pkgCacheFile &Cache, std::string const &string, CacheSetHelper &helper);
-       static APT::PackageSet FromString(pkgCacheFile &Cache, std::string const &string) {
+       static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) {
+               return PackageContainerInterface::FromName(Cache, pattern, helper);
+       }
+       static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &pattern) {
                CacheSetHelper helper;
-               return FromString(Cache, string, helper);
+               return PackageContainerInterface::FromName(Cache, pattern, helper);
        }
 
-       /** \brief returns a package specified by a string
+       /** \brief returns all packages specified by a string
 
-           \param Cache the package is in
-           \param string String the package name should be extracted from
+           \param Cache the packages are in
+           \param pattern String the package name(s) should be extracted from
            \param helper responsible for error and message handling */
-       static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &string, CacheSetHelper &helper);
-       static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &string) {
+       static PackageContainer FromString(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) {
+               PackageContainer cont;
+               PackageContainerInterface::FromString(&cont, Cache, pattern, helper);
+               return cont;
+       }
+       static PackageContainer FromString(pkgCacheFile &Cache, std::string const &pattern) {
                CacheSetHelper helper;
-               return FromName(Cache, string, helper);
+               return FromString(Cache, pattern, helper);
        }
 
        /** \brief returns all packages specified on the commandline
@@ -184,20 +290,16 @@ public:                                                                   /*{{{*/
            \param Cache the packages are in
            \param cmdline Command line the package names should be extracted from
            \param helper responsible for error and message handling */
-       static APT::PackageSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper);
-       static APT::PackageSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline) {
+       static PackageContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper) {
+               PackageContainer cont;
+               PackageContainerInterface::FromCommandLine(&cont, Cache, cmdline, helper);
+               return cont;
+       }
+       static PackageContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline) {
                CacheSetHelper helper;
                return FromCommandLine(Cache, cmdline, helper);
        }
 
-       struct Modifier {
-               enum Position { NONE, PREFIX, POSTFIX };
-               unsigned short ID;
-               const char * const Alias;
-               Position Pos;
-               Modifier (unsigned short const &id, const char * const alias, Position const &pos) : ID(id), Alias(alias), Pos(pos) {};
-       };
-
        /** \brief group packages by a action modifiers
 
            At some point it is needed to get from the same commandline
@@ -209,76 +311,93 @@ public:                                                                   /*{{{*/
            \param mods list of modifiers the method should accept
            \param fallback the default modifier group for a package
            \param helper responsible for error and message handling */
-       static std::map<unsigned short, PackageSet> GroupedFromCommandLine(
-               pkgCacheFile &Cache, const char **cmdline,
-               std::list<PackageSet::Modifier> const &mods,
-               unsigned short const &fallback, CacheSetHelper &helper);
-       static std::map<unsigned short, PackageSet> GroupedFromCommandLine(
-               pkgCacheFile &Cache, const char **cmdline,
-               std::list<PackageSet::Modifier> const &mods,
-               unsigned short const &fallback) {
+       static std::map<unsigned short, PackageContainer> GroupedFromCommandLine(
+                                                                                pkgCacheFile &Cache,
+                                                                                const char **cmdline,
+                                                                                std::list<Modifier> const &mods,
+                                                                                unsigned short const &fallback,
+                                                                                CacheSetHelper &helper) {
+               std::map<unsigned short, PackageContainer> pkgsets;
+               for (const char **I = cmdline; *I != 0; ++I) {
+                       unsigned short modID = fallback;
+                       PackageContainer pkgset;
+                       PackageContainerInterface::FromModifierCommandLine(modID, &pkgset, Cache, *I, mods, helper);
+                       pkgsets[modID].insert(pkgset);
+               }
+               return pkgsets;
+       }
+       static std::map<unsigned short, PackageContainer> GroupedFromCommandLine(
+                                                                                pkgCacheFile &Cache,
+                                                                                const char **cmdline,
+                                                                                std::list<Modifier> const &mods,
+                                                                                unsigned short const &fallback) {
                CacheSetHelper helper;
                return GroupedFromCommandLine(Cache, cmdline,
                                mods, fallback, helper);
        }
-
-       enum Constructor { UNKNOWN, REGEX, TASK };
-       Constructor getConstructor() const { return ConstructedBy; };
-
-       PackageSet() : ConstructedBy(UNKNOWN) {};
-       PackageSet(Constructor const &by) : ConstructedBy(by) {};
                                                                        /*}}}*/
 private:                                                               /*{{{*/
        Constructor ConstructedBy;
                                                                        /*}}}*/
 };                                                                     /*}}}*/
-class VersionSet : public std::set<pkgCache::VerIterator> {            /*{{{*/
-/** \class APT::VersionSet
 
-    Simple wrapper around a std::set to provide a similar interface to
-    a set of versions as to the complete set of all versions in the
-    pkgCache. */
-public:                                                                        /*{{{*/
+template<> template<class Cont> void PackageContainer<std::list<pkgCache::PkgIterator> >::insert(PackageContainer<Cont> const &pkgcont) {
+       for (typename PackageContainer<Cont>::const_iterator p = pkgcont.begin(); p != pkgcont.end(); ++p)
+               _cont.push_back(*p);
+};
+// these two are 'inline' as otherwise the linker has problems with seeing these untemplated
+// specializations again and again - but we need to see them, so that library users can use them
+template<> inline bool PackageContainer<std::list<pkgCache::PkgIterator> >::insert(pkgCache::PkgIterator const &P) {
+       if (P.end() == true)
+               return false;
+       _cont.push_back(P);
+       return true;
+};
+template<> inline void PackageContainer<std::list<pkgCache::PkgIterator> >::insert(const_iterator begin, const_iterator end) {
+       for (const_iterator p = begin; p != end; ++p)
+               _cont.push_back(*p);
+};
+typedef PackageContainer<std::set<pkgCache::PkgIterator> > PackageSet;
+typedef PackageContainer<std::list<pkgCache::PkgIterator> > PackageList;
+
+class VersionContainerInterface {                                      /*{{{*/
+/** \class APT::VersionContainerInterface
+
+    Same as APT::PackageContainerInterface, just for Versions */
+public:
        /** \brief smell like a pkgCache::VerIterator */
-       class const_iterator : public std::set<pkgCache::VerIterator>::const_iterator {/*{{{*/
+       class const_iterator {                                          /*{{{*/
        public:
-               const_iterator(std::set<pkgCache::VerIterator>::const_iterator x) :
-                        std::set<pkgCache::VerIterator>::const_iterator(x) {}
-
-               operator pkgCache::VerIterator(void) { return **this; }
-
-               inline pkgCache *Cache() const { return (**this).Cache(); };
-               inline unsigned long Index() const {return (**this).Index();};
+               virtual pkgCache::VerIterator getVer() const = 0;
+               operator pkgCache::VerIterator(void) { return getVer(); }
+
+               inline pkgCache *Cache() const { return getVer().Cache(); };
+               inline unsigned long Index() const {return getVer().Index();};
+               inline int CompareVer(const pkgCache::VerIterator &B) const { return getVer().CompareVer(B); };
+               inline const char *VerStr() const { return getVer().VerStr(); };
+               inline const char *Section() const { return getVer().Section(); };
+               inline const char *Arch() const { return getVer().Arch(); };
+               inline pkgCache::PkgIterator ParentPkg() const { return getVer().ParentPkg(); };
+               inline pkgCache::DescIterator DescriptionList() const { return getVer().DescriptionList(); };
+               inline pkgCache::DescIterator TranslatedDescription() const { return getVer().TranslatedDescription(); };
+               inline pkgCache::DepIterator DependsList() const { return getVer().DependsList(); };
+               inline pkgCache::PrvIterator ProvidesList() const { return getVer().ProvidesList(); };
+               inline pkgCache::VerFileIterator FileList() const { return getVer().FileList(); };
+               inline bool Downloadable() const { return getVer().Downloadable(); };
+               inline const char *PriorityType() const { return getVer().PriorityType(); };
+               inline std::string RelStr() const { return getVer().RelStr(); };
+               inline bool Automatic() const { return getVer().Automatic(); };
+               inline pkgCache::VerFileIterator NewestFile() const { return getVer().NewestFile(); };
                // we have only valid iterators here
                inline bool end() const { return false; };
 
-               inline pkgCache::Version const * operator->() const {
-                       return &***this;
-               };
-
-               inline int CompareVer(const pkgCache::VerIterator &B) const { return (**this).CompareVer(B); };
-               inline const char *VerStr() const { return (**this).VerStr(); };
-               inline const char *Section() const { return (**this).Section(); };
-               inline const char *Arch() const { return (**this).Arch(); };
-               inline pkgCache::PkgIterator ParentPkg() const { return (**this).ParentPkg(); };
-               inline pkgCache::DescIterator DescriptionList() const { return (**this).DescriptionList(); };
-               inline pkgCache::DescIterator TranslatedDescription() const { return (**this).TranslatedDescription(); };
-               inline pkgCache::DepIterator DependsList() const { return (**this).DependsList(); };
-               inline pkgCache::PrvIterator ProvidesList() const { return (**this).ProvidesList(); };
-               inline pkgCache::VerFileIterator FileList() const { return (**this).FileList(); };
-               inline bool Downloadable() const { return (**this).Downloadable(); };
-               inline const char *PriorityType() const { return (**this).PriorityType(); };
-               inline std::string RelStr() const { return (**this).RelStr(); };
-               inline bool Automatic() const { return (**this).Automatic(); };
-               inline pkgCache::VerFileIterator NewestFile() const { return (**this).NewestFile(); };
+               inline pkgCache::Version const * operator->() const { return &*getVer(); };
        };
                                                                        /*}}}*/
-       // 103. set::iterator is required to be modifiable, but this allows modification of keys
-       typedef APT::VersionSet::const_iterator iterator;
 
-       using std::set<pkgCache::VerIterator>::insert;
-       inline void insert(pkgCache::VerIterator const &V) { if (V.end() == false) std::set<pkgCache::VerIterator>::insert(V); };
-       inline void insert(VersionSet const &verset) { insert(verset.begin(), verset.end()); };
+       virtual bool insert(pkgCache::VerIterator const &V) = 0;
+       virtual bool empty() const = 0;
+       virtual void clear() = 0;
 
        /** \brief specifies which version(s) will be returned if non is given */
        enum Version {
@@ -298,6 +417,116 @@ public:                                                                   /*{{{*/
                NEWEST
        };
 
+       struct Modifier {
+               enum Position { NONE, PREFIX, POSTFIX };
+               unsigned short ID;
+               const char * const Alias;
+               Position Pos;
+               Version SelectVersion;
+               Modifier (unsigned short const &id, const char * const alias, Position const &pos,
+                         Version const &select) : ID(id), Alias(alias), Pos(pos),
+                        SelectVersion(select) {};
+       };
+
+       static bool FromCommandLine(VersionContainerInterface * const vci, pkgCacheFile &Cache,
+                                   const char **cmdline, Version const &fallback,
+                                   CacheSetHelper &helper);
+
+       static bool FromString(VersionContainerInterface * const vci, pkgCacheFile &Cache,
+                              std::string pkg, Version const &fallback, CacheSetHelper &helper,
+                              bool const onlyFromName = false);
+
+       static bool FromPackage(VersionContainerInterface * const vci, pkgCacheFile &Cache,
+                               pkgCache::PkgIterator const &P, Version const &fallback,
+                               CacheSetHelper &helper);
+
+       static bool FromModifierCommandLine(unsigned short &modID,
+                                           VersionContainerInterface * const vci,
+                                           pkgCacheFile &Cache, const char * cmdline,
+                                           std::list<Modifier> const &mods,
+                                           CacheSetHelper &helper);
+
+
+       static bool FromDependency(VersionContainerInterface * const vci,
+                                  pkgCacheFile &Cache,
+                                  pkgCache::DepIterator const &D,
+                                  Version const &selector,
+                                  CacheSetHelper &helper);
+
+protected:                                                             /*{{{*/
+
+       /** \brief returns the candidate version of the package
+
+           \param Cache to be used to query for information
+           \param Pkg we want the candidate version from this package */
+       static pkgCache::VerIterator getCandidateVer(pkgCacheFile &Cache,
+               pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper);
+
+       /** \brief returns the installed version of the package
+
+           \param Cache to be used to query for information
+           \param Pkg we want the installed version from this package */
+       static pkgCache::VerIterator getInstalledVer(pkgCacheFile &Cache,
+               pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper);
+                                                                       /*}}}*/
+};
+                                                                       /*}}}*/
+template<class Container> class VersionContainer : public VersionContainerInterface {/*{{{*/
+/** \class APT::VersionContainer
+
+    Simple wrapper around a container class like std::set to provide a similar
+    interface to a set of versions as to the complete set of all versions in the
+    pkgCache. */
+       Container _cont;
+public:                                                                        /*{{{*/
+       /** \brief smell like a pkgCache::VerIterator */
+       class const_iterator : public VersionContainerInterface::const_iterator,
+                              public std::iterator<std::forward_iterator_tag, typename Container::const_iterator> {/*{{{*/
+               typename Container::const_iterator _iter;
+       public:
+               const_iterator(typename Container::const_iterator i) : _iter(i) {}
+               pkgCache::VerIterator getVer(void) const { return *_iter; }
+               inline pkgCache::VerIterator operator*(void) const { return *_iter; };
+               operator typename Container::const_iterator(void) const { return _iter; }
+               inline const_iterator& operator++() { ++_iter; return *this; }
+               inline const_iterator operator++(int) { const_iterator tmp(*this); operator++(); return tmp; }
+               inline bool operator!=(const_iterator const &i) const { return _iter != i._iter; };
+               inline bool operator==(const_iterator const &i) const { return _iter == i._iter; };
+               friend std::ostream& operator<<(std::ostream& out, const_iterator i) { return operator<<(out, *i); }
+       };
+       class iterator : public VersionContainerInterface::const_iterator,
+                        public std::iterator<std::forward_iterator_tag, typename Container::iterator> {
+               typename Container::iterator _iter;
+       public:
+               iterator(typename Container::iterator i) : _iter(i) {}
+               pkgCache::VerIterator getVer(void) const { return *_iter; }
+               inline pkgCache::VerIterator operator*(void) const { return *_iter; };
+               operator typename Container::iterator(void) const { return _iter; }
+               operator typename VersionContainer<Container>::const_iterator() { return VersionContainer<Container>::const_iterator(_iter); }
+               inline iterator& operator++() { ++_iter; return *this; }
+               inline iterator operator++(int) { iterator tmp(*this); operator++(); return tmp; }
+               inline bool operator!=(iterator const &i) const { return _iter != i._iter; };
+               inline bool operator==(iterator const &i) const { return _iter == i._iter; };
+               friend std::ostream& operator<<(std::ostream& out, iterator i) { return operator<<(out, *i); }
+       };
+                                                                       /*}}}*/
+
+       bool insert(pkgCache::VerIterator const &V) { if (V.end() == true) return false; _cont.insert(V); return true; };
+       template<class Cont> void insert(VersionContainer<Cont> const &vercont) { _cont.insert((typename Cont::const_iterator)vercont.begin(), (typename Cont::const_iterator)vercont.end()); };
+       void insert(const_iterator begin, const_iterator end) { _cont.insert(begin, end); };
+       bool empty() const { return _cont.empty(); };
+       void clear() { return _cont.clear(); };
+       void erase(iterator position) { _cont.erase((typename Container::iterator)position); };
+       size_t erase(const pkgCache::VerIterator x) { return _cont.erase(x); };
+       void erase(iterator first, iterator last) { _cont.erase(first, last); };
+       size_t size() const { return _cont.size(); };
+
+       const_iterator begin() const { return const_iterator(_cont.begin()); };
+       const_iterator end() const { return const_iterator(_cont.end()); };
+       iterator begin() { return iterator(_cont.begin()); };
+       iterator end() { return iterator(_cont.end()); };
+       const_iterator find(pkgCache::VerIterator const &V) const { return const_iterator(_cont.find(V)); };
+
        /** \brief returns all versions specified on the commandline
 
            Get all versions from the commandline, uses given default version if
@@ -305,26 +534,34 @@ public:                                                                   /*{{{*/
            \param Cache the packages and versions are in
            \param cmdline Command line the versions should be extracted from
            \param helper responsible for error and message handling */
-       static APT::VersionSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline,
-                       APT::VersionSet::Version const &fallback, CacheSetHelper &helper);
-       static APT::VersionSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline,
-                       APT::VersionSet::Version const &fallback) {
+       static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline,
+                       Version const &fallback, CacheSetHelper &helper) {
+               VersionContainer vercon;
+               VersionContainerInterface::FromCommandLine(&vercon, Cache, cmdline, fallback, helper);
+               return vercon;
+       }
+       static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline,
+                       Version const &fallback) {
                CacheSetHelper helper;
                return FromCommandLine(Cache, cmdline, fallback, helper);
        }
-       static APT::VersionSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline) {
+       static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline) {
                return FromCommandLine(Cache, cmdline, CANDINST);
        }
 
-       static APT::VersionSet FromString(pkgCacheFile &Cache, std::string pkg,
-                       APT::VersionSet::Version const &fallback, CacheSetHelper &helper,
-                       bool const &onlyFromName = false);
-       static APT::VersionSet FromString(pkgCacheFile &Cache, std::string pkg,
-                       APT::VersionSet::Version const &fallback) {
+       static VersionContainer FromString(pkgCacheFile &Cache, std::string const &pkg,
+                       Version const &fallback, CacheSetHelper &helper,
+                       bool const onlyFromName = false) {
+               VersionContainer vercon;
+               VersionContainerInterface::FromString(&vercon, Cache, pkg, fallback, helper);
+               return vercon;
+       }
+       static VersionContainer FromString(pkgCacheFile &Cache, std::string pkg,
+                       Version const &fallback) {
                CacheSetHelper helper;
                return FromString(Cache, pkg, fallback, helper);
        }
-       static APT::VersionSet FromString(pkgCacheFile &Cache, std::string pkg) {
+       static VersionContainer FromString(pkgCacheFile &Cache, std::string pkg) {
                return FromString(Cache, pkg, CANDINST);
        }
 
@@ -334,57 +571,80 @@ public:                                                                   /*{{{*/
            \param P the package in question
            \param fallback the version(s) you want to get
            \param helper the helper used for display and error handling */
-       static APT::VersionSet FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P,
-               VersionSet::Version const &fallback, CacheSetHelper &helper);
-       static APT::VersionSet FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P,
-                       APT::VersionSet::Version const &fallback) {
+       static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P,
+               Version const &fallback, CacheSetHelper &helper) {
+               VersionContainer vercon;
+               VersionContainerInterface::FromPackage(&vercon, Cache, P, fallback, helper);
+               return vercon;
+       }
+       static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P,
+                                           Version const &fallback) {
                CacheSetHelper helper;
                return FromPackage(Cache, P, fallback, helper);
        }
-       static APT::VersionSet FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P) {
-               return FromPackage(Cache, P, CANDINST);
+       static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P) {
+               return FromPackage(Cache, P, CANDIDATE);
        }
 
-       struct Modifier {
-               enum Position { NONE, PREFIX, POSTFIX };
-               unsigned short ID;
-               const char * const Alias;
-               Position Pos;
-               VersionSet::Version SelectVersion;
-               Modifier (unsigned short const &id, const char * const alias, Position const &pos,
-                         VersionSet::Version const &select) : ID(id), Alias(alias), Pos(pos),
-                        SelectVersion(select) {};
-       };
+       static std::map<unsigned short, VersionContainer> GroupedFromCommandLine(
+                                                                                pkgCacheFile &Cache,
+                                                                                const char **cmdline,
+                                                                                std::list<Modifier> const &mods,
+                                                                                unsigned short const fallback,
+                                                                                CacheSetHelper &helper) {
+               std::map<unsigned short, VersionContainer> versets;
+               for (const char **I = cmdline; *I != 0; ++I) {
+                       unsigned short modID = fallback;
+                       VersionContainer verset;
+                       VersionContainerInterface::FromModifierCommandLine(modID, &verset, Cache, *I, mods, helper);
+                       versets[modID].insert(verset);
+               }
+               return versets;
 
-       static std::map<unsigned short, VersionSet> GroupedFromCommandLine(
-               pkgCacheFile &Cache, const char **cmdline,
-               std::list<VersionSet::Modifier> const &mods,
-               unsigned short const &fallback, CacheSetHelper &helper);
-       static std::map<unsigned short, VersionSet> GroupedFromCommandLine(
+       }
+       static std::map<unsigned short, VersionContainer> GroupedFromCommandLine(
                pkgCacheFile &Cache, const char **cmdline,
-               std::list<VersionSet::Modifier> const &mods,
-               unsigned short const &fallback) {
+               std::list<Modifier> const &mods,
+               unsigned short const fallback) {
                CacheSetHelper helper;
                return GroupedFromCommandLine(Cache, cmdline,
                                mods, fallback, helper);
        }
-                                                                       /*}}}*/
-protected:                                                             /*{{{*/
 
-       /** \brief returns the candidate version of the package
-
-           \param Cache to be used to query for information
-           \param Pkg we want the candidate version from this package */
-       static pkgCache::VerIterator getCandidateVer(pkgCacheFile &Cache,
-               pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper);
-
-       /** \brief returns the installed version of the package
-
-           \param Cache to be used to query for information
-           \param Pkg we want the installed version from this package */
-       static pkgCache::VerIterator getInstalledVer(pkgCacheFile &Cache,
-               pkgCache::PkgIterator const &Pkg, CacheSetHelper &helper);
+       static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D,
+                                              Version const &selector, CacheSetHelper &helper) {
+               VersionContainer vercon;
+               VersionContainerInterface::FromDependency(&vercon, Cache, D, selector, helper);
+               return vercon;
+       }
+       static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D,
+                                              Version const &selector) {
+               CacheSetHelper helper;
+               return FromPackage(Cache, D, selector, helper);
+       }
+       static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D) {
+               return FromPackage(Cache, D, CANDIDATE);
+       }
                                                                        /*}}}*/
 };                                                                     /*}}}*/
+
+template<> template<class Cont> void VersionContainer<std::list<pkgCache::VerIterator> >::insert(VersionContainer<Cont> const &vercont) {
+       for (typename VersionContainer<Cont>::const_iterator v = vercont.begin(); v != vercont.end(); ++v)
+               _cont.push_back(*v);
+};
+// these two are 'inline' as otherwise the linker has problems with seeing these untemplated
+// specializations again and again - but we need to see them, so that library users can use them
+template<> inline bool VersionContainer<std::list<pkgCache::VerIterator> >::insert(pkgCache::VerIterator const &V) {
+       if (V.end() == true)
+               return false;
+       _cont.push_back(V);
+       return true;
+};
+template<> inline void VersionContainer<std::list<pkgCache::VerIterator> >::insert(const_iterator begin, const_iterator end) {
+       for (const_iterator v = begin; v != end; ++v)
+               _cont.push_back(*v);
+};
+typedef VersionContainer<std::set<pkgCache::VerIterator> > VersionSet;
+typedef VersionContainer<std::list<pkgCache::VerIterator> > VersionList;
 }
 #endif
index a9c63fd214386624dfcd75f3b3caa8808f104658..4462d4e246abb0273031d88c1568739b6117e2e8 100644 (file)
@@ -58,66 +58,91 @@ bool pkgCdrom::FindPackages(string CD,
       return _error->Errno("chdir","Unable to change to %s",CD.c_str());
 
    // Look for a .disk subdirectory
-   struct stat Buf;
-   if (stat(".disk",&Buf) == 0)
+   if (DirectoryExists(".disk") == true)
    {
       if (InfoDir.empty() == true)
         InfoDir = CD + ".disk/";
    }
 
    // Don't look into directories that have been marked to ingore.
-   if (stat(".aptignr",&Buf) == 0)
+   if (RealFileExists(".aptignr") == true)
       return true;
 
-
    /* Check _first_ for a signature file as apt-cdrom assumes that all files
       under a Packages/Source file are in control of that file and stops 
       the scanning
    */
-   if (stat("Release.gpg",&Buf) == 0)
+   if (RealFileExists("Release.gpg") == true || RealFileExists("InRelease") == true)
    {
       SigList.push_back(CD);
    }
+
    /* Aha! We found some package files. We assume that everything under 
       this dir is controlled by those package files so we don't look down
       anymore */
-   if (stat("Packages",&Buf) == 0 || stat("Packages.gz",&Buf) == 0)
+   std::vector<APT::Configuration::Compressor> const compressor = APT::Configuration::getCompressors();
+   for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+       c != compressor.end(); ++c)
    {
+      if (RealFileExists(std::string("Packages").append(c->Extension).c_str()) == false)
+        continue;
+
+      if (_config->FindB("Debug::aptcdrom",false) == true)
+        std::clog << "Found Packages in " << CD << std::endl;
       List.push_back(CD);
-      
+
       // Continue down if thorough is given
       if (_config->FindB("APT::CDROM::Thorough",false) == false)
         return true;
+      break;
    }
-   if (stat("Sources.gz",&Buf) == 0 || stat("Sources",&Buf) == 0)
+   for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+       c != compressor.end(); ++c)
    {
+      if (RealFileExists(std::string("Sources").append(c->Extension).c_str()) == false)
+        continue;
+
+      if (_config->FindB("Debug::aptcdrom",false) == true)
+        std::clog << "Found Sources in " << CD << std::endl;
       SList.push_back(CD);
-      
+
       // Continue down if thorough is given
       if (_config->FindB("APT::CDROM::Thorough",false) == false)
         return true;
+      break;
    }
 
-   // see if we find translatin indexes
-   if (stat("i18n",&Buf) == 0)
+   // see if we find translation indices
+   if (DirectoryExists("i18n") == true)
    {
       D = opendir("i18n");
       for (struct dirent *Dir = readdir(D); Dir != 0; Dir = readdir(D))
       {
-        if(strstr(Dir->d_name,"Translation") != NULL) 
+        if(strncmp(Dir->d_name, "Translation-", strlen("Translation-")) != 0)
+           continue;
+        string file = Dir->d_name;
+        for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+             c != compressor.end(); ++c)
         {
-           if (_config->FindB("Debug::aptcdrom",false) == true)
-              std::clog << "found translations: " << Dir->d_name << "\n";
-           string file = Dir->d_name;
-           if(file.substr(file.size()-3,file.size()) == ".gz")
-              file = file.substr(0,file.size()-3);
-           TransList.push_back(CD+"i18n/"+ file);
+           string fileext = flExtension(file);
+           if (file == fileext)
+              fileext.clear();
+           else if (fileext.empty() == false)
+              fileext = "." + fileext;
+
+           if (c->Extension == fileext)
+           {
+              if (_config->FindB("Debug::aptcdrom",false) == true)
+                 std::clog << "Found translation " << Dir->d_name << " in " << CD << "i18n/" << std::endl;
+              file.erase(file.size() - fileext.size());
+              TransList.push_back(CD + "i18n/" + file);
+              break;
+           }
         }
       }
       closedir(D);
    }
 
-   
    D = opendir(".");
    if (D == 0)
       return _error->Errno("opendir","Unable to read %s",CD.c_str());
@@ -252,30 +277,43 @@ bool pkgCdrom::DropBinaryArch(vector<string> &List)
 /* Here we go and stat every file that we found and strip dup inodes. */
 bool pkgCdrom::DropRepeats(vector<string> &List,const char *Name)
 {
+   bool couldFindAllFiles = true;
    // Get a list of all the inodes
    ino_t *Inodes = new ino_t[List.size()];
-   for (unsigned int I = 0; I != List.size(); I++)
+   for (unsigned int I = 0; I != List.size(); ++I)
    {
       struct stat Buf;
-      if (stat((List[I] + Name).c_str(),&Buf) != 0 &&
-         stat((List[I] + Name + ".gz").c_str(),&Buf) != 0)
-        _error->Errno("stat","Failed to stat %s%s",List[I].c_str(),
-                      Name);
-      Inodes[I] = Buf.st_ino;
-   }
-   
-   if (_error->PendingError() == true) {
-      delete[] Inodes;
-      return false;
+      bool found = false;
+
+      std::vector<APT::Configuration::Compressor> const compressor = APT::Configuration::getCompressors();
+      for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+          c != compressor.end(); ++c)
+      {
+        std::string filename = std::string(List[I]).append(Name).append(c->Extension);
+         if (stat(filename.c_str(), &Buf) != 0)
+           continue;
+        Inodes[I] = Buf.st_ino;
+        found = true;
+        break;
+      }
+
+      if (found == false)
+      {
+        _error->Errno("stat","Failed to stat %s%s",List[I].c_str(), Name);
+        couldFindAllFiles = false;
+        Inodes[I] = 0;
+      }
    }
-   
+
    // Look for dups
    for (unsigned int I = 0; I != List.size(); I++)
    {
+      if (Inodes[I] == 0)
+        continue;
       for (unsigned int J = I+1; J < List.size(); J++)
       {
         // No match
-        if (Inodes[J] != Inodes[I])
+        if (Inodes[J] == 0 || Inodes[J] != Inodes[I])
            continue;
         
         // We score the two paths.. and erase one
@@ -301,7 +339,7 @@ bool pkgCdrom::DropRepeats(vector<string> &List,const char *Name)
         List.erase(List.begin()+I);
    }
    
-   return true;
+   return couldFindAllFiles;
 }
                                                                        /*}}}*/
 // ReduceSourceList - Takes the path list and reduces it               /*{{{*/
@@ -680,7 +718,13 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                    /*{{{*/
    DropBinaryArch(List);
    DropRepeats(List,"Packages");
    DropRepeats(SourceList,"Sources");
+   // FIXME: We ignore stat() errors here as we usually have only one of those in use
+   // This has little potencial to drop 'valid' stat() errors as we know that one of these
+   // files need to exist, but it would be better if we would check it here
+   _error->PushToStack();
    DropRepeats(SigList,"Release.gpg");
+   DropRepeats(SigList,"InRelease");
+   _error->RevertToStack();
    DropRepeats(TransList,"");
    if(log != NULL) {
       msg.str("");
index 319254fd0b212983361226d85a8fc7fe8623ce7f..cedfccff71f8fc4a86d2dace109ca3073b836932 100644 (file)
@@ -4,6 +4,11 @@
 #include<string>
 #include<vector>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/init.h>
+using namespace std;
+#endif
+
 class Configuration;
 class OpProgress;
 
index 2c6afac0fbe7f97841d941a8b56a41478b5bb9bf..e94045b5c8cec8e56c610d761a8dda6a3e6c2d2c 100644 (file)
 
 #include <string>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
 // mount cdrom, DeviceName (e.g. /dev/sr0) is optional
 bool MountCdrom(std::string Path, std::string DeviceName="");
 bool UnmountCdrom(std::string Path);
index b201d98550d62aaffad9941b7fc5f5cd9cdda4c8..9f505fd410547edc8fc2678872a2caa4dfe08e64 100644 (file)
 #ifndef PKGLIB_CMNDLINE_H
 #define PKGLIB_CMNDLINE_H
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/configuration.h>
+#endif
+
 class Configuration;
 
 class CommandLine
index f6f2a3c1d7e5a46c19b90b23e1c141c40903874e..4c2e750413852e32586b73410452d78bded66d04 100644 (file)
 #include <vector>
 #include <iostream>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
 class Configuration
 {
    public:
index 95058cbdee77b036c42aaabfb6cbe0222259fd7a..b350973af5488488439351b6282c7461ffebfb68 100644 (file)
@@ -24,6 +24,7 @@
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/sptr.h>
+#include <apt-pkg/aptconfiguration.h>
 #include <apt-pkg/configuration.h>
 
 #include <cstdlib>
 #include <set>
 #include <algorithm>
 
+// FIXME: Compressor Fds have some speed disadvantages and are a bit buggy currently,
+// so while the current implementation satisfies the testcases it is not a real option
+// to disable it for now
+#define APT_USE_ZLIB 1
+#if APT_USE_ZLIB
+#include <zlib.h>
+#else
+#pragma message "Usage of zlib is DISABLED!"
+#endif
+
 #ifdef WORDS_BIGENDIAN
 #include <inttypes.h>
 #endif
 
 using namespace std;
 
+class FileFdPrivate {
+       public:
+#if APT_USE_ZLIB
+       gzFile gz;
+#else
+       void* gz;
+#endif
+       int compressed_fd;
+       pid_t compressor_pid;
+       bool pipe;
+       APT::Configuration::Compressor compressor;
+       unsigned int openmode;
+       unsigned long long seekpos;
+       FileFdPrivate() : gz(NULL), compressed_fd(-1), compressor_pid(-1), pipe(false),
+                         openmode(0), seekpos(0) {};
+};
+
 // RunScripts - Run a set of scripts from a configuration subtree      /*{{{*/
 // ---------------------------------------------------------------------
 /* */
@@ -718,84 +746,287 @@ bool ExecWait(pid_t Pid,const char *Name,bool Reap)
 // FileFd::Open - Open a file                                          /*{{{*/
 // ---------------------------------------------------------------------
 /* The most commonly used open mode combinations are given with Mode */
-bool FileFd::Open(string FileName,OpenMode Mode, unsigned long Perms)
+bool FileFd::Open(string FileName,unsigned int const Mode,CompressMode Compress, unsigned long const Perms)
 {
-   Close();
-   Flags = AutoClose;
-   switch (Mode)
+   if (Mode == ReadOnlyGzip)
+      return Open(FileName, ReadOnly, Gzip, Perms);
+
+   if (Compress == Auto && (Mode & WriteOnly) == WriteOnly)
+      return _error->Error("Autodetection on %s only works in ReadOnly openmode!", FileName.c_str());
+
+   // FIXME: Denote inbuilt compressors somehow - as we don't need to have the binaries for them
+   std::vector<APT::Configuration::Compressor> const compressors = APT::Configuration::getCompressors();
+   std::vector<APT::Configuration::Compressor>::const_iterator compressor = compressors.begin();
+   if (Compress == Auto)
    {
-      case ReadOnly:
-      iFd = open(FileName.c_str(),O_RDONLY);
-      break;
-
-      case ReadOnlyGzip:
-      iFd = open(FileName.c_str(),O_RDONLY);
-      if (iFd > 0) {
-        gz = gzdopen (iFd, "r");
-        if (gz == NULL) {
-            close (iFd);
-            iFd = -1;
-        }
-      }
-      break;
-      
-      case WriteAtomic:
+      for (; compressor != compressors.end(); ++compressor)
       {
-        Flags |= Replace;
-        char *name = strdup((FileName + ".XXXXXX").c_str());
-        TemporaryFileName = string(mktemp(name));
-        iFd = open(TemporaryFileName.c_str(),O_RDWR | O_CREAT | O_EXCL,Perms);
-        free(name);
+        std::string file = std::string(FileName).append(compressor->Extension);
+        if (FileExists(file) == false)
+           continue;
+        FileName = file;
         break;
       }
-
-      case WriteEmpty:
+   }
+   else if (Compress == Extension)
+   {
+      std::string::size_type const found = FileName.find_last_of('.');
+      std::string ext;
+      if (found != std::string::npos)
       {
-        struct stat Buf;
-        if (lstat(FileName.c_str(),&Buf) == 0 && S_ISLNK(Buf.st_mode))
-           unlink(FileName.c_str());
-        iFd = open(FileName.c_str(),O_RDWR | O_CREAT | O_TRUNC,Perms);
-        break;
+        ext = FileName.substr(found);
+        if (ext == ".new" || ext == ".bak")
+        {
+           std::string::size_type const found2 = FileName.find_last_of('.', found - 1);
+           if (found2 != std::string::npos)
+              ext = FileName.substr(found2, found - found2);
+           else
+              ext.clear();
+        }
       }
-      
-      case WriteExists:
-      iFd = open(FileName.c_str(),O_RDWR);
-      break;
+      for (; compressor != compressors.end(); ++compressor)
+        if (ext == compressor->Extension)
+           break;
+      // no matching extension - assume uncompressed (imagine files like 'example.org_Packages')
+      if (compressor == compressors.end())
+        for (compressor = compressors.begin(); compressor != compressors.end(); ++compressor)
+           if (compressor->Name == ".")
+              break;
+   }
+   else
+   {
+      std::string name;
+      switch (Compress)
+      {
+      case None: name = "."; break;
+      case Gzip: name = "gzip"; break;
+      case Bzip2: name = "bzip2"; break;
+      case Lzma: name = "lzma"; break;
+      case Xz: name = "xz"; break;
+      case Auto:
+      case Extension:
+        // Unreachable
+        return _error->Error("Opening File %s in None, Auto or Extension should be already handled?!?", FileName.c_str());
+      }
+      for (; compressor != compressors.end(); ++compressor)
+        if (compressor->Name == name)
+           break;
+      if (compressor == compressors.end())
+        return _error->Error("Can't find a configured compressor %s for file %s", name.c_str(), FileName.c_str());
+   }
+
+   if (compressor == compressors.end())
+      return _error->Error("Can't find a match for specified compressor mode for file %s", FileName.c_str());
+   return Open(FileName, Mode, *compressor, Perms);
+}
+bool FileFd::Open(string FileName,unsigned int const Mode,APT::Configuration::Compressor const &compressor, unsigned long const Perms)
+{
+   Close();
+   d = new FileFdPrivate;
+   d->openmode = Mode;
+   Flags = AutoClose;
 
-      case WriteAny:
-      iFd = open(FileName.c_str(),O_RDWR | O_CREAT,Perms);
-      break;      
+   if ((Mode & WriteOnly) != WriteOnly && (Mode & (Atomic | Create | Empty | Exclusive)) != 0)
+      return _error->Error("ReadOnly mode for %s doesn't accept additional flags!", FileName.c_str());
+   if ((Mode & ReadWrite) == 0)
+      return _error->Error("No openmode provided in FileFd::Open for %s", FileName.c_str());
 
-      case WriteTemp:
+   if ((Mode & Atomic) == Atomic)
+   {
+      Flags |= Replace;
+      char *name = strdup((FileName + ".XXXXXX").c_str());
+      TemporaryFileName = string(mktemp(name));
+      free(name);
+   }
+   else if ((Mode & (Exclusive | Create)) == (Exclusive | Create))
+   {
+      // for atomic, this will be done by rename in Close()
       unlink(FileName.c_str());
-      iFd = open(FileName.c_str(),O_RDWR | O_CREAT | O_EXCL,Perms);
-      break;
-   }  
+   }
+   if ((Mode & Empty) == Empty)
+   {
+      struct stat Buf;
+      if (lstat(FileName.c_str(),&Buf) == 0 && S_ISLNK(Buf.st_mode))
+        unlink(FileName.c_str());
+   }
+
+   int fileflags = 0;
+   #define if_FLAGGED_SET(FLAG, MODE) if ((Mode & FLAG) == FLAG) fileflags |= MODE
+   if_FLAGGED_SET(ReadWrite, O_RDWR);
+   else if_FLAGGED_SET(ReadOnly, O_RDONLY);
+   else if_FLAGGED_SET(WriteOnly, O_WRONLY);
+
+   if_FLAGGED_SET(Create, O_CREAT);
+   if_FLAGGED_SET(Empty, O_TRUNC);
+   if_FLAGGED_SET(Exclusive, O_EXCL);
+   else if_FLAGGED_SET(Atomic, O_EXCL);
+   #undef if_FLAGGED_SET
+
+   if (TemporaryFileName.empty() == false)
+      iFd = open(TemporaryFileName.c_str(), fileflags, Perms);
+   else
+      iFd = open(FileName.c_str(), fileflags, Perms);
+
+   if (iFd == -1 || OpenInternDescriptor(Mode, compressor) == false)
+   {
+      if (iFd != -1)
+      {
+        close (iFd);
+        iFd = -1;
+      }
+      return _error->Errno("open",_("Could not open file %s"), FileName.c_str());
+   }
 
-   if (iFd < 0)
-      return _error->Errno("open",_("Could not open file %s"),FileName.c_str());
-   
    this->FileName = FileName;
    SetCloseExec(iFd,true);
    return true;
 }
+                                                                       /*}}}*/
+// FileFd::OpenDescriptor - Open a filedescriptor                      /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool FileFd::OpenDescriptor(int Fd, unsigned int const Mode, CompressMode Compress, bool AutoClose)
+{
+   std::vector<APT::Configuration::Compressor> const compressors = APT::Configuration::getCompressors();
+   std::vector<APT::Configuration::Compressor>::const_iterator compressor = compressors.begin();
+   std::string name;
+   switch (Compress)
+   {
+   case None: name = "."; break;
+   case Gzip: name = "gzip"; break;
+   case Bzip2: name = "bzip2"; break;
+   case Lzma: name = "lzma"; break;
+   case Xz: name = "xz"; break;
+   case Auto:
+   case Extension:
+      return _error->Error("Opening Fd %d in Auto or Extension compression mode is not supported", Fd);
+   }
+   for (; compressor != compressors.end(); ++compressor)
+      if (compressor->Name == name)
+        break;
+   if (compressor == compressors.end())
+      return _error->Error("Can't find a configured compressor %s for file %s", name.c_str(), FileName.c_str());
 
-bool FileFd::OpenDescriptor(int Fd, OpenMode Mode, bool AutoClose)
+   return OpenDescriptor(Fd, Mode, *compressor, AutoClose);
+}
+bool FileFd::OpenDescriptor(int Fd, unsigned int const Mode, APT::Configuration::Compressor const &compressor, bool AutoClose)
 {
    Close();
+   d = new FileFdPrivate;
+   d->openmode = Mode;
    Flags = (AutoClose) ? FileFd::AutoClose : 0;
    iFd = Fd;
-   if (Mode == ReadOnlyGzip) {
-      gz = gzdopen (iFd, "r");
-      if (gz == NULL) {
-        if (AutoClose)
-           close (iFd);
-        return _error->Errno("gzdopen",_("Could not open file descriptor %d"),
-                             Fd);
-      }
+   if (OpenInternDescriptor(Mode, compressor) == false)
+   {
+      if (AutoClose)
+        close (iFd);
+      return _error->Errno("gzdopen",_("Could not open file descriptor %d"), Fd);
    }
    this->FileName = "";
    return true;
+}
+bool FileFd::OpenInternDescriptor(unsigned int const Mode, APT::Configuration::Compressor const &compressor)
+{
+   d->compressor = compressor;
+   if (compressor.Name == "." || compressor.Binary.empty() == true)
+      return true;
+#if APT_USE_ZLIB
+   else if (compressor.Name == "gzip")
+   {
+      if ((Mode & ReadWrite) == ReadWrite)
+        d->gz = gzdopen(iFd, "r+");
+      else if ((Mode & WriteOnly) == WriteOnly)
+        d->gz = gzdopen(iFd, "w");
+      else
+        d->gz = gzdopen (iFd, "r");
+      if (d->gz == NULL)
+        return false;
+      Flags |= Compressed;
+      return true;
+   }
+#endif
+
+   if ((Mode & ReadWrite) == ReadWrite)
+      return _error->Error("ReadWrite mode is not supported for file %s", FileName.c_str());
+
+   bool const Comp = (Mode & WriteOnly) == WriteOnly;
+   // Handle 'decompression' of empty files
+   if (Comp == false)
+   {
+      struct stat Buf;
+      fstat(iFd, &Buf);
+      if (Buf.st_size == 0 && S_ISFIFO(Buf.st_mode) == false)
+        return true;
+
+      // We don't need the file open - instead let the compressor open it
+      // as he properly knows better how to efficiently read from 'his' file
+      if (FileName.empty() == false)
+        close(iFd);
+   }
+
+   // Create a data pipe
+   int Pipe[2] = {-1,-1};
+   if (pipe(Pipe) != 0)
+      return _error->Errno("pipe",_("Failed to create subprocess IPC"));
+   for (int J = 0; J != 2; J++)
+      SetCloseExec(Pipe[J],true);
+
+   d->compressed_fd = iFd;
+   d->pipe = true;
+
+   if (Comp == true)
+      iFd = Pipe[1];
+   else
+      iFd = Pipe[0];
+
+   // The child..
+   d->compressor_pid = ExecFork();
+   if (d->compressor_pid == 0)
+   {
+      if (Comp == true)
+      {
+        dup2(d->compressed_fd,STDOUT_FILENO);
+        dup2(Pipe[0],STDIN_FILENO);
+      }
+      else
+      {
+        if (FileName.empty() == true)
+           dup2(d->compressed_fd,STDIN_FILENO);
+        dup2(Pipe[1],STDOUT_FILENO);
+      }
+
+      SetCloseExec(STDOUT_FILENO,false);
+      SetCloseExec(STDIN_FILENO,false);
+
+      std::vector<char const*> Args;
+      Args.push_back(compressor.Binary.c_str());
+      std::vector<std::string> const * const addArgs =
+               (Comp == true) ? &(compressor.CompressArgs) : &(compressor.UncompressArgs);
+      for (std::vector<std::string>::const_iterator a = addArgs->begin();
+          a != addArgs->end(); ++a)
+        Args.push_back(a->c_str());
+      if (Comp == false && FileName.empty() == false)
+      {
+        Args.push_back("--stdout");
+        if (TemporaryFileName.empty() == false)
+           Args.push_back(TemporaryFileName.c_str());
+        else
+           Args.push_back(FileName.c_str());
+      }
+      Args.push_back(NULL);
+
+      execvp(Args[0],(char **)&Args[0]);
+      cerr << _("Failed to exec compressor ") << Args[0] << endl;
+      _exit(100);
+   }
+   if (Comp == true)
+      close(Pipe[0]);
+   else
+      close(Pipe[1]);
+   if (Comp == true || FileName.empty() == true)
+      close(d->compressed_fd);
+
+   return true;
 }
                                                                        /*}}}*/
 // FileFd::~File - Closes the file                                     /*{{{*/
@@ -817,12 +1048,14 @@ bool FileFd::Read(void *To,unsigned long long Size,unsigned long long *Actual)
    errno = 0;
    if (Actual != 0)
       *Actual = 0;
-   
+   *((char *)To) = '\0';
    do
    {
-      if (gz != NULL)
-         Res = gzread(gz,To,Size);
+#if APT_USE_ZLIB
+      if (d->gz != NULL)
+         Res = gzread(d->gz,To,Size);
       else
+#endif
          Res = read(iFd,To,Size);
       if (Res < 0 && errno == EINTR)
         continue;
@@ -834,6 +1067,7 @@ bool FileFd::Read(void *To,unsigned long long Size,unsigned long long *Actual)
       
       To = (char *)To + Res;
       Size -= Res;
+      d->seekpos += Res;
       if (Actual != 0)
         *Actual += Res;
    }
@@ -853,6 +1087,35 @@ bool FileFd::Read(void *To,unsigned long long Size,unsigned long long *Actual)
    return _error->Error(_("read, still have %llu to read but none left"), Size);
 }
                                                                        /*}}}*/
+// FileFd::ReadLine - Read a complete line from the file               /*{{{*/
+// ---------------------------------------------------------------------
+/* Beware: This method can be quiet slow for big buffers on UNcompressed
+   files because of the naive implementation! */
+char* FileFd::ReadLine(char *To, unsigned long long const Size)
+{
+   *To = '\0';
+#if APT_USE_ZLIB
+   if (d->gz != NULL)
+      return gzgets(d->gz, To, Size);
+#endif
+
+   unsigned long long read = 0;
+   while ((Size - 1) != read)
+   {
+      unsigned long long done = 0;
+      if (Read(To + read, 1, &done) == false)
+        return NULL;
+      if (done == 0)
+        break;
+      if (To[read++] == '\n')
+        break;
+   }
+   if (read == 0)
+      return NULL;
+   To[read] = '\0';
+   return To;
+}
+                                                                       /*}}}*/
 // FileFd::Write - Write to the file                                   /*{{{*/
 // ---------------------------------------------------------------------
 /* */
@@ -862,9 +1125,11 @@ bool FileFd::Write(const void *From,unsigned long long Size)
    errno = 0;
    do
    {
-      if (gz != NULL)
-         Res = gzwrite(gz,From,Size);
+#if APT_USE_ZLIB
+      if (d->gz != NULL)
+         Res = gzwrite(d->gz,From,Size);
       else
+#endif
          Res = write(iFd,From,Size);
       if (Res < 0 && errno == EINTR)
         continue;
@@ -876,6 +1141,7 @@ bool FileFd::Write(const void *From,unsigned long long Size)
       
       From = (char *)From + Res;
       Size -= Res;
+      d->seekpos += Res;
    }
    while (Res > 0 && Size > 0);
    
@@ -891,17 +1157,55 @@ bool FileFd::Write(const void *From,unsigned long long Size)
 /* */
 bool FileFd::Seek(unsigned long long To)
 {
+   if (d->pipe == true)
+   {
+      // Our poor man seeking in pipes is costly, so try to avoid it
+      unsigned long long seekpos = Tell();
+      if (seekpos == To)
+        return true;
+      else if (seekpos < To)
+        return Skip(To - seekpos);
+
+      if ((d->openmode & ReadOnly) != ReadOnly)
+        return _error->Error("Reopen is only implemented for read-only files!");
+      close(iFd);
+      iFd = 0;
+      if (TemporaryFileName.empty() == false)
+        iFd = open(TemporaryFileName.c_str(), O_RDONLY);
+      else if (FileName.empty() == false)
+        iFd = open(FileName.c_str(), O_RDONLY);
+      else
+      {
+        if (d->compressed_fd > 0)
+           if (lseek(d->compressed_fd, 0, SEEK_SET) != 0)
+              iFd = d->compressed_fd;
+        if (iFd <= 0)
+           return _error->Error("Reopen is not implemented for pipes opened with FileFd::OpenDescriptor()!");
+      }
+
+      if (OpenInternDescriptor(d->openmode, d->compressor) == false)
+        return _error->Error("Seek on file %s because it couldn't be reopened", FileName.c_str());
+
+      if (To != 0)
+        return Skip(To);
+
+      d->seekpos = To;
+      return true;
+   }
    int res;
-   if (gz)
-      res = gzseek(gz,To,SEEK_SET);
+#if APT_USE_ZLIB
+   if (d->gz)
+      res = gzseek(d->gz,To,SEEK_SET);
    else
+#endif
       res = lseek(iFd,To,SEEK_SET);
    if (res != (signed)To)
    {
       Flags |= Fail;
       return _error->Error("Unable to seek to %llu", To);
    }
-   
+
+   d->seekpos = To;
    return true;
 }
                                                                        /*}}}*/
@@ -910,17 +1214,34 @@ bool FileFd::Seek(unsigned long long To)
 /* */
 bool FileFd::Skip(unsigned long long Over)
 {
+   if (d->pipe == true)
+   {
+      d->seekpos += Over;
+      char buffer[1024];
+      while (Over != 0)
+      {
+        unsigned long long toread = std::min((unsigned long long) sizeof(buffer), Over);
+        if (Read(buffer, toread) == false)
+           return _error->Error("Unable to seek ahead %llu",Over);
+        Over -= toread;
+      }
+      return true;
+   }
+
    int res;
-   if (gz)
-      res = gzseek(gz,Over,SEEK_CUR);
+#if APT_USE_ZLIB
+   if (d->gz != NULL)
+      res = gzseek(d->gz,Over,SEEK_CUR);
    else
+#endif
       res = lseek(iFd,Over,SEEK_CUR);
    if (res < 0)
    {
       Flags |= Fail;
       return _error->Error("Unable to seek ahead %llu",Over);
    }
-   
+   d->seekpos = res;
+
    return true;
 }
                                                                        /*}}}*/
@@ -929,7 +1250,7 @@ bool FileFd::Skip(unsigned long long Over)
 /* */
 bool FileFd::Truncate(unsigned long long To)
 {
-   if (gz)
+   if (d->gz != NULL)
    {
       Flags |= Fail;
       return _error->Error("Truncating gzipped files is not implemented (%s)", FileName.c_str());
@@ -948,13 +1269,23 @@ bool FileFd::Truncate(unsigned long long To)
 /* */
 unsigned long long FileFd::Tell()
 {
+   // In theory, we could just return seekpos here always instead of
+   // seeking around, but not all users of FileFd use always Seek() and co
+   // so d->seekpos isn't always true and we can just use it as a hint if
+   // we have nothing else, but not always as an authority…
+   if (d->pipe == true)
+      return d->seekpos;
+
    off_t Res;
-   if (gz)
-     Res = gztell(gz);
+#if APT_USE_ZLIB
+   if (d->gz != NULL)
+     Res = gztell(d->gz);
    else
+#endif
      Res = lseek(iFd,0,SEEK_CUR);
    if (Res == (off_t)-1)
       _error->Errno("lseek","Failed to determine the current file position");
+   d->seekpos = Res;
    return Res;
 }
                                                                        /*}}}*/
@@ -964,9 +1295,19 @@ unsigned long long FileFd::Tell()
 unsigned long long FileFd::FileSize()
 {
    struct stat Buf;
-
-   if (fstat(iFd,&Buf) != 0)
+   if (d->pipe == false && fstat(iFd,&Buf) != 0)
       return _error->Errno("fstat","Unable to determine the file size");
+
+   // for compressor pipes st_size is undefined and at 'best' zero
+   if (d->pipe == true || S_ISFIFO(Buf.st_mode))
+   {
+      // we set it here, too, as we get the info here for free
+      // in theory the Open-methods should take care of it already
+      d->pipe = true;
+      if (stat(FileName.c_str(), &Buf) != 0)
+        return _error->Errno("stat","Unable to determine the file size");
+   }
+
    return Buf.st_size;
 }
                                                                        /*}}}*/
@@ -977,16 +1318,29 @@ unsigned long long FileFd::Size()
 {
    unsigned long long size = FileSize();
 
+   // for compressor pipes st_size is undefined and at 'best' zero,
+   // so we 'read' the content and 'seek' back - see there
+   if (d->pipe == true)
+   {
+      unsigned long long const oldSeek = Tell();
+      char ignore[1000];
+      unsigned long long read = 0;
+      do {
+        Read(ignore, sizeof(ignore), &read);
+      } while(read != 0);
+      size = Tell();
+      Seek(oldSeek);
+   }
+#if APT_USE_ZLIB
    // only check gzsize if we are actually a gzip file, just checking for
-   // "gz" is not sufficient as uncompressed files will be opened with
+   // "gz" is not sufficient as uncompressed files could be opened with
    // gzopen in "direct" mode as well
-   if (gz && !gzdirect(gz) && size > 0)
+   else if (d->gz && !gzdirect(d->gz) && size > 0)
    {
        /* unfortunately zlib.h doesn't provide a gzsize(), so we have to do
        * this ourselves; the original (uncompressed) file size is the last 32
        * bits of the file */
        // FIXME: Size for gz-files is limited by 32bit… no largefile support
-       off_t orig_pos = lseek(iFd, 0, SEEK_CUR);
        if (lseek(iFd, -4, SEEK_END) < 0)
           return _error->Errno("lseek","Unable to seek to end of gzipped file");
        size = 0L;
@@ -1000,28 +1354,62 @@ unsigned long long FileFd::Size()
        size = tmp_size;
 #endif
 
-       if (lseek(iFd, orig_pos, SEEK_SET) < 0)
+       if (lseek(iFd, d->seekpos, SEEK_SET) < 0)
           return _error->Errno("lseek","Unable to seek in gzipped file");
        return size;
    }
+#endif
 
    return size;
 }
                                                                        /*}}}*/
+// FileFd::ModificationTime - Return the time of last touch            /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+time_t FileFd::ModificationTime()
+{
+   struct stat Buf;
+   if (d->pipe == false && fstat(iFd,&Buf) != 0)
+   {
+      _error->Errno("fstat","Unable to determine the modification time of file %s", FileName.c_str());
+      return 0;
+   }
+
+   // for compressor pipes st_size is undefined and at 'best' zero
+   if (d->pipe == true || S_ISFIFO(Buf.st_mode))
+   {
+      // we set it here, too, as we get the info here for free
+      // in theory the Open-methods should take care of it already
+      d->pipe = true;
+      if (stat(FileName.c_str(), &Buf) != 0)
+      {
+        _error->Errno("fstat","Unable to determine the modification time of file %s", FileName.c_str());
+        return 0;
+      }
+   }
+
+   return Buf.st_mtime;
+}
+                                                                       /*}}}*/
 // FileFd::Close - Close the file if the close flag is set             /*{{{*/
 // ---------------------------------------------------------------------
 /* */
 bool FileFd::Close()
 {
+   if (iFd == -1)
+      return true;
+
    bool Res = true;
    if ((Flags & AutoClose) == AutoClose)
    {
-      if (gz != NULL) {
-        int const e = gzclose(gz);
+#if APT_USE_ZLIB
+      if (d != NULL && d->gz != NULL) {
+        int const e = gzclose(d->gz);
         // gzdopen() on empty files always fails with "buffer error" here, ignore that
         if (e != 0 && e != Z_BUF_ERROR)
            Res &= _error->Errno("close",_("Problem closing the gzip file %s"), FileName.c_str());
       } else
+#endif
         if (iFd > 0 && close(iFd) != 0)
            Res &= _error->Errno("close",_("Problem closing the file %s"), FileName.c_str());
    }
@@ -1031,16 +1419,23 @@ bool FileFd::Close()
         Res &= _error->Errno("rename",_("Problem renaming the file %s to %s"), TemporaryFileName.c_str(), FileName.c_str());
 
       FileName = TemporaryFileName; // for the unlink() below.
+      TemporaryFileName.clear();
    }
 
    iFd = -1;
-   gz = NULL;
 
    if ((Flags & Fail) == Fail && (Flags & DelOnFail) == DelOnFail &&
        FileName.empty() == false)
       if (unlink(FileName.c_str()) != 0)
         Res &= _error->WarningE("unlnk",_("Problem unlinking the file %s"), FileName.c_str());
 
+   if (d != NULL)
+   {
+      if (d->compressor_pid > 0)
+        ExecWait(d->compressor_pid, "FileFdCompressor", true);
+      delete d;
+      d = NULL;
+   }
 
    return Res;
 }
@@ -1057,3 +1452,5 @@ bool FileFd::Sync()
    return true;
 }
                                                                        /*}}}*/
+
+gzFile FileFd::gzFd() { return (gzFile) d->gz; }
index 0d0451a460d856abd396aff6ccc3f930d7528dbe..147535df1b6f7f1f3ada211d0426df3c2ed3349a 100644 (file)
 #define PKGLIB_FILEUTL_H
 
 #include <apt-pkg/macros.h>
+#include <apt-pkg/aptconfiguration.h>
 
 #include <string>
 #include <vector>
 
 #include <zlib.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
 /* Define this for python-apt */
 #define APT_HAS_GZIP 1
 
+class FileFdPrivate;
 class FileFd
 {
    protected:
    int iFd;
  
    enum LocalFlags {AutoClose = (1<<0),Fail = (1<<1),DelOnFail = (1<<2),
-                    HitEof = (1<<3), Replace = (1<<4) };
+                    HitEof = (1<<3), Replace = (1<<4), Compressed = (1<<5) };
    unsigned long Flags;
    std::string FileName;
    std::string TemporaryFileName;
-   gzFile gz;
 
    public:
-   enum OpenMode {ReadOnly,WriteEmpty,WriteExists,WriteAny,WriteTemp,ReadOnlyGzip,
-                  WriteAtomic};
+   enum OpenMode {
+       ReadOnly = (1 << 0),
+       WriteOnly = (1 << 1),
+       ReadWrite = ReadOnly | WriteOnly,
+
+       Create = (1 << 2),
+       Exclusive = (1 << 3),
+       Atomic = Exclusive | (1 << 4),
+       Empty = (1 << 5),
+
+       WriteEmpty = ReadWrite | Create | Empty,
+       WriteExists = ReadWrite,
+       WriteAny = ReadWrite | Create,
+       WriteTemp = ReadWrite | Create | Exclusive,
+       ReadOnlyGzip,
+       WriteAtomic = ReadWrite | Create | Atomic
+   };
+   enum CompressMode { Auto = 'A', None = 'N', Extension = 'E', Gzip = 'G', Bzip2 = 'B', Lzma = 'L', Xz = 'X' };
    
    inline bool Read(void *To,unsigned long long Size,bool AllowEof)
    {
@@ -55,6 +76,7 @@ class FileFd
       return Read(To,Size);
    }   
    bool Read(void *To,unsigned long long Size,unsigned long long *Actual = 0);
+   char* ReadLine(char *To, unsigned long long const Size);
    bool Write(const void *From,unsigned long long Size);
    bool Seek(unsigned long long To);
    bool Skip(unsigned long long To);
@@ -62,6 +84,7 @@ class FileFd
    unsigned long long Tell();
    unsigned long long Size();
    unsigned long long FileSize();
+   time_t ModificationTime();
 
    /* You want to use 'unsigned long long' if you are talking about a file
       to be able to support large files (>2 or >4 GB) properly.
@@ -77,30 +100,54 @@ class FileFd
        return T;
    }
 
-   bool Open(std::string FileName,OpenMode Mode,unsigned long Perms = 0666);
-   bool OpenDescriptor(int Fd, OpenMode Mode, bool AutoClose=false);
+   bool Open(std::string FileName,unsigned int const Mode,CompressMode Compress,unsigned long const Perms = 0666);
+   bool Open(std::string FileName,unsigned int const Mode,APT::Configuration::Compressor const &compressor,unsigned long const Perms = 0666);
+   inline bool Open(std::string const &FileName,unsigned int const Mode, unsigned long const Perms = 0666) {
+      return Open(FileName, Mode, None, Perms);
+   };
+   bool OpenDescriptor(int Fd, unsigned int const Mode, CompressMode Compress, bool AutoClose=false);
+   bool OpenDescriptor(int Fd, unsigned int const Mode, APT::Configuration::Compressor const &compressor, bool AutoClose=false);
+   inline bool OpenDescriptor(int Fd, unsigned int const Mode, bool AutoClose=false) {
+      return OpenDescriptor(Fd, Mode, None, AutoClose);
+   };
    bool Close();
    bool Sync();
    
    // Simple manipulators
    inline int Fd() {return iFd;};
    inline void Fd(int fd) {iFd = fd;};
-   inline gzFile gzFd() {return gz;};
+   __deprecated gzFile gzFd();
+
    inline bool IsOpen() {return iFd >= 0;};
    inline bool Failed() {return (Flags & Fail) == Fail;};
    inline void EraseOnFailure() {Flags |= DelOnFail;};
    inline void OpFail() {Flags |= Fail;};
    inline bool Eof() {return (Flags & HitEof) == HitEof;};
+   inline bool IsCompressed() {return (Flags & Compressed) == Compressed;};
    inline std::string &Name() {return FileName;};
    
-   FileFd(std::string FileName,OpenMode Mode,unsigned long Perms = 0666) : iFd(-1), 
-            Flags(0), gz(NULL)
+   FileFd(std::string FileName,unsigned int const Mode,unsigned long Perms = 0666) : iFd(-1), Flags(0), d(NULL)
    {
-      Open(FileName,Mode,Perms);
+      Open(FileName,Mode, None, Perms);
+   };
+   FileFd(std::string FileName,unsigned int const Mode, CompressMode Compress, unsigned long Perms = 0666) : iFd(-1), Flags(0), d(NULL)
+   {
+      Open(FileName,Mode, Compress, Perms);
+   };
+   FileFd() : iFd(-1), Flags(AutoClose), d(NULL) {};
+   FileFd(int const Fd, unsigned int const Mode = ReadWrite, CompressMode Compress = None) : iFd(-1), Flags(0), d(NULL)
+   {
+      OpenDescriptor(Fd, Mode, Compress);
+   };
+   FileFd(int const Fd, bool const AutoClose) : iFd(-1), Flags(0), d(NULL)
+   {
+      OpenDescriptor(Fd, ReadWrite, None, AutoClose);
    };
-   FileFd(int Fd = -1) : iFd(Fd), Flags(AutoClose), gz(NULL) {};
-   FileFd(int Fd,bool) : iFd(Fd), Flags(0), gz(NULL) {};
    virtual ~FileFd();
+
+   private:
+   FileFdPrivate* d;
+   bool OpenInternDescriptor(unsigned int const Mode, APT::Configuration::Compressor const &compressor);
 };
 
 bool RunScripts(const char *Cnf);
index 05001f042102a3bdb4f1f645b7a73f9e1614fe4d..e1a4318235a8291bf30248fefabd7c8763ab10e4 100644 (file)
@@ -61,25 +61,25 @@ bool HashString::VerifyFile(std::string filename) const                     /*{{{*/
    if(Type == "MD5Sum")
    {
       MD5Summation MD5;
-      MD5.AddFD(Fd.Fd(), Fd.Size());
+      MD5.AddFD(Fd);
       fileHash = (std::string)MD5.Result();
    }
    else if (Type == "SHA1")
    {
       SHA1Summation SHA1;
-      SHA1.AddFD(Fd.Fd(), Fd.Size());
+      SHA1.AddFD(Fd);
       fileHash = (std::string)SHA1.Result();
    }
    else if (Type == "SHA256")
    {
       SHA256Summation SHA256;
-      SHA256.AddFD(Fd.Fd(), Fd.Size());
+      SHA256.AddFD(Fd);
       fileHash = (std::string)SHA256.Result();
    }
    else if (Type == "SHA512")
    {
       SHA512Summation SHA512;
-      SHA512.AddFD(Fd.Fd(), Fd.Size());
+      SHA512.AddFD(Fd);
       fileHash = (std::string)SHA512.Result();
    }
    Fd.Close();
@@ -134,6 +134,36 @@ bool Hashes::AddFD(int const Fd,unsigned long long Size, bool const addMD5,
         SHA512.Add(Buf,Res);
    }
    return true;
+}
+bool Hashes::AddFD(FileFd &Fd,unsigned long long Size, bool const addMD5,
+                  bool const addSHA1, bool const addSHA256, bool const addSHA512)
+{
+   unsigned char Buf[64*64];
+   bool const ToEOF = (Size == 0);
+   while (Size != 0 || ToEOF)
+   {
+      unsigned long long n = sizeof(Buf);
+      if (!ToEOF) n = std::min(Size, n);
+      unsigned long long a = 0;
+      if (Fd.Read(Buf, n, &a) == false) // error
+        return false;
+      if (ToEOF == false)
+      {
+        if (a != n) // short read
+           return false;
+      }
+      else if (a == 0) // EOF
+        break;
+      Size -= a;
+      if (addMD5 == true)
+        MD5.Add(Buf, a);
+      if (addSHA1 == true)
+        SHA1.Add(Buf, a);
+      if (addSHA256 == true)
+        SHA256.Add(Buf, a);
+      if (addSHA512 == true)
+        SHA512.Add(Buf, a);
+   }
+   return true;
 }
                                                                        /*}}}*/
-
index 81851dedeb2d3b0f47c6de3a9f06ccedf24394c4..0c0b6c6a725869844cde0f73d196e47cb6985d4d 100644 (file)
 #include <apt-pkg/md5.h>
 #include <apt-pkg/sha1.h>
 #include <apt-pkg/sha2.h>
+#include <apt-pkg/fileutl.h>
 
 #include <algorithm>
 #include <vector>
 #include <cstring>
 
+
+#ifndef APT_8_CLEANER_HEADERS
+using std::min;
+using std::vector;
+#endif
+
 // helper class that contains hash function name
 // and hash
 class HashString
@@ -68,6 +75,10 @@ class Hashes
    { return AddFD(Fd, Size, true, true, true, true); };
    bool AddFD(int const Fd, unsigned long long Size, bool const addMD5,
              bool const addSHA1, bool const addSHA256, bool const addSHA512);
+   inline bool AddFD(FileFd &Fd,unsigned long long Size = 0)
+   { return AddFD(Fd, Size, true, true, true, true); };
+   bool AddFD(FileFd &Fd, unsigned long long Size, bool const addMD5,
+             bool const addSHA1, bool const addSHA256, bool const addSHA512);
    inline bool Add(const unsigned char *Beg,const unsigned char *End) 
                   {return Add(Beg,End-Beg);};
 };
index ff3b112bbff98f02df871d1c0e55f40387d43831..289e43aa42ead780a8951d6346244a955a92e1b2 100644 (file)
@@ -24,5 +24,27 @@ bool SummationImplementation::AddFD(int const Fd, unsigned long long Size) {
       Add(Buf,Res);
    }
    return true;
+}
+bool SummationImplementation::AddFD(FileFd &Fd, unsigned long long Size) {
+   unsigned char Buf[64 * 64];
+   bool ToEOF = (Size == 0);
+   while (Size != 0 || ToEOF)
+   {
+      unsigned long long n = sizeof(Buf);
+      if (!ToEOF) n = std::min(Size, n);
+      unsigned long long a = 0;
+      if (Fd.Read(Buf, n, &a) == false) // error
+        return false;
+      if (ToEOF == false)
+      {
+        if (a != n) // short read
+           return false;
+      }
+      else if (a == 0) // EOF
+        break;
+      Size -= a;
+      Add(Buf, a);
+   }
+   return true;
 }
                                                                        /*}}}*/
index d2d9f92edfef2439bd31f56cb0fd90e17035341e..9bf160b2be527b92e09d33b55c4b51906801af59 100644 (file)
@@ -10,6 +10,8 @@
 #ifndef APTPKG_HASHSUM_TEMPLATE_H
 #define APTPKG_HASHSUM_TEMPLATE_H
 
+#include <apt-pkg/fileutl.h>
+
 #include <string>
 #include <cstring>
 #include <algorithm>
 
 #include <apt-pkg/strutl.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::min;
+#endif
+
 template<int N>
 class HashSumValue
 {
@@ -105,6 +112,7 @@ class SummationImplementation
    { return Add((const unsigned char *)Beg, End - Beg); };
 
    bool AddFD(int Fd, unsigned long long Size = 0);
+   bool AddFD(FileFd &Fd, unsigned long long Size = 0);
 };
 
 #endif
index a207da4e4f8d6615379549cf900f1d8ea4cfbe8e..25631b1668058749ba0dc7e93e729e055f3e6ea1 100644 (file)
 
 #include "hashsum_template.h"
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::min;
+#endif
+
 typedef HashSumValue<128> MD5SumValue;
 
 class MD5Summation : public SummationImplementation
index f76169a92dea39e5c341eb3583942b20bd5856fc..a67ab36985d6037177b2c3a907f4a187ae302e9c 100644 (file)
@@ -66,7 +66,7 @@ MMap::~MMap()
 bool MMap::Map(FileFd &Fd)
 {
    iSize = Fd.Size();
-   
+
    // Set the permissions.
    int Prot = PROT_READ;
    int Map = MAP_SHARED;
@@ -77,7 +77,18 @@ bool MMap::Map(FileFd &Fd)
    
    if (iSize == 0)
       return _error->Error(_("Can't mmap an empty file"));
-   
+
+   // We can't mmap compressed fd's directly, so we need to read it completely
+   if (Fd.IsCompressed() == true)
+   {
+      if ((Flags & ReadOnly) != ReadOnly)
+        return _error->Error("Compressed file %s can only be mapped readonly", Fd.Name().c_str());
+      Base = new unsigned char[iSize];
+      if (Fd.Seek(0L) == false || Fd.Read(Base, iSize) == false)
+        return false;
+      return true;
+   }
+
    // Map it.
    Base = mmap(0,iSize,Prot,Map,Fd.Fd(),0);
    if (Base == (void *)-1)
@@ -86,6 +97,13 @@ bool MMap::Map(FileFd &Fd)
       {
         // The filesystem doesn't support this particular kind of mmap.
         // So we allocate a buffer and read the whole file into it.
+        if ((Flags & ReadOnly) == ReadOnly)
+        {
+           // for readonly, we don't need sync, so make it simple
+           Base = new unsigned char[iSize];
+           return Fd.Read(Base, iSize);
+        }
+        // FIXME: Writing to compressed fd's ?
         int const dupped_fd = dup(Fd.Fd());
         if (dupped_fd == -1)
            return _error->Errno("mmap", _("Couldn't duplicate file descriptor %i"), Fd.Fd());
index 2ed4a95f8be576335b30cdc796911b3ebd3a9c90..6bd4a2d863ca3c118252021c74e0715c5099b068 100644 (file)
 
 #include <string>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+using std::string;
+#endif
+
 class FileFd;
 
 /* This should be a 32 bit type, larger tyes use too much ram and smaller
index 7b94eba88a4c5dc7b5c6380305e2ae8e808a636c..5931d4a429fe061d47c858c80e95a108e7444897 100644 (file)
 
 #include <string>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/strutl.h>
+#endif
+
 #define DOT_CHAR "."
 #define DIR_CHAR "/"
 
index 7635719bc348a4a08d8eb5d64d9a87c6f287c784..3a6943aee5731325a70b1913b3a29aabc0fab76a 100644 (file)
 #include <string>
 #include <sys/time.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
 class Configuration;
 class OpProgress
 {
index b4b139a222bdf2194b69a15356e257842aa3e072..a8d55eb13d5a77e5f2e5fd0313ae48be29bab47d 100644 (file)
 
 #include "hashsum_template.h"
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::min;
+#endif
+
 typedef  HashSumValue<160> SHA1SumValue;
 
 class SHA1Summation : public SummationImplementation
index 93f4bef4f383cb04e923199cbaaa969607de0910..337139d5d53050ff746221f23d2e714ef54da590 100644 (file)
 
 #include "macros.h"
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::vector;
+using std::ostream;
+#endif
+
 bool UTF8ToCodeset(const char *codeset, const std::string &orig, std::string *dest);
 char *_strstrip(char *String);
 char *_strtabexpand(char *String,size_t Len);
index 27c1f7f3222b9b3b255841e7ba2d7b925b3ac4a7..5dc2a2ac20e53b36be5d8b8897084c7f6359d5b2 100644 (file)
@@ -26,6 +26,8 @@
 #include <sys/stat.h>
                                                                        /*}}}*/
 
+using std::string;
+
 // SourcesIndex::debSourcesIndex - Constructor                         /*{{{*/
 // ---------------------------------------------------------------------
 /* */
@@ -159,7 +161,7 @@ unsigned long debSourcesIndex::Size() const
    /* we need to ignore errors here; if the lists are absent, just return 0 */
    _error->PushToStack();
 
-   FileFd f = FileFd (IndexFile("Sources"), FileFd::ReadOnlyGzip);
+   FileFd f = FileFd (IndexFile("Sources"), FileFd::ReadOnly, FileFd::Extension);
    if (!f.Failed())
       size = f.Size();
 
@@ -288,7 +290,7 @@ unsigned long debPackagesIndex::Size() const
    /* we need to ignore errors here; if the lists are absent, just return 0 */
    _error->PushToStack();
 
-   FileFd f = FileFd (IndexFile("Packages"), FileFd::ReadOnlyGzip);
+   FileFd f = FileFd (IndexFile("Packages"), FileFd::ReadOnly, FileFd::Extension);
    if (!f.Failed())
       size = f.Size();
 
@@ -305,7 +307,7 @@ unsigned long debPackagesIndex::Size() const
 bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
 {
    string PackageFile = IndexFile("Packages");
-   FileFd Pkg(PackageFile,FileFd::ReadOnlyGzip);
+   FileFd Pkg(PackageFile,FileFd::ReadOnly, FileFd::Extension);
    debListParser Parser(&Pkg, Architecture);
 
    if (_error->PendingError() == true)
@@ -319,11 +321,8 @@ bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
    // Store the IMS information
    pkgCache::PkgFileIterator File = Gen.GetCurFile();
    pkgCacheGenerator::Dynamic<pkgCache::PkgFileIterator> DynFile(File);
-   struct stat St;
-   if (fstat(Pkg.Fd(),&St) != 0)
-      return _error->Errno("fstat","Failed to stat");
-   File->Size = St.st_size;
-   File->mtime = St.st_mtime;
+   File->Size = Pkg.FileSize();
+   File->mtime = Pkg.ModificationTime();
    
    if (Gen.MergeList(Parser) == false)
       return _error->Error("Problem with MergeList %s",PackageFile.c_str());
@@ -489,7 +488,7 @@ unsigned long debTranslationsIndex::Size() const
    /* we need to ignore errors here; if the lists are absent, just return 0 */
    _error->PushToStack();
 
-   FileFd f = FileFd (IndexFile(Language), FileFd::ReadOnlyGzip);
+   FileFd f = FileFd (IndexFile(Language), FileFd::ReadOnly, FileFd::Extension);
    if (!f.Failed())
       size = f.Size();
 
@@ -509,7 +508,7 @@ bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
    string TranslationFile = IndexFile(Language);
    if (FileExists(TranslationFile))
    {
-     FileFd Trans(TranslationFile,FileFd::ReadOnlyGzip);
+     FileFd Trans(TranslationFile,FileFd::ReadOnly, FileFd::Extension);
      debListParser TransParser(&Trans);
      if (_error->PendingError() == true)
        return false;
@@ -521,11 +520,8 @@ bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
 
      // Store the IMS information
      pkgCache::PkgFileIterator TransFile = Gen.GetCurFile();
-     struct stat TransSt;
-     if (fstat(Trans.Fd(),&TransSt) != 0)
-       return _error->Errno("fstat","Failed to stat");
-     TransFile->Size = TransSt.st_size;
-     TransFile->mtime = TransSt.st_mtime;
+     TransFile->Size = Trans.FileSize();
+     TransFile->mtime = Trans.ModificationTime();
    
      if (Gen.MergeList(TransParser) == false)
        return _error->Error("Problem with MergeList %s",TranslationFile.c_str());
@@ -590,7 +586,7 @@ unsigned long debStatusIndex::Size() const
 /* */
 bool debStatusIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
 {
-   FileFd Pkg(File,FileFd::ReadOnlyGzip);
+   FileFd Pkg(File,FileFd::ReadOnly, FileFd::Extension);
    if (_error->PendingError() == true)
       return false;
    debListParser Parser(&Pkg);
@@ -604,11 +600,8 @@ bool debStatusIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
 
    // Store the IMS information
    pkgCache::PkgFileIterator CFile = Gen.GetCurFile();
-   struct stat St;
-   if (fstat(Pkg.Fd(),&St) != 0)
-      return _error->Errno("fstat","Failed to stat");
-   CFile->Size = St.st_size;
-   CFile->mtime = St.st_mtime;
+   CFile->Size = Pkg.FileSize();
+   CFile->mtime = Pkg.ModificationTime();
    CFile->Archive = Gen.WriteUniqString("now");
    
    if (Gen.MergeList(Parser) == false)
index 28568d5e3dd71e9d2a3968e543d2a32e38a1bfc5..bdb50f6bff809ba9b7ebf22e8660dc243b244ae0 100644 (file)
@@ -773,6 +773,7 @@ bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator &FileI,
    // file. to provide Component pinning we use the section name now
    FileI->Component = WriteUniqString(component);
 
+   // FIXME: Code depends on the fact that Release files aren't compressed
    FILE* release = fdopen(dup(File.Fd()), "r");
    if (release == NULL)
       return false;
index 9519d9711e42c7bf1cd7bb913dd17068943f222c..386d291a2e1378a260a977e03db9137f04fe4748 100644 (file)
 #include <apt-pkg/pkgcachegen.h>
 #include <apt-pkg/tagfile.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/indexfile.h>
+#endif
+
 class debListParser : public pkgCacheGenerator::ListParser
 {
    public:
index 0cba2d8a8f0484e8b352d758604cd27b2c994166..b9ecab97cda0dd5abbe57b36286870346576c6aa 100644 (file)
@@ -8,6 +8,10 @@
 #include <string>
 #include <vector>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/sourcelist.h>
+#endif
+
 class debReleaseIndex : public metaIndex {
    public:
 
index 1afa7b74deef56ead984475330725e3eb3c1335d..184c07c33b2d9b2f2ea47036e8824fdd76ecfe5c 100644 (file)
@@ -25,7 +25,7 @@ using std::string;
 // ---------------------------------------------------------------------
 /* */
 debRecordParser::debRecordParser(string FileName,pkgCache &Cache) : 
-                  File(FileName,FileFd::ReadOnlyGzip), 
+                  File(FileName,FileFd::ReadOnly, FileFd::Extension),
                   Tags(&File, std::max(Cache.Head().MaxVerFileSize, 
                                       Cache.Head().MaxDescFileSize) + 200)
 {
index 9c7ea6b486c8e5803d0d8a6db3623030def2d19a..b5e3bbdba85fd552141784daa3049863224ba9e4 100644 (file)
 #include <apt-pkg/tagfile.h>
 #include <apt-pkg/fileutl.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/indexfile.h>
+#endif
+
 class debRecordParser : public pkgRecords::Parser
 {
    /** \brief dpointer placeholder (for later in case we need it) */
index 4c8d03224b8c821fb57b3113e01df48d96558985..5d2a67f4f599643a18791dbae4bc59666e7c41ff 100644 (file)
@@ -50,7 +50,7 @@ class debSrcRecordParser : public pkgSrcRecords::Parser
    virtual bool Files(std::vector<pkgSrcRecords::File> &F);
 
    debSrcRecordParser(std::string const &File,pkgIndexFile const *Index) 
-      : Parser(Index), Fd(File,FileFd::ReadOnlyGzip), Tags(&Fd,102400), 
+      : Parser(Index), Fd(File,FileFd::ReadOnly, FileFd::Extension), Tags(&Fd,102400), 
         Buffer(NULL) {}
    virtual ~debSrcRecordParser();
 };
index 6b62360b7a14797a440eab7054b11153aed00c80..aab39f633a9a1e4c3a5018102d939899deadb98c 100644 (file)
 #include <map>
 #include <stdio.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::vector;
+using std::map;
+#endif
+
 class pkgDPkgPMPrivate;
 
 class pkgDPkgPM : public pkgPackageManager
index 529e9240dd5f566f2e741274b6e7ed85d83b12b9..031fca5c0dda3930100d8f5d6706e709f552d41b 100644 (file)
@@ -23,7 +23,9 @@
 #include <apt-pkg/pkgsystem.h>
 #include <apt-pkg/tagfile.h>
 #include <apt-pkg/progress.h>
+#include <apt-pkg/cacheset.h>
 
+#include <algorithm>
 #include <iostream>
 #include <sstream>
 #include <set>
@@ -940,6 +942,51 @@ bool pkgDepCache::IsModeChangeOk(ModeList const mode, PkgIterator const &Pkg,
 // DepCache::MarkInstall - Put the package in the install state                /*{{{*/
 // ---------------------------------------------------------------------
 /* */
+struct CompareProviders {
+   pkgCache::PkgIterator const Pkg;
+   CompareProviders(pkgCache::DepIterator const &Dep) : Pkg(Dep.TargetPkg()) {};
+   //bool operator() (APT::VersionList::iterator const &AV, APT::VersionList::iterator const &BV)
+   bool operator() (pkgCache::VerIterator const &AV, pkgCache::VerIterator const &BV)
+   {
+      pkgCache::PkgIterator const A = AV.ParentPkg();
+      pkgCache::PkgIterator const B = BV.ParentPkg();
+      // Prefer packages in the same group as the target; e.g. foo:i386, foo:amd64
+      if (A->Group != B->Group)
+      {
+        if (A->Group == Pkg->Group && B->Group != Pkg->Group)
+           return false;
+        else if (B->Group == Pkg->Group && A->Group != Pkg->Group)
+           return true;
+      }
+      // we like essentials
+      if ((A->Flags & pkgCache::Flag::Essential) != (B->Flags & pkgCache::Flag::Essential))
+      {
+        if ((A->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+           return false;
+        else if ((B->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+           return true;
+      }
+      // higher priority seems like a good idea
+      if (AV->Priority != BV->Priority)
+        return AV->Priority < BV->Priority;
+      // prefer native architecture
+      if (strcmp(A.Arch(), B.Arch()) != 0)
+      {
+        if (strcmp(A.Arch(), A.Cache()->NativeArch()) == 0)
+           return false;
+        else if (strcmp(B.Arch(), B.Cache()->NativeArch()) == 0)
+           return true;
+        std::vector<std::string> archs = APT::Configuration::getArchitectures();
+        for (std::vector<std::string>::const_iterator a = archs.begin(); a != archs.end(); ++a)
+           if (*a == A.Arch())
+              return false;
+           else if (*a == B.Arch())
+              return true;
+      }
+      // unable to decide…
+      return A->ID < B->ID;
+   }
+};
 bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
                              unsigned long Depth, bool FromUser,
                              bool ForceImportantDeps)
@@ -1102,41 +1149,28 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
 
       /* This bit is for processing the possibilty of an install/upgrade
          fixing the problem */
-      SPtrArray<Version *> List = Start.AllTargets();
       if (Start->Type != Dep::DpkgBreaks &&
          (DepState[Start->ID] & DepCVer) == DepCVer)
       {
-        // Right, find the best version to install..
-        Version **Cur = List;
-        PkgIterator P = Start.TargetPkg();
-        PkgIterator InstPkg(*Cache,0);
-        
-        // See if there are direct matches (at the start of the list)
-        for (; *Cur != 0 && (*Cur)->ParentPkg == P.Index(); Cur++)
+        APT::VersionList verlist;
+        pkgCache::VerIterator Cand = PkgState[Start.TargetPkg()->ID].CandidateVerIter(*this);
+        if (Cand.end() == false && VS().CheckDep(Cand.VerStr(), Start->CompareOp, Start.TargetVer()) == true)
+           verlist.insert(Cand);
+        for (PrvIterator Prv = Start.TargetPkg().ProvidesList(); Prv.end() != true; ++Prv)
         {
-           PkgIterator Pkg(*Cache,Cache->PkgP + (*Cur)->ParentPkg);
-           if (PkgState[Pkg->ID].CandidateVer != *Cur)
+           pkgCache::VerIterator V = Prv.OwnerVer();
+           pkgCache::VerIterator Cand = PkgState[Prv.OwnerPkg()->ID].CandidateVerIter(*this);
+           if (Cand.end() == true || V != Cand ||
+               VS().CheckDep(Cand.VerStr(), Start->CompareOp, Start.TargetVer()) == false)
               continue;
-           InstPkg = Pkg;
-           break;
+           verlist.insert(Cand);
         }
+        CompareProviders comp(Start);
+        APT::VersionList::iterator InstVer = std::max_element(verlist.begin(), verlist.end(), comp);
 
-        // Select the highest priority providing package
-        if (InstPkg.end() == true)
-        {
-           pkgPrioSortList(*Cache,Cur);
-           for (; *Cur != 0; Cur++)
-           {
-              PkgIterator Pkg(*Cache,Cache->PkgP + (*Cur)->ParentPkg);
-              if (PkgState[Pkg->ID].CandidateVer != *Cur)
-                 continue;
-              InstPkg = Pkg;
-              break;
-           }
-        }
-        
-        if (InstPkg.end() == false)
+        if (InstVer != verlist.end())
         {
+           pkgCache::PkgIterator InstPkg = InstVer.ParentPkg();
            if(DebugAutoInstall == true)
               std::clog << OutputInDepth(Depth) << "Installing " << InstPkg.Name()
                         << " as " << Start.DepType() << " of " << Pkg.Name()
@@ -1154,7 +1188,7 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
               // mark automatic dependency
               MarkInstall(InstPkg,true,Depth + 1, false, ForceImportantDeps);
               // Set the autoflag, after MarkInstall because MarkInstall unsets it
-              if (P->CurrentVer == 0)
+              if (InstPkg->CurrentVer == 0)
                  PkgState[InstPkg->ID].Flags |= Flag::Auto;
            }
         }
@@ -1166,6 +1200,7 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
          upgrade the package. */
       if (Start.IsNegative() == true)
       {
+        SPtrArray<Version *> List = Start.AllTargets();
         for (Version **I = List; *I != 0; I++)
         {
            VerIterator Ver(*this,*I);
index f6e6c0afc5aa9ebccffc1b74d293dd3ef0d7e322..7358048ed55dec79fa3370fcdc1f860031fc7239 100644 (file)
 #include <set>
 #include <list>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/progress.h>
+#include <apt-pkg/error.h>
+#endif
+
 class OpProgress;
 
 class pkgDepCache : protected pkgCache::Namespace
index c143094222d0a5972b05d2f64d859fe7c0f98593..12b06d143098702b9822082bcaaed6fcc100acce 100644 (file)
 #define PKGLIB_EDSP_H
 
 #include <apt-pkg/pkgcache.h>
+#include <apt-pkg/cacheset.h>
 
 #include <list>
 #include <string>
 
-namespace APT {
-       class PackageSet;
-};
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/progress.h>
+#endif
+
 class pkgDepCache;
 class OpProgress;
 
index 058cef63689ba80356187fa9e90b69a7b9a4f358..482581979f4cc9c87f448287bef538d30fecc577 100644 (file)
@@ -24,7 +24,7 @@
 // edspIndex::edspIndex - Constructor                                  /*{{{*/
 // ---------------------------------------------------------------------
 /* */
-edspIndex::edspIndex(string File) : debStatusIndex(File)
+edspIndex::edspIndex(std::string File) : debStatusIndex(File)
 {
 }
                                                                        /*}}}*/
@@ -44,16 +44,13 @@ bool edspIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
 
    if (Prog != NULL)
       Prog->SubProgress(0,File);
-   if (Gen.SelectFile(File,string(),*this) == false)
+   if (Gen.SelectFile(File,std::string(),*this) == false)
       return _error->Error("Problem with SelectFile %s",File.c_str());
 
    // Store the IMS information
    pkgCache::PkgFileIterator CFile = Gen.GetCurFile();
-   struct stat St;
-   if (fstat(Pkg.Fd(),&St) != 0)
-      return _error->Errno("fstat","Failed to stat");
-   CFile->Size = St.st_size;
-   CFile->mtime = St.st_mtime;
+   CFile->Size = Pkg.FileSize();
+   CFile->mtime = Pkg.ModificationTime();
    CFile->Archive = Gen.WriteUniqString("edsp::scenario");
 
    if (Gen.MergeList(Parser) == false)
index 9670c4837d6c540bff1ef3e85c820ccc64b41c80..de10f2d2f7a4ba20a25527b65359c2fc9f0c06db 100644 (file)
 
 #include <apt-pkg/debindexfile.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/indexfile.h>
+#endif
+
 class edspIndex : public debStatusIndex
 {
    /** \brief dpointer placeholder (for later in case we need it) */
index 5d82716c7b02613c83223552874c47d6c1ecbfa6..a7bf9de9590a5270cc46a6c1e4b58035fb7d0046 100644 (file)
 
 #include <apt-pkg/deblistparser.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/pkgcachegen.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/tagfile.h>
+#endif
+
 class FileFd;
 
 class edspListParser : public debListParser
index 4df018ef45512c26244a16bbf175db24be81ffa6..3747e357003a1cd0e8ae05f468a833bf745bd241 100644 (file)
@@ -16,6 +16,7 @@
 #include <apt-pkg/progress.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/fileutl.h>
+#include <apt-pkg/aptconfiguration.h>
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/tagfile.h>
 #include <apt-pkg/indexrecords.h>
@@ -37,8 +38,6 @@
 
 using namespace std;
 
-
-
 // IndexCopy::CopyPackages - Copy the package files from the CD                /*{{{*/
 // ---------------------------------------------------------------------
 /* */
@@ -57,15 +56,25 @@ bool IndexCopy::CopyPackages(string CDROM,string Name,vector<string> &List,
    
    // Prepare the progress indicator
    off_t TotalSize = 0;
+   std::vector<APT::Configuration::Compressor> const compressor = APT::Configuration::getCompressors();
    for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
    {
       struct stat Buf;
-      if (stat(string(*I + GetFileName()).c_str(),&Buf) != 0 &&
-         stat(string(*I + GetFileName() + ".gz").c_str(),&Buf) != 0)
-        return _error->Errno("stat","Stat failed for %s",
-                             string(*I + GetFileName()).c_str());
+      bool found = false;
+      std::string file = std::string(*I).append(GetFileName());
+      for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+          c != compressor.end(); ++c)
+      {
+        if (stat(std::string(file + c->Extension).c_str(), &Buf) != 0)
+           continue;
+        found = true;
+        break;
+      }
+
+      if (found == false)
+        return _error->Errno("stat", "Stat failed for %s", file.c_str());
       TotalSize += Buf.st_size;
-   }   
+   }
 
    off_t CurrentSize = 0;
    unsigned int NotFound = 0;
@@ -74,57 +83,11 @@ bool IndexCopy::CopyPackages(string CDROM,string Name,vector<string> &List,
    for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
    {      
       string OrigPath = string(*I,CDROM.length());
-      off_t FileSize = 0;
       
       // Open the package file
-      FileFd Pkg;
-      if (RealFileExists(*I + GetFileName()) == true)
-      {
-        Pkg.Open(*I + GetFileName(),FileFd::ReadOnly);
-        FileSize = Pkg.Size();
-      }      
-      else
-      {
-        FileFd From(*I + GetFileName() + ".gz",FileFd::ReadOnly);
-        if (_error->PendingError() == true)
-           return false;
-        FileSize = From.Size();
-        
-        // Get a temp file
-        FILE *tmp = tmpfile();
-        if (tmp == 0)
-           return _error->Errno("tmpfile","Unable to create a tmp file");
-        Pkg.Fd(dup(fileno(tmp)));
-        fclose(tmp);
-        
-        // Fork gzip
-        pid_t Process = fork();
-        if (Process < 0)
-           return _error->Errno("fork","Couldn't fork gzip");
-        
-        // The child
-        if (Process == 0)
-        {          
-           dup2(From.Fd(),STDIN_FILENO);
-           dup2(Pkg.Fd(),STDOUT_FILENO);
-           SetCloseExec(STDIN_FILENO,false);
-           SetCloseExec(STDOUT_FILENO,false);
-           
-           const char *Args[3];
-           string Tmp =  _config->Find("Dir::bin::gzip","gzip");
-           Args[0] = Tmp.c_str();
-           Args[1] = "-d";
-           Args[2] = 0;
-           execvp(Args[0],(char **)Args);
-           exit(100);
-        }
-        
-        // Wait for gzip to finish
-        if (ExecWait(Process,_config->Find("Dir::bin::gzip","gzip").c_str(),false) == false)
-           return _error->Error("gzip failed, perhaps the disk is full.");
-        
-        Pkg.Seek(0);
-      }
+      FileFd Pkg(*I + GetFileName(), FileFd::ReadOnly, FileFd::Extension);
+      off_t const FileSize = Pkg.Size();
+
       pkgTagFile Parser(&Pkg);
       if (_error->PendingError() == true)
         return false;
@@ -602,13 +565,19 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList,
 
       string const releasegpg = *I+"Release.gpg";
       string const release = *I+"Release";
+      string const inrelease = *I+"InRelease";
+      bool useInRelease = true;
 
       // a Release.gpg without a Release should never happen
-      if(RealFileExists(release) == false)
+      if (RealFileExists(inrelease) == true)
+        ;
+      else if(RealFileExists(release) == false || RealFileExists(releasegpg) == false)
       {
         delete MetaIndex;
         continue;
       }
+      else
+        useInRelease = false;
 
       pid_t pid = ExecFork();
       if(pid < 0) {
@@ -616,11 +585,16 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList,
         return false;
       }
       if(pid == 0)
-        RunGPGV(release, releasegpg);
+      {
+        if (useInRelease == true)
+           RunGPGV(inrelease, inrelease);
+        else
+           RunGPGV(release, releasegpg);
+      }
 
       if(!ExecWait(pid, "gpgv")) {
         _error->Warning("Signature verification failed for: %s",
-                        releasegpg.c_str());
+                        (useInRelease ? inrelease.c_str() : releasegpg.c_str()));
         // something went wrong, don't copy the Release.gpg
         // FIXME: delete any existing gpg file?
         continue;
@@ -650,8 +624,13 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList,
       delete MetaIndex;
    
       // everything was fine, copy the Release and Release.gpg file
-      CopyMetaIndex(CDROM, Name, prefix, "Release");
-      CopyMetaIndex(CDROM, Name, prefix, "Release.gpg");
+      if (useInRelease == true)
+        CopyMetaIndex(CDROM, Name, prefix, "InRelease");
+      else
+      {
+        CopyMetaIndex(CDROM, Name, prefix, "Release");
+        CopyMetaIndex(CDROM, Name, prefix, "Release.gpg");
+      }
    }   
 
    return true;
@@ -789,15 +768,25 @@ bool TranslationsCopy::CopyTranslations(string CDROM,string Name, /*{{{*/
    
    // Prepare the progress indicator
    off_t TotalSize = 0;
+   std::vector<APT::Configuration::Compressor> const compressor = APT::Configuration::getCompressors();
    for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
    {
       struct stat Buf;
-      if (stat(string(*I).c_str(),&Buf) != 0 &&
-         stat(string(*I + ".gz").c_str(),&Buf) != 0)
-        return _error->Errno("stat","Stat failed for %s",
-                             string(*I).c_str());
+      bool found = false;
+      std::string file = *I;
+      for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressor.begin();
+          c != compressor.end(); ++c)
+      {
+        if (stat(std::string(file + c->Extension).c_str(), &Buf) != 0)
+           continue;
+        found = true;
+        break;
+      }
+
+      if (found == false)
+        return _error->Errno("stat", "Stat failed for %s", file.c_str());
       TotalSize += Buf.st_size;
-   }   
+   }
 
    off_t CurrentSize = 0;
    unsigned int NotFound = 0;
@@ -806,57 +795,11 @@ bool TranslationsCopy::CopyTranslations(string CDROM,string Name, /*{{{*/
    for (vector<string>::iterator I = List.begin(); I != List.end(); ++I)
    {      
       string OrigPath = string(*I,CDROM.length());
-      off_t FileSize = 0;
-      
+
       // Open the package file
-      FileFd Pkg;
-      if (RealFileExists(*I) == true)
-      {
-        Pkg.Open(*I,FileFd::ReadOnly);
-        FileSize = Pkg.Size();
-      }      
-      else
-      {
-        FileFd From(*I + ".gz",FileFd::ReadOnly);
-        if (_error->PendingError() == true)
-           return false;
-        FileSize = From.Size();
-        
-        // Get a temp file
-        FILE *tmp = tmpfile();
-        if (tmp == 0)
-           return _error->Errno("tmpfile","Unable to create a tmp file");
-        Pkg.Fd(dup(fileno(tmp)));
-        fclose(tmp);
-        
-        // Fork gzip
-        pid_t Process = fork();
-        if (Process < 0)
-           return _error->Errno("fork","Couldn't fork gzip");
-        
-        // The child
-        if (Process == 0)
-        {          
-           dup2(From.Fd(),STDIN_FILENO);
-           dup2(Pkg.Fd(),STDOUT_FILENO);
-           SetCloseExec(STDIN_FILENO,false);
-           SetCloseExec(STDOUT_FILENO,false);
-           
-           const char *Args[3];
-           string Tmp =  _config->Find("Dir::bin::gzip","gzip");
-           Args[0] = Tmp.c_str();
-           Args[1] = "-d";
-           Args[2] = 0;
-           execvp(Args[0],(char **)Args);
-           exit(100);
-        }
-        
-        // Wait for gzip to finish
-        if (ExecWait(Process,_config->Find("Dir::bin::gzip","gzip").c_str(),false) == false)
-           return _error->Error("gzip failed, perhaps the disk is full.");
-        
-        Pkg.Seek(0);
-      }
+      FileFd Pkg(*I, FileFd::ReadOnly, FileFd::Extension);
+      off_t const FileSize = Pkg.Size();
+
       pkgTagFile Parser(&Pkg);
       if (_error->PendingError() == true)
         return false;
index 21294ae7ed29ee49ded2a6089c1477b03c6a0da6..e3de1afd97f1f6454d1a20ec43bd8802fadbc164 100644 (file)
 #include <string>
 #include <stdio.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::vector;
+#endif
+
 class pkgTagSection;
 class FileFd;
 class indexRecords;
index 5e162a846847e1e020f643e55177e9bb7cc72d1d..1d34dc773bb3123cfef7681d76dc45b96568e93b 100644 (file)
 #include <apt-pkg/pkgrecords.h>
 #include <apt-pkg/macros.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
 class pkgAcquire;
 class pkgCacheGenerator;
 class OpProgress;
index fa60a08479991d53047baffcf3f2afce271925ed..a98b939bc69476f1514f20f6054082cd01490a20 100644 (file)
 #include <vector>
 #include <ctime>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+#endif
+
 class indexRecords
 {
    bool parseSumData(const char *&Start, const char *End, std::string &Name,
index 0c1c7ae5a8b0d4ee9d780805be7176dc6fea56e6..b6f3df7537b65eb52635b583631c02fcdb5bffce 100644 (file)
 #ifndef PKGLIB_INIT_H
 #define PKGLIB_INIT_H
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/pkgsystem.h>
+#endif
+
 class pkgSystem;
 class Configuration;
 
index 9cc79a7a62a43f0e041d6803361ce2d7eecaf1df..5783735ff32e9925247c699438cdcc38ec423299 100644 (file)
@@ -6,6 +6,13 @@
 #include <apt-pkg/pkgcache.h>
 #include <apt-pkg/indexfile.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/srcrecords.h>
+#include <apt-pkg/pkgrecords.h>
+#include <apt-pkg/vendor.h>
+using std::string;
+#endif
+
 class pkgAcquire;
 class pkgCacheGenerator;
 class OpProgress;
index d4989a6e04e3ef4ad6e11163a697c427571e1b07..1a6a9f01c7ad0bbfcb06484f2ce82d8d9b064627 100644 (file)
 #include <iostream>
 #include <set>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/depcache.h>
+using std::string;
+#endif
+
 class pkgAcquire;
 class pkgDepCache;
 class pkgSourceList;
index 7e32a3a9692818e2e411272c8ab2e5fd0c3f2247..1a7013551a5c9c57ae7a7733277e076042ba017e 100644 (file)
 #ifndef PKGLIB_PKGCACHE_H
 #define PKGLIB_PKGCACHE_H
 
-
 #include <string>
 #include <time.h>
 #include <apt-pkg/mmap.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
 class pkgVersioningSystem;
 class pkgCache                                                         /*{{{*/
 {
@@ -198,6 +201,7 @@ class pkgCache                                                              /*{{{*/
    inline PkgFileIterator FileEnd();
 
    inline bool MultiArchCache() const { return MultiArchEnabled; };
+   inline char const * const NativeArch() const;
 
    // Make me a function
    pkgVersioningSystem *VS;
@@ -213,7 +217,6 @@ class pkgCache                                                              /*{{{*/
 private:
    bool MultiArchEnabled;
    PkgIterator SingleArchFindPkg(const std::string &Name);
-   inline char const * const NativeArch() const;
 };
                                                                        /*}}}*/
 // Header structure                                                    /*{{{*/
index 9f999c41b43b05ac8b95e93d4417a45ae17fa4ba..ec072fddd76ac5bd9757673c4c76c0ce36e8c20d 100644 (file)
 
 #include <apti18n.h>
                                                                        /*}}}*/
-typedef vector<pkgIndexFile *>::iterator FileIterator;
+typedef std::vector<pkgIndexFile *>::iterator FileIterator;
 template <typename Iter> std::vector<Iter*> pkgCacheGenerator::Dynamic<Iter>::toReMap;
 
 bool IsDuplicateDescription(pkgCache::DescIterator Desc,
                            MD5SumValue const &CurMd5, std::string const &CurLang);
 
+using std::string;
+
 // CacheGenerator::pkgCacheGenerator - Constructor                     /*{{{*/
 // ---------------------------------------------------------------------
 /* We set the dirty flag and make sure that is written to the disk */
@@ -1221,14 +1223,14 @@ bool pkgCacheGenerator::MakeStatusCache(pkgSourceList &List,OpProgress *Progress
                        MMap **OutMap,bool AllowMem)
 {
    bool const Debug = _config->FindB("Debug::pkgCacheGen", false);
-   
-   vector<pkgIndexFile *> Files;
-   for (vector<metaIndex *>::const_iterator i = List.begin();
+
+   std::vector<pkgIndexFile *> Files;
+   for (std::vector<metaIndex *>::const_iterator i = List.begin();
         i != List.end();
         ++i)
    {
-      vector <pkgIndexFile *> *Indexes = (*i)->GetIndexFiles();
-      for (vector<pkgIndexFile *>::const_iterator j = Indexes->begin();
+      std::vector <pkgIndexFile *> *Indexes = (*i)->GetIndexFiles();
+      for (std::vector<pkgIndexFile *>::const_iterator j = Indexes->begin();
           j != Indexes->end();
           ++j)
          Files.push_back (*j);
@@ -1418,7 +1420,7 @@ __deprecated bool pkgMakeOnlyStatusCache(OpProgress &Progress,DynamicMMap **OutM
    { return pkgCacheGenerator::MakeOnlyStatusCache(&Progress, OutMap); }
 bool pkgCacheGenerator::MakeOnlyStatusCache(OpProgress *Progress,DynamicMMap **OutMap)
 {
-   vector<pkgIndexFile *> Files;
+   std::vector<pkgIndexFile *> Files;
    unsigned long EndOfSource = Files.size();
    if (_system->AddStatusFiles(Files) == false)
       return false;
index 211fd0d5616a5a2ae632f9ee41ff1bd3b02cf2ce..75f7b9fcc3b6a236fa3b500b94e76d1c4d0c5587 100644 (file)
 
 #include <vector>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/depcache.h>
+#endif
+
 class pkgDepCache;
 class pkgPackageManager;
 class pkgVersioningSystem;
index 3c8246e3b179efc3884924678401b4d70a7a2394..5172a3c3b9419b5759e8ea701d503c659984c6c5 100644 (file)
 #include <apt-pkg/versionmatch.h>
 #include <vector>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::vector;
+#endif
+
 class pkgPolicy : public pkgDepCache::Policy
 {
    protected:
index 4509e54b9bbc7afde6e6a0c2c0e79e3c437fd99f..02e27101a64a123443eda5977415825c30e9c019 100644 (file)
 #include <map>
 #include <apt-pkg/pkgcache.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/metaindex.h>
 using std::string;
 using std::vector;
-    
+#endif
 
 class pkgAcquire;
 class pkgIndexFile;
@@ -57,32 +59,32 @@ class pkgSourceList
       const char *Name;
       const char *Label;
 
-      bool FixupURI(string &URI) const;
-      virtual bool ParseLine(vector<metaIndex *> &List,
+      bool FixupURI(std::string &URI) const;
+      virtual bool ParseLine(std::vector<metaIndex *> &List,
                             const char *Buffer,
-                            unsigned long const &CurLine,string const &File) const;
-      virtual bool CreateItem(vector<metaIndex *> &List,string const &URI,
-                             string const &Dist,string const &Section,
-                             std::map<string, string> const &Options) const = 0;
+                            unsigned long const &CurLine,std::string const &File) const;
+      virtual bool CreateItem(std::vector<metaIndex *> &List,std::string const &URI,
+                             std::string const &Dist,std::string const &Section,
+                             std::map<std::string, std::string> const &Options) const = 0;
       Type();
       virtual ~Type() {};
    };
    
-   typedef vector<metaIndex *>::const_iterator const_iterator;
+   typedef std::vector<metaIndex *>::const_iterator const_iterator;
    
    protected:
 
-   vector<metaIndex *> SrcList;
+   std::vector<metaIndex *> SrcList;
    
    public:
 
    bool ReadMainList();
-   bool Read(string File);
+   bool Read(std::string File);
 
    // CNC:2003-03-03
    void Reset();
-   bool ReadAppend(string File);
-   bool ReadSourceDir(string Dir);
+   bool ReadAppend(std::string File);
+   bool ReadSourceDir(std::string Dir);
    
    // List accessors
    inline const_iterator begin() const {return SrcList.begin();};
@@ -98,7 +100,7 @@ class pkgSourceList
    time_t GetLastModifiedTime();
 
    pkgSourceList();
-   pkgSourceList(string File);
+   pkgSourceList(std::string File);
    ~pkgSourceList();      
 };
 
index f6d2d515802299a44d4d94d3b83f5fa5c817f1e3..48b643eace605c009781050125fdb965ed0a3891 100644 (file)
@@ -29,8 +29,8 @@ pkgSrcRecords::pkgSrcRecords(pkgSourceList &List) : Files(0), Current(0)
 {
    for (pkgSourceList::const_iterator I = List.begin(); I != List.end(); ++I)
    {
-      vector<pkgIndexFile *> *Indexes = (*I)->GetIndexFiles();
-      for (vector<pkgIndexFile *>::const_iterator J = Indexes->begin();
+      std::vector<pkgIndexFile *> *Indexes = (*I)->GetIndexFiles();
+      for (std::vector<pkgIndexFile *>::const_iterator J = Indexes->begin();
           J != Indexes->end(); ++J)
       {
          Parser* P = (*J)->CreateSrcParser();
@@ -58,7 +58,7 @@ pkgSrcRecords::pkgSrcRecords(pkgSourceList &List) : Files(0), Current(0)
 pkgSrcRecords::~pkgSrcRecords()
 {
    // Blow away all the parser objects
-   for(vector<Parser*>::iterator I = Files.begin(); I != Files.end(); ++I)
+   for(std::vector<Parser*>::iterator I = Files.begin(); I != Files.end(); ++I)
       delete *I;
 }
                                                                        /*}}}*/
@@ -68,7 +68,7 @@ pkgSrcRecords::~pkgSrcRecords()
 bool pkgSrcRecords::Restart()
 {
    Current = Files.begin();
-   for (vector<Parser*>::iterator I = Files.begin();
+   for (std::vector<Parser*>::iterator I = Files.begin();
         I != Files.end(); ++I)
       (*I)->Restart();
    
index a55bc74fa2cd2c94d63c2958a21bdb05d371514e..06f0dce6c02ff5a8fbc94d4b999e4646919522ca 100644 (file)
 #include <string>
 #include <vector>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::vector;
+#endif
+
 class pkgSourceList;
 class pkgIndexFile;
 class pkgSrcRecords
index a5bf5ac90914ec86f0b937508437cc81483e54d8..fd24471c19e83efe1df2e027a25ee0b3f3b80fc1 100644 (file)
 
 #include <string>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+#endif
+
 class FileFd;
 
 class pkgTagSection
index 9b157378cc47d63c2d4f8fe269ecc7cb27fb0810..6484adf9b0e54845a0cec03a53164ba30b081721 100644 (file)
@@ -6,6 +6,10 @@
 
 #include <apt-pkg/macros.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
 // A class representing a particular software provider.
 class __deprecated Vendor
 {
index 733d23a320ac239e12d242ee8dd69c5b1e144df8..a86ccde7cd6b1370eb7929510452536aa725097c 100644 (file)
 #include <vector>
 #include <apt-pkg/macros.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/vendor.h>
+#include <apt-pkg/configuration.h>
+using std::string;
+using std::vector;
+#endif
+
 class Vendor;
 class Configuration;
 
index 92dbc2576732edde7bd8c17bdf3375f000b8c185..e0e0e6c1410f87f86d1aa41527306bc3c4ea907f 100644 (file)
 #include <apt-pkg/strutl.h>
 #include <string>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
 class pkgVersioningSystem
 {
    public:
index da103fc5b5fec0c438e3afc1b5523ea04a2a7a79..433396fc957885d6aa18ef5069dd31ec60f410ed 100644 (file)
 #include <string>
 #include <apt-pkg/pkgcache.h>
 
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
 class pkgVersionMatch
 {   
    // Version Matching
index 256911231c1bac1c7136084265d0ac3963662a6f..4798fe3f53d487c4f18e065d0f7eb4fc05cc7fa1 100644 (file)
@@ -44,3 +44,5 @@
 
 /* The package name string */
 #undef PACKAGE
+
+#define APT_8_CLEANER_HEADERS
index 82a31c9b189c2378df0c7f436fb339064b74a983..1cd5080cc44214504a3d46fb3c7036e778a977e7 100644 (file)
@@ -65,12 +65,12 @@ public:
       return CacheSetHelper::canNotFindNewestVer(Cache, Pkg);
    }
 
-   virtual APT::VersionSet canNotFindAllVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) {
+   virtual void canNotFindAllVer(APT::VersionContainerInterface * vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) {
       virtualPkgs.insert(Pkg);
-      return CacheSetHelper::canNotFindAllVer(Cache, Pkg);
+      CacheSetHelper::canNotFindAllVer(vci, Cache, Pkg);
    }
 
-   CacheSetHelperVirtuals(bool const &ShowErrors = true, GlobalError::MsgType const &ErrorType = GlobalError::NOTICE) : CacheSetHelper(ShowErrors, ErrorType) {}
+   CacheSetHelperVirtuals(bool const ShowErrors = true, GlobalError::MsgType const &ErrorType = GlobalError::NOTICE) : CacheSetHelper(ShowErrors, ErrorType) {}
 };
                                                                        /*}}}*/
 // LocalitySort - Sort a version list by package file locality         /*{{{*/
@@ -108,7 +108,7 @@ void LocalitySort(pkgCache::DescFile **begin,
 // UnMet - Show unmet dependencies                                     /*{{{*/
 // ---------------------------------------------------------------------
 /* */
-bool ShowUnMet(pkgCache::VerIterator const &V, bool const &Important)
+bool ShowUnMet(pkgCache::VerIterator const &V, bool const Important)
 {
         bool Header = false;
         for (pkgCache::DepIterator D = V.DependsList(); D.end() == false;)
@@ -199,9 +199,9 @@ bool UnMet(CommandLine &CmdL)
    else
    {
       CacheSetHelperVirtuals helper(true, GlobalError::NOTICE);
-      APT::VersionSet verset = APT::VersionSet::FromCommandLine(CacheFile, CmdL.FileList + 1,
-                               APT::VersionSet::CANDIDATE, helper);
-      for (APT::VersionSet::iterator V = verset.begin(); V != verset.end(); ++V)
+      APT::VersionList verset = APT::VersionList::FromCommandLine(CacheFile, CmdL.FileList + 1,
+                               APT::VersionList::CANDIDATE, helper);
+      for (APT::VersionList::iterator V = verset.begin(); V != verset.end(); ++V)
         if (ShowUnMet(V, Important) == false)
            return false;
    }
@@ -215,9 +215,9 @@ bool DumpPackage(CommandLine &CmdL)
 {
    pkgCacheFile CacheFile;
    APT::CacheSetHelper helper(true, GlobalError::NOTICE);
-   APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1, helper);
+   APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1, helper);
 
-   for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+   for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
    {
       cout << "Package: " << Pkg.FullName(true) << endl;
       cout << "Versions: " << endl;
@@ -588,7 +588,7 @@ bool ShowDepends(CommandLine &CmdL, bool const RevDepends)
       return false;
 
    CacheSetHelperVirtuals helper(false);
-   APT::VersionSet verset = APT::VersionSet::FromCommandLine(CacheFile, CmdL.FileList + 1, APT::VersionSet::CANDIDATE, helper);
+   APT::VersionList verset = APT::VersionList::FromCommandLine(CacheFile, CmdL.FileList + 1, APT::VersionList::CANDIDATE, helper);
    if (verset.empty() == true && helper.virtualPkgs.empty() == true)
       return _error->Error(_("No packages found"));
    std::vector<bool> Shown(Cache->Head().PackageCount);
@@ -1143,7 +1143,7 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V)
       return _error->Error(_("Package file %s is out of sync."),I.FileName());
 
    FileFd PkgF;
-   if (PkgF.Open(I.FileName(), FileFd::ReadOnlyGzip) == false)
+   if (PkgF.Open(I.FileName(), FileFd::ReadOnly, FileFd::Extension) == false)
       return false;
 
    // Read the record
@@ -1365,10 +1365,10 @@ bool ShowPackage(CommandLine &CmdL)
 {
    pkgCacheFile CacheFile;
    CacheSetHelperVirtuals helper(true, GlobalError::NOTICE);
-   APT::VersionSet::Version const select = _config->FindB("APT::Cache::AllVersions", true) ?
-                       APT::VersionSet::ALL : APT::VersionSet::CANDIDATE;
-   APT::VersionSet const verset = APT::VersionSet::FromCommandLine(CacheFile, CmdL.FileList + 1, select, helper);
-   for (APT::VersionSet::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver)
+   APT::VersionList::Version const select = _config->FindB("APT::Cache::AllVersions", true) ?
+                       APT::VersionList::ALL : APT::VersionList::CANDIDATE;
+   APT::VersionList const verset = APT::VersionList::FromCommandLine(CacheFile, CmdL.FileList + 1, select, helper);
+   for (APT::VersionList::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver)
       if (DisplayRecord(CacheFile, Ver) == false)
         return false;
 
@@ -1531,8 +1531,8 @@ bool Policy(CommandLine &CmdL)
 
    // Print out detailed information for each package
    APT::CacheSetHelper helper(true, GlobalError::NOTICE);
-   APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1, helper);
-   for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+   APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1, helper);
+   for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
    {
       cout << Pkg.FullName(true) << ":" << endl;
 
@@ -1608,8 +1608,8 @@ bool Madison(CommandLine &CmdL)
    for (const char **I = CmdL.FileList + 1; *I != 0; I++)
    {
       _error->PushToStack();
-      APT::PackageSet pkgset = APT::PackageSet::FromString(CacheFile, *I, helper);
-      for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+      APT::PackageList pkgset = APT::PackageList::FromString(CacheFile, *I, helper);
+      for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
       {
          for (pkgCache::VerIterator V = Pkg.VersionList(); V.end() == false; ++V)
          {
index 94f6ee9b0f88f2a8d59c5622402e262b45449482..47bedfe3f4d10280465720264a92aa8a0711f353 100644 (file)
@@ -134,6 +134,22 @@ int main(int argc,const char *argv[])                                      /*{{{*/
    for (std::vector<std::string>::const_iterator a = archs.begin(); a != archs.end(); ++a)
       _config->Set("APT::Architectures::", *a);
 
+   std::vector<APT::Configuration::Compressor> const compressors = APT::Configuration::getCompressors();
+   _config->Clear("APT::Compressor");
+   string conf = "APT::Compressor::";
+   for (std::vector<APT::Configuration::Compressor>::const_iterator c = compressors.begin(); c != compressors.end(); ++c)
+   {
+      string comp = conf + c->Name + "::";
+      _config->Set(comp + "Name", c->Name);
+      _config->Set(comp + "Extension", c->Extension);
+      _config->Set(comp + "Binary", c->Binary);
+      _config->Set(std::string(comp + "Cost").c_str(), c->Cost);
+      for (std::vector<std::string>::const_iterator a = c->CompressArgs.begin(); a != c->CompressArgs.end(); ++a)
+        _config->Set(comp + "CompressArg::", *a);
+      for (std::vector<std::string>::const_iterator a = c->UncompressArgs.begin(); a != c->UncompressArgs.end(); ++a)
+        _config->Set(comp + "UncompressArg::", *a);
+   }
+
    // Match the operation
    CmdL.DispatchArg(Cmds);
    
index d0f90d3f490fbac49cf827caf8169723bcf4d74a..6d07a09c20e50d684e4d04dc923e930607b4a3d7 100644 (file)
@@ -14,6 +14,8 @@
 #include <apt-pkg/pkgcache.h>
 #include <apt-pkg/dirstream.h>
 
+#include <string>
+
 class DebFile : public pkgDirStream
 {
        FileFd File;
@@ -31,11 +33,11 @@ public:
        bool Go();
        bool ParseInfo();
 
-       static string GetInstalledVer(const string &package);
+       static std::string GetInstalledVer(const std::string &package);
 
-       string Package;
-       string Version;
-       string DepVer, PreDepVer;
+       std::string Package;
+       std::string Version;
+       std::string DepVer, PreDepVer;
        unsigned int DepOp, PreDepOp;
 
        char *Config;
index 1925dea87102aac6082f0a61ac9b1a5a9948377c..ca1169401a7b488a0f8a3f3c01c959e51faae15b 100644 (file)
@@ -628,20 +628,18 @@ public:
                explicitlyNamed = true;
        }
 
-       virtual void showTaskSelection(APT::PackageSet const &pkgset, string const &pattern) {
-               for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
-                       ioprintf(out, _("Note, selecting '%s' for task '%s'\n"),
-                                Pkg.FullName(true).c_str(), pattern.c_str());
+       virtual void showTaskSelection(pkgCache::PkgIterator const &Pkg, string const &pattern) {
+               ioprintf(out, _("Note, selecting '%s' for task '%s'\n"),
+                               Pkg.FullName(true).c_str(), pattern.c_str());
                explicitlyNamed = false;
        }
-       virtual void showRegExSelection(APT::PackageSet const &pkgset, string const &pattern) {
-               for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
-                       ioprintf(out, _("Note, selecting '%s' for regex '%s'\n"),
-                                Pkg.FullName(true).c_str(), pattern.c_str());
+       virtual void showRegExSelection(pkgCache::PkgIterator const &Pkg, string const &pattern) {
+               ioprintf(out, _("Note, selecting '%s' for regex '%s'\n"),
+                               Pkg.FullName(true).c_str(), pattern.c_str());
                explicitlyNamed = false;
        }
        virtual void showSelectedVersion(pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const Ver,
-                                string const &ver, bool const &verIsRel) {
+                                string const &ver, bool const verIsRel) {
                if (ver == Ver.VerStr())
                        return;
                selectedByRelease.push_back(make_pair(Ver, ver));
@@ -707,7 +705,7 @@ public:
                APT::VersionSet const verset = tryVirtualPackage(Cache, Pkg, APT::VersionSet::CANDIDATE);
                if (verset.empty() == false)
                        return *(verset.begin());
-               if (ShowError == true) {
+               else if (ShowError == true) {
                        _error->Error(_("Package '%s' has no installation candidate"),Pkg.FullName(true).c_str());
                        virtualPkgs.insert(Pkg);
                }
@@ -744,6 +742,19 @@ public:
                                Prov = PPkg;
                                found_one = true;
                        } else if (PPkg != Prov) {
+                               // same group, so it's a foreign package
+                               if (PPkg->Group == Prov->Group) {
+                                       // do we already have the requested arch?
+                                       if (strcmp(Pkg.Arch(), Prov.Arch()) == 0 ||
+                                           strcmp(Prov.Arch(), "all") == 0 ||
+                                           unlikely(strcmp(PPkg.Arch(), Prov.Arch()) == 0)) // packages have only on candidate, but just to be sure
+                                               continue;
+                                       // see which architecture we prefer more and switch to it
+                                       std::vector<std::string> archs = APT::Configuration::getArchitectures();
+                                       if (std::find(archs.begin(), archs.end(), PPkg.Arch()) < std::find(archs.begin(), archs.end(), Prov.Arch()))
+                                               Prov = PPkg;
+                                       continue;
+                               }
                                found_one = false; // we found at least two
                                break;
                        }
@@ -769,7 +780,7 @@ struct TryToInstall {
    unsigned long AutoMarkChanged;
    APT::PackageSet doAutoInstallLater;
 
-   TryToInstall(pkgCacheFile &Cache, pkgProblemResolver *PM, bool const &FixBroken) : Cache(&Cache), Fix(PM),
+   TryToInstall(pkgCacheFile &Cache, pkgProblemResolver *PM, bool const FixBroken) : Cache(&Cache), Fix(PM),
                        FixBroken(FixBroken), AutoMarkChanged(0) {};
 
    void operator() (pkgCache::VerIterator const &Ver) {
@@ -2295,8 +2306,8 @@ bool DoDownload(CommandLine &CmdL)
       return false;
    
    APT::CacheSetHelper helper(c0out);
-   APT::VersionSet verset = APT::VersionSet::FromCommandLine(Cache,
-               CmdL.FileList + 1, APT::VersionSet::CANDIDATE, helper);
+   APT::VersionList verset = APT::VersionList::FromCommandLine(Cache,
+               CmdL.FileList + 1, APT::VersionList::CANDIDATE, helper);
 
    if (verset.empty() == true)
       return false;
@@ -2308,7 +2319,7 @@ bool DoDownload(CommandLine &CmdL)
 
    pkgRecords Recs(Cache);
    pkgSourceList *SrcList = Cache.GetSourceList();
-   for (APT::VersionSet::const_iterator Ver = verset.begin(); 
+   for (APT::VersionList::const_iterator Ver = verset.begin(); 
         Ver != verset.end(); 
         ++Ver) 
    {
@@ -3167,14 +3178,14 @@ bool DoChangelog(CommandLine &CmdL)
       return false;
    
    APT::CacheSetHelper helper(c0out);
-   APT::VersionSet verset = APT::VersionSet::FromCommandLine(Cache,
-               CmdL.FileList + 1, APT::VersionSet::CANDIDATE, helper);
+   APT::VersionList verset = APT::VersionList::FromCommandLine(Cache,
+               CmdL.FileList + 1, APT::VersionList::CANDIDATE, helper);
    if (verset.empty() == true)
       return false;
    pkgAcquire Fetcher;
 
    if (_config->FindB("APT::Get::Print-URIs", false) == true)
-      for (APT::VersionSet::const_iterator Ver = verset.begin();
+      for (APT::VersionList::const_iterator Ver = verset.begin();
           Ver != verset.end(); ++Ver)
         return DownloadChangelog(Cache, Fetcher, Ver, "");
 
@@ -3197,7 +3208,7 @@ bool DoChangelog(CommandLine &CmdL)
         return _error->Errno("mkdtemp", "mkdtemp failed");
    }
 
-   for (APT::VersionSet::const_iterator Ver = verset.begin(); 
+   for (APT::VersionList::const_iterator Ver = verset.begin(); 
         Ver != verset.end(); 
         ++Ver) 
    {
index 9a628d71499dedca6f264bde3acc8bfb35d1eae2..c7d9b6f6aeb06db4f03a0dd9a093381810103bc8 100644 (file)
@@ -35,14 +35,14 @@ bool DoAuto(CommandLine &CmdL)
    if (unlikely(Cache == NULL || DepCache == NULL))
       return false;
 
-   APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1);
+   APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1);
    if (pkgset.empty() == true)
       return _error->Error(_("No packages found"));
 
    bool MarkAuto = strcasecmp(CmdL.FileList[0],"auto") == 0;
    int AutoMarkChanged = 0;
 
-   for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+   for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
    {
       if (Pkg->CurrentVer == 0)
       {
@@ -82,7 +82,7 @@ bool DoMarkAuto(CommandLine &CmdL)
    if (unlikely(Cache == NULL || DepCache == NULL))
       return false;
 
-   APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1);
+   APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1);
    if (pkgset.empty() == true)
       return _error->Error(_("No packages found"));
 
@@ -90,7 +90,7 @@ bool DoMarkAuto(CommandLine &CmdL)
    bool const Verbose = _config->FindB("APT::MarkAuto::Verbose", false);
    int AutoMarkChanged = 0;
 
-   for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+   for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
    {
       if (Pkg->CurrentVer == 0 ||
          (((*DepCache)[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == MarkAuto)
@@ -158,13 +158,13 @@ bool DoHold(CommandLine &CmdL)
    if (unlikely(Cache == NULL))
       return false;
 
-   APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1);
+   APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1);
    if (pkgset.empty() == true)
       return _error->Error(_("No packages found"));
 
    bool const MarkHold = strcasecmp(CmdL.FileList[0],"hold") == 0;
 
-   for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+   for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
    {
       if ((Pkg->SelectedState == pkgCache::State::Hold) == MarkHold)
       {
@@ -182,7 +182,7 @@ bool DoHold(CommandLine &CmdL)
 
    if (_config->FindB("APT::Mark::Simulate", false) == true)
    {
-      for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+      for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
       {
         if (MarkHold == false)
            ioprintf(c1out,_("%s set on hold.\n"), Pkg.FullName(true).c_str());
@@ -202,7 +202,7 @@ bool DoHold(CommandLine &CmdL)
    if (dpkg == NULL)
       return _error->Errno("DoHold", "fdopen on dpkg stdin failed");
 
-   for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+   for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
    {
       if (MarkHold == true)
       {
index c2602cf3651d893b8bf3ac73842e412b780cc34a..065afccf1f47f9e6d519d864a3cea9657ee4dea7 100644 (file)
@@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.8.16~exp6")
+AC_DEFINE_UNQUOTED(VERSION,"0.8.16~exp9")
 PACKAGE="apt"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_SUBST(PACKAGE)
index e6389dd06e88da9e66b7e2853eab210cb3b5b8a1..06c84f31c02d219e2d93b02003f1645c72f31b9e 100644 (file)
@@ -1,6 +1,51 @@
+apt (0.8.16~exp9) UNRELEASED; urgency=low
+
+  [ Julian Andres Klode ]
+  * apt-pkg/cdrom.cc:
+    - Accept .bz2, .xz files in addition to .gz files (Closes: #649451)
+
+  [ Michael Vogt ]
+  * apt-pkg/cdrom.cc:
+    - use aptconfiguration to get the supported compression types
+  * debian/control:
+    - bump debhelper build-dep to debhelper (>= 8.1.3~)
+    - set libapt-pkg-dev to multi-arch: same too
+
+  [ Colin Watson ]
+  * Convert libapt-pkg4.12 and libapt-inst1.4 to Multi-Arch: same.
+
+  [ David Kalnischkies ]
+  * apt-pkg/cacheset.cc:
+    - make the cachesets real containers which can embedding any container
+      to be able to use the same interface regardless of set or list usage
+    - provide a {Package,Version}List similar to {Package,Version}Set
+  * cmdline/apt-{get,cache,mark}.cc:
+    - use Lists instead of Sets if input order should be preserved for
+      commands accepting lists of packages, e.g. policy (Closes: #625960)
+  * apt-pkg/depcache.cc:
+    - prefer native providers over foreigns even if the chain is foreign
+  * cmdline/apt-get.cc:
+    - ignore foreign architectures if we check if a provides has only one
+      resolver as it's basically the same for the user, so no need to choose
+  * cmdline/apt-config.cc:
+    - dump the APT::Compressor settings correctly and completely
+  * apt-pkg/contrib/fileutl.{h,cc}:
+    - implement a ModificationTime method for FileFd
+    - add a ReadLine method
+    - drop the explicit export of gz-compression handling
+  * apt-pkg/cdrom.cc:
+    - support InRelease files on cdrom
+  
+  [ Michael Vogt ]
+  * g++ 4.7 fixes
+
+ -- David Kalnischkies <kalnischkies@gmail.com>  Sun, 11 Dec 2011 19:34:58 +0100
+
 apt (0.8.16~exp8) experimental; urgency=low
 
   [ David Kalnischkies ]
+  * algorithms.cc:
+    - show a debug why a package was kept by ResolveByKeep()
   * apt-pkg/packagemanager.cc:
     - do not fail on unpacked packages in SmartUnPack, just don't
       shedule them for unpack, but do all checks and configure them
@@ -9,9 +54,6 @@ apt (0.8.16~exp8) experimental; urgency=low
     - use a pointer-union to peace gcc strict-aliasing warning
   * apt-pkg/deb/deblistparser.cc:
     - M-A: foreign packages provide for other archs, too
-  
-  [ Michael Vogt ]
-  * g++ 4.7 fixes
 
  -- David Kalnischkies <kalnischkies@gmail.com>  Thu, 03 Nov 2011 09:40:29 -0500
 
@@ -199,13 +241,25 @@ apt (0.8.16~exp1) experimental; urgency=low
 
  -- Michael Vogt <mvo@debian.org>  Wed, 29 Jun 2011 12:40:31 +0200
 
-apt (1.8.15.9+nmu1) unstable; urgency=low
+apt (0.8.15.10) UNRELEASEDunstable; urgency=low
 
   [ David Kalnischkies ]
   * algorithms.cc:
     - show a debug why a package was kept by ResolveByKeep()
+  * doc/manpage-style.xml:
+    - put <brackets> around email addresses
+  * doc/po/de.po:
+    - apply typo-fix from Michael Basse, thanks! (LP: #900770)
+
+  [ Chris Leick ]
+  * German manpage translation update
+  * doc/*.xml:
+    - find and fix a bunch of misspellings
+
+  [ Program translation updatex ]
+  * Dutch (Jeroen Schot). Closes: #652230
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Mon, 17 Oct 2011 16:36:22 +0200
+ -- David Kalnischkies <kalnischkies@gmail.com>  Tue, 06 Dec 2011 16:35:39 +0100
 
 apt (0.8.15.9) unstable; urgency=low
 
index 7efb6ca8ab980ffa982655b5342f071b4657f54c..03d74c51f3dbbff69fb52f4f88cc64a862d466a2 100644 (file)
@@ -6,7 +6,7 @@ Uploaders: Michael Vogt <mvo@debian.org>, Otavio Salvador <otavio@debian.org>,
  Christian Perrier <bubulle@debian.org>, Daniel Burrows <dburrows@debian.org>,
  Julian Andres Klode <jak@debian.org>
 Standards-Version: 3.9.2
-Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 7.2.3~), libdb-dev,
+Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 8.1.3~), libdb-dev,
  gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), 
  zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, 
  po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen
@@ -37,6 +37,8 @@ Description: APT's commandline package manager
 
 Package: libapt-pkg4.12
 Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Description: APT's package managment runtime library
  This library provides the common functionality for searching and
@@ -56,6 +58,8 @@ Description: APT's package managment runtime library
 
 Package: libapt-inst1.4
 Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Description: APT's deb package format runtime library
  This library provides methods to query and extract information 
@@ -73,7 +77,9 @@ Description: Documentation for APT
 
 Package: libapt-pkg-dev
 Architecture: any
+Multi-Arch: same
 Priority: optional
+Pre-Depends: ${misc:Pre-Depends}
 Depends: ${libapt-pkg-name} (= ${binary:Version}), ${libapt-inst-name} (= ${binary:Version}), ${misc:Depends}, zlib1g-dev | zlib-dev
 Section: libdevel
 Description: Development files for APT's libapt-pkg and libapt-inst
diff --git a/debian/libapt-inst1.4.install b/debian/libapt-inst1.4.install
deleted file mode 100644 (file)
index b7b63be..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-bin/libapt-inst*.so.* usr/lib/
-usr/share/locale/*/*/libapt-inst*.mo
diff --git a/debian/libapt-inst1.4.install.in b/debian/libapt-inst1.4.install.in
new file mode 100644 (file)
index 0000000..8bcce2c
--- /dev/null
@@ -0,0 +1,2 @@
+bin/libapt-inst*.so.* usr/lib/@DEB_HOST_MULTIARCH@/
+usr/share/locale/*/*/libapt-inst*.mo
diff --git a/debian/libapt-pkg-dev.dirs b/debian/libapt-pkg-dev.dirs
deleted file mode 100644 (file)
index 844642a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/lib
-usr/include/apt-pkg
diff --git a/debian/libapt-pkg-dev.install b/debian/libapt-pkg-dev.install
deleted file mode 100644 (file)
index bd1a6c1..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-bin/libapt-pkg*.so usr/lib/
-bin/libapt-inst*.so usr/lib/
-include/apt-pkg/*.h usr/include/apt-pkg/
diff --git a/debian/libapt-pkg-dev.install.in b/debian/libapt-pkg-dev.install.in
new file mode 100644 (file)
index 0000000..be80221
--- /dev/null
@@ -0,0 +1,3 @@
+bin/libapt-pkg*.so usr/lib/@DEB_HOST_MULTIARCH@/
+bin/libapt-inst*.so usr/lib/@DEB_HOST_MULTIARCH@/
+include/apt-pkg/*.h usr/include/apt-pkg/
diff --git a/debian/libapt-pkg4.12.install b/debian/libapt-pkg4.12.install
deleted file mode 100644 (file)
index 91b39a3..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-bin/libapt-pkg*.so.* usr/lib/
-usr/share/locale/*/*/libapt-pkg*.mo
diff --git a/debian/libapt-pkg4.12.install.in b/debian/libapt-pkg4.12.install.in
new file mode 100644 (file)
index 0000000..56bed39
--- /dev/null
@@ -0,0 +1,2 @@
+bin/libapt-pkg*.so.* usr/lib/@DEB_HOST_MULTIARCH@/
+usr/share/locale/*/*/libapt-pkg*.mo
index 30474c06b71fb4cd9ac6adbd7a70a45119e97e52..4ef5bb47aa4f85f5250d94e2dfa0215b975aa075 100755 (executable)
@@ -5,6 +5,7 @@
 
 export DEB_HOST_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
 export DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+export DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
 
 # FOR AUTOCONF 2.52 AND NEWER ONLY
 ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
@@ -118,6 +119,11 @@ clean:
 
        [ ! -f Makefile ] || $(MAKE) clean distclean
        rm -rf build
+       rm -f debian/$(LIBAPT_PKG).install debian/$(LIBAPT_INST).install \
+             debian/libapt-pkg-dev.install
+
+debian/%.install: debian/%.install.in
+       sed 's/@DEB_HOST_MULTIARCH@/$(DEB_HOST_MULTIARCH)/g' $< > $@
 
 binary-indep: apt-doc libapt-pkg-doc
 # Build architecture-independent files here.
@@ -217,7 +223,7 @@ apt: build build-doc
        dh_md5sums -p$@
        dh_builddeb -p$@
 
-libapt-pkg-dev: build
+libapt-pkg-dev: build debian/libapt-pkg-dev.install
        dh_testdir -p$@
        dh_testroot -p$@
        dh_prep -p$@
@@ -265,7 +271,7 @@ apt-utils: build
        dh_md5sums -p$@
        dh_builddeb -p$@
 
-$(LIBAPT_PKG): build
+$(LIBAPT_PKG): build debian/$(LIBAPT_PKG).install
        dh_testdir -p$@
        dh_testroot -p$@
        dh_prep -p$@
@@ -284,7 +290,7 @@ $(LIBAPT_PKG): build
        dh_md5sums -p$@
        dh_builddeb -p$@
 
-$(LIBAPT_INST): build
+$(LIBAPT_INST): build debian/$(LIBAPT_INST).install
        dh_testdir -p$@
        dh_testroot -p$@
        dh_prep -p$@
index 03a418e5c2adbd744e30d56da9c2cdc5cfbc43c7..fd1cd254019882b24cc72acf4c521619c000cb4b 100644 (file)
      <varlistentry><term>build-dep</term>
      <listitem><para><literal>build-dep</literal> causes apt-get to install/remove packages in an 
      attempt to satisfy the build dependencies for a source package. By default the dependencies are
-     satisfied to build the package nativly. If desired a host-architecture can be specified
+     satisfied to build the package natively. If desired a host-architecture can be specified
      with the <option>--host-architecture</option> option instead.</para></listitem>
      </varlistentry>
 
                    <term><option>--host-architecture</option></term>
      <listitem><para>This option controls the architecture packages are built for
      by <command>apt-get source --compile</command> and how cross-builddependencies
-     are satisfied. By default is not set which means that the host architecture
-     is the same as the build architecture (which is defined by <literal>APT::Architecture</literal>)
+     are satisfied. By default is it not set which means that the host architecture
+     is the same as the build architecture (which is defined by <literal>APT::Architecture</literal>).
      Configuration Item: <literal>APT::Get::Host-Architecture</literal>
      </para></listitem>
      </varlistentry>
index f17f0c45e730e07b52ed8f6b4029483eb33781b6..cae2b00a0ef60853721e8db4a1c4d297803d44a8 100644 (file)
       <listitem><para>With this option it is possible to specify a specific keyring
       file the command should operate on. The default is that a command is executed
       on the <filename>trusted.gpg</filename> file as well as on all parts in the
-      <filename>trusted.gpg.d</filename> directory, through <filename>trusted.gpg</filename>
+      <filename>trusted.gpg.d</filename> directory, though <filename>trusted.gpg</filename>
       is the primary keyring which means that e.g. new keys are added to this one.
       </para></listitem>
       </varlistentry>
index d7d56f3a14d12b8f65a4599b24133c9e57b641fb..c2220b1bf166ed30759c56c068e4d0e5717a55f4 100644 (file)
@@ -281,7 +281,7 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};
         valid after it was created (indicated by the <literal>Date</literal> header).
         Use this if you need to use a seldomly updated (local) mirror of a more
         regular updated archive with a <literal>Valid-Until</literal> header
-        instead of competely disabling the expiration date checking.
+        instead of completely disabling the expiration date checking.
         Archive specific settings can and should be used by appending the label of
         the archive to the option name.
         </para></listitem>
index f1024c4f4e9bba665e21bb5f928ce9840d34f40e..85aa4521f22f8097c76d3516ae7acb649f15f92c 100644 (file)
@@ -6,4 +6,6 @@
 
 <xsl:param name="man.output.encoding" select="'UTF-8'" />
 
+<xsl:template match="email">&lt;<xsl:apply-templates/>&gt;</xsl:template>
+
 </xsl:stylesheet>
index 1c3ab0e9042a4d174cbb9d45379ca90f81dd5fb2..9a3415051c81bd24034eb886cc76aee00d30aea3 100644 (file)
@@ -5,10 +5,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: apt-doc 0.8.14-1\n"
+"Project-Id-Version: apt-doc 0.8.15-9\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
 "POT-Creation-Date: 2011-06-08 16:54+0300\n"
-"PO-Revision-Date: 2011-05-31 21:00+0100\n"
+"PO-Revision-Date: 2011-11-13 11:21+0100\n"
 "Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
 "Language-Team: German <debian-l10n-german@lists.debian.org>\n"
 "Language: de\n"
@@ -99,7 +99,7 @@ msgstr "DIAGNOSE"
 #. type: Plain text
 #: apt.8:40
 msgid "apt returns zero on normal operation, decimal 100 on error."
-msgstr "apt gibt bei normalen Operationen 0 zurück, dezimal 100 bei Fehlern."
+msgstr "APT gibt bei normalen Operationen 0 zurück, dezimal 100 bei Fehlern."
 
 #. type: SH
 #: apt.8:40
@@ -132,7 +132,7 @@ msgstr "AUTOR"
 #. type: Plain text
 #: apt.8:52
 msgid "apt was written by the APT team E<lt>apt@packages.debian.orgE<gt>."
-msgstr "apt wurde vom APT-Team E<lt>apt@packages.debian.orgE<gt> geschrieben."
+msgstr "APT wurde vom APT-Team E<lt>apt@packages.debian.orgE<gt> geschrieben."
 
 #. type: Plain text
 #: apt.ent:2
@@ -1051,7 +1051,7 @@ msgstr ""
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-cache.8.xml:197
 msgid "search <replaceable>regex [ regex ... ]</replaceable>"
-msgstr "search <replaceable>regex [ regex ... ]</replaceable>"
+msgstr "search <replaceable>regex [ regex  ]</replaceable>"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-cache.8.xml:198
@@ -1399,7 +1399,7 @@ msgstr "<option>--no-enhances</option>"
 #, fuzzy
 #| msgid ""
 #| "Per default the <literal>depends</literal> and <literal>rdepends</"
-#| "literal> print all dependencies. This can be twicked with these flags "
+#| "literal> print all dependencies. This can be tweaked with these flags "
 #| "which will omit the specified dependency type.  Configuration Item: "
 #| "<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></"
 #| "literal> e.g. <literal>APT::Cache::ShowRecommends</literal>."
@@ -1411,10 +1411,11 @@ msgid ""
 "Cache::ShowRecommends</literal>."
 msgstr ""
 "Standardmäßig geben <literal>depends</literal> und <literal>rdepends</"
-"literal> alle Abhängigkeiten aus. Dies kann mit diesen Schaltern überlistet "
+"literal> alle Abhängigkeiten aus. Dies kann mit diesen Schaltern optimiert "
 "werden, die den angegebenen Abhängigkeitstyp weglassen. "
-"Konfigurationselement: <literal>APT::Cache::Show<replaceable>DependencyType</"
-"replaceable></literal> z.B. <literal>APT::Cache::ShowRecommends</literal>."
+"Konfigurationselement: <literal>APT::Cache::"
+"Show<replaceable>Abhängigkeitstyp</replaceable></literal> z.B. <literal>APT::"
+"Cache::ShowRecommends</literal>."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-cache.8.xml:323 apt-cdrom.8.xml:124 apt-get.8.xml:350
@@ -1890,7 +1891,7 @@ msgstr ""
 "<command>apt-config</command><arg><option>-hv</option></arg><arg><option>-"
 "o=<replaceable>Konfigurationszeichenkette</replaceable></option></"
 "arg><arg><option>-c=<replaceable>Datei</replaceable></option></arg><group "
-"choice=\"req\"> <arg>shell</arg> <arg>Abbild</arg> </group>"
+"choice=\"req\"> <arg>shell</arg> <arg>dump</arg> </group>"
 
 #. type: Content of: <refentry><refsect1><para>
 #: apt-config.8.xml:51
@@ -3403,11 +3404,13 @@ msgstr "APT-Werkzeug für den Umgang mit Paketen -- Befehlszeilenschnittstelle"
 #| "<option>-o= <replaceable>config_string</replaceable> </option> </arg> "
 #| "<arg> <option>-c= <replaceable>config_file</replaceable> </option> </arg> "
 #| "<arg> <option>-t=</option> <arg choice='plain'> "
-#| "<replaceable>target_release</replaceable> </arg> </arg> <group choice="
-#| "\"req\"> <arg choice='plain'>update</arg> <arg choice='plain'>upgrade</"
-#| "arg> <arg choice='plain'>dselect-upgrade</arg> <arg choice='plain'>dist-"
-#| "upgrade</arg> <arg choice='plain'>install <arg choice=\"plain\" rep="
-#| "\"repeat\"><replaceable>pkg</replaceable> <arg> <group choice='req'> <arg "
+#| "<replaceable>target_release</replaceable> </arg> </arg> <arg> <option>-"
+#| "a=</option> <arg choice='plain'> <replaceable>default_architecture</"
+#| "replaceable> </arg> </arg> <group choice=\"req\"> <arg "
+#| "choice='plain'>update</arg> <arg choice='plain'>upgrade</arg> <arg "
+#| "choice='plain'>dselect-upgrade</arg> <arg choice='plain'>dist-upgrade</"
+#| "arg> <arg choice='plain'>install <arg choice=\"plain\" rep=\"repeat"
+#| "\"><replaceable>pkg</replaceable> <arg> <group choice='req'> <arg "
 #| "choice='plain'> =<replaceable>pkg_version_number</replaceable> </arg> "
 #| "<arg choice='plain'> /<replaceable>target_release</replaceable> </arg> </"
 #| "group> </arg> </arg> </arg> <arg choice='plain'>remove <arg choice=\"plain"
@@ -3458,16 +3461,17 @@ msgstr ""
 "<option>-o= <replaceable>Konfigurationszeichenkette</replaceable> </option> "
 "</arg> <arg> <option>-c= <replaceable>Konfigurationsdatei</replaceable> </"
 "option> </arg> <arg> <option>-t=</option> <arg choice='plain'> "
-"<replaceable>Ziel-Release</replaceable> </arg> </arg> <group choice=\"req\"> "
-"<arg choice='plain'>update</arg> <arg choice='plain'>upgrade</arg> <arg "
-"choice='plain'>dselect-upgrade</arg> <arg choice='plain'>dist-upgrade</arg> "
-"<arg choice='plain'>install <arg choice=\"plain\" rep=\"repeat"
-"\"><replaceable>Paket</replaceable> <arg> <group choice='req'> <arg "
-"choice='plain'> =<replaceable>Paket-Versionsnummer</replaceable> </arg> <arg "
-"choice='plain'> /<replaceable>Ziel-Release</replaceable> </arg> </group> </"
-"arg> </arg> </arg> <arg choice='plain'>remove <arg choice=\"plain\" rep="
-"\"repeat\"><replaceable>Paket</replaceable></arg></arg> <arg "
-"choice='plain'>purge <arg choice=\"plain\" rep=\"repeat"
+"<replaceable>Ziel-Release</replaceable> </arg> </arg> <arg> <option>-a=</"
+"option> <arg choice='plain'> <replaceable>Vorgabearchitektur</replaceable> </"
+"arg> </arg> <group choice=\"req\"> <arg choice='plain'>update</arg> <arg "
+"choice='plain'>upgrade</arg> <arg choice='plain'>dselect-upgrade</arg> <arg "
+"choice='plain'>dist-upgrade</arg> <arg choice='plain'>install <arg choice="
+"\"plain\" rep=\"repeat\"><replaceable>Paket</replaceable> <arg> <group "
+"choice='req'> <arg choice='plain'> =<replaceable>Paket-Versionsnummer</"
+"replaceable> </arg> <arg choice='plain'> /<replaceable>Ziel-Release</"
+"replaceable> </arg> </group> </arg> </arg> </arg> <arg choice='plain'>remove "
+"<arg choice=\"plain\" rep=\"repeat\"><replaceable>Paket</replaceable></arg></"
+"arg> <arg choice='plain'>purge <arg choice=\"plain\" rep=\"repeat"
 "\"><replaceable>Paket</replaceable></arg></arg> <arg choice='plain'>source "
 "<arg choice=\"plain\" rep=\"repeat\"><replaceable>Paket</replaceable> <arg> "
 "<group choice='req'> <arg choice='plain'> =<replaceable>Paket-"
@@ -3800,18 +3804,20 @@ msgstr ""
 #| msgid ""
 #| "If the <option>--compile</option> option is specified then the package "
 #| "will be compiled to a binary .deb using <command>dpkg-buildpackage</"
-#| "command>, if <option>--download-only</option> is specified then the "
-#| "source package will not be unpacked."
+#| "command> for the architecture as defined by the <command>--host-"
+#| "architecture</command> option.  If <option>--download-only</option> is "
+#| "specified then the source package will not be unpacked."
 msgid ""
 "If the <option>--compile</option> option is specified then the package will "
 "be compiled to a binary .deb using <command>dpkg-buildpackage</command>, if "
 "<option>--download-only</option> is specified then the source package will "
 "not be unpacked."
 msgstr ""
-"Wenn die <option>--compile</option>-Option angegeben ist, dann wird das "
-"Paket unter Benutzung von <command>dpkg-buildpackage</command> zu einem "
-"binären .deb kompiliert, wenn <option>--download-only</option> angegeben "
-"ist, wird das Quellpaket nicht entpackt."
+"Falls die Option <option>--compile</option> angegeben ist, dann wird das "
+"Paket unter Benutzung von <command>dpkg-buildpackage</command> für die "
+"Architektur, die durch <command>--host-architecture</command> definiert ist, "
+"zu einem binären .deb kompiliert. Falls <option>--download-only</option> "
+"angegeben ist, wird das Quellpaket nicht entpackt."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:260
@@ -3850,14 +3856,20 @@ msgstr "build-dep"
 #, fuzzy
 #| msgid ""
 #| "<literal>build-dep</literal> causes apt-get to install/remove packages in "
-#| "an attempt to satisfy the build dependencies for a source package."
+#| "an attempt to satisfy the build dependencies for a source package. By "
+#| "default the dependencies are satisfied to build the package natively. If "
+#| "desired a host-architecture can be specified with the <option>--host-"
+#| "architecture</option> option instead."
 msgid ""
 "<literal>build-dep</literal> causes apt-get to install/remove packages in an "
 "attempt to satisfy the build dependencies for a source package."
 msgstr ""
 "<literal>build-dep</literal> veranlasst apt-get, Pakete zu installieren/"
-"entfernen, um zu versuchen, die Bauabhängigkeiten eines Quellpakets zu "
-"erfüllen."
+"entfernen, um zu versuchen, die Bau-Abhängigkeiten eines Quellpakets zu "
+"erfüllen. Standardmäßig werden die Abhängigkeiten erfüllt, um das Paket auf "
+"native Art zu bauen. Falls gewünscht, kann stattdessen eine "
+"Rechnerarchitektur mit der Option <option>--host-architecture</option> "
+"angegeben werden."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-get.8.xml:276
@@ -3945,16 +3957,16 @@ msgstr "autoremove"
 #, fuzzy
 #| msgid ""
 #| "<literal>autoremove</literal> is used to remove packages that were "
-#| "automatically installed to satisfy dependencies for some package and that "
-#| "are no more needed."
+#| "automatically installed to satisfy dependencies for other packages and "
+#| "are now no longer needed."
 msgid ""
 "<literal>autoremove</literal> is used to remove packages that were "
 "automatically installed to satisfy dependencies for some package and that "
 "are no more needed."
 msgstr ""
-"<literal>autoremove</literal> wird benutzt, um Pakete, die automatisch "
-"installiert wurden, um Abhängigkeiten für einige Pakete zu erfüllen und die "
-"nicht mehr benötigt werden, zu entfernen."
+"<literal>autoremove</literal> wird benutzt, um Pakete zu entfernen, die "
+"automatisch installiert wurden, um Abhängigkeiten für andere Pakete zu "
+"erfüllen und die nicht mehr benötigt werden."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-get.8.xml:312
@@ -4021,7 +4033,7 @@ msgid ""
 "Download only; package files are only retrieved, not unpacked or installed.  "
 "Configuration Item: <literal>APT::Get::Download-Only</literal>."
 msgstr ""
-"Nur herunterladen; Paketdateien werde nur heruntergeladen, nicht entpackt "
+"Nur herunterladen; Paketdateien werden nur heruntergeladen, nicht entpackt "
 "oder installiert. Konfigurationselement: <literal>APT::Get::Download-Only</"
 "literal>."
 
@@ -4780,25 +4792,35 @@ msgid ""
 "Update the local keyring with the keyring of Debian archive keys and removes "
 "from the keyring the archive keys which are no longer valid."
 msgstr ""
-"Den lokalen Schlüsselbund mit dem Schlüsselbund der Debian-Archivschlüssel "
-"aktualisieren und aus dem Schlüsselbund die Archivschlüssel entfernen, die "
-"nicht länger gültig sind."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-key.8.xml:140
-#, fuzzy
-#| msgid "update"
 msgid "net-update"
-msgstr "update"
+msgstr "net-update"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-key.8.xml:144
+#, fuzzy
+#| msgid ""
+#| "Work similar to the <command>update</command> command above, but get the "
+#| "archive keyring from an URI instead and validate it against a master "
+#| "key.  This requires an installed &wget; and an APT build configured to "
+#| "have a server to fetch from and a master keyring to validate.  APT in "
+#| "Debian does not support this command and relies on <command>update</"
+#| "command> instead, but Ubuntu's APT does."
 msgid ""
 "Update the local keyring with the keys of a key server and removes from the "
 "keyring the archive keys which are no longer valid. This requires an "
 "installed wget and an APT build configured to have a server to fetch from. "
 "APT in Debian does not support this command, but Ubuntu's APT does."
 msgstr ""
+"funktioniert ähnlich dem vorhergehenden Befehl <command>update</command>, "
+"bezieht aber den Archivschlüsselbund stattdessen von einer URI und bestätigt "
+"ihn anhand eines Master-Schlüssels. Dies erfordert ein installiertes &wget; "
+"und einen derart gebauten APT, bei dem ein Server konfiguriert ist, um den "
+"Master-Schlüsselbund zur Bestätigung abzuholen. APT unterstützt in Debian "
+"diesen Befehl nicht und beruht stattdessen auf <command>update</command>, in "
+"Ubuntu funktioniert dies aber."
 
 #. type: Content of: <refentry><refsect1><para>
 #: apt-key.8.xml:159
@@ -4816,6 +4838,14 @@ msgstr "--keyring <replaceable>Dateiname</replaceable>"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-key.8.xml:162
+#, fuzzy
+#| msgid ""
+#| "With this option it is possible to specify a specific keyring file the "
+#| "command should operate on. The default is that a command is executed on "
+#| "the <filename>trusted.gpg</filename> file as well as on all parts in the "
+#| "<filename>trusted.gpg.d</filename> directory, though <filename>trusted."
+#| "gpg</filename> is the primary keyring which means that e.g. new keys are "
+#| "added to this one."
 msgid ""
 "With this option it is possible to specify a specific keyring file the "
 "command should operate on. The default is that a command is executed on the "
@@ -4877,16 +4907,12 @@ msgstr "&apt-get;, &apt-secure;"
 #.  The last update date 
 #. type: Content of: <refentry><refentryinfo>
 #: apt-mark.8.xml:16
-#, fuzzy
-#| msgid ""
-#| "&apt-author.moconnor; &apt-author.team; &apt-email; &apt-product; <date>9 "
-#| "August 2009</date>"
 msgid ""
 "&apt-author.moconnor; &apt-author.team; &apt-email; &apt-product; <date>21 "
 "April 2011</date>"
 msgstr ""
-"&apt-author.moconnor; &apt-author.team; &apt-email; &apt-product; <date>9. "
-"August 2009</date>"
+"&apt-author.moconnor; &apt-author.team; &apt-email; &apt-product; <date>21. "
+"April 2011</date>"
 
 #. type: Content of: <refentry><refnamediv><refname>
 #: apt-mark.8.xml:25 apt-mark.8.xml:32
@@ -4902,14 +4928,6 @@ msgstr ""
 
 #. type: Content of: <refentry><refsynopsisdiv><cmdsynopsis>
 #: apt-mark.8.xml:39
-#, fuzzy
-#| msgid ""
-#| "  <command>apt-mark</command> <arg><option>-hv</option></arg> "
-#| "<arg><option>-f=<replaceable>FILENAME</replaceable></option></arg> <group "
-#| "choice=\"plain\"> <arg choice=\"plain\"> <group choice=\"req\"> <arg "
-#| "choice=\"plain\">markauto</arg> <arg choice=\"plain\">unmarkauto</arg> </"
-#| "group> <arg choice=\"plain\" rep=\"repeat\"><replaceable>package</"
-#| "replaceable></arg> </arg> <arg choice=\"plain\">showauto</arg> </group>"
 msgid ""
 "  <command>apt-mark</command> <arg><option>-hv</option></arg> <arg><option>-"
 "f=<replaceable>FILENAME</replaceable></option></arg> <group choice=\"plain"
@@ -4922,9 +4940,10 @@ msgstr ""
 "  <command>apt-mark</command> <arg><option>-hv</option></arg> <arg><option>-"
 "f=<replaceable>DATEINAME</replaceable></option></arg> <group choice=\"plain"
 "\"> <arg choice=\"plain\"> <group choice=\"req\"> <arg choice=\"plain"
-"\">markauto</arg> <arg choice=\"plain\">unmarkauto</arg> </group> <arg "
+"\">auto</arg> <arg choice=\"plain\">manual</arg> <arg choice=\"plain"
+"\">showauto</arg> <arg choice=\"plain\">showmanual</arg> </group> <arg "
 "choice=\"plain\" rep=\"repeat\"><replaceable>Paket</replaceable></arg> </"
-"arg> <arg choice=\"plain\">showauto</arg> </group>"
+"arg> </group>"
 
 #. type: Content of: <refentry><refsect1><para>
 #: apt-mark.8.xml:57
@@ -4953,52 +4972,40 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-mark.8.xml:69
-#, fuzzy
-#| msgid "markauto"
 msgid "auto"
-msgstr "markauto"
+msgstr "auto"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-mark.8.xml:70
-#, fuzzy
-#| msgid ""
-#| "<literal>markauto</literal> is used to mark a package as being "
-#| "automatically installed, which will cause the package to be removed when "
-#| "no more manually installed packages depend on this package."
 msgid ""
 "<literal>auto</literal> is used to mark a package as being automatically "
 "installed, which will cause the package to be removed when no more manually "
 "installed packages depend on this package."
 msgstr ""
-"<literal>markauto</literal> wird benutzt, um ein Paket als automatisch "
+"<literal>auto</literal> wird benutzt, um ein Paket als automatisch "
 "installiert zu markieren, was veranlasst, dass das Paket entfernt wird, wenn "
 "keine manuell installierten Pakete von ihm abhängen."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-mark.8.xml:77
 msgid "manual"
-msgstr ""
+msgstr "manual"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-mark.8.xml:78
-#, fuzzy
-#| msgid ""
-#| "<literal>unmarkauto</literal> is used to mark a package as being manually "
-#| "installed, which will prevent the package from being automatically "
-#| "removed if no other packages depend on it."
 msgid ""
 "<literal>manual</literal> is used to mark a package as being manually "
 "installed, which will prevent the package from being automatically removed "
 "if no other packages depend on it."
 msgstr ""
-"<literal>markauto</literal> wird benutzt, um ein Paket als manuell "
-"installiert zu markieren, was verhindert, dass das Paket automatisch "
-"entfernt wird, wenn kein anderes Paket von ihm abhängt."
+"<literal>manual</literal> wird benutzt, um ein Paket als manuell installiert "
+"zu markieren, was verhindert, dass das Paket automatisch entfernt wird, wenn "
+"kein anderes Paket von ihm abhängt."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-mark.8.xml:85
 msgid "hold"
-msgstr ""
+msgstr "hold"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-mark.8.xml:86
@@ -5009,24 +5016,26 @@ msgid ""
 "selections</command> and the state is therefore maintained by &dpkg; and not "
 "effected by the <option>--filename</option> option."
 msgstr ""
+"<literal>hold</literal> wird benutzt, um ein Paket als zurückgehalten zu "
+"markieren, was verhindert, dass das Paket automatisch installiert, ein "
+"Upgrade davon durchgeführt oder es entfernt wird. Der Befehl ist nur ein "
+"Wrapper um <command>dpkg --set-selections</command> und der Status wird "
+"daher durch &dpkg; verwaltet und nicht durch die Option <option>--filename</"
+"option>."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-mark.8.xml:95
 msgid "unhold"
-msgstr ""
+msgstr "unhold"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-mark.8.xml:96
-#, fuzzy
-#| msgid ""
-#| "<literal>showauto</literal> is used to print a list of automatically "
-#| "installed packages with each package on a new line."
 msgid ""
 "<literal>unhold</literal> is used to cancel a previously set hold on a "
 "package to allow all actions again."
 msgstr ""
-"<literal>showauto</literal> wird benutzt, um eine Liste automatisch "
-"installierter Pakete mit einem Paket in jeder neuen Zeile, auszugeben."
+"<literal>unhold</literal> wird benutzt, um ein vorher gesetztes »hold« auf "
+"ein Paket aufzuheben, um alle Aktionen wieder zu erlauben."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-mark.8.xml:101
@@ -5035,10 +5044,6 @@ msgstr "showauto"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-mark.8.xml:102
-#, fuzzy
-#| msgid ""
-#| "<literal>showauto</literal> is used to print a list of automatically "
-#| "installed packages with each package on a new line."
 msgid ""
 "<literal>showauto</literal> is used to print a list of automatically "
 "installed packages with each package on a new line.  All automatically "
@@ -5046,14 +5051,15 @@ msgid ""
 "given only those which are automatically installed will be shown."
 msgstr ""
 "<literal>showauto</literal> wird benutzt, um eine Liste automatisch "
-"installierter Pakete mit einem Paket in jeder neuen Zeile, auszugeben."
+"installierter Pakete – mit einem Paket in jeder neuen Zeile – auszugeben. "
+"Wenn kein Paket angegeben ist, werden alle automatisch installierten Pakete "
+"aufgelistet. Falls Pakete angegeben sind, werden nur diejenigen angezeigt, "
+"die automatisch installiert wurden."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-mark.8.xml:109
-#, fuzzy
-#| msgid "showauto"
 msgid "showmanual"
-msgstr "showauto"
+msgstr "showmanual"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-mark.8.xml:110
@@ -5062,26 +5068,23 @@ msgid ""
 "<literal>showauto</literal> except that it will print a list of manually "
 "installed packages instead."
 msgstr ""
+"<literal>showmanual</literal> kann auf die gleiche Weise wie "
+"<literal>showauto</literal> benutzt werden, mit der Ausnahme, dass es "
+"stattdessen eine Liste manuell installierter Pakete ausgibt."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-mark.8.xml:116
-#, fuzzy
-#| msgid "showauto"
 msgid "showhold"
-msgstr "showauto"
+msgstr "showhold"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-mark.8.xml:117
-#, fuzzy
-#| msgid ""
-#| "<literal>showauto</literal> is used to print a list of automatically "
-#| "installed packages with each package on a new line."
 msgid ""
 "<literal>showhold</literal> is used to print a list of packages on hold in "
 "the same way as for the other show commands."
 msgstr ""
-"<literal>showauto</literal> wird benutzt, um eine Liste automatisch "
-"installierter Pakete mit einem Paket in jeder neuen Zeile, auszugeben."
+"<literal>showhold</literal> wird benutzt, um eine Liste auf »hold« gesetzter "
+"Pakete auf die gleiche Art wie für andere Anzeigebefehle auszugeben."
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #: apt-mark.8.xml:130
@@ -5584,9 +5587,9 @@ msgstr ""
 #, fuzzy
 #| msgid ""
 #| "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
-#| "order which have no or \"<literal>conf</literal>\" as filename extension "
-#| "and which only contain alphanumeric, hyphen (-), underscore (_) and "
-#| "period (.) characters.  Otherwise APT will print a notice that it has "
+#| "order which have either no or \"<literal>conf</literal>\" as filename "
+#| "extension and which only contain alphanumeric, hyphen (-), underscore (_) "
+#| "and period (.) characters.  Otherwise APT will print a notice that it has "
 #| "ignored a file if the file doesn't match a pattern in the <literal>Dir::"
 #| "Ignore-Files-Silently</literal> configuration list - in this case it will "
 #| "be silently ignored."
@@ -5599,13 +5602,13 @@ msgid ""
 "literal> configuration list - in this case it will be silently ignored."
 msgstr ""
 "alle Dateien in <literal>Dir::Etc::Parts</literal> in aufsteigender "
-"alphanumerischer Reihenfolge, die kein »<literal>conf</literal>« als "
-"Dateinamenserweiterung haben und die nur alphanumerische Zeichen, "
-"Bindestriche (-), Unterstriche (_) und Punkte (.) enthalten. Andernfalls "
-"wird APT einen Hinweis ausgeben, dass es eine Datei ignoriert hat, falls die "
-"Datei nicht auf ein Muster in der Konfigurationsliste <literal>Dir::Ignore-"
-"Files-Silently</literal> passt – in diesem Fall wird sie stillschweigend "
-"ignoriert."
+"alphanumerischer Reihenfolge, die entweder keine oder »<literal>conf</"
+"literal>« als Dateinamenserweiterung haben und die nur alphanumerische "
+"Zeichen, Bindestriche (-), Unterstriche (_) und Punkte (.) enthalten. "
+"Andernfalls wird APT einen Hinweis ausgeben, dass es eine Datei ignoriert "
+"hat, falls die Datei nicht auf ein Muster in der Konfigurationsliste "
+"<literal>Dir::Ignore-Files-Silently</literal> passt – in diesem Fall wird "
+"sie stillschweigend ignoriert."
 
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #: apt.conf.5.xml:59
@@ -6148,15 +6151,13 @@ msgstr "Max-ValidTime"
 #: apt.conf.5.xml:261
 #, fuzzy
 #| msgid ""
-#| "Seconds the Release file should be considered valid after it was created. "
-#| "The default is \"for ever\" (0) if the Release file of the archive "
-#| "doesn't include a <literal>Valid-Until</literal> header.  If it does then "
-#| "this date is the default. The date from the Release file or the date "
-#| "specified by the creation time of the Release file (<literal>Date</"
-#| "literal> header) plus the seconds specified with this options are used to "
-#| "check if the validation of a file has expired by using the earlier date "
-#| "of the two. Archive specific settings can be made by appending the label "
-#| "of the archive to the option name."
+#| "Seconds the Release file should be considered valid after it was created "
+#| "(indicated by the <literal>Date</literal> header).  If the Release file "
+#| "itself includes a <literal>Valid-Until</literal> header the earlier date "
+#| "of the two is used as the expiration date.  The default value is "
+#| "<literal>0</literal> which stands for \"for ever\".  Archive specific "
+#| "settings can be made by appending the label of the archive to the option "
+#| "name."
 msgid ""
 "Seconds the Release file should be considered valid after it was created. "
 "The default is \"for ever\" (0) if the Release file of the archive doesn't "
@@ -6169,13 +6170,10 @@ msgid ""
 "name."
 msgstr ""
 "Sekunden, die die Release-Datei als gültig betrachtet werden sollte, nachdem "
-"sie erzeugt wurde. Vorgabe ist »für immer« (0), falls die Release-Datei des "
-"Archivs keine <literal>Valid-Until</literal>-Kopfzeile enthält. Falls dies "
-"so ist, ist dieses Datum vorgegeben. Das Datum aus der Release-Datei oder "
-"das Datum, das durch die Erstellungszeit der Release-Datei angegeben wurde "
-"(<literal>Date</literal>-Kopfzeile) plus die mit diesen Optionen angegebenen "
-"Sekunden werden benutzt, um zu prüfen, ob die Bestätigung einer Datei "
-"abgelaufen ist indem das neuere Datum der beiden benutzt wird. "
+"sie erzeugt wurde (angezeigt durch die Kopfzeile <literal>Date</literal>). "
+"Falls die Release-Datei selbst eine <literal>Valid-Until</literal>-Kopfzeile "
+"enhält, wird der frühere von beiden Terminen als Verfallsdatum benutzt. "
+"Vorgabewert ist <literal>0</literal>, was »für immer« bedeutet. "
 "Archivspezifische Einstellungen können durch Anhängen des Archivetiketts an "
 "die Option »name« vorgenommen werden."
 
@@ -6660,7 +6658,7 @@ msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
 #| "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 (the "
-#| "inbuilt) setting is <placeholder type=\"literallayout\" id=\"0\"/> Note "
+#| "inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> Note "
 #| "also that list entries specified on the command line 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 "
@@ -6681,8 +6679,8 @@ msgid ""
 msgstr ""
 "Beachten Sie, dass <literal>Dir::Bin::<replaceable>Methodenname</"
 "replaceable></literal> zur Laufzeit geprüft wird: Falls diese Einstellung "
-"existiert, wird die Methode nur benutzt, wenn die Datei existiert, z.B. für "
-"die (integrierte) bzip2-Methode ist die Einstellung <placeholder type="
+"existiert, wird die Methode nur benutzt, wenn die Datei existiert, z.B. ist "
+"die Einstellung für die (integrierte) bzip2-Methode: <placeholder type="
 "\"literallayout\" id=\"0\"/>. Beachten Sie auch, dass auf der Befehlszeile "
 "eingegebenen Einträge an das Ende der Liste angehängt werden, die in den "
 "Konfigurationsdateien angegeben wurde, aber vor den Vorgabeeinträgen. Um "
@@ -7990,12 +7988,12 @@ msgstr ""
 #| msgid ""
 #| "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 #| "directory are parsed in alphanumeric ascending order and need to obey the "
-#| "following naming convention: The files have no or \"<literal>pref</"
-#| "literal>\" as filename extension and which only contain alphanumeric, "
-#| "hyphen (-), underscore (_) and period (.) characters.  Otherwise APT will "
-#| "print a notice that it has ignored a file if the file doesn't match a "
-#| "pattern in the <literal>Dir::Ignore-Files-Silently</literal> "
-#| "configuration list - in this case it will be silently ignored."
+#| "following naming convention: The files have either no or \"<literal>pref</"
+#| "literal>\" as filename extension and only contain alphanumeric, hyphen "
+#| "(-), underscore (_) and period (.) characters.  Otherwise APT will print "
+#| "a notice that it has ignored a file if the file doesn't match a pattern "
+#| "in the <literal>Dir::Ignore-Files-Silently</literal> configuration list - "
+#| "in this case it will be silently ignored."
 msgid ""
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "directory are parsed in alphanumeric ascending order and need to obey the "
@@ -8008,13 +8006,13 @@ msgid ""
 msgstr ""
 "Beachten Sie, dass die Dateien im Verzeichnis <filename>/etc/apt/preferences."
 "d</filename> in alphanumerisch aufsteigender Reihenfolge ausgewertet werden "
-"und der folgenden Namenskonvention unterliegen: Die Dateien haben keine oder "
-"<literal>»pref«</literal> als Dateierweiterung und sie enthalten nur "
-"alphanumerische Zeichen, Bindestriche (-), Unterstriche (_) oder Punkte (.). "
-"Andernfalls wird APT einen Hinweis ausgeben, dass es eine Datei ignoriert "
-"hat, falls die Datei nicht auf ein Muster in der Konfigurationsliste "
-"<literal>Dir::Ignore-Files-Silently</literal> passt – in diesem Fall wird "
-"sie stillschweigend ignoriert."
+"und der folgenden Namenskonvention unterliegen: Die Dateien haben entweder "
+"keine oder <literal>»pref«</literal> als Dateierweiterung und sie enthalten "
+"nur alphanumerische Zeichen, Bindestriche (-), Unterstriche (_) oder Punkte "
+"(.). Andernfalls wird APT einen Hinweis ausgeben, dass es eine Datei "
+"ignoriert hat, falls die Datei nicht auf ein Muster in der "
+"Konfigurationsliste <literal>Dir::Ignore-Files-Silently</literal> passt – in "
+"diesem Fall wird sie stillschweigend ignoriert."
 
 #. type: Content of: <refentry><refsect1><refsect2><title>
 #: apt_preferences.5.xml:79
@@ -8068,12 +8066,6 @@ msgstr "Priorität 1"
 
 #. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara>
 #: apt_preferences.5.xml:107
-#, fuzzy
-#| msgid ""
-#| "to the versions coming from archives which in their <filename>Release</"
-#| "filename> files are marked as \"NotAutomatic: yes\" but <emphasis>not</"
-#| "emphasis> as \"ButAutomaticUpgrades: yes\" like the debian "
-#| "<literal>experimental</literal> archive."
 msgid ""
 "to the versions coming from archives which in their <filename>Release</"
 "filename> files are marked as \"NotAutomatic: yes\" but <emphasis>not</"
@@ -8143,14 +8135,6 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><refsect2><para>
 #: apt_preferences.5.xml:132
-#, fuzzy
-#| msgid ""
-#| "If the target release has not been specified then APT simply assigns "
-#| "priority 100 to all installed package versions and priority 500 to all "
-#| "uninstalled package versions, except versions coming from archives which "
-#| "in their <filename>Release</filename> files are marked as \"NotAutomatic: "
-#| "yes\" - these versions get the priority 1 or priority 100 if it is "
-#| "additionally marked as \"ButAutomaticUpgrades: yes\"."
 msgid ""
 "If the target release has not been specified then APT simply assigns "
 "priority 100 to all installed package versions and priority 500 to all "
@@ -8162,7 +8146,7 @@ msgstr ""
 "Wenn das Ziel-Release nicht angegeben wurde, dann weist APT einfach allen "
 "installierten Paketversionen eine Priorität von 100 und allen nicht "
 "installierten Paketversionen eine Priorität von 500 zu, außer wenn Versionen "
-"aus Archiven kommen, die in deren <filename>Release<filename>-Dateien "
+"aus Archiven kommen, die in deren <filename>Release</filename>-Dateien mit "
 "»NotAutomatic: yes« markiert sind – diese Versionen erhalten die Priorität 1 "
 "oder die Priorität 100, falls sie zusätzlich als »ButAutomaticUpgrades: yes« "
 "markiert sind."
@@ -8785,13 +8769,13 @@ msgid ""
 "\"0\"/>"
 msgstr ""
 "Die <filename>Packages</filename>-Datei wird normalerweise im Verzeichnis "
-"<filename>.../dists/<replaceable>Distributions-Name</replaceable>/"
+"<filename>/dists/<replaceable>Distributions-Name</replaceable>/"
 "<replaceable>Komponente</replaceable>/<replaceable>Architektur</"
-"replaceable></filename> gefunden, zum Beispiel <filename>.../dists/stable/"
-"main/binary-i386/Packages</filename>. Sie besteht aus einer Serie "
-"mehrzeiliger Datensätze, einem für jedes verfügbare Paket in diesem "
-"Verzeichnis. In jedem Datensatz sind nur zwei Zeilen zum Setzen der APT-"
-"Prioritäten relevant: <placeholder type=\"variablelist\" id=\"0\"/>"
+"replaceable></filename> gefunden, zum Beispiel <filename>…/dists/stable/main/"
+"binary-i386/Packages</filename>. Sie besteht aus einer Serie mehrzeiliger "
+"Datensätze, einem für jedes verfügbare Paket in diesem Verzeichnis. In jedem "
+"Datensatz sind nur zwei Zeilen zum Setzen der APT-Prioritäten relevant: "
+"<placeholder type=\"variablelist\" id=\"0\"/>"
 
 #. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term>
 #: apt_preferences.5.xml:427
@@ -8967,9 +8951,9 @@ msgid ""
 "\"0\"/>"
 msgstr ""
 "Die <filename>Release</filename>-Datei ist normalerweise im Verzeichnis "
-"<filename>.../dists/<replaceable>Distributionsname</replaceable></filename> "
-"zu finden, zum Beispiel <filename>.../dists/stable/Release</filename> oder "
-"<filename>.../dists/&stable-codename;/Release</filename>. Sie besteht aus "
+"<filename>…/dists/<replaceable>Distributionsname</replaceable></filename> zu "
+"finden, zum Beispiel <filename>…/dists/stable/Release</filename> oder "
+"<filename>/dists/&stable-codename;/Release</filename>. Sie besteht aus "
 "einem einzelnen mehrzeiligen Datensatz, der auf <emphasis>alle</emphasis> "
 "Pakete im Verzeichnisbaum unterhalb des übergeordneten Verzeichnisses "
 "zutrifft. Anders als die <filename>Packages</filename>-Datei sind nahezu "
@@ -9428,9 +9412,9 @@ msgstr ""
 #. type: Content of: <refentry><refsect1><literallayout>
 #: sources.list.5.xml:81
 #, fuzzy, no-wrap
-#| msgid "deb uri distribution [component1] [component2] [...]"
+#| msgid "deb [ options ] uri distribution [component1] [component2] [...]"
 msgid "deb uri distribution [component1] [component2] [...]"
-msgstr "deb URI Distribution [Komponente1] [Komponente2] [...]"
+msgstr "deb [ Optionen ] URI Distribution [Komponente1] [Komponente2] […]"
 
 #. type: Content of: <refentry><refsect1><para>
 #: sources.list.5.xml:83
@@ -9463,9 +9447,9 @@ msgid ""
 "of interest when specifying an exact path, <literal>APT</literal> will "
 "automatically generate a URI with the current architecture otherwise."
 msgstr ""
-"<literal> distribution</literal> könnte außerdem eine Variable, <literal>"
+"<literal>Distribution</literal> könnte außerdem eine Variable, <literal>"
 "$(ARCH)</literal>, enthalten, die zur Debian-Architektur (i386, m68k, "
-"powerpc, ...) expandiert wird, die auf dem System benutzt wird. Dies erlaubt "
+"powerpc, ) expandiert wird, die auf dem System benutzt wird. Dies erlaubt "
 "es, architekturabhängige <filename>sources.list</filename>-Dateien zu "
 "benutzen. Im Allgemeinen ist dies nur von Interesse, wenn ein genauer Pfad "
 "angegeben wird, andernfalls wird <literal>APT</literal> automatisch eine URI "
@@ -10028,8 +10012,8 @@ msgstr ""
 "# apt-get update\n"
 "OK   http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages\n"
 "OK   http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n"
-"Paketlisten werden gelesen... Fertig\n"
-"Abhängigkeitsbaum wird aufgebaut... Fertig"
+"Paketlisten werden gelesen … Fertig\n"
+"Abhängigkeitsbaum wird aufgebaut … Fertig"
 
 #. type: <p><taglist>
 #: guide.sgml:120
@@ -10378,8 +10362,8 @@ msgid ""
 "Building Dependency Tree... Done"
 msgstr ""
 "# apt-get check\n"
-"Paketlisten werden gelesen... Fertig\n"
-"Abhängigkeitsbaum wird aufgebaut"
+"Paketlisten werden gelesen … Fertig\n"
+"Abhängigkeitsbaum wird aufgebaut … Fertig"
 
 #. type: <p></p>
 #: guide.sgml:297
@@ -10430,9 +10414,9 @@ msgid ""
 "  libreadlineg2: Conflicts:libreadline2 (<< 2.1-2.1)"
 msgstr ""
 "# apt-get check\n"
-"Paketlisten werden gelesen... Fertig\n"
+"Paketlisten werden gelesen … Fertig Fertig\n"
 "Abhängigkeitsbaum wird aufgebaut\n"
-"Status-Informationen einlesen... Fertig\n"
+"Status-Informationen einlesen … Fertig Fertig\n"
 "Probieren Sie „apt-get -f install“, um diese zu korrigieren:\n"
 "Die folgenden Pakete haben nichterfüllte Abhängigkeiten:\n"
 "  9fonts: Hängt ab: xlib6g ist aber nicht installiert\n"
@@ -11328,7 +11312,7 @@ msgid ""
 msgstr ""
 "  # cd /Platte\n"
 "  # sh -x ./wget-script\n"
-"  [ warten ... ]"
+"  [ warten … Fertig ]"
 
 #. type: </example><example>
 #: offline.sgml:228
@@ -11350,207 +11334,118 @@ msgstr "  # apt-get -o dir::cache::archives=\"/Platte/\" dist-upgrade"
 msgid "Which will use the already fetched archives on the disc."
 msgstr "Es wird die bereits auf die Platte heruntergeladenen Archive benutzen."
 
-#, fuzzy
-#~| msgid "<option>--recurse</option>"
 #~ msgid "<option>--host-architecture</option>"
-#~ msgstr "<option>--recurse</option>"
-
-#, fuzzy
-#~| msgid "Max-ValidTime"
-#~ msgid "Min-ValidTime"
-#~ msgstr "Max-ValidTime"
-
-#, fuzzy
-#~| msgid ""
-#~| "Seconds the Release file should be considered valid after it was "
-#~| "created. The default is \"for ever\" (0) if the Release file of the "
-#~| "archive doesn't include a <literal>Valid-Until</literal> header.  If it "
-#~| "does then this date is the default. The date from the Release file or "
-#~| "the date specified by the creation time of the Release file "
-#~| "(<literal>Date</literal> header) plus the seconds specified with this "
-#~| "options are used to check if the validation of a file has expired by "
-#~| "using the earlier date of the two. Archive specific settings can be made "
-#~| "by appending the label of the archive to the option name."
-#~ msgid ""
-#~ "Minimum of seconds the Release file should be considered valid after it "
-#~ "was created (indicated by the <literal>Date</literal> header).  Use this "
-#~ "if you need to use a seldomly updated (local) mirror of a more regular "
-#~ "updated archive with a <literal>Valid-Until</literal> header instead of "
-#~ "competely disabling the expiration date checking.  Archive specific "
-#~ "settings can and should be used by appending the label of the archive to "
-#~ "the option name."
-#~ msgstr ""
-#~ "Sekunden, die die Release-Datei als gültig betrachtet werden sollte, "
-#~ "nachdem sie erzeugt wurde. Vorgabe ist »für immer« (0), falls die Release-"
-#~ "Datei des Archivs keine <literal>Valid-Until</literal>-Kopfzeile enthält. "
-#~ "Falls dies so ist, ist dieses Datum vorgegeben. Das Datum aus der Release-"
-#~ "Datei oder das Datum, das durch die Erstellungszeit der Release-Datei "
-#~ "angegeben wurde (<literal>Date</literal>-Kopfzeile) plus die mit diesen "
-#~ "Optionen angegebenen Sekunden werden benutzt, um zu prüfen, ob die "
-#~ "Bestätigung einer Datei abgelaufen ist indem das neuere Datum der beiden "
-#~ "benutzt wird. Archivspezifische Einstellungen können durch Anhängen des "
-#~ "Archivetiketts an die Option »name« vorgenommen werden."
+#~ msgstr "<option>--host-architecture</option>"
 
-#, fuzzy
-#~| msgid ""
-#~| "deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
-#~| "deb http://security.debian.org/ &stable-codename;/updates main contrib non-free\n"
-#~| "   "
 #~ msgid ""
-#~ "deb http://ftp.debian.org/debian &stable-codename; main\n"
-#~ "deb [ arch=amd64,armel ] http://ftp.debian.org/debian &stable-codename; main"
-#~ msgstr ""
-#~ "deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
-#~ "deb http://security.debian.org/ &stable-codename;/updates main contrib non-free\n"
-#~ "   "
-
-#~ msgid "<option>--md5</option>"
-#~ msgstr "<option>--md5</option>"
-
-#~ msgid ""
-#~ "Generate MD5 sums. This defaults to on, when turned off the generated "
-#~ "index files will not have MD5Sum fields where possible.  Configuration "
-#~ "Item: <literal>APT::FTPArchive::MD5</literal>"
-#~ msgstr ""
-#~ "Generiert MD5-Summen. Dies ist standardmäßig an, wenn es ausgeschaltet "
-#~ "ist, haben die generierten Indexdateien keine MD5Sum-Felder, sofern dies "
-#~ "möglich ist. Konfigurationselement: <literal>APT::FTPArchive::MD5</"
-#~ "literal>"
-
-#~ msgid "unmarkauto"
-#~ msgstr "unmarkauto"
-
-#~ msgid "<option>-h</option>"
-#~ msgstr "<option>-h</option>"
-
-#~ msgid "<option>--help</option>"
-#~ msgstr "<option>--help</option>"
-
-#~ msgid "Show a short usage summary."
-#~ msgstr "Eine kurze Zusammenfassung anzeigen."
-
-#~ msgid "<option>-v</option>"
-#~ msgstr "<option>-v</option>"
-
-#~ msgid "<option>--version</option>"
-#~ msgstr "<option>--version</option>"
-
-#~ msgid "Show the program version."
-#~ msgstr "Die Programmversion anzeigen."
-
-#~ msgid "to the version that is already installed (if any)."
-#~ msgstr "zu der Version, die bereits installiert ist (wenn vorhanden)."
-
-#~ msgid "APT package handling utility -- cache manipulator"
+#~ "This option controls the architecture packages are built for by "
+#~ "<command>apt-get source --compile</command> and how cross-"
+#~ "builddependencies are satisfied. By default is it not set which means "
+#~ "that the host architecture is the same as the build architecture (which "
+#~ "is defined by <literal>APT::Architecture</literal>).  Configuration Item: "
+#~ "<literal>APT::Get::Host-Architecture</literal>"
 #~ msgstr ""
-#~ "APT-Werkzeug zur Handhabung von Paketen -- Zwischenspeichermanipulierer"
-
-#~ msgid "add <replaceable>file(s)</replaceable>"
-#~ msgstr "add <replaceable>Datei(en)</replaceable>"
+#~ "Diese Option steuert, wie die Architekturpakete durch <command>apt-get "
+#~ "source --compile</command> gebaut und wie Cross-Bau-Abhängigkeiten "
+#~ "erfüllt werden. Standardmäßig ist sie nicht gesetze, was bedeutet, dass "
+#~ "die Rechnerarchitektur die gleiche wie die Bau-Architektur ist (die durch "
+#~ "<literal>APT::Architecture</literal>) definiert wird). "
+#~ "Konfigurationselement: <literal>APT::Get::Host-Architecture</literal>"
 
 #~ msgid ""
-#~ "<literal>add</literal> adds the named package index files to the package "
-#~ "cache.  This is for debugging only."
+#~ "Update the local keyring with the archive keyring and remove from the "
+#~ "local keyring the archive keys which are no longer valid.  The archive "
+#~ "keyring is shipped in the <literal>archive-keyring</literal> package of "
+#~ "your distribution, e.g. the <literal>debian-archive-keyring</literal> "
+#~ "package in Debian."
 #~ msgstr ""
-#~ "<literal>add</literal> fügt die genannten Paket-Index-Dateien zum "
-#~ "Paketzwischenspeicher hinzu. Dies dient nur der Fehlersuche."
+#~ "Aktualisiert den lokalen Schlüsselbund mit dem Archivschlüsselbund und "
+#~ "entfernt die Archivschlüssel, die nicht länger gültig sind, aus dem "
+#~ "lokalen Schlüsselbund. Der Archivschlüsselbund wird im Paket "
+#~ "<literal>archive-keyring</literal> Ihrer Distribution mitgeliefert, z.B. "
+#~ "dem Paket <literal>debian-archive-keyring</literal> in Debian."
 
 #~ msgid ""
-#~ "The <literal>release</literal> command generates a Release file from a "
-#~ "directory tree. It recursively searches the given directory for Packages, "
-#~ "Packages.gz, Packages.bz2, Sources, Sources.gz, Sources.bz2, Release and "
-#~ "md5sum.txt files.  It then writes to stdout a Release file containing an "
-#~ "MD5 digest and SHA1 digest for each file."
+#~ "All Architectures the system supports. Processors implementing the "
+#~ "<literal>amd64</literal> are e.g. also able to execute binaries compiled "
+#~ "for <literal>i386</literal>; This list is use when fetching files and "
+#~ "parsing package lists. The internal default is always the native "
+#~ "architecture (<literal>APT::Architecture</literal>)  and all foreign "
+#~ "architectures it can retrieve by calling <command>dpkg --print-foreign-"
+#~ "architectures</command>."
 #~ msgstr ""
-#~ "Der <literal>release</literal>-Befehl generiert eine Release-Datei aus "
-#~ "einem Verzeichnisbaum. Er durchsucht das vorgegebene Verzeichnis rekursiv "
-#~ "nach Packages-, Packages.gz-, Packages.bz2-, Sources-, Sources.gz-, "
-#~ "Sources.bz2-, Release- und md5sum.txt-Dateien. Dann schreibt es eine "
-#~ "Release-Datei nach stdout, die einen MD5- und SHA1-Hash für jede Datei "
-#~ "enthält."
-
-#~ msgid "<option>--install-recommends</option>"
-#~ msgstr "<option>--install-recommends</option>"
-
-#~ msgid "Also install recommended packages."
-#~ msgstr "Installiert außerdem empfohlene Pakete."
-
-#~ msgid "Do not install recommended packages."
-#~ msgstr "Keine empfohlenen Pakete installieren."
+#~ "Alle Architekturen, die das System unterstützt. Prozessoren, die "
+#~ "<literal>amd64</literal> implementieren sind beispielsweise ebenso in der "
+#~ "Lage, Programme auszuführen, die für <literal>i386</literal> kompiliert "
+#~ "wurden. Diese Liste wird benutzt, wenn Dateien abgerufen und Paketlisten "
+#~ "ausgewertet werden. Die interne Vorgabe ist immer die native Architektur "
+#~ "(<literal>APT::Architecture</literal>) und alle fremden Architekturen, "
+#~ "die durch Aufruf von <command>dpkg --print-foreign-architectures</"
+#~ "command> abgefragt werden können."
 
-#~ msgid ""
-#~ "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."
-#~ msgstr ""
-#~ "Obwohl es möglich ist, einen leeren Komprimierungstyp zu der "
-#~ "Reihenfolgenliste hinzuzufügen, versteht dies APT in der aktuellen "
-#~ "Version nicht richtig und wird viele Warnungen wegen nicht "
-#~ "heruntergeladener Dateien anzeigen – diese Warnungen sind meistens "
-#~ "inkorrekte Treffer. Zukünftige Versionen werden möglicherweise eine "
-#~ "Möglichkeit enthalten, um wirklich unkomprimierte Dateien vorzuziehen, um "
-#~ "den Gebrauch lokaler Spiegel zu unterstützen."
+#~ msgid "Min-ValidTime"
+#~ msgstr "Min-ValidTime"
 
 #~ msgid ""
-#~ "Uses HTTP to access the archive at nonus.debian.org, under the debian-non-"
-#~ "US directory."
+#~ "Minimum of seconds the Release file should be considered valid after it "
+#~ "was created (indicated by the <literal>Date</literal> header).  Use this "
+#~ "if you need to use a seldomly updated (local) mirror of a more regular "
+#~ "updated archive with a <literal>Valid-Until</literal> header instead of "
+#~ "completely disabling the expiration date checking.  Archive specific "
+#~ "settings can and should be used by appending the label of the archive to "
+#~ "the option name."
 #~ msgstr ""
-#~ "Benutzt HTTP, um auf das Archiv auf nonus.debian.org unter dem debian-non-"
-#~ "US-Verzeichnis zuzugreifen."
+#~ "Minimale Anzahl der Sekunden, die die Release-Datei als gültig betrachtet "
+#~ "werden sollte, nachdem sie erzeugt wurde (angezeigt durch die Kopfzeile "
+#~ "<literal>Date</literal>). Benutzen Sie dies, falls Sie einen selten "
+#~ "aktualisierten (lokalen) Spiegel eines regelmäßiger aktualisierten "
+#~ "Archivs mit einer <literal>Valid-Until</literal>-Kopfzeile haben, anstatt "
+#~ "die Überprüfung des Ablaufdatum komplett zu deaktivieren. "
+#~ "Archivspezifische Einstellungen können und sollten durch Anhängen des "
+#~ "Archivetiketts an die Option »name« vorgenommen werden."
 
 #~ msgid ""
-#~ "deb http://nonus.debian.org/debian-non-US stable/non-US main contrib non-"
-#~ "free"
+#~ "<literal>options</literal> is always optional and needs to be surounded "
+#~ "by square brackets. It can consist of multiple settings in the form "
+#~ "<literal><replaceable>setting</replaceable>=<replaceable>value</"
+#~ "replaceable></literal>.  Multiple settings are separated by spaces. The "
+#~ "following settings are supported by APT, note though that unsupported "
+#~ "settings will be ignored silently:"
 #~ msgstr ""
-#~ "deb http://nonus.debian.org/debian-non-US stable/non-US main contrib non-"
-#~ "free"
-
-#~ msgid "OPTIONS"
-#~ msgstr "OPTIONEN"
-
-#~ msgid "None."
-#~ msgstr "Keine"
-
-#~ msgid "FILES"
-#~ msgstr "DATEIEN"
-
-#~ msgid "<filename>/var/lib/apt/extended_states</filename>"
-#~ msgstr "<filename>/var/lib/apt/extended_states</filename>"
+#~ "<literal>options</literal> ist immer optional und muss in eckige Klammern "
+#~ "eingeschlossen werden. Es kann aus mehreren Einstellungen in der Form "
+#~ "<literal><replaceable>Einstellung</replaceable>=<replaceable>Wert</"
+#~ "replaceable></literal> bestehen. Mehrere Einstellungen werden durch "
+#~ "Leerzeichen getrennt. Die folgenden Einstellungen werden von APT "
+#~ "unterstützt. Beachten Sie allerdings, dass nicht unterstützte "
+#~ "Einstellungen stillschweigend ignoriert werden."
 
 #~ msgid ""
-#~ "Status list of auto-installed packages.  Configuration Item: "
-#~ "<literal>Dir::State</literal> sets the path to the "
-#~ "<filename>extended_states</filename> file."
+#~ "<literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</"
+#~ "replaceable>,…</literal> can be used to specify for which architectures "
+#~ "packages information should be downloaded. If this option is not set all "
+#~ "architectures defined by the <literal>APT::Architectures</literal> option "
+#~ "will be downloaded."
 #~ msgstr ""
-#~ "Statusliste automatisch installierter Pakete. Konfigurationselement: "
-#~ "<literal>Dir::State</literal> setzt den Pfad zur Datei "
-#~ "<filename>extended_states</filename>."
-
-#~ msgid "Cache-Limit"
-#~ msgstr "Cache-Limit"
+#~ "<literal>arch=<replaceable>Architektur1</replaceable>,"
+#~ "<replaceable>Architektur2</replaceable>, …</literal> kann benutzt werden, "
+#~ "um anzugeben, für welche Architekturen Paketinformationen heruntergeladen "
+#~ "werden sollen. Falls diese Option nicht gesetzt ist, werden alle durch "
+#~ "die Option <literal>APT::Architectures</literal> definierten "
+#~ "Architekturen heruntergeladen."
 
 #~ msgid ""
-#~ "APT uses a fixed size memory mapped cache file to store the 'available' "
-#~ "information. This sets the size of that cache (in bytes)."
+#~ "The first line gets package information for the architectures in "
+#~ "<literal>APT::Architectures</literal> while the second always retrieves "
+#~ "<literal>amd64</literal> and <literal>armel</literal>."
 #~ msgstr ""
-#~ "APT benutzt eine Zwischenspeicherdatei mit fester Größe, um die "
-#~ "»verfügbar«-Informationen zu speichern. Dies setzt die Größe dieses "
-#~ "Zwischenspeichers (in Bytes)."
-
-#~ msgid "Pin: release n=squeeze\n"
-#~ msgstr "Pin: release n=squeeze\n"
+#~ "Die erste Zeile bekommt Paketinformationen für die Architekturen in "
+#~ "<literal>APT::Architectures</literal>, während die zweite immer "
+#~ "<literal>amd64</literal> und <literal>armel</literal> holt."
 
 #~ msgid ""
-#~ "The <literal>Pin-Priority:</literal> line in each APT preferences record "
-#~ "is optional.  If omitted, APT assigns a priority of 1 less than the last "
-#~ "value specified on a line beginning with <literal>Pin-Priority: "
-#~ "release ...</literal>."
+#~ "deb http://ftp.debian.org/debian &stable-codename; main\n"
+#~ "deb [ arch=amd64,armel ] http://ftp.debian.org/debian &stable-codename; main"
 #~ msgstr ""
-#~ "Die <literal>Pin-Priority:</literal>-Zeile in jedem APT-"
-#~ "Einstellungsdatensatz ist optional. Wenn diese weggelassen wird, weist "
-#~ "APT ein Priorität zu, die um 1 kleiner ist, als der letzte Wert, der in "
-#~ "einer Zeile angegeben wurde, die mit <literal>Pin-Priority: release ...</"
-#~ "literal> anfängt."
+#~ "deb http://ftp.debian.org/debian &stable-codename; main\n"
+#~ "deb [ arch=amd64,armel ] http://ftp.debian.org/debian &stable-codename; main"
index db8b9a8481488c9586fe8034f194203ba275f436..35b8d0af7de051584d61d3cbaf306301420ac8b7 100644 (file)
@@ -1466,6 +1466,13 @@ msgstr "<option>--no-enhances</option>"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-cache.8.xml:317
+#, fuzzy
+#| msgid ""
+#| "Per default the <literal>depends</literal> and <literal>rdepends</"
+#| "literal> print all dependencies. This can be twicked with these flags "
+#| "which will omit the specified dependency type.  Configuration Item: "
+#| "<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></"
+#| "literal> e.g. <literal>APT::Cache::ShowRecommends</literal>."
 msgid ""
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
 "print all dependencies. This can be twicked with these flags which will omit "
@@ -3448,6 +3455,35 @@ msgstr ""
 
 #. type: Content of: <refentry><refsynopsisdiv><cmdsynopsis>
 #: apt-get.8.xml:39
+#, fuzzy
+#| msgid ""
+#| "<command>apt-get</command> <arg><option>-sqdyfmubV</option></arg> <arg> "
+#| "<option>-o= <replaceable>config_string</replaceable> </option> </arg> "
+#| "<arg> <option>-c= <replaceable>config_file</replaceable> </option> </arg> "
+#| "<arg> <option>-t=</option> <arg choice='plain'> "
+#| "<replaceable>target_release</replaceable> </arg> </arg> <group choice="
+#| "\"req\"> <arg choice='plain'>update</arg> <arg choice='plain'>upgrade</"
+#| "arg> <arg choice='plain'>dselect-upgrade</arg> <arg choice='plain'>dist-"
+#| "upgrade</arg> <arg choice='plain'>install <arg choice=\"plain\" rep="
+#| "\"repeat\"><replaceable>pkg</replaceable> <arg> <group choice='req'> <arg "
+#| "choice='plain'> =<replaceable>pkg_version_number</replaceable> </arg> "
+#| "<arg choice='plain'> /<replaceable>target_release</replaceable> </arg> </"
+#| "group> </arg> </arg> </arg> <arg choice='plain'>remove <arg choice=\"plain"
+#| "\" rep=\"repeat\"><replaceable>pkg</replaceable></arg></arg> <arg "
+#| "choice='plain'>purge <arg choice=\"plain\" rep=\"repeat"
+#| "\"><replaceable>pkg</replaceable></arg></arg> <arg choice='plain'>source "
+#| "<arg choice=\"plain\" rep=\"repeat\"><replaceable>pkg</replaceable> <arg> "
+#| "<group choice='req'> <arg choice='plain'> "
+#| "=<replaceable>pkg_version_number</replaceable> </arg> <arg "
+#| "choice='plain'> /<replaceable>target_release</replaceable> </arg> </"
+#| "group> </arg> </arg> </arg> <arg choice='plain'>build-dep <arg choice="
+#| "\"plain\" rep=\"repeat\"><replaceable>pkg</replaceable></arg></arg> <arg "
+#| "choice='plain'>check</arg> <arg choice='plain'>clean</arg> <arg "
+#| "choice='plain'>autoclean</arg> <arg choice='plain'>autoremove</arg> <arg "
+#| "choice='plain'> <group choice='req'> <arg choice='plain'>-v</arg> <arg "
+#| "choice='plain'>--version</arg> </group> </arg> <arg choice='plain'> "
+#| "<group choice='req'> <arg choice='plain'>-h</arg> <arg choice='plain'>--"
+#| "help</arg> </group> </arg> </group>"
 msgid ""
 "<command>apt-get</command> <arg><option>-sqdyfmubV</option></arg> <arg> "
 "<option>-o= <replaceable>config_string</replaceable> </option> </arg> <arg> "
@@ -3815,6 +3851,12 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:255
+#, fuzzy
+#| msgid ""
+#| "If the <option>--compile</option> option is specified then the package "
+#| "will be compiled to a binary .deb using <command>dpkg-buildpackage</"
+#| "command>, if <option>--download-only</option> is specified then the "
+#| "source package will not be unpacked."
 msgid ""
 "If the <option>--compile</option> option is specified then the package will "
 "be compiled to a binary .deb using <command>dpkg-buildpackage</command>, if "
@@ -3859,6 +3901,10 @@ msgstr "build-dep"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:272
+#, fuzzy
+#| msgid ""
+#| "<literal>build-dep</literal> causes apt-get to install/remove packages in "
+#| "an attempt to satisfy the build dependencies for a source package."
 msgid ""
 "<literal>build-dep</literal> causes apt-get to install/remove packages in an "
 "attempt to satisfy the build dependencies for a source package."
@@ -3943,6 +3989,11 @@ msgstr "autoremove"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:308
+#, fuzzy
+#| msgid ""
+#| "<literal>autoremove</literal> is used to remove packages that were "
+#| "automatically installed to satisfy dependencies for some package and that "
+#| "are no more needed."
 msgid ""
 "<literal>autoremove</literal> is used to remove packages that were "
 "automatically installed to satisfy dependencies for some package and that "
@@ -4803,6 +4854,14 @@ msgstr "--keyring <replaceable>nombre-de-fichero</replaceable>"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-key.8.xml:162
+#, fuzzy
+#| msgid ""
+#| "With this option it is possible to specify a specific keyring file the "
+#| "command should operate on. The default is that a command is executed on "
+#| "the <filename>trusted.gpg</filename> file as well as on all parts in the "
+#| "<filename>trusted.gpg.d</filename> directory, though <filename>trusted."
+#| "gpg</filename> is the primary keyring which means that e.g. new keys are "
+#| "added to this one."
 msgid ""
 "With this option it is possible to specify a specific keyring file the "
 "command should operate on. The default is that a command is executed on the "
@@ -6118,6 +6177,17 @@ msgstr "Max-ValidTime"
 
 #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
 #: apt.conf.5.xml:261
+#, fuzzy
+#| msgid ""
+#| "Seconds the Release file should be considered valid after it was created. "
+#| "The default is \"for ever\" (0) if the Release file of the archive "
+#| "doesn't include a <literal>Valid-Until</literal> header.  If it does then "
+#| "this date is the default. The date from the Release file or the date "
+#| "specified by the creation time of the Release file (<literal>Date</"
+#| "literal> header) plus the seconds specified with this options are used to "
+#| "check if the validation of a file has expired by using the earlier date "
+#| "of the two. Archive specific settings can be made by appending the label "
+#| "of the archive to the option name."
 msgid ""
 "Seconds the Release file should be considered valid after it was created. "
 "The default is \"for ever\" (0) if the Release file of the archive doesn't "
@@ -9365,7 +9435,8 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><literallayout>
 #: sources.list.5.xml:81
-#, no-wrap
+#, fuzzy, no-wrap
+#| msgid "deb uri distribution [component1] [component2] [...]"
 msgid "deb uri distribution [component1] [component2] [...]"
 msgstr "deb uri distribución [componente1] [componente2] [...]"
 
@@ -11255,6 +11326,61 @@ msgstr "  # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade"
 msgid "Which will use the already fetched archives on the disc."
 msgstr "Ésto usará los archivos del disco previamente obtenidos."
 
+#, fuzzy
+#~| msgid "<option>--recurse</option>"
+#~ msgid "<option>--host-architecture</option>"
+#~ msgstr "<option>--recurse</option>"
+
+#, fuzzy
+#~| msgid "Max-ValidTime"
+#~ msgid "Min-ValidTime"
+#~ msgstr "Max-ValidTime"
+
+#, fuzzy
+#~| msgid ""
+#~| "Seconds the Release file should be considered valid after it was "
+#~| "created. The default is \"for ever\" (0) if the Release file of the "
+#~| "archive doesn't include a <literal>Valid-Until</literal> header.  If it "
+#~| "does then this date is the default. The date from the Release file or "
+#~| "the date specified by the creation time of the Release file "
+#~| "(<literal>Date</literal> header) plus the seconds specified with this "
+#~| "options are used to check if the validation of a file has expired by "
+#~| "using the earlier date of the two. Archive specific settings can be made "
+#~| "by appending the label of the archive to the option name."
+#~ msgid ""
+#~ "Minimum of seconds the Release file should be considered valid after it "
+#~ "was created (indicated by the <literal>Date</literal> header).  Use this "
+#~ "if you need to use a seldomly updated (local) mirror of a more regular "
+#~ "updated archive with a <literal>Valid-Until</literal> header instead of "
+#~ "completely disabling the expiration date checking.  Archive specific "
+#~ "settings can and should be used by appending the label of the archive to "
+#~ "the option name."
+#~ msgstr ""
+#~ "Los segundos que el fichero «Release» se considerará válido después de su "
+#~ "creación. El valor predeterminado es «para siempre» (cero) si el fichero "
+#~ "«Release» del archivo no incluye una cabecera <literal>Valid-Until</"
+#~ "literal>. Si lo incluye, el valor predeterminado es esta fecha. La fecha "
+#~ "del fichero «Release» o la fecha definida por la hora de creación del "
+#~ "fichero «Release» (cabecera <literal>Date</literal>), a lo que se añaden "
+#~ "los segundos definidos con estas opciones, se usan para comprobar si la "
+#~ "validez de un fichero a expirado, usando la fecha más antigua de las dos "
+#~ "anteriormente mencionadas. Se pueden definir opciones de configuración "
+#~ "específicas al archivo añadiendo la etiqueta del archivo al nombre de la "
+#~ "opción."
+
+#, fuzzy
+#~| msgid ""
+#~| "deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
+#~| "deb http://security.debian.org/ &stable-codename;/updates main contrib non-free\n"
+#~| "   "
+#~ msgid ""
+#~ "deb http://ftp.debian.org/debian &stable-codename; main\n"
+#~ "deb [ arch=amd64,armel ] http://ftp.debian.org/debian &stable-codename; main"
+#~ msgstr ""
+#~ "deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
+#~ "deb http://security.debian.org/ &stable-codename;/updates main contrib non-free\n"
+#~ "   "
+
 #~ msgid "<option>--md5</option>"
 #~ msgstr "<option>--md5</option>"
 
index 037c50de54c41f6472451b28dda2fbb7e816af3a..2e0e766a7af26d1d9a947d56dc59615d9a48c47d 100644 (file)
@@ -1391,6 +1391,13 @@ msgstr "<option>--no-enhances</option>"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-cache.8.xml:317
+#, fuzzy
+#| msgid ""
+#| "Per default the <literal>depends</literal> and <literal>rdepends</"
+#| "literal> print all dependencies. This can be twicked with these flags "
+#| "which will omit the specified dependency type.  Configuration Item: "
+#| "<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></"
+#| "literal> e.g. <literal>APT::Cache::ShowRecommends</literal>."
 msgid ""
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
 "print all dependencies. This can be twicked with these flags which will omit "
@@ -3377,6 +3384,35 @@ msgstr ""
 
 #. type: Content of: <refentry><refsynopsisdiv><cmdsynopsis>
 #: apt-get.8.xml:39
+#, fuzzy
+#| msgid ""
+#| "<command>apt-get</command> <arg><option>-sqdyfmubV</option></arg> <arg> "
+#| "<option>-o= <replaceable>config_string</replaceable> </option> </arg> "
+#| "<arg> <option>-c= <replaceable>config_file</replaceable> </option> </arg> "
+#| "<arg> <option>-t=</option> <arg choice='plain'> "
+#| "<replaceable>target_release</replaceable> </arg> </arg> <group choice="
+#| "\"req\"> <arg choice='plain'>update</arg> <arg choice='plain'>upgrade</"
+#| "arg> <arg choice='plain'>dselect-upgrade</arg> <arg choice='plain'>dist-"
+#| "upgrade</arg> <arg choice='plain'>install <arg choice=\"plain\" rep="
+#| "\"repeat\"><replaceable>pkg</replaceable> <arg> <group choice='req'> <arg "
+#| "choice='plain'> =<replaceable>pkg_version_number</replaceable> </arg> "
+#| "<arg choice='plain'> /<replaceable>target_release</replaceable> </arg> </"
+#| "group> </arg> </arg> </arg> <arg choice='plain'>remove <arg choice=\"plain"
+#| "\" rep=\"repeat\"><replaceable>pkg</replaceable></arg></arg> <arg "
+#| "choice='plain'>purge <arg choice=\"plain\" rep=\"repeat"
+#| "\"><replaceable>pkg</replaceable></arg></arg> <arg choice='plain'>source "
+#| "<arg choice=\"plain\" rep=\"repeat\"><replaceable>pkg</replaceable> <arg> "
+#| "<group choice='req'> <arg choice='plain'> "
+#| "=<replaceable>pkg_version_number</replaceable> </arg> <arg "
+#| "choice='plain'> /<replaceable>target_release</replaceable> </arg> </"
+#| "group> </arg> </arg> </arg> <arg choice='plain'>build-dep <arg choice="
+#| "\"plain\" rep=\"repeat\"><replaceable>pkg</replaceable></arg></arg> <arg "
+#| "choice='plain'>check</arg> <arg choice='plain'>clean</arg> <arg "
+#| "choice='plain'>autoclean</arg> <arg choice='plain'>autoremove</arg> <arg "
+#| "choice='plain'> <group choice='req'> <arg choice='plain'>-v</arg> <arg "
+#| "choice='plain'>--version</arg> </group> </arg> <arg choice='plain'> "
+#| "<group choice='req'> <arg choice='plain'>-h</arg> <arg choice='plain'>--"
+#| "help</arg> </group> </arg> </group>"
 msgid ""
 "<command>apt-get</command> <arg><option>-sqdyfmubV</option></arg> <arg> "
 "<option>-o= <replaceable>config_string</replaceable> </option> </arg> <arg> "
@@ -3748,6 +3784,12 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:255
+#, fuzzy
+#| msgid ""
+#| "If the <option>--compile</option> option is specified then the package "
+#| "will be compiled to a binary .deb using <command>dpkg-buildpackage</"
+#| "command>, if <option>--download-only</option> is specified then the "
+#| "source package will not be unpacked."
 msgid ""
 "If the <option>--compile</option> option is specified then the package will "
 "be compiled to a binary .deb using <command>dpkg-buildpackage</command>, if "
@@ -3791,6 +3833,10 @@ msgstr "build-dep"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:272
+#, fuzzy
+#| msgid ""
+#| "<literal>build-dep</literal> causes apt-get to install/remove packages in "
+#| "an attempt to satisfy the build dependencies for a source package."
 msgid ""
 "<literal>build-dep</literal> causes apt-get to install/remove packages in an "
 "attempt to satisfy the build dependencies for a source package."
@@ -3820,6 +3866,10 @@ msgstr "download"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:282
+#, fuzzy
+#| msgid ""
+#| "<literal>download</literal> will download the given binary package into "
+#| "the current directory."
 msgid ""
 "<literal>download</literal> will download the given binary package into the "
 "current directoy."
@@ -3877,6 +3927,11 @@ msgstr "autoremove"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:308
+#, fuzzy
+#| msgid ""
+#| "<literal>autoremove</literal> is used to remove packages that were "
+#| "automatically installed to satisfy dependencies for some package and that "
+#| "are no more needed."
 msgid ""
 "<literal>autoremove</literal> is used to remove packages that were "
 "automatically installed to satisfy dependencies for some package and that "
@@ -4741,6 +4796,14 @@ msgstr "--keyring <replaceable>fichier</replaceable>"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-key.8.xml:162
+#, fuzzy
+#| msgid ""
+#| "With this option it is possible to specify a specific keyring file the "
+#| "command should operate on. The default is that a command is executed on "
+#| "the <filename>trusted.gpg</filename> file as well as on all parts in the "
+#| "<filename>trusted.gpg.d</filename> directory, though <filename>trusted."
+#| "gpg</filename> is the primary keyring which means that e.g. new keys are "
+#| "added to this one."
 msgid ""
 "With this option it is possible to specify a specific keyring file the "
 "command should operate on. The default is that a command is executed on the "
@@ -5497,6 +5560,15 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #: apt.conf.5.xml:52
+#, fuzzy
+#| msgid ""
+#| "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
+#| "order which have no or \"<literal>conf</literal>\" as filename extension "
+#| "and which only contain alphanumeric, hyphen (-), underscore (_) and "
+#| "period (.) characters.  Otherwise APT will print a notice that it has "
+#| "ignored a file if the file doesn't match a pattern in the <literal>Dir::"
+#| "Ignore-Files-Silently</literal> configuration list - in this case it will "
+#| "be silently ignored."
 msgid ""
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
 "order which have no or \"<literal>conf</literal>\" as filename extension and "
@@ -6052,6 +6124,17 @@ msgstr "Max-ValidTime"
 
 #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
 #: apt.conf.5.xml:261
+#, fuzzy
+#| msgid ""
+#| "Seconds the Release file should be considered valid after it was created. "
+#| "The default is \"for ever\" (0) if the Release file of the archive "
+#| "doesn't include a <literal>Valid-Until</literal> header.  If it does then "
+#| "this date is the default. The date from the Release file or the date "
+#| "specified by the creation time of the Release file (<literal>Date</"
+#| "literal> header) plus the seconds specified with this options are used to "
+#| "check if the validation of a file has expired by using the earlier date "
+#| "of the two. Archive specific settings can be made by appending the label "
+#| "of the archive to the option name."
 msgid ""
 "Seconds the Release file should be considered valid after it was created. "
 "The default is \"for ever\" (0) if the Release file of the archive doesn't "
@@ -6547,6 +6630,18 @@ msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
 
 #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
 #: apt.conf.5.xml:442
+#, fuzzy
+#| msgid ""
+#| "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 (the "
+#| "inbuilt) setting is <placeholder type=\"literallayout\" id=\"0\"/> Note "
+#| "also that list entries specified on the command line 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 "
+#| "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."
 msgid ""
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "replaceable></literal> will be checked: If this setting exists the method "
@@ -6573,6 +6668,12 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
 #: apt.conf.5.xml:449
+#, fuzzy
+#| msgid ""
+#| "The special type <literal>uncompressed</literal> can be used to give "
+#| "uncompressed files a preference, but note that most archives don't "
+#| "provide uncompressed files so this is mostly only useable for local "
+#| "mirrors."
 msgid ""
 "The special type <literal>uncompressed</literal> can be used to give "
 "uncompressed files a preference, but note that most archives doesn't provide "
@@ -7863,6 +7964,16 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><para>
 #: apt_preferences.5.xml:70
+#, fuzzy
+#| msgid ""
+#| "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
+#| "directory are parsed in alphanumeric ascending order and need to obey the "
+#| "following naming convention: The files have no or \"<literal>pref</"
+#| "literal>\" as filename extension and which only contain alphanumeric, "
+#| "hyphen (-), underscore (_) and period (.) characters.  Otherwise APT will "
+#| "print a notice that it has ignored a file if the file doesn't match a "
+#| "pattern in the <literal>Dir::Ignore-Files-Silently</literal> "
+#| "configuration list - in this case it will be silently ignored."
 msgid ""
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "directory are parsed in alphanumeric ascending order and need to obey the "
@@ -9267,7 +9378,8 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><literallayout>
 #: sources.list.5.xml:81
-#, no-wrap
+#, fuzzy, no-wrap
+#| msgid "deb uri distribution [component1] [component2] [...]"
 msgid "deb uri distribution [component1] [component2] [...]"
 msgstr "deb uri distribution [composant1] [composant2] [...]"
 
@@ -11193,6 +11305,60 @@ msgstr "  # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade"
 msgid "Which will use the already fetched archives on the disc."
 msgstr "Cette commande utilisera les fichiers récupérés sur le disque."
 
+#, fuzzy
+#~| msgid "<option>--recurse</option>"
+#~ msgid "<option>--host-architecture</option>"
+#~ msgstr "<option>--recurse</option>"
+
+#, fuzzy
+#~| msgid "Max-ValidTime"
+#~ msgid "Min-ValidTime"
+#~ msgstr "Max-ValidTime"
+
+#, fuzzy
+#~| msgid ""
+#~| "Seconds the Release file should be considered valid after it was "
+#~| "created. The default is \"for ever\" (0) if the Release file of the "
+#~| "archive doesn't include a <literal>Valid-Until</literal> header.  If it "
+#~| "does then this date is the default. The date from the Release file or "
+#~| "the date specified by the creation time of the Release file "
+#~| "(<literal>Date</literal> header) plus the seconds specified with this "
+#~| "options are used to check if the validation of a file has expired by "
+#~| "using the earlier date of the two. Archive specific settings can be made "
+#~| "by appending the label of the archive to the option name."
+#~ msgid ""
+#~ "Minimum of seconds the Release file should be considered valid after it "
+#~ "was created (indicated by the <literal>Date</literal> header).  Use this "
+#~ "if you need to use a seldomly updated (local) mirror of a more regular "
+#~ "updated archive with a <literal>Valid-Until</literal> header instead of "
+#~ "completely disabling the expiration date checking.  Archive specific "
+#~ "settings can and should be used by appending the label of the archive to "
+#~ "the option name."
+#~ msgstr ""
+#~ "Durée (en secondes) pendant laquelle un fichier Release est considéré "
+#~ "comme valable, à partir du moment de sa création. La valeur par défaut "
+#~ "est 0 (fichier valable indéfiniment) si le fichier Release de l'archive "
+#~ "ne comporte pas d'en-tête <literal>Valid-Until</literal>. Dans le cas "
+#~ "contraire, c'est la valeur de cet en-tête qui est la valeur par défaut du "
+#~ "paramètre. La date du fichier Release ou la date indiquée dans l'en-tête "
+#~ "<literal>Date</literal>, augmentées du nombre de secondes indiquées sont "
+#~ "comparées à la date courante pour déterminer si un fichier Release donné "
+#~ "est obsolète ou pas. Un réglage spécifique pour une archive donnée peut "
+#~ "être défini en ajoutant l'étiquette de l'archive au nom de l'option."
+
+#, fuzzy
+#~| msgid ""
+#~| "deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
+#~| "deb http://security.debian.org/ &stable-codename;/updates main contrib non-free\n"
+#~| "   "
+#~ msgid ""
+#~ "deb http://ftp.debian.org/debian &stable-codename; main\n"
+#~ "deb [ arch=amd64,armel ] http://ftp.debian.org/debian &stable-codename; main"
+#~ msgstr ""
+#~ "deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
+#~ "deb http://security.debian.org/ &stable-codename;/updates main contrib non-free\n"
+#~ "   "
+
 #~ msgid "<option>--md5</option>"
 #~ msgstr "<option>--md5</option>"
 
index 4b08de7dfa1529b33258215bb2612c2712d8d64b..22488b22748bf8abb548fa0b7ef881fa1c02583f 100644 (file)
@@ -3540,6 +3540,35 @@ msgstr "APT パッケージ操作ユーティリティ -- コマンドライン
 
 #. type: Content of: <refentry><refsynopsisdiv><cmdsynopsis>
 #: apt-get.8.xml:39
+#, fuzzy
+#| msgid ""
+#| "<command>apt-get</command> <arg><option>-sqdyfmubV</option></arg> <arg> "
+#| "<option>-o= <replaceable>config_string</replaceable> </option> </arg> "
+#| "<arg> <option>-c= <replaceable>config_file</replaceable> </option> </arg> "
+#| "<arg> <option>-t=</option> <arg choice='plain'> "
+#| "<replaceable>target_release</replaceable> </arg> </arg> <group choice="
+#| "\"req\"> <arg choice='plain'>update</arg> <arg choice='plain'>upgrade</"
+#| "arg> <arg choice='plain'>dselect-upgrade</arg> <arg choice='plain'>dist-"
+#| "upgrade</arg> <arg choice='plain'>install <arg choice=\"plain\" rep="
+#| "\"repeat\"><replaceable>pkg</replaceable> <arg> <group choice='req'> <arg "
+#| "choice='plain'> =<replaceable>pkg_version_number</replaceable> </arg> "
+#| "<arg choice='plain'> /<replaceable>target_release</replaceable> </arg> </"
+#| "group> </arg> </arg> </arg> <arg choice='plain'>remove <arg choice=\"plain"
+#| "\" rep=\"repeat\"><replaceable>pkg</replaceable></arg></arg> <arg "
+#| "choice='plain'>purge <arg choice=\"plain\" rep=\"repeat"
+#| "\"><replaceable>pkg</replaceable></arg></arg> <arg choice='plain'>source "
+#| "<arg choice=\"plain\" rep=\"repeat\"><replaceable>pkg</replaceable> <arg> "
+#| "<group choice='req'> <arg choice='plain'> "
+#| "=<replaceable>pkg_version_number</replaceable> </arg> <arg "
+#| "choice='plain'> /<replaceable>target_release</replaceable> </arg> </"
+#| "group> </arg> </arg> </arg> <arg choice='plain'>build-dep <arg choice="
+#| "\"plain\" rep=\"repeat\"><replaceable>pkg</replaceable></arg></arg> <arg "
+#| "choice='plain'>check</arg> <arg choice='plain'>clean</arg> <arg "
+#| "choice='plain'>autoclean</arg> <arg choice='plain'>autoremove</arg> <arg "
+#| "choice='plain'> <group choice='req'> <arg choice='plain'>-v</arg> <arg "
+#| "choice='plain'>--version</arg> </group> </arg> <arg choice='plain'> "
+#| "<group choice='req'> <arg choice='plain'>-h</arg> <arg choice='plain'>--"
+#| "help</arg> </group> </arg> </group>"
 msgid ""
 "<command>apt-get</command> <arg><option>-sqdyfmubV</option></arg> <arg> "
 "<option>-o= <replaceable>config_string</replaceable> </option> </arg> <arg> "
@@ -3908,6 +3937,12 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:255
+#, fuzzy
+#| msgid ""
+#| "If the <option>--compile</option> option is specified then the package "
+#| "will be compiled to a binary .deb using <command>dpkg-buildpackage</"
+#| "command>, if <option>--download-only</option> is specified then the "
+#| "source package will not be unpacked."
 msgid ""
 "If the <option>--compile</option> option is specified then the package will "
 "be compiled to a binary .deb using <command>dpkg-buildpackage</command>, if "
@@ -3953,6 +3988,10 @@ msgstr "build-dep"
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:272
+#, fuzzy
+#| msgid ""
+#| "<literal>build-dep</literal> causes apt-get to install/remove packages in "
+#| "an attempt to satisfy the build dependencies for a source package."
 msgid ""
 "<literal>build-dep</literal> causes apt-get to install/remove packages in an "
 "attempt to satisfy the build dependencies for a source package."
@@ -4039,6 +4078,11 @@ msgstr "autoremove"
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:308
+#, fuzzy
+#| msgid ""
+#| "<literal>autoremove</literal> is used to remove packages that were "
+#| "automatically installed to satisfy dependencies for some package and that "
+#| "are no more needed."
 msgid ""
 "<literal>autoremove</literal> is used to remove packages that were "
 "automatically installed to satisfy dependencies for some package and that "
@@ -4917,6 +4961,14 @@ msgstr "--keyring <replaceable>filename</replaceable>"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-key.8.xml:162
+#, fuzzy
+#| msgid ""
+#| "With this option it is possible to specify a specific keyring file the "
+#| "command should operate on. The default is that a command is executed on "
+#| "the <filename>trusted.gpg</filename> file as well as on all parts in the "
+#| "<filename>trusted.gpg.d</filename> directory, though <filename>trusted."
+#| "gpg</filename> is the primary keyring which means that e.g. new keys are "
+#| "added to this one."
 msgid ""
 "With this option it is possible to specify a specific keyring file the "
 "command should operate on. The default is that a command is executed on the "
@@ -9368,7 +9420,8 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><literallayout>
 #: sources.list.5.xml:81
-#, no-wrap
+#, fuzzy, no-wrap
+#| msgid "deb uri distribution [component1] [component2] [...]"
 msgid "deb uri distribution [component1] [component2] [...]"
 msgstr "deb uri distribution [component1] [component2] [...]"
 
@@ -10932,6 +10985,29 @@ msgstr "  # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade"
 msgid "Which will use the already fetched archives on the disc."
 msgstr "これで、disc にある取得済みのアーカイブを使用するようになります。"
 
+#, fuzzy
+#~| msgid "<option>--recurse</option>"
+#~ msgid "<option>--host-architecture</option>"
+#~ msgstr "<option>--recurse</option>"
+
+#, fuzzy
+#~| msgid "Max-ValidTime"
+#~ msgid "Min-ValidTime"
+#~ msgstr "Max-ValidTime"
+
+#, fuzzy
+#~| msgid ""
+#~| "deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
+#~| "deb http://security.debian.org/ &stable-codename;/updates main contrib non-free\n"
+#~| "   "
+#~ msgid ""
+#~ "deb http://ftp.debian.org/debian &stable-codename; main\n"
+#~ "deb [ arch=amd64,armel ] http://ftp.debian.org/debian &stable-codename; main"
+#~ msgstr ""
+#~ "deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
+#~ "deb http://security.debian.org/ &stable-codename;/updates main contrib non-free\n"
+#~ "   "
+
 #~ msgid "<option>--md5</option>"
 #~ msgstr "<option>--md5</option>"
 
index 0721cbf132c7d8b4a5b2093887f24e39db593129..41eb5668414aa5d2743e41dd087e33c9d706cfff 100644 (file)
@@ -3754,6 +3754,12 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:255
+#, fuzzy
+#| msgid ""
+#| "If the <option>--compile</option> option is specified then the package "
+#| "will be compiled to a binary .deb using <command>dpkg-buildpackage</"
+#| "command>, if <option>--download-only</option> is specified then the "
+#| "source package will not be unpacked."
 msgid ""
 "If the <option>--compile</option> option is specified then the package will "
 "be compiled to a binary .deb using <command>dpkg-buildpackage</command>, if "
@@ -3801,6 +3807,10 @@ msgstr "build-dep"
 #
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:272
+#, fuzzy
+#| msgid ""
+#| "<literal>build-dep</literal> causes apt-get to install/remove packages in "
+#| "an attempt to satisfy the build dependencies for a source package."
 msgid ""
 "<literal>build-dep</literal> causes apt-get to install/remove packages in an "
 "attempt to satisfy the build dependencies for a source package."
@@ -3889,6 +3899,11 @@ msgstr "autoremove"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:308
+#, fuzzy
+#| msgid ""
+#| "<literal>autoremove</literal> is used to remove packages that were "
+#| "automatically installed to satisfy dependencies for some package and that "
+#| "are no more needed."
 msgid ""
 "<literal>autoremove</literal> is used to remove packages that were "
 "automatically installed to satisfy dependencies for some package and that "
@@ -4785,6 +4800,14 @@ msgstr "--keyring <replaceable>nazwa_pliku</replaceable>"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-key.8.xml:162
+#, fuzzy
+#| msgid ""
+#| "With this option it is possible to specify a specific keyring file the "
+#| "command should operate on. The default is that a command is executed on "
+#| "the <filename>trusted.gpg</filename> file as well as on all parts in the "
+#| "<filename>trusted.gpg.d</filename> directory, though <filename>trusted."
+#| "gpg</filename> is the primary keyring which means that e.g. new keys are "
+#| "added to this one."
 msgid ""
 "With this option it is possible to specify a specific keyring file the "
 "command should operate on. The default is that a command is executed on the "
@@ -5456,6 +5479,14 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #: apt.conf.5.xml:52
+#, fuzzy
+#| msgid ""
+#| "The <filename>/etc/apt/sources.list.d</filename> directory provides a way "
+#| "to add sources.list entries in separate files.  The format is the same as "
+#| "for the regular <filename>sources.list</filename> file.  File names need "
+#| "to end with <filename>.list</filename> and may only contain letters (a-z "
+#| "and A-Z), digits (0-9), underscore (_), hyphen (-) and period (.) "
+#| "characters.  Otherwise they will be silently ignored."
 msgid ""
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
 "order which have no or \"<literal>conf</literal>\" as filename extension and "
@@ -5464,6 +5495,12 @@ msgid ""
 "the file doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</"
 "literal> configuration list - in this case it will be silently ignored."
 msgstr ""
+"Katalog <filename>/etc/apt/sources.list.d</filename>  umożliwia podzielenie "
+"pliku źródeł na osobne pliki. Format jest dokładnie taki sam, jak w "
+"przypadku zwykłego pliku <filename>sources.list</filename>. Nazwy plików w "
+"tym katalogu muszą się kończyć rozszerzeniem <filename>.list</filename> i "
+"mogą składać się tylko z liter (a-z i A-Z), cyfr (0-9), znaku podkreślenia "
+"(_), pauzy (-) i kropki (.). Inne pliki zostaną zignorowane."
 
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #: apt.conf.5.xml:59
@@ -7137,6 +7174,14 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><para>
 #: apt_preferences.5.xml:70
+#, fuzzy
+#| msgid ""
+#| "The <filename>/etc/apt/sources.list.d</filename> directory provides a way "
+#| "to add sources.list entries in separate files.  The format is the same as "
+#| "for the regular <filename>sources.list</filename> file.  File names need "
+#| "to end with <filename>.list</filename> and may only contain letters (a-z "
+#| "and A-Z), digits (0-9), underscore (_), hyphen (-) and period (.) "
+#| "characters.  Otherwise they will be silently ignored."
 msgid ""
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "directory are parsed in alphanumeric ascending order and need to obey the "
@@ -7147,6 +7192,12 @@ msgid ""
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
 "case it will be silently ignored."
 msgstr ""
+"Katalog <filename>/etc/apt/sources.list.d</filename>  umożliwia podzielenie "
+"pliku źródeł na osobne pliki. Format jest dokładnie taki sam, jak w "
+"przypadku zwykłego pliku <filename>sources.list</filename>. Nazwy plików w "
+"tym katalogu muszą się kończyć rozszerzeniem <filename>.list</filename> i "
+"mogą składać się tylko z liter (a-z i A-Z), cyfr (0-9), znaku podkreślenia "
+"(_), pauzy (-) i kropki (.). Inne pliki zostaną zignorowane."
 
 #. type: Content of: <refentry><refsect1><refsect2><title>
 #: apt_preferences.5.xml:79
@@ -8308,7 +8359,8 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><literallayout>
 #: sources.list.5.xml:81
-#, no-wrap
+#, fuzzy, no-wrap
+#| msgid "deb uri distribution [component1] [component2] [...]"
 msgid "deb uri distribution [component1] [component2] [...]"
 msgstr "deb URI dystrybucja [komponent1] [komponent2] [...]"
 
@@ -10217,6 +10269,24 @@ msgstr "  # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade"
 msgid "Which will use the already fetched archives on the disc."
 msgstr "Które użyje pobranych uprzednio archiwów z dysku."
 
+#, fuzzy
+#~| msgid "<option>--recurse</option>"
+#~ msgid "<option>--host-architecture</option>"
+#~ msgstr "<option>--recurse</option>"
+
+#, fuzzy
+#~| msgid ""
+#~| "deb http://http.us.debian.org/debian stable main contrib non-free\n"
+#~| "deb http://http.us.debian.org/debian dists/stable-updates/\n"
+#~| "   "
+#~ msgid ""
+#~ "deb http://ftp.debian.org/debian &stable-codename; main\n"
+#~ "deb [ arch=amd64,armel ] http://ftp.debian.org/debian &stable-codename; main"
+#~ msgstr ""
+#~ "deb http://http.us.debian.org/debian stable main contrib non-free\n"
+#~ "deb http://http.us.debian.org/debian dists/stable-updates/\n"
+#~ "   "
+
 #~ msgid "<option>--md5</option>"
 #~ msgstr "<option>--md5</option>"
 
index 3c82b2df1e0c11bd67b4d1b145318a88cea78bb3..e298281f82acec21872c9aed3dfd032f5946f6ce 100644 (file)
@@ -1418,6 +1418,13 @@ msgstr "<option>--no-enhances</option>"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-cache.8.xml:317
+#, fuzzy
+#| msgid ""
+#| "Per default the <literal>depends</literal> and <literal>rdepends</"
+#| "literal> print all dependencies. This can be twicked with these flags "
+#| "which will omit the specified dependency type.  Configuration Item: "
+#| "<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></"
+#| "literal> e.g. <literal>APT::Cache::ShowRecommends</literal>."
 msgid ""
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
 "print all dependencies. This can be twicked with these flags which will omit "
@@ -3386,6 +3393,35 @@ msgstr ""
 
 #. type: Content of: <refentry><refsynopsisdiv><cmdsynopsis>
 #: apt-get.8.xml:39
+#, fuzzy
+#| msgid ""
+#| "<command>apt-get</command> <arg><option>-sqdyfmubV</option></arg> <arg> "
+#| "<option>-o= <replaceable>config_string</replaceable> </option> </arg> "
+#| "<arg> <option>-c= <replaceable>config_file</replaceable> </option> </arg> "
+#| "<arg> <option>-t=</option> <arg choice='plain'> "
+#| "<replaceable>target_release</replaceable> </arg> </arg> <group choice="
+#| "\"req\"> <arg choice='plain'>update</arg> <arg choice='plain'>upgrade</"
+#| "arg> <arg choice='plain'>dselect-upgrade</arg> <arg choice='plain'>dist-"
+#| "upgrade</arg> <arg choice='plain'>install <arg choice=\"plain\" rep="
+#| "\"repeat\"><replaceable>pkg</replaceable> <arg> <group choice='req'> <arg "
+#| "choice='plain'> =<replaceable>pkg_version_number</replaceable> </arg> "
+#| "<arg choice='plain'> /<replaceable>target_release</replaceable> </arg> </"
+#| "group> </arg> </arg> </arg> <arg choice='plain'>remove <arg choice=\"plain"
+#| "\" rep=\"repeat\"><replaceable>pkg</replaceable></arg></arg> <arg "
+#| "choice='plain'>purge <arg choice=\"plain\" rep=\"repeat"
+#| "\"><replaceable>pkg</replaceable></arg></arg> <arg choice='plain'>source "
+#| "<arg choice=\"plain\" rep=\"repeat\"><replaceable>pkg</replaceable> <arg> "
+#| "<group choice='req'> <arg choice='plain'> "
+#| "=<replaceable>pkg_version_number</replaceable> </arg> <arg "
+#| "choice='plain'> /<replaceable>target_release</replaceable> </arg> </"
+#| "group> </arg> </arg> </arg> <arg choice='plain'>build-dep <arg choice="
+#| "\"plain\" rep=\"repeat\"><replaceable>pkg</replaceable></arg></arg> <arg "
+#| "choice='plain'>check</arg> <arg choice='plain'>clean</arg> <arg "
+#| "choice='plain'>autoclean</arg> <arg choice='plain'>autoremove</arg> <arg "
+#| "choice='plain'> <group choice='req'> <arg choice='plain'>-v</arg> <arg "
+#| "choice='plain'>--version</arg> </group> </arg> <arg choice='plain'> "
+#| "<group choice='req'> <arg choice='plain'>-h</arg> <arg choice='plain'>--"
+#| "help</arg> </group> </arg> </group>"
 msgid ""
 "<command>apt-get</command> <arg><option>-sqdyfmubV</option></arg> <arg> "
 "<option>-o= <replaceable>config_string</replaceable> </option> </arg> <arg> "
@@ -3750,6 +3786,12 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:255
+#, fuzzy
+#| msgid ""
+#| "If the <option>--compile</option> option is specified then the package "
+#| "will be compiled to a binary .deb using <command>dpkg-buildpackage</"
+#| "command>, if <option>--download-only</option> is specified then the "
+#| "source package will not be unpacked."
 msgid ""
 "If the <option>--compile</option> option is specified then the package will "
 "be compiled to a binary .deb using <command>dpkg-buildpackage</command>, if "
@@ -3794,6 +3836,10 @@ msgstr "build-dep"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:272
+#, fuzzy
+#| msgid ""
+#| "<literal>build-dep</literal> causes apt-get to install/remove packages in "
+#| "an attempt to satisfy the build dependencies for a source package."
 msgid ""
 "<literal>build-dep</literal> causes apt-get to install/remove packages in an "
 "attempt to satisfy the build dependencies for a source package."
@@ -3877,6 +3923,11 @@ msgstr "autoremove"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:308
+#, fuzzy
+#| msgid ""
+#| "<literal>autoremove</literal> is used to remove packages that were "
+#| "automatically installed to satisfy dependencies for some package and that "
+#| "are no more needed."
 msgid ""
 "<literal>autoremove</literal> is used to remove packages that were "
 "automatically installed to satisfy dependencies for some package and that "
@@ -4726,6 +4777,14 @@ msgstr "--keyring <replaceable>nome-de-ficheiro</replaceable>"
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-key.8.xml:162
+#, fuzzy
+#| msgid ""
+#| "With this option it is possible to specify a specific keyring file the "
+#| "command should operate on. The default is that a command is executed on "
+#| "the <filename>trusted.gpg</filename> file as well as on all parts in the "
+#| "<filename>trusted.gpg.d</filename> directory, though <filename>trusted."
+#| "gpg</filename> is the primary keyring which means that e.g. new keys are "
+#| "added to this one."
 msgid ""
 "With this option it is possible to specify a specific keyring file the "
 "command should operate on. The default is that a command is executed on the "
@@ -6039,6 +6098,17 @@ msgstr "Max-ValidTime"
 
 #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
 #: apt.conf.5.xml:261
+#, fuzzy
+#| msgid ""
+#| "Seconds the Release file should be considered valid after it was created. "
+#| "The default is \"for ever\" (0) if the Release file of the archive "
+#| "doesn't include a <literal>Valid-Until</literal> header.  If it does then "
+#| "this date is the default. The date from the Release file or the date "
+#| "specified by the creation time of the Release file (<literal>Date</"
+#| "literal> header) plus the seconds specified with this options are used to "
+#| "check if the validation of a file has expired by using the earlier date "
+#| "of the two. Archive specific settings can be made by appending the label "
+#| "of the archive to the option name."
 msgid ""
 "Seconds the Release file should be considered valid after it was created. "
 "The default is \"for ever\" (0) if the Release file of the archive doesn't "
@@ -9253,7 +9323,8 @@ msgstr ""
 
 #. type: Content of: <refentry><refsect1><literallayout>
 #: sources.list.5.xml:81
-#, no-wrap
+#, fuzzy, no-wrap
+#| msgid "deb uri distribution [component1] [component2] [...]"
 msgid "deb uri distribution [component1] [component2] [...]"
 msgstr "deb uri distribuição [componente1] [componente2] [...]"
 
@@ -11138,6 +11209,59 @@ msgstr "  # apt-get -o dir::cache::archives=\"/disc/\" dist-upgrade"
 msgid "Which will use the already fetched archives on the disc."
 msgstr "O qual irá usar os arquivos já obtidos e que estão no disco."
 
+#, fuzzy
+#~| msgid "<option>--recurse</option>"
+#~ msgid "<option>--host-architecture</option>"
+#~ msgstr "<option>--recurse</option>"
+
+#, fuzzy
+#~| msgid "Max-ValidTime"
+#~ msgid "Min-ValidTime"
+#~ msgstr "Max-ValidTime"
+
+#, fuzzy
+#~| msgid ""
+#~| "Seconds the Release file should be considered valid after it was "
+#~| "created. The default is \"for ever\" (0) if the Release file of the "
+#~| "archive doesn't include a <literal>Valid-Until</literal> header.  If it "
+#~| "does then this date is the default. The date from the Release file or "
+#~| "the date specified by the creation time of the Release file "
+#~| "(<literal>Date</literal> header) plus the seconds specified with this "
+#~| "options are used to check if the validation of a file has expired by "
+#~| "using the earlier date of the two. Archive specific settings can be made "
+#~| "by appending the label of the archive to the option name."
+#~ msgid ""
+#~ "Minimum of seconds the Release file should be considered valid after it "
+#~ "was created (indicated by the <literal>Date</literal> header).  Use this "
+#~ "if you need to use a seldomly updated (local) mirror of a more regular "
+#~ "updated archive with a <literal>Valid-Until</literal> header instead of "
+#~ "completely disabling the expiration date checking.  Archive specific "
+#~ "settings can and should be used by appending the label of the archive to "
+#~ "the option name."
+#~ msgstr ""
+#~ "Segundos em que o ficheiro Release deve considerado válido após ser "
+#~ "criado. A predefinição é \"para sempre\" (0) se o ficheiro Release do "
+#~ "arquivo não conter um cabeçalho <literal>Valid-Until</literal>. Se o "
+#~ "tiver então esta data é a predefinida. A data do ficheiro Release ou a "
+#~ "data especificada pela hora de criação do do ficheiro Release (cabeçalho "
+#~ "<literal>Date</literal>) mais os segundos especificados com esta opção "
+#~ "são usados para verificar se a validação de um ficheiro já expirou ao "
+#~ "usar uma data anterior às duas. Definições específicas do Arquivo podem "
+#~ "ser feitas ao adicionar a etiqueta do arquivo ao nome da opção. "
+
+#, fuzzy
+#~| msgid ""
+#~| "deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
+#~| "deb http://security.debian.org/ &stable-codename;/updates main contrib non-free\n"
+#~| "   "
+#~ msgid ""
+#~ "deb http://ftp.debian.org/debian &stable-codename; main\n"
+#~ "deb [ arch=amd64,armel ] http://ftp.debian.org/debian &stable-codename; main"
+#~ msgstr ""
+#~ "deb http://ftp.debian.org/debian &stable-codename; main contrib non-free\n"
+#~ "deb http://security.debian.org/ &stable-codename;/updates main contrib non-free\n"
+#~ "   "
+
 #~ msgid "<option>--md5</option>"
 #~ msgstr "<option>--md5</option>"
 
index bf83563488e0d237da2e10d9d74ae393c995269a..dd94f58f14156debe2648c898a031ebb3a5f533f 100644 (file)
    square brackets. It can consist of multiple settings in the form
    <literal><replaceable>setting</replaceable>=<replaceable>value</replaceable></literal>.
    Multiple settings are separated by spaces. The following settings are supported by APT,
-   note through that unsupported settings will be ignored silently:
+   note though that unsupported settings will be ignored silently:
    <itemizedlist><listitem><para><literal>arch=<replaceable>arch1</replaceable>,<replaceable>arch2</replaceable>,…</literal>
    can be used to specify for which architectures packages information should
    be downloaded. If this option is not set all architectures defined by the
index f0bfa2a6d613cc4ae54c47a5c0e7ba80c79c54a3..a8b637a80f377c760a5f6dccb83544be73177fec 100644 (file)
@@ -351,7 +351,7 @@ bool CacheDB::GetMD5(bool const &GenOnly)
       return false;
    }
    MD5Summation MD5;
-   if (Fd->Seek(0) == false || MD5.AddFD(Fd->Fd(),CurStat.FileSize) == false)
+   if (Fd->Seek(0) == false || MD5.AddFD(*Fd, CurStat.FileSize) == false)
       return false;
    
    MD5Res = MD5.Result();
@@ -382,7 +382,7 @@ bool CacheDB::GetSHA1(bool const &GenOnly)
       return false;
    }
    SHA1Summation SHA1;
-   if (Fd->Seek(0) == false || SHA1.AddFD(Fd->Fd(),CurStat.FileSize) == false)
+   if (Fd->Seek(0) == false || SHA1.AddFD(*Fd, CurStat.FileSize) == false)
       return false;
    
    SHA1Res = SHA1.Result();
@@ -413,7 +413,7 @@ bool CacheDB::GetSHA256(bool const &GenOnly)
       return false;
    }
    SHA256Summation SHA256;
-   if (Fd->Seek(0) == false || SHA256.AddFD(Fd->Fd(),CurStat.FileSize) == false)
+   if (Fd->Seek(0) == false || SHA256.AddFD(*Fd, CurStat.FileSize) == false)
       return false;
    
    SHA256Res = SHA256.Result();
@@ -444,7 +444,7 @@ bool CacheDB::GetSHA512(bool const &GenOnly)
       return false;
    }
    SHA512Summation SHA512;
-   if (Fd->Seek(0) == false || SHA512.AddFD(Fd->Fd(),CurStat.FileSize) == false)
+   if (Fd->Seek(0) == false || SHA512.AddFD(*Fd, CurStat.FileSize) == false)
       return false;
    
    SHA512Res = SHA512.Result();
index bf0f858d99fd5732c1603c551d0029457ddc265c..1fea589e25667380326387c83a23695356bcd60d 100644 (file)
@@ -16,6 +16,7 @@
 // Include Files                                                       /*{{{*/
 #include <config.h>
 
+#include <apt-pkg/fileutl.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/md5.h>
@@ -90,7 +91,7 @@ MultiCompress::MultiCompress(string const &Output,string const &Compress,
    /* Open all the temp files now so we can report any errors. File is 
       made unreable to prevent people from touching it during creating. */
    for (Files *I = Outputs; I != 0; I = I->Next)
-      I->TmpFile.Open(I->Output + ".new",FileFd::WriteEmpty,0600);
+      I->TmpFile.Open(I->Output + ".new", FileFd::WriteOnly | FileFd::Create | FileFd::Empty, FileFd::Extension, 0600);
    if (_error->PendingError() == true)
       return;
 
@@ -182,11 +183,6 @@ bool MultiCompress::Start()
       _exit(0);
    };
 
-   /* Tidy up the temp files, we open them in the constructor so as to
-      get proper error reporting. Close them now. */
-   for (Files *I = Outputs; I != 0; I = I->Next)
-      I->TmpFile.Close();
-   
    close(Pipe[0]);
    Input = fdopen(Pipe[1],"w");
    if (Input == 0)
@@ -261,77 +257,10 @@ bool MultiCompress::Finalize(unsigned long long &OutSize)
    return true;
 }
                                                                        /*}}}*/
-// MultiCompress::OpenCompress - Open the compressor                   /*{{{*/
-// ---------------------------------------------------------------------
-/* This opens the compressor, either in compress mode or decompress 
-   mode. FileFd is always the compressor input/output file, 
-   OutFd is the created pipe, Input for Compress, Output for Decompress. */
-bool MultiCompress::OpenCompress(APT::Configuration::Compressor const &Prog,
-                                pid_t &Pid,int const &FileFd,int &OutFd,bool const &Comp)
-{
-   Pid = -1;
-   
-   // No compression
-   if (Prog.Binary.empty() == true)
-   {
-      OutFd = dup(FileFd);
-      return true;
-   }
-      
-   // Create a data pipe
-   int Pipe[2] = {-1,-1};
-   if (pipe(Pipe) != 0)
-      return _error->Errno("pipe",_("Failed to create subprocess IPC"));
-   for (int J = 0; J != 2; J++)
-      SetCloseExec(Pipe[J],true);
-
-   if (Comp == true)
-      OutFd = Pipe[1];
-   else
-      OutFd = Pipe[0];
-   
-   // The child..
-   Pid = ExecFork();
-   if (Pid == 0)
-   {
-      if (Comp == true)
-      {
-        dup2(FileFd,STDOUT_FILENO);
-        dup2(Pipe[0],STDIN_FILENO);
-      }   
-      else
-      {
-        dup2(FileFd,STDIN_FILENO);
-        dup2(Pipe[1],STDOUT_FILENO);
-      }
-      
-      SetCloseExec(STDOUT_FILENO,false);
-      SetCloseExec(STDIN_FILENO,false);
-
-      std::vector<char const*> Args;
-      Args.push_back(Prog.Binary.c_str());
-      std::vector<std::string> const * const addArgs =
-               (Comp == true) ? &(Prog.CompressArgs) : &(Prog.UncompressArgs);
-      for (std::vector<std::string>::const_iterator a = addArgs->begin();
-          a != addArgs->end(); ++a)
-        Args.push_back(a->c_str());
-      Args.push_back(NULL);
-
-      execvp(Args[0],(char **)&Args[0]);
-      cerr << _("Failed to exec compressor ") << Args[0] << endl;
-      _exit(100);
-   };      
-   if (Comp == true)
-      close(Pipe[0]);
-   else
-      close(Pipe[1]);
-   return true;
-}
-                                                                       /*}}}*/
 // MultiCompress::OpenOld - Open an old file                           /*{{{*/
 // ---------------------------------------------------------------------
 /* This opens one of the original output files, possibly decompressing it. */
-bool MultiCompress::OpenOld(int &Fd,pid_t &Proc)
+bool MultiCompress::OpenOld(FileFd &Fd)
 {
    Files *Best = Outputs;
    for (Files *I = Outputs; I != 0; I = I->Next)
@@ -339,29 +268,9 @@ bool MultiCompress::OpenOld(int &Fd,pid_t &Proc)
         Best = I;
 
    // Open the file
-   FileFd F(Best->Output,FileFd::ReadOnly);
-   if (_error->PendingError() == true)
-      return false;
-   
-   // Decompress the file so we can read it
-   if (OpenCompress(Best->CompressProg,Proc,F.Fd(),Fd,false) == false)
-      return false;
-   
-   return true;
+   return Fd.Open(Best->Output, FileFd::ReadOnly, FileFd::Extension);
 }
                                                                        /*}}}*/
-// MultiCompress::CloseOld - Close the old file                                /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool MultiCompress::CloseOld(int Fd,pid_t Proc)
-{
-   close(Fd);
-   if (Proc != -1)
-      if (ExecWait(Proc,_("decompressor"),false) == false)
-        return false;
-   return true;
-}   
-                                                                       /*}}}*/
 // MultiCompress::Child - The writer child                             /*{{{*/
 // ---------------------------------------------------------------------
 /* The child process forks a bunch of compression children and takes 
@@ -371,14 +280,6 @@ bool MultiCompress::CloseOld(int Fd,pid_t Proc)
    is new then the temp files are renamed, otherwise they are erased. */
 bool MultiCompress::Child(int const &FD)
 {
-   // Start the compression children.
-   for (Files *I = Outputs; I != 0; I = I->Next)
-   {
-      if (OpenCompress(I->CompressProg,I->CompressProc,I->TmpFile.Fd(),
-                      I->Fd,true) == false)
-        return false;      
-   }
-
    /* Okay, now we just feed data from FD to all the other FDs. Also
       stash a hash of the data to use later. */
    SetNonBlock(FD,false);
@@ -398,25 +299,14 @@ bool MultiCompress::Child(int const &FD)
       FileSize += Res;
       for (Files *I = Outputs; I != 0; I = I->Next)
       {
-        if (write(I->Fd,Buffer,Res) != Res)
+        if (I->TmpFile.Write(Buffer, Res) == false)
         {
            _error->Errno("write",_("IO to subprocess/file failed"));
            break;
         }
       }      
    }   
-   
-   // Close all the writers
-   for (Files *I = Outputs; I != 0; I = I->Next)
-      close(I->Fd);
-   
-   // Wait for the compressors to exit
-   for (Files *I = Outputs; I != 0; I = I->Next)
-   {
-      if (I->CompressProc != -1)
-        ExecWait(I->CompressProc, I->CompressProg.Binary.c_str(), false);
-   }
-   
+
    if (_error->PendingError() == true)
       return false;
    
@@ -435,31 +325,27 @@ bool MultiCompress::Child(int const &FD)
    // Check the MD5 of the lowest cost entity.
    while (Missing == false)
    {
-      int CompFd = -1;
-      pid_t Proc = -1;
-      if (OpenOld(CompFd,Proc) == false)
+      FileFd CompFd;
+      if (OpenOld(CompFd) == false)
       {
         _error->Discard();
         break;
       }
-            
+
       // Compute the hash
       MD5Summation OldMD5;
       unsigned long long NewFileSize = 0;
       while (1)
       {
-        int Res = read(CompFd,Buffer,sizeof(Buffer));
+        unsigned long long Res = 0;
+        if (CompFd.Read(Buffer,sizeof(Buffer), &Res) == false)
+           return _error->Errno("read",_("Failed to read while computing MD5"));
         if (Res == 0)
            break;
-        if (Res < 0)
-           return _error->Errno("read",_("Failed to read while computing MD5"));
         NewFileSize += Res;
         OldMD5.Add(Buffer,Res);
       }
-      
-      // Tidy the compressor
-      if (CloseOld(CompFd,Proc) == false)
-        return false;
+      CompFd.Close();
 
       // Check the hash
       if (OldMD5.Result() == MD5.Result() &&
index 5496b06d02e18f09171aa4caa4949d65a46b1275..388fad22e9941276bc8a4280c0dd439b6bc134b7 100644 (file)
@@ -34,15 +34,12 @@ class MultiCompress
       FileFd TmpFile;
       pid_t CompressProc;
       time_t OldMTime;
-      int Fd;
    };
    
    Files *Outputs;
    pid_t Outputter;
    mode_t Permissions;
 
-   bool OpenCompress(APT::Configuration::Compressor const &Prog,
-                    pid_t &Pid,int const &FileFd, int &OutFd,bool const &Comp);
    bool Child(int const &Fd);
    bool Start();
    bool Die();
@@ -54,8 +51,7 @@ class MultiCompress
    unsigned long UpdateMTime;
    
    bool Finalize(unsigned long long &OutSize);
-   bool OpenOld(int &Fd,pid_t &Proc);
-   bool CloseOld(int Fd,pid_t Proc);
+   bool OpenOld(FileFd &Fd);
    static bool GetStat(std::string const &Output,std::string const &Compress,struct stat &St);
    
    MultiCompress(std::string const &Output,std::string const &Compress,
index 27e53faf81f90a6b3a318f94aa5cdcda6d4a0951..159772991eca6f6320f74ba17dbc7b50c8f0310f 100644 (file)
@@ -889,22 +889,16 @@ bool ContentsWriter::ReadFromPkgs(string const &PkgFile,string const &PkgCompres
    MultiCompress Pkgs(PkgFile,PkgCompress,0,false);
    if (_error->PendingError() == true)
       return false;
-   
+
    // Open the package file
-   int CompFd = -1;
-   pid_t Proc = -1;
-   if (Pkgs.OpenOld(CompFd,Proc) == false)
+   FileFd Fd;
+   if (Pkgs.OpenOld(Fd) == false)
       return false;
-   
-   // No auto-close FD
-   FileFd Fd(CompFd,false);   
+
    pkgTagFile Tags(&Fd);
    if (_error->PendingError() == true)
-   {
-      Pkgs.CloseOld(CompFd,Proc);
       return false;
-   }
-   
+
    // Parse.
    pkgTagSection Section;
    while (Tags.Step(Section) == true)
@@ -926,11 +920,10 @@ bool ContentsWriter::ReadFromPkgs(string const &PkgFile,string const &PkgCompres
         _error->DumpErrors();
       }
    }
-   
+
    // Tidy the compressor
-   if (Pkgs.CloseOld(CompFd,Proc) == false)
-      return false;
-   
+   Fd.Close();
+
    return true;
 }
 
@@ -1042,7 +1035,7 @@ bool ReleaseWriter::DoPackage(string FileName)
    CheckSums[NewFileName].size = fd.Size();
 
    Hashes hs;
-   hs.AddFD(fd.Fd(), 0, DoMD5, DoSHA1, DoSHA256, DoSHA512);
+   hs.AddFD(fd, 0, DoMD5, DoSHA1, DoSHA256, DoSHA512);
    if (DoMD5 == true)
       CheckSums[NewFileName].MD5 = hs.MD5.Result();
    if (DoSHA1 == true)
index e7114b16816541befc34539e49704a8095d84baf..22d4b9164225e6575363d359be8fb006b1c0e7e5 100644 (file)
@@ -268,7 +268,7 @@ bool CDROMMethod::Fetch(FetchItem *Itm)
 
    Hashes Hash;
    FileFd Fd(Res.Filename, FileFd::ReadOnly);
-   Hash.AddFD(Fd.Fd(), Fd.Size());
+   Hash.AddFD(Fd);
    Res.TakeHashes(Hash);
 
    URIDone(Res);
index f8d58e479703b66bb2075480abb0b6fea15da534..e81d0022bd5b5db0133793f901a94c6221de1d8e 100644 (file)
@@ -85,7 +85,7 @@ bool CopyMethod::Fetch(FetchItem *Itm)
    
    Hashes Hash;
    FileFd Fd(Res.Filename, FileFd::ReadOnly);
-   Hash.AddFD(Fd.Fd(), Fd.Size());
+   Hash.AddFD(Fd);
    Res.TakeHashes(Hash);
 
    URIDone(Res);
index 5025c996d7008784848d233ac967aede3d4df617..7ed4e6f60110bd1627d27f09c06952798dc07d54 100644 (file)
@@ -83,7 +83,7 @@ bool FileMethod::Fetch(FetchItem *Itm)
 
    Hashes Hash;
    FileFd Fd(Res.Filename, FileFd::ReadOnly);
-   Hash.AddFD(Fd.Fd(), Fd.Size());
+   Hash.AddFD(Fd);
    Res.TakeHashes(Hash);
    URIDone(Res);
    return true;
index 2ca0ac6f702f80b704589064f1325c8cedffa694..ad8a7b828a2ce0563014fb6591a9641061cafbd3 100644 (file)
@@ -868,7 +868,7 @@ bool FTPConn::Get(const char *Path,FileFd &To,unsigned long long Resume,
    
    if (Resume != 0)
    {
-      if (Hash.AddFD(To.Fd(),Resume) == false)
+      if (Hash.AddFD(To,Resume) == false)
       {
         _error->Errno("read",_("Problem hashing file"));
         return false;
index a51497948646d1d0ac98e2bb70017f1cbbcaaf7b..6ab6548efb56f82edea77f4de17763e14d3c2953 100644 (file)
@@ -48,7 +48,7 @@ bool GzipMethod::Fetch(FetchItem *Itm)
    URIStart(Res);
    
    // Open the source and destination files
-   FileFd From(Path,FileFd::ReadOnlyGzip);
+   FileFd From(Path,FileFd::ReadOnly, FileFd::Gzip);
 
    if(From.FileSize() == 0)
       return _error->Error(_("Empty files can't be valid archives"));
index 0d81c73ed7390820a51b1eea5a57d97440336580..b8ed43cd256cb99d07827adb0bff7dc761c553b8 100644 (file)
@@ -1007,31 +1007,21 @@ HttpMethod::DealWithHeaders(FetchResult &Res,ServerState *Srv)
    FailFile.c_str();   // Make sure we dont do a malloc in the signal handler
    FailFd = File->Fd();
    FailTime = Srv->Date;
-      
-   // Set the expected size
-   if (Srv->StartPos >= 0)
-   {
-      Res.ResumePoint = Srv->StartPos;
-      if (ftruncate(File->Fd(),Srv->StartPos) < 0)
-        _error->Errno("ftruncate", _("Failed to truncate file"));
-   }
-      
-   // Set the start point
-   lseek(File->Fd(),0,SEEK_END);
 
    delete Srv->In.Hash;
    Srv->In.Hash = new Hashes;
-   
-   // Fill the Hash if the file is non-empty (resume)
-   if (Srv->StartPos > 0)
+
+   // Set the expected size and read file for the hashes
+   if (Srv->StartPos >= 0)
    {
-      lseek(File->Fd(),0,SEEK_SET);
-      if (Srv->In.Hash->AddFD(File->Fd(),Srv->StartPos) == false)
+      Res.ResumePoint = Srv->StartPos;
+      File->Truncate(Srv->StartPos);
+
+      if (Srv->In.Hash->AddFD(*File,Srv->StartPos) == false)
       {
         _error->Errno("read",_("Problem hashing file"));
         return ERROR_NOT_FROM_SERVER;
       }
-      lseek(File->Fd(),0,SEEK_END);
    }
    
    SetNonBlock(File->Fd(),true);
index 335699907a8ee5f70bb3ee540df492b84c6b7ae3..317c8a5872b2bf970aabc63d2d0ba0e023da6224 100644 (file)
@@ -314,7 +314,7 @@ bool HttpsMethod::Fetch(FetchItem *Itm)
    // take hashes
    Hashes Hash;
    FileFd Fd(Res.Filename, FileFd::ReadOnly);
-   Hash.AddFD(Fd.Fd(), Fd.Size());
+   Hash.AddFD(Fd);
    Res.TakeHashes(Hash);
    
    // keep apt updated
index ef00fcaa39de83364d5b284e77d0955378481096..bf9294d96c328f7669df43e5a0fbb2bd716a481d 100644 (file)
@@ -37,13 +37,10 @@ class RredMethod : public pkgAcqMethod {
        // return values
        enum State {ED_OK, ED_ORDERING, ED_PARSER, ED_FAILURE, MMAP_FAILED};
 
-       State applyFile(gzFile &ed_cmds, FILE *in_file, FILE *out_file,
+       State applyFile(FileFd &ed_cmds, FileFd &in_file, FileFd &out_file,
                     unsigned long &line, char *buffer, Hashes *hash) const;
-       void ignoreLineInFile(FILE *fin, char *buffer) const;
-       void ignoreLineInFile(gzFile &fin, char *buffer) const;
-       void copyLinesFromFileToFile(FILE *fin, FILE *fout, unsigned int lines,
-                                   Hashes *hash, char *buffer) const;
-       void copyLinesFromFileToFile(gzFile &fin, FILE *fout, unsigned int lines,
+       void ignoreLineInFile(FileFd &fin, char *buffer) const;
+       void copyLinesFromFileToFile(FileFd &fin, FileFd &fout, unsigned int lines,
                                    Hashes *hash, char *buffer) const;
 
        State patchFile(FileFd &Patch, FileFd &From, FileFd &out_file, Hashes *hash) const;
@@ -72,10 +69,10 @@ public:
  *  \param hash the created file for correctness
  *  \return the success State of the ed command executor
  */
-RredMethod::State RredMethod::applyFile(gzFile &ed_cmds, FILE *in_file, FILE *out_file,
+RredMethod::State RredMethod::applyFile(FileFd &ed_cmds, FileFd &in_file, FileFd &out_file,
                        unsigned long &line, char *buffer, Hashes *hash) const {
        // get the current command and parse it
-       if (gzgets(ed_cmds, buffer, BUF_SIZE) == NULL) {
+       if (ed_cmds.ReadLine(buffer, BUF_SIZE) == NULL) {
                if (Debug == true)
                        std::clog << "rred: encounter end of file - we can start patching now." << std::endl;
                line = 0;
@@ -130,7 +127,7 @@ RredMethod::State RredMethod::applyFile(gzFile &ed_cmds, FILE *in_file, FILE *ou
        unsigned char mode = *idx;
 
        // save the current position
-       unsigned const long pos = gztell(ed_cmds);
+       unsigned const long long pos = ed_cmds.Tell();
 
        // if this is add or change then go to the next full stop
        unsigned int data_length = 0;
@@ -164,7 +161,7 @@ RredMethod::State RredMethod::applyFile(gzFile &ed_cmds, FILE *in_file, FILE *ou
 
        // include data from ed script
        if (mode == MODE_CHANGED || mode == MODE_ADDED) {
-               gzseek(ed_cmds, pos, SEEK_SET);
+               ed_cmds.Seek(pos);
                copyLinesFromFileToFile(ed_cmds, out_file, data_length, hash, buffer);
        }
 
@@ -178,44 +175,24 @@ RredMethod::State RredMethod::applyFile(gzFile &ed_cmds, FILE *in_file, FILE *ou
        return ED_OK;
 }
                                                                                /*}}}*/
-void RredMethod::copyLinesFromFileToFile(FILE *fin, FILE *fout, unsigned int lines,/*{{{*/
-                                       Hashes *hash, char *buffer) const {
-       while (0 < lines--) {
-               do {
-                       fgets(buffer, BUF_SIZE, fin);
-                       size_t const written = fwrite(buffer, 1, strlen(buffer), fout);
-                       hash->Add((unsigned char*)buffer, written);
-               } while (strlen(buffer) == (BUF_SIZE - 1) &&
-                      buffer[BUF_SIZE - 2] != '\n');
-       }
-}
-                                                                               /*}}}*/
-void RredMethod::copyLinesFromFileToFile(gzFile &fin, FILE *fout, unsigned int lines,/*{{{*/
+void RredMethod::copyLinesFromFileToFile(FileFd &fin, FileFd &fout, unsigned int lines,/*{{{*/
                                        Hashes *hash, char *buffer) const {
        while (0 < lines--) {
                do {
-                       gzgets(fin, buffer, BUF_SIZE);
-                       size_t const written = fwrite(buffer, 1, strlen(buffer), fout);
-                       hash->Add((unsigned char*)buffer, written);
+                       fin.ReadLine(buffer, BUF_SIZE);
+                       unsigned long long const towrite = strlen(buffer);
+                       fout.Write(buffer, towrite);
+                       hash->Add((unsigned char*)buffer, towrite);
                } while (strlen(buffer) == (BUF_SIZE - 1) &&
                       buffer[BUF_SIZE - 2] != '\n');
        }
 }
                                                                                /*}}}*/
-void RredMethod::ignoreLineInFile(FILE *fin, char *buffer) const {             /*{{{*/
-       fgets(buffer, BUF_SIZE, fin);
+void RredMethod::ignoreLineInFile(FileFd &fin, char *buffer) const {           /*{{{*/
+       fin.ReadLine(buffer, BUF_SIZE);
        while (strlen(buffer) == (BUF_SIZE - 1) &&
               buffer[BUF_SIZE - 2] != '\n') {
-               fgets(buffer, BUF_SIZE, fin);
-               buffer[0] = ' ';
-       }
-}
-                                                                               /*}}}*/
-void RredMethod::ignoreLineInFile(gzFile &fin, char *buffer) const {           /*{{{*/
-       gzgets(fin, buffer, BUF_SIZE);
-       while (strlen(buffer) == (BUF_SIZE - 1) &&
-              buffer[BUF_SIZE - 2] != '\n') {
-               gzgets(fin, buffer, BUF_SIZE);
+               fin.ReadLine(buffer, BUF_SIZE);
                buffer[0] = ' ';
        }
 }
@@ -223,21 +200,18 @@ void RredMethod::ignoreLineInFile(gzFile &fin, char *buffer) const {              /*{{{*/
 RredMethod::State RredMethod::patchFile(FileFd &Patch, FileFd &From,           /*{{{*/
                                        FileFd &out_file, Hashes *hash) const {
    char buffer[BUF_SIZE];
-   FILE* fFrom = fdopen(From.Fd(), "r");
-   gzFile fPatch = Patch.gzFd();
-   FILE* fTo = fdopen(out_file.Fd(), "w");
 
    /* we do a tail recursion to read the commands in the right order */
    unsigned long line = -1; // assign highest possible value
-   State const result = applyFile(fPatch, fFrom, fTo, line, buffer, hash);
+   State const result = applyFile(Patch, From, out_file, line, buffer, hash);
    
    /* read the rest from infile */
    if (result == ED_OK) {
-      while (fgets(buffer, BUF_SIZE, fFrom) != NULL) {
-         size_t const written = fwrite(buffer, 1, strlen(buffer), fTo);
-         hash->Add((unsigned char*)buffer, written);
+      while (From.ReadLine(buffer, BUF_SIZE) != NULL) {
+        unsigned long long const towrite = strlen(buffer);
+        out_file.Write(buffer, towrite);
+        hash->Add((unsigned char*)buffer, towrite);
       }
-      fflush(fTo);
    }
    return result;
 }
@@ -258,20 +232,7 @@ struct EdCommand {
 RredMethod::State RredMethod::patchMMap(FileFd &Patch, FileFd &From,           /*{{{*/
                                        FileFd &out_file, Hashes *hash) const {
 #ifdef _POSIX_MAPPED_FILES
-       MMap ed_cmds(MMap::ReadOnly);
-       if (Patch.gzFd() != NULL) {
-               unsigned long long mapSize = Patch.Size();
-               DynamicMMap* dyn = new DynamicMMap(0, mapSize, 0);
-               if (dyn->validData() == false) {
-                       delete dyn;
-                       return MMAP_FAILED;
-               }
-               dyn->AddSize(mapSize);
-               gzread(Patch.gzFd(), dyn->Data(), mapSize);
-               ed_cmds = *dyn;
-       } else
-               ed_cmds = MMap(Patch, MMap::ReadOnly);
-
+       MMap ed_cmds(Patch, MMap::ReadOnly);
        MMap in_file(From, MMap::ReadOnly);
 
        if (ed_cmds.Size() == 0 || in_file.Size() == 0)
@@ -489,7 +450,7 @@ bool RredMethod::Fetch(FetchItem *Itm)                                              /*{{{*/
    // Open the source and destination files (the d'tor of FileFd will do 
    // the cleanup/closing of the fds)
    FileFd From(Path,FileFd::ReadOnly);
-   FileFd Patch(Path+".ed",FileFd::ReadOnlyGzip);
+   FileFd Patch(Path+".ed",FileFd::ReadOnly, FileFd::Gzip);
    FileFd To(Itm->DestFile,FileFd::WriteAtomic);   
    To.EraseOnFailure();
    if (_error->PendingError() == true)
index da9777fc48f44634845253b94b6526bf3c18abc6..d249ae96102aa456e69faa60fb83ea26f43035d6 100644 (file)
@@ -305,7 +305,7 @@ bool RSHConn::Get(const char *Path,FileFd &To,unsigned long long Resume,
       return false;
 
    if (Resume != 0) {
-      if (Hash.AddFD(To.Fd(),Resume) == false) {
+      if (Hash.AddFD(To,Resume) == false) {
         _error->Errno("read",_("Problem hashing file"));
         return false;
       }
index 8e4d9d62be6f58268f2267aaca2e9c8d82bb62fa..82d61f4c430244f4fbfb0ce887f4c867b47ec51e 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-10-30 13:46-0500\n"
+"POT-Creation-Date: 2011-12-19 14:28+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -109,7 +109,7 @@ msgstr ""
 msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
 msgstr ""
 
-#: cmdline/apt-cache.cc:1452 apt-pkg/cacheset.cc:445
+#: cmdline/apt-cache.cc:1452 apt-pkg/cacheset.cc:459
 #, c-format
 msgid "Unable to locate package %s"
 msgstr ""
@@ -154,7 +154,7 @@ msgstr ""
 
 #: cmdline/apt-cache.cc:1679 cmdline/apt-cdrom.cc:199 cmdline/apt-config.cc:75
 #: cmdline/apt-extracttemplates.cc:227 ftparchive/apt-ftparchive.cc:590
-#: cmdline/apt-get.cc:3244 cmdline/apt-internal-solver.cc:32
+#: cmdline/apt-get.cc:3255 cmdline/apt-internal-solver.cc:32
 #: cmdline/apt-mark.cc:266 cmdline/apt-sortpkgs.cc:147
 #, c-format
 msgid "%s %s for %s compiled on %s %s\n"
@@ -253,7 +253,7 @@ msgid ""
 "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
 msgstr ""
 
-#: cmdline/apt-extracttemplates.cc:269 apt-pkg/pkgcachegen.cc:1269
+#: cmdline/apt-extracttemplates.cc:269 apt-pkg/pkgcachegen.cc:1271
 #, c-format
 msgid "Unable to write to %s"
 msgstr ""
@@ -486,63 +486,51 @@ msgstr ""
 msgid "Failed to read the override file %s"
 msgstr ""
 
-#: ftparchive/multicompress.cc:69
+#: ftparchive/multicompress.cc:70
 #, c-format
 msgid "Unknown compression algorithm '%s'"
 msgstr ""
 
-#: ftparchive/multicompress.cc:99
+#: ftparchive/multicompress.cc:100
 #, c-format
 msgid "Compressed output %s needs a compression set"
 msgstr ""
 
-#: ftparchive/multicompress.cc:167 methods/rsh.cc:97
+#: ftparchive/multicompress.cc:168 methods/rsh.cc:97
 msgid "Failed to create IPC pipe to subprocess"
 msgstr ""
 
-#: ftparchive/multicompress.cc:193
+#: ftparchive/multicompress.cc:189
 msgid "Failed to create FILE*"
 msgstr ""
 
-#: ftparchive/multicompress.cc:196
+#: ftparchive/multicompress.cc:192
 msgid "Failed to fork"
 msgstr ""
 
-#: ftparchive/multicompress.cc:210
+#: ftparchive/multicompress.cc:206
 msgid "Compress child"
 msgstr ""
 
-#: ftparchive/multicompress.cc:233
+#: ftparchive/multicompress.cc:229
 #, c-format
 msgid "Internal error, failed to create %s"
 msgstr ""
 
-#: ftparchive/multicompress.cc:284
-msgid "Failed to create subprocess IPC"
-msgstr ""
-
-#: ftparchive/multicompress.cc:321
-msgid "Failed to exec compressor "
-msgstr ""
-
-#: ftparchive/multicompress.cc:360
-msgid "decompressor"
-msgstr ""
-
-#: ftparchive/multicompress.cc:403
+#: ftparchive/multicompress.cc:304
 msgid "IO to subprocess/file failed"
 msgstr ""
 
-#: ftparchive/multicompress.cc:455
+#: ftparchive/multicompress.cc:342
 msgid "Failed to read while computing MD5"
 msgstr ""
 
-#: ftparchive/multicompress.cc:472
+#: ftparchive/multicompress.cc:358
 #, c-format
 msgid "Problem unlinking %s"
 msgstr ""
 
-#: ftparchive/multicompress.cc:487 apt-inst/extract.cc:188
+#: ftparchive/multicompress.cc:373 apt-inst/extract.cc:188
 #, c-format
 msgid "Failed to rename %s to %s"
 msgstr ""
@@ -654,34 +642,34 @@ msgstr ""
 msgid "%lu not fully installed or removed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:633
+#: cmdline/apt-get.cc:632
 #, c-format
 msgid "Note, selecting '%s' for task '%s'\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:639
+#: cmdline/apt-get.cc:637
 #, c-format
 msgid "Note, selecting '%s' for regex '%s'\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:656
+#: cmdline/apt-get.cc:654
 #, c-format
 msgid "Package %s is a virtual package provided by:\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:667
+#: cmdline/apt-get.cc:665
 msgid " [Installed]"
 msgstr ""
 
-#: cmdline/apt-get.cc:676
+#: cmdline/apt-get.cc:674
 msgid " [Not candidate version]"
 msgstr ""
 
-#: cmdline/apt-get.cc:678
+#: cmdline/apt-get.cc:676
 msgid "You should explicitly select one to install."
 msgstr ""
 
-#: cmdline/apt-get.cc:681
+#: cmdline/apt-get.cc:679
 #, c-format
 msgid ""
 "Package %s is not available, but is referred to by another package.\n"
@@ -689,177 +677,177 @@ msgid ""
 "is only available from another source\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:699
+#: cmdline/apt-get.cc:697
 msgid "However the following packages replace it:"
 msgstr ""
 
-#: cmdline/apt-get.cc:711
+#: cmdline/apt-get.cc:709
 #, c-format
 msgid "Package '%s' has no installation candidate"
 msgstr ""
 
-#: cmdline/apt-get.cc:722
+#: cmdline/apt-get.cc:720
 #, c-format
 msgid "Virtual packages like '%s' can't be removed\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:753
+#: cmdline/apt-get.cc:764
 #, c-format
 msgid "Note, selecting '%s' instead of '%s'\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:783
+#: cmdline/apt-get.cc:794
 #, c-format
 msgid "Skipping %s, it is already installed and upgrade is not set.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:787
+#: cmdline/apt-get.cc:798
 #, c-format
 msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:799
+#: cmdline/apt-get.cc:810
 #, c-format
 msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:804
+#: cmdline/apt-get.cc:815
 #, c-format
 msgid "%s is already the newest version.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:823 cmdline/apt-get.cc:2103 cmdline/apt-mark.cc:61
+#: cmdline/apt-get.cc:834 cmdline/apt-get.cc:2114 cmdline/apt-mark.cc:61
 #, c-format
 msgid "%s set to manually installed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:849
+#: cmdline/apt-get.cc:860
 #, c-format
 msgid "Selected version '%s' (%s) for '%s'\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:854
+#: cmdline/apt-get.cc:865
 #, c-format
 msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:896
+#: cmdline/apt-get.cc:907
 #, c-format
 msgid "Package %s is not installed, so not removed\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:974
+#: cmdline/apt-get.cc:985
 msgid "Correcting dependencies..."
 msgstr ""
 
-#: cmdline/apt-get.cc:977
+#: cmdline/apt-get.cc:988
 msgid " failed."
 msgstr ""
 
-#: cmdline/apt-get.cc:980
+#: cmdline/apt-get.cc:991
 msgid "Unable to correct dependencies"
 msgstr ""
 
-#: cmdline/apt-get.cc:983
+#: cmdline/apt-get.cc:994
 msgid "Unable to minimize the upgrade set"
 msgstr ""
 
-#: cmdline/apt-get.cc:985
+#: cmdline/apt-get.cc:996
 msgid " Done"
 msgstr ""
 
-#: cmdline/apt-get.cc:989
+#: cmdline/apt-get.cc:1000
 msgid "You might want to run 'apt-get -f install' to correct these."
 msgstr ""
 
-#: cmdline/apt-get.cc:992
+#: cmdline/apt-get.cc:1003
 msgid "Unmet dependencies. Try using -f."
 msgstr ""
 
-#: cmdline/apt-get.cc:1017
+#: cmdline/apt-get.cc:1028
 msgid "WARNING: The following packages cannot be authenticated!"
 msgstr ""
 
-#: cmdline/apt-get.cc:1021
+#: cmdline/apt-get.cc:1032
 msgid "Authentication warning overridden.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1028
+#: cmdline/apt-get.cc:1039
 msgid "Install these packages without verification [y/N]? "
 msgstr ""
 
-#: cmdline/apt-get.cc:1030
+#: cmdline/apt-get.cc:1041
 msgid "Some packages could not be authenticated"
 msgstr ""
 
-#: cmdline/apt-get.cc:1039 cmdline/apt-get.cc:1200
+#: cmdline/apt-get.cc:1050 cmdline/apt-get.cc:1211
 msgid "There are problems and -y was used without --force-yes"
 msgstr ""
 
-#: cmdline/apt-get.cc:1080
+#: cmdline/apt-get.cc:1091
 msgid "Internal error, InstallPackages was called with broken packages!"
 msgstr ""
 
-#: cmdline/apt-get.cc:1089
+#: cmdline/apt-get.cc:1100
 msgid "Packages need to be removed but remove is disabled."
 msgstr ""
 
-#: cmdline/apt-get.cc:1100
+#: cmdline/apt-get.cc:1111
 msgid "Internal error, Ordering didn't finish"
 msgstr ""
 
-#: cmdline/apt-get.cc:1138
+#: cmdline/apt-get.cc:1149
 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org"
 msgstr ""
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1145
+#: cmdline/apt-get.cc:1156
 #, c-format
 msgid "Need to get %sB/%sB of archives.\n"
 msgstr ""
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1150
+#: cmdline/apt-get.cc:1161
 #, c-format
 msgid "Need to get %sB of archives.\n"
 msgstr ""
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1157
+#: cmdline/apt-get.cc:1168
 #, c-format
 msgid "After this operation, %sB of additional disk space will be used.\n"
 msgstr ""
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1162
+#: cmdline/apt-get.cc:1173
 #, c-format
 msgid "After this operation, %sB disk space will be freed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1177 cmdline/apt-get.cc:1180 cmdline/apt-get.cc:2523
-#: cmdline/apt-get.cc:2526
+#: cmdline/apt-get.cc:1188 cmdline/apt-get.cc:1191 cmdline/apt-get.cc:2534
+#: cmdline/apt-get.cc:2537
 #, c-format
 msgid "Couldn't determine free space in %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:1190
+#: cmdline/apt-get.cc:1201
 #, c-format
 msgid "You don't have enough free space in %s."
 msgstr ""
 
-#: cmdline/apt-get.cc:1206 cmdline/apt-get.cc:1226
+#: cmdline/apt-get.cc:1217 cmdline/apt-get.cc:1237
 msgid "Trivial Only specified but this is not a trivial operation."
 msgstr ""
 
-#: cmdline/apt-get.cc:1208
+#: cmdline/apt-get.cc:1219
 msgid "Yes, do as I say!"
 msgstr ""
 
-#: cmdline/apt-get.cc:1210
+#: cmdline/apt-get.cc:1221
 #, c-format
 msgid ""
 "You are about to do something potentially harmful.\n"
@@ -867,46 +855,46 @@ msgid ""
 " ?] "
 msgstr ""
 
-#: cmdline/apt-get.cc:1216 cmdline/apt-get.cc:1235
+#: cmdline/apt-get.cc:1227 cmdline/apt-get.cc:1246
 msgid "Abort."
 msgstr ""
 
-#: cmdline/apt-get.cc:1231
+#: cmdline/apt-get.cc:1242
 msgid "Do you want to continue [Y/n]? "
 msgstr ""
 
-#: cmdline/apt-get.cc:1303 cmdline/apt-get.cc:2588 apt-pkg/algorithms.cc:1492
+#: cmdline/apt-get.cc:1314 cmdline/apt-get.cc:2599 apt-pkg/algorithms.cc:1492
 #, c-format
 msgid "Failed to fetch %s  %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1321
+#: cmdline/apt-get.cc:1332
 msgid "Some files failed to download"
 msgstr ""
 
-#: cmdline/apt-get.cc:1322 cmdline/apt-get.cc:2600
+#: cmdline/apt-get.cc:1333 cmdline/apt-get.cc:2611
 msgid "Download complete and in download only mode"
 msgstr ""
 
-#: cmdline/apt-get.cc:1328
+#: cmdline/apt-get.cc:1339
 msgid ""
 "Unable to fetch some archives, maybe run apt-get update or try with --fix-"
 "missing?"
 msgstr ""
 
-#: cmdline/apt-get.cc:1332
+#: cmdline/apt-get.cc:1343
 msgid "--fix-missing and media swapping is not currently supported"
 msgstr ""
 
-#: cmdline/apt-get.cc:1337
+#: cmdline/apt-get.cc:1348
 msgid "Unable to correct missing packages."
 msgstr ""
 
-#: cmdline/apt-get.cc:1338
+#: cmdline/apt-get.cc:1349
 msgid "Aborting install."
 msgstr ""
 
-#: cmdline/apt-get.cc:1366
+#: cmdline/apt-get.cc:1377
 msgid ""
 "The following package disappeared from your system as\n"
 "all files have been overwritten by other packages:"
@@ -916,35 +904,35 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: cmdline/apt-get.cc:1370
+#: cmdline/apt-get.cc:1381
 msgid "Note: This is done automatic and on purpose by dpkg."
 msgstr ""
 
-#: cmdline/apt-get.cc:1508
+#: cmdline/apt-get.cc:1519
 #, c-format
 msgid "Ignore unavailable target release '%s' of package '%s'"
 msgstr ""
 
-#: cmdline/apt-get.cc:1540
+#: cmdline/apt-get.cc:1551
 #, c-format
 msgid "Picking '%s' as source package instead of '%s'\n"
 msgstr ""
 
 #. if (VerTag.empty() == false && Last == 0)
-#: cmdline/apt-get.cc:1578
+#: cmdline/apt-get.cc:1589
 #, c-format
 msgid "Ignore unavailable version '%s' of package '%s'"
 msgstr ""
 
-#: cmdline/apt-get.cc:1594
+#: cmdline/apt-get.cc:1605
 msgid "The update command takes no arguments"
 msgstr ""
 
-#: cmdline/apt-get.cc:1657
+#: cmdline/apt-get.cc:1668
 msgid "We are not supposed to delete stuff, can't start AutoRemover"
 msgstr ""
 
-#: cmdline/apt-get.cc:1761
+#: cmdline/apt-get.cc:1772
 msgid ""
 "Hmm, seems like the AutoRemover destroyed something which really\n"
 "shouldn't happen. Please file a bug report against apt."
@@ -960,15 +948,15 @@ msgstr ""
 #. "that package should be filed.") << endl;
 #. }
 #.
-#: cmdline/apt-get.cc:1764 cmdline/apt-get.cc:1933
+#: cmdline/apt-get.cc:1775 cmdline/apt-get.cc:1944
 msgid "The following information may help to resolve the situation:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1768
+#: cmdline/apt-get.cc:1779
 msgid "Internal Error, AutoRemover broke stuff"
 msgstr ""
 
-#: cmdline/apt-get.cc:1775
+#: cmdline/apt-get.cc:1786
 msgid ""
 "The following package was automatically installed and is no longer required:"
 msgid_plural ""
@@ -977,7 +965,7 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: cmdline/apt-get.cc:1779
+#: cmdline/apt-get.cc:1790
 #, c-format
 msgid "%lu package was automatically installed and is no longer required.\n"
 msgid_plural ""
@@ -985,25 +973,25 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: cmdline/apt-get.cc:1781
+#: cmdline/apt-get.cc:1792
 msgid "Use 'apt-get autoremove' to remove them."
 msgstr ""
 
-#: cmdline/apt-get.cc:1800
+#: cmdline/apt-get.cc:1811
 msgid "Internal error, AllUpgrade broke stuff"
 msgstr ""
 
-#: cmdline/apt-get.cc:1899
+#: cmdline/apt-get.cc:1910
 msgid "You might want to run 'apt-get -f install' to correct these:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1903
+#: cmdline/apt-get.cc:1914
 msgid ""
 "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
 "solution)."
 msgstr ""
 
-#: cmdline/apt-get.cc:1918
+#: cmdline/apt-get.cc:1929
 msgid ""
 "Some packages could not be installed. This may mean that you have\n"
 "requested an impossible situation or if you are using the unstable\n"
@@ -1011,80 +999,80 @@ msgid ""
 "or been moved out of Incoming."
 msgstr ""
 
-#: cmdline/apt-get.cc:1939
+#: cmdline/apt-get.cc:1950
 msgid "Broken packages"
 msgstr ""
 
-#: cmdline/apt-get.cc:1965
+#: cmdline/apt-get.cc:1976
 msgid "The following extra packages will be installed:"
 msgstr ""
 
-#: cmdline/apt-get.cc:2055
+#: cmdline/apt-get.cc:2066
 msgid "Suggested packages:"
 msgstr ""
 
-#: cmdline/apt-get.cc:2056
+#: cmdline/apt-get.cc:2067
 msgid "Recommended packages:"
 msgstr ""
 
-#: cmdline/apt-get.cc:2098
+#: cmdline/apt-get.cc:2109
 #, c-format
 msgid "Couldn't find package %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2105 cmdline/apt-mark.cc:63
+#: cmdline/apt-get.cc:2116 cmdline/apt-mark.cc:63
 #, c-format
 msgid "%s set to automatically installed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2113 cmdline/apt-mark.cc:107
+#: cmdline/apt-get.cc:2124 cmdline/apt-mark.cc:107
 msgid ""
 "This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
 "instead."
 msgstr ""
 
-#: cmdline/apt-get.cc:2129
+#: cmdline/apt-get.cc:2140
 msgid "Calculating upgrade... "
 msgstr ""
 
-#: cmdline/apt-get.cc:2132 methods/ftp.cc:711 methods/connect.cc:115
+#: cmdline/apt-get.cc:2143 methods/ftp.cc:711 methods/connect.cc:115
 msgid "Failed"
 msgstr ""
 
-#: cmdline/apt-get.cc:2137
+#: cmdline/apt-get.cc:2148
 msgid "Done"
 msgstr ""
 
-#: cmdline/apt-get.cc:2204 cmdline/apt-get.cc:2212
+#: cmdline/apt-get.cc:2215 cmdline/apt-get.cc:2223
 msgid "Internal error, problem resolver broke stuff"
 msgstr ""
 
-#: cmdline/apt-get.cc:2240 cmdline/apt-get.cc:2276
+#: cmdline/apt-get.cc:2251 cmdline/apt-get.cc:2287
 msgid "Unable to lock the download directory"
 msgstr ""
 
-#: cmdline/apt-get.cc:2327
+#: cmdline/apt-get.cc:2338
 #, c-format
 msgid "Downloading %s %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2385
+#: cmdline/apt-get.cc:2396
 msgid "Must specify at least one package to fetch source for"
 msgstr ""
 
-#: cmdline/apt-get.cc:2425 cmdline/apt-get.cc:2737
+#: cmdline/apt-get.cc:2436 cmdline/apt-get.cc:2748
 #, c-format
 msgid "Unable to find a source package for %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2442
+#: cmdline/apt-get.cc:2453
 #, c-format
 msgid ""
 "NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
 "%s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2447
+#: cmdline/apt-get.cc:2458
 #, c-format
 msgid ""
 "Please use:\n"
@@ -1092,141 +1080,141 @@ msgid ""
 "to retrieve the latest (possibly unreleased) updates to the package.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2500
+#: cmdline/apt-get.cc:2511
 #, c-format
 msgid "Skipping already downloaded file '%s'\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2537
+#: cmdline/apt-get.cc:2548
 #, c-format
 msgid "You don't have enough free space in %s"
 msgstr ""
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:2546
+#: cmdline/apt-get.cc:2557
 #, c-format
 msgid "Need to get %sB/%sB of source archives.\n"
 msgstr ""
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:2551
+#: cmdline/apt-get.cc:2562
 #, c-format
 msgid "Need to get %sB of source archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2557
+#: cmdline/apt-get.cc:2568
 #, c-format
 msgid "Fetch source %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2595
+#: cmdline/apt-get.cc:2606
 msgid "Failed to fetch some archives."
 msgstr ""
 
-#: cmdline/apt-get.cc:2626
+#: cmdline/apt-get.cc:2637
 #, c-format
 msgid "Skipping unpack of already unpacked source in %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2638
+#: cmdline/apt-get.cc:2649
 #, c-format
 msgid "Unpack command '%s' failed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2639
+#: cmdline/apt-get.cc:2650
 #, c-format
 msgid "Check if the 'dpkg-dev' package is installed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2661
+#: cmdline/apt-get.cc:2672
 #, c-format
 msgid "Build command '%s' failed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2681
+#: cmdline/apt-get.cc:2692
 msgid "Child process failed"
 msgstr ""
 
-#: cmdline/apt-get.cc:2700
+#: cmdline/apt-get.cc:2711
 msgid "Must specify at least one package to check builddeps for"
 msgstr ""
 
-#: cmdline/apt-get.cc:2725
+#: cmdline/apt-get.cc:2736
 #, c-format
 msgid ""
 "No architecture information available for %s. See apt.conf(5) APT::"
 "Architectures for setup"
 msgstr ""
 
-#: cmdline/apt-get.cc:2742
+#: cmdline/apt-get.cc:2753
 #, c-format
 msgid "Unable to get build-dependency information for %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2762
+#: cmdline/apt-get.cc:2773
 #, c-format
 msgid "%s has no build depends.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2892
+#: cmdline/apt-get.cc:2903
 #, c-format
 msgid ""
 "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
 "packages"
 msgstr ""
 
-#: cmdline/apt-get.cc:2913
+#: cmdline/apt-get.cc:2924
 #, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because the package %s cannot be "
 "found"
 msgstr ""
 
-#: cmdline/apt-get.cc:2936
+#: cmdline/apt-get.cc:2947
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
 msgstr ""
 
-#: cmdline/apt-get.cc:2975
+#: cmdline/apt-get.cc:2986
 #, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because candidate version of "
 "package %s can't satisfy version requirements"
 msgstr ""
 
-#: cmdline/apt-get.cc:2981
+#: cmdline/apt-get.cc:2992
 #, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because package %s has no candidate "
 "version"
 msgstr ""
 
-#: cmdline/apt-get.cc:3004
+#: cmdline/apt-get.cc:3015
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:3020
+#: cmdline/apt-get.cc:3031
 #, c-format
 msgid "Build-dependencies for %s could not be satisfied."
 msgstr ""
 
-#: cmdline/apt-get.cc:3025
+#: cmdline/apt-get.cc:3036
 msgid "Failed to process build dependencies"
 msgstr ""
 
-#: cmdline/apt-get.cc:3118 cmdline/apt-get.cc:3130
+#: cmdline/apt-get.cc:3129 cmdline/apt-get.cc:3141
 #, c-format
 msgid "Changelog for %s (%s)"
 msgstr ""
 
-#: cmdline/apt-get.cc:3249
+#: cmdline/apt-get.cc:3260
 msgid "Supported modules:"
 msgstr ""
 
-#: cmdline/apt-get.cc:3290
+#: cmdline/apt-get.cc:3301
 msgid ""
 "Usage: apt-get [options] command\n"
 "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
@@ -1272,7 +1260,7 @@ msgid ""
 "                       This APT has Super Cow Powers.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:3455
+#: cmdline/apt-get.cc:3466
 msgid ""
 "NOTE: This is only a simulation!\n"
 "      apt-get needs root privileges for real execution.\n"
@@ -1580,7 +1568,7 @@ msgstr ""
 #. Only warn if there are no sources.list.d.
 #. Only warn if there is no sources.list file.
 #: apt-inst/extract.cc:465 apt-pkg/contrib/cdromutl.cc:183
-#: apt-pkg/contrib/fileutl.cc:344 apt-pkg/sourcelist.cc:208
+#: apt-pkg/contrib/fileutl.cc:372 apt-pkg/sourcelist.cc:208
 #: apt-pkg/sourcelist.cc:214 apt-pkg/acquire.cc:456 apt-pkg/init.cc:108
 #: apt-pkg/init.cc:116 apt-pkg/clean.cc:36 apt-pkg/policy.cc:359
 #: methods/mirror.cc:95
@@ -1612,9 +1600,9 @@ msgstr ""
 msgid "The info and temp directories need to be on the same filesystem"
 msgstr ""
 
-#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:1168
-#: apt-pkg/pkgcachegen.cc:1272 apt-pkg/pkgcachegen.cc:1278
-#: apt-pkg/pkgcachegen.cc:1434
+#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:1170
+#: apt-pkg/pkgcachegen.cc:1274 apt-pkg/pkgcachegen.cc:1280
+#: apt-pkg/pkgcachegen.cc:1436
 msgid "Reading package lists"
 msgstr ""
 
@@ -1731,13 +1719,13 @@ msgid "Read error from %s process"
 msgstr ""
 
 #: methods/bzip2.cc:143 methods/bzip2.cc:152 methods/copy.cc:46
-#: methods/gzip.cc:94 methods/gzip.cc:103 methods/rred.cc:530
-#: methods/rred.cc:539
+#: methods/gzip.cc:94 methods/gzip.cc:103 methods/rred.cc:491
+#: methods/rred.cc:500
 msgid "Failed to stat"
 msgstr ""
 
 #: methods/bzip2.cc:149 methods/copy.cc:83 methods/gzip.cc:100
-#: methods/rred.cc:536
+#: methods/rred.cc:497
 msgid "Failed to set modification time"
 msgstr ""
 
@@ -1825,7 +1813,7 @@ msgstr ""
 msgid "Server closed the connection"
 msgstr ""
 
-#: methods/ftp.cc:348 apt-pkg/contrib/fileutl.cc:832 methods/rsh.cc:197
+#: methods/ftp.cc:348 apt-pkg/contrib/fileutl.cc:1065 methods/rsh.cc:197
 msgid "Read error"
 msgstr ""
 
@@ -1837,7 +1825,7 @@ msgstr ""
 msgid "Protocol corruption"
 msgstr ""
 
-#: methods/ftp.cc:456 apt-pkg/contrib/fileutl.cc:874 methods/rsh.cc:239
+#: methods/ftp.cc:456 apt-pkg/contrib/fileutl.cc:1139 methods/rsh.cc:239
 msgid "Write error"
 msgstr ""
 
@@ -1891,7 +1879,7 @@ msgstr ""
 msgid "Unable to accept connection"
 msgstr ""
 
-#: methods/ftp.cc:873 methods/http.cc:1031 methods/rsh.cc:309
+#: methods/ftp.cc:873 methods/http.cc:1022 methods/rsh.cc:309
 msgid "Problem hashing file"
 msgstr ""
 
@@ -2063,19 +2051,15 @@ msgstr ""
 msgid "Error reading from server"
 msgstr ""
 
-#: methods/http.cc:1016 apt-pkg/contrib/mmap.cc:293
-msgid "Failed to truncate file"
-msgstr ""
-
-#: methods/http.cc:1191
+#: methods/http.cc:1181
 msgid "Bad header data"
 msgstr ""
 
-#: methods/http.cc:1208 methods/http.cc:1263
+#: methods/http.cc:1198 methods/http.cc:1253
 msgid "Connection failed"
 msgstr ""
 
-#: methods/http.cc:1355
+#: methods/http.cc:1345
 msgid "Internal error"
 msgstr ""
 
@@ -2083,44 +2067,48 @@ msgstr ""
 msgid "Can't mmap an empty file"
 msgstr ""
 
-#: apt-pkg/contrib/mmap.cc:91
+#: apt-pkg/contrib/mmap.cc:109
 #, c-format
 msgid "Couldn't duplicate file descriptor %i"
 msgstr ""
 
-#: apt-pkg/contrib/mmap.cc:99
+#: apt-pkg/contrib/mmap.cc:117
 #, c-format
 msgid "Couldn't make mmap of %llu bytes"
 msgstr ""
 
-#: apt-pkg/contrib/mmap.cc:126
+#: apt-pkg/contrib/mmap.cc:144
 msgid "Unable to close mmap"
 msgstr ""
 
-#: apt-pkg/contrib/mmap.cc:154 apt-pkg/contrib/mmap.cc:182
+#: apt-pkg/contrib/mmap.cc:172 apt-pkg/contrib/mmap.cc:200
 msgid "Unable to synchronize mmap"
 msgstr ""
 
-#: apt-pkg/contrib/mmap.cc:260
+#: apt-pkg/contrib/mmap.cc:278
 #, c-format
 msgid "Couldn't make mmap of %lu bytes"
 msgstr ""
 
-#: apt-pkg/contrib/mmap.cc:312
+#: apt-pkg/contrib/mmap.cc:311
+msgid "Failed to truncate file"
+msgstr ""
+
+#: apt-pkg/contrib/mmap.cc:330
 #, c-format
 msgid ""
 "Dynamic MMap ran out of room. Please increase the size of APT::Cache-Limit. "
 "Current value: %lu. (man 5 apt.conf)"
 msgstr ""
 
-#: apt-pkg/contrib/mmap.cc:411
+#: apt-pkg/contrib/mmap.cc:429
 #, c-format
 msgid ""
 "Unable to increase the size of the MMap as the limit of %lu bytes is already "
 "reached."
 msgstr ""
 
-#: apt-pkg/contrib/mmap.cc:414
+#: apt-pkg/contrib/mmap.cc:432
 msgid ""
 "Unable to increase size of the MMap as automatic growing is disabled by user."
 msgstr ""
@@ -2281,113 +2269,121 @@ msgstr ""
 msgid "Failed to stat the cdrom"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:169
+#: apt-pkg/contrib/fileutl.cc:197
 #, c-format
 msgid "Not using locking for read only lock file %s"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:174
+#: apt-pkg/contrib/fileutl.cc:202
 #, c-format
 msgid "Could not open lock file %s"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:192
+#: apt-pkg/contrib/fileutl.cc:220
 #, c-format
 msgid "Not using locking for nfs mounted lock file %s"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:196
+#: apt-pkg/contrib/fileutl.cc:224
 #, c-format
 msgid "Could not get lock %s"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:336
+#: apt-pkg/contrib/fileutl.cc:364
 #, c-format
 msgid "List of files can't be created as '%s' is not a directory"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:363
+#: apt-pkg/contrib/fileutl.cc:391
 #, c-format
 msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:381
+#: apt-pkg/contrib/fileutl.cc:409
 #, c-format
 msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:390
+#: apt-pkg/contrib/fileutl.cc:418
 #, c-format
 msgid ""
 "Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:691
+#: apt-pkg/contrib/fileutl.cc:719
 #, c-format
 msgid "Waited for %s but it wasn't there"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:703
+#: apt-pkg/contrib/fileutl.cc:731
 #, c-format
 msgid "Sub-process %s received a segmentation fault."
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:705
+#: apt-pkg/contrib/fileutl.cc:733
 #, c-format
 msgid "Sub-process %s received signal %u."
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:709
+#: apt-pkg/contrib/fileutl.cc:737
 #, c-format
 msgid "Sub-process %s returned an error code (%u)"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:711
+#: apt-pkg/contrib/fileutl.cc:739
 #, c-format
 msgid "Sub-process %s exited unexpectedly"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:776 apt-pkg/indexcopy.cc:676
+#: apt-pkg/contrib/fileutl.cc:877 apt-pkg/indexcopy.cc:655
 #, c-format
 msgid "Could not open file %s"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:793
+#: apt-pkg/contrib/fileutl.cc:923
 #, c-format
 msgid "Could not open file descriptor %d"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:853
+#: apt-pkg/contrib/fileutl.cc:970
+msgid "Failed to create subprocess IPC"
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:1019
+msgid "Failed to exec compressor "
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:1087
 #, c-format
 msgid "read, still have %llu to read but none left"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:886
+#: apt-pkg/contrib/fileutl.cc:1152
 #, c-format
 msgid "write, still have %llu to write but couldn't"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:1023
+#: apt-pkg/contrib/fileutl.cc:1410
 #, c-format
 msgid "Problem closing the gzip file %s"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:1026
+#: apt-pkg/contrib/fileutl.cc:1414
 #, c-format
 msgid "Problem closing the file %s"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:1031
+#: apt-pkg/contrib/fileutl.cc:1419
 #, c-format
 msgid "Problem renaming the file %s to %s"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:1042
+#: apt-pkg/contrib/fileutl.cc:1430
 #, c-format
 msgid "Problem unlinking the file %s"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:1055
+#: apt-pkg/contrib/fileutl.cc:1450
 msgid "Problem syncing the file"
 msgstr ""
 
@@ -2472,28 +2468,28 @@ msgstr ""
 msgid "extra"
 msgstr ""
 
-#: apt-pkg/depcache.cc:130 apt-pkg/depcache.cc:159
+#: apt-pkg/depcache.cc:132 apt-pkg/depcache.cc:161
 msgid "Building dependency tree"
 msgstr ""
 
-#: apt-pkg/depcache.cc:131
+#: apt-pkg/depcache.cc:133
 msgid "Candidate versions"
 msgstr ""
 
-#: apt-pkg/depcache.cc:160
+#: apt-pkg/depcache.cc:162
 msgid "Dependency generation"
 msgstr ""
 
-#: apt-pkg/depcache.cc:180 apt-pkg/depcache.cc:213 apt-pkg/depcache.cc:217
+#: apt-pkg/depcache.cc:182 apt-pkg/depcache.cc:215 apt-pkg/depcache.cc:219
 msgid "Reading state information"
 msgstr ""
 
-#: apt-pkg/depcache.cc:242
+#: apt-pkg/depcache.cc:244
 #, c-format
 msgid "Failed to open StateFile %s"
 msgstr ""
 
-#: apt-pkg/depcache.cc:248
+#: apt-pkg/depcache.cc:250
 #, c-format
 msgid "Failed to write temporary StateFile %s"
 msgstr ""
@@ -2563,7 +2559,7 @@ msgstr ""
 msgid "Opening %s"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:265 apt-pkg/cdrom.cc:447
+#: apt-pkg/sourcelist.cc:265 apt-pkg/cdrom.cc:485
 #, c-format
 msgid "Line %u too long in source list %s."
 msgstr ""
@@ -2578,19 +2574,19 @@ msgstr ""
 msgid "Type '%s' is not known on line %u in source list %s"
 msgstr ""
 
-#: apt-pkg/packagemanager.cc:298 apt-pkg/packagemanager.cc:770
+#: apt-pkg/packagemanager.cc:298 apt-pkg/packagemanager.cc:775
 #, c-format
 msgid ""
 "Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
 "under APT::Immediate-Configure for details. (%d)"
 msgstr ""
 
-#: apt-pkg/packagemanager.cc:432 apt-pkg/packagemanager.cc:462
+#: apt-pkg/packagemanager.cc:437 apt-pkg/packagemanager.cc:467
 #, c-format
 msgid "Could not configure '%s'. "
 msgstr ""
 
-#: apt-pkg/packagemanager.cc:502
+#: apt-pkg/packagemanager.cc:507
 #, c-format
 msgid ""
 "This installation run will require temporarily removing the essential "
@@ -2718,54 +2714,54 @@ msgstr ""
 msgid "No priority (or zero) specified for pin"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:83
+#: apt-pkg/pkgcachegen.cc:85
 msgid "Cache has an incompatible versioning system"
 msgstr ""
 
 #. TRANSLATOR: The first placeholder is a package name,
 #. the other two should be copied verbatim as they include debug info
-#: apt-pkg/pkgcachegen.cc:209 apt-pkg/pkgcachegen.cc:275
-#: apt-pkg/pkgcachegen.cc:311 apt-pkg/pkgcachegen.cc:353
-#: apt-pkg/pkgcachegen.cc:357 apt-pkg/pkgcachegen.cc:374
-#: apt-pkg/pkgcachegen.cc:384 apt-pkg/pkgcachegen.cc:388
-#: apt-pkg/pkgcachegen.cc:392 apt-pkg/pkgcachegen.cc:413
-#: apt-pkg/pkgcachegen.cc:418 apt-pkg/pkgcachegen.cc:463
-#: apt-pkg/pkgcachegen.cc:494 apt-pkg/pkgcachegen.cc:508
+#: apt-pkg/pkgcachegen.cc:211 apt-pkg/pkgcachegen.cc:277
+#: apt-pkg/pkgcachegen.cc:313 apt-pkg/pkgcachegen.cc:355
+#: apt-pkg/pkgcachegen.cc:359 apt-pkg/pkgcachegen.cc:376
+#: apt-pkg/pkgcachegen.cc:386 apt-pkg/pkgcachegen.cc:390
+#: apt-pkg/pkgcachegen.cc:394 apt-pkg/pkgcachegen.cc:415
+#: apt-pkg/pkgcachegen.cc:420 apt-pkg/pkgcachegen.cc:465
+#: apt-pkg/pkgcachegen.cc:496 apt-pkg/pkgcachegen.cc:510
 #, c-format
 msgid "Error occurred while processing %s (%s%d)"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:232
+#: apt-pkg/pkgcachegen.cc:234
 msgid "Wow, you exceeded the number of package names this APT is capable of."
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:235
+#: apt-pkg/pkgcachegen.cc:237
 msgid "Wow, you exceeded the number of versions this APT is capable of."
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:238
+#: apt-pkg/pkgcachegen.cc:240
 msgid "Wow, you exceeded the number of descriptions this APT is capable of."
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:241
+#: apt-pkg/pkgcachegen.cc:243
 msgid "Wow, you exceeded the number of dependencies this APT is capable of."
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:515
+#: apt-pkg/pkgcachegen.cc:517
 #, c-format
 msgid "Package %s %s was not found while processing file dependencies"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:1080
+#: apt-pkg/pkgcachegen.cc:1082
 #, c-format
 msgid "Couldn't stat source package list %s"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:1185
+#: apt-pkg/pkgcachegen.cc:1187
 msgid "Collecting File Provides"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:1376 apt-pkg/pkgcachegen.cc:1383
+#: apt-pkg/pkgcachegen.cc:1378 apt-pkg/pkgcachegen.cc:1385
 msgid "IO Error saving source cache"
 msgstr ""
 
@@ -2878,177 +2874,177 @@ msgstr ""
 msgid "Vendor block %s contains no fingerprint"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:528
+#: apt-pkg/cdrom.cc:566
 #, c-format
 msgid ""
 "Using CD-ROM mount point %s\n"
 "Mounting CD-ROM\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:537 apt-pkg/cdrom.cc:634
+#: apt-pkg/cdrom.cc:575 apt-pkg/cdrom.cc:672
 msgid "Identifying.. "
 msgstr ""
 
-#: apt-pkg/cdrom.cc:565
+#: apt-pkg/cdrom.cc:603
 #, c-format
 msgid "Stored label: %s\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:574 apt-pkg/cdrom.cc:850
+#: apt-pkg/cdrom.cc:612 apt-pkg/cdrom.cc:894
 msgid "Unmounting CD-ROM...\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:594
+#: apt-pkg/cdrom.cc:632
 #, c-format
 msgid "Using CD-ROM mount point %s\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:612
+#: apt-pkg/cdrom.cc:650
 msgid "Unmounting CD-ROM\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:617
+#: apt-pkg/cdrom.cc:655
 msgid "Waiting for disc...\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:626
+#: apt-pkg/cdrom.cc:664
 msgid "Mounting CD-ROM...\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:645
+#: apt-pkg/cdrom.cc:683
 msgid "Scanning disc for index files..\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:687
+#: apt-pkg/cdrom.cc:731
 #, c-format
 msgid ""
 "Found %zu package indexes, %zu source indexes, %zu translation indexes and "
 "%zu signatures\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:698
+#: apt-pkg/cdrom.cc:742
 msgid ""
 "Unable to locate any package files, perhaps this is not a Debian Disc or the "
 "wrong architecture?"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:725
+#: apt-pkg/cdrom.cc:769
 #, c-format
 msgid "Found label '%s'\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:754
+#: apt-pkg/cdrom.cc:798
 msgid "That is not a valid name, try again.\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:771
+#: apt-pkg/cdrom.cc:815
 #, c-format
 msgid ""
 "This disc is called: \n"
 "'%s'\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:773
+#: apt-pkg/cdrom.cc:817
 msgid "Copying package lists..."
 msgstr ""
 
-#: apt-pkg/cdrom.cc:800
+#: apt-pkg/cdrom.cc:844
 msgid "Writing new source list\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:808
+#: apt-pkg/cdrom.cc:852
 msgid "Source list entries for this disc are:\n"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:273 apt-pkg/indexcopy.cc:930
+#: apt-pkg/indexcopy.cc:236 apt-pkg/indexcopy.cc:873
 #, c-format
 msgid "Wrote %i records.\n"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:275 apt-pkg/indexcopy.cc:932
+#: apt-pkg/indexcopy.cc:238 apt-pkg/indexcopy.cc:875
 #, c-format
 msgid "Wrote %i records with %i missing files.\n"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:278 apt-pkg/indexcopy.cc:935
+#: apt-pkg/indexcopy.cc:241 apt-pkg/indexcopy.cc:878
 #, c-format
 msgid "Wrote %i records with %i mismatched files\n"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:281 apt-pkg/indexcopy.cc:938
+#: apt-pkg/indexcopy.cc:244 apt-pkg/indexcopy.cc:881
 #, c-format
 msgid "Wrote %i records with %i missing files and %i mismatched files\n"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:540
+#: apt-pkg/indexcopy.cc:503
 #, c-format
 msgid "Skipping nonexistent file %s"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:546
+#: apt-pkg/indexcopy.cc:509
 #, c-format
 msgid "Can't find authentication record for: %s"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:552
+#: apt-pkg/indexcopy.cc:515
 #, c-format
 msgid "Hash mismatch for: %s"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:680
+#: apt-pkg/indexcopy.cc:659
 #, c-format
 msgid "File %s doesn't start with a clearsigned message"
 msgstr ""
 
 #. TRANSLATOR: %s is the trusted keyring parts directory
-#: apt-pkg/indexcopy.cc:711
+#: apt-pkg/indexcopy.cc:690
 #, c-format
 msgid "No keyring installed in %s."
 msgstr ""
 
-#: apt-pkg/cacheset.cc:342
+#: apt-pkg/cacheset.cc:352
 #, c-format
 msgid "Release '%s' for '%s' was not found"
 msgstr ""
 
-#: apt-pkg/cacheset.cc:345
+#: apt-pkg/cacheset.cc:355
 #, c-format
 msgid "Version '%s' for '%s' was not found"
 msgstr ""
 
-#: apt-pkg/cacheset.cc:452
+#: apt-pkg/cacheset.cc:466
 #, c-format
 msgid "Couldn't find task '%s'"
 msgstr ""
 
-#: apt-pkg/cacheset.cc:459
+#: apt-pkg/cacheset.cc:472
 #, c-format
 msgid "Couldn't find any package by regex '%s'"
 msgstr ""
 
-#: apt-pkg/cacheset.cc:472
+#: apt-pkg/cacheset.cc:483
 #, c-format
 msgid "Can't select versions from package '%s' as it is purely virtual"
 msgstr ""
 
-#: apt-pkg/cacheset.cc:480 apt-pkg/cacheset.cc:488
+#: apt-pkg/cacheset.cc:490 apt-pkg/cacheset.cc:497
 #, c-format
 msgid ""
 "Can't select installed nor candidate version from package '%s' as it has "
 "neither of them"
 msgstr ""
 
-#: apt-pkg/cacheset.cc:496
+#: apt-pkg/cacheset.cc:504
 #, c-format
 msgid "Can't select newest version from package '%s' as it is purely virtual"
 msgstr ""
 
-#: apt-pkg/cacheset.cc:504
+#: apt-pkg/cacheset.cc:512
 #, c-format
 msgid "Can't select candidate version from package %s as it has no candidate"
 msgstr ""
 
-#: apt-pkg/cacheset.cc:512
+#: apt-pkg/cacheset.cc:520
 #, c-format
 msgid "Can't select installed version from package %s as it is not installed"
 msgstr ""
@@ -3241,14 +3237,14 @@ msgstr ""
 msgid "[Mirror: %s]"
 msgstr ""
 
-#: methods/rred.cc:509
+#: methods/rred.cc:470
 #, c-format
 msgid ""
 "Could not patch %s with mmap and with file operation usage - the patch seems "
 "to be corrupt."
 msgstr ""
 
-#: methods/rred.cc:514
+#: methods/rred.cc:475
 #, c-format
 msgid ""
 "Could not patch %s with mmap (but no mmap specific fail) - the patch seems "
index d70cf8da0d936107592d570032d5d69acd272084..cc2a9d8baa4d57db48058553d51a397bed1b10b0 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,14 +9,14 @@ msgstr ""
 "Project-Id-Version: fr\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-07-26 12:05+0200\n"
-"PO-Revision-Date: 2011-02-16 07:44+0100\n"
+"PO-Revision-Date: 2011-10-24 22:52+0100\n"
 "Last-Translator: Christian Perrier <bubulle@debian.org>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
 "Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Lokalize 1.2\n"
 "Plural-Forms: Plural-Forms: nplurals=2; plural=n>1;\n"
 
 #: cmdline/apt-cache.cc:154
@@ -109,7 +109,7 @@ msgstr "Vous devez fournir au moins un motif de recherche"
 
 #: cmdline/apt-cache.cc:1353
 msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
-msgstr ""
+msgstr "Cette commande est obsolète. Veuillez utiliser « apt-mark showauto »."
 
 #: cmdline/apt-cache.cc:1448 apt-pkg/cacheset.cc:440
 #, c-format
@@ -162,7 +162,6 @@ msgid "%s %s for %s compiled on %s %s\n"
 msgstr "%s %s pour %s compilé sur %s %s\n"
 
 #: cmdline/apt-cache.cc:1682
-#, fuzzy
 msgid ""
 "Usage: apt-cache [options] command\n"
 "       apt-cache [options] showpkg pkg1 [pkg2 ...]\n"
@@ -216,7 +215,6 @@ msgstr ""
 "   unmet - Affiche les dépendances manquantes\n"
 "   search - Cherche une expression rationnelle dans la liste des paquets\n"
 "   show - Affiche la description du paquet\n"
-"   showauto - Affiche la liste des paquets installés automatiquement\n"
 "   depends - Affiche toutes les dépendances d'un paquet\n"
 "   rdepends - Affiche les dépendances inverses d'un paquet\n"
 "   pkgnames - Liste le nom de tous les paquets du système\n"
@@ -1197,6 +1195,8 @@ msgid ""
 "This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
 "instead."
 msgstr ""
+"Cette commande est obsolète. Veuillez utiliser « apt-mark auto » et "
+"« apt-mark manual »."
 
 #: cmdline/apt-get.cc:2114
 msgid "Calculating upgrade... "
@@ -1325,6 +1325,9 @@ msgid ""
 "No architecture information available for %s. See apt.conf(5) APT::"
 "Architectures for setup"
 msgstr ""
+"Aucune information sur l'architecture n'est disponible pour %s. Veuillez "
+"consulter la section à propos de APT::Architectures dans la page de manuel "
+"apt.conf(5)."
 
 #: cmdline/apt-get.cc:2718
 #, c-format
@@ -1337,13 +1340,13 @@ msgid "%s has no build depends.\n"
 msgstr "%s n'a pas de dépendance de construction.\n"
 
 #: cmdline/apt-get.cc:2868
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
 "packages"
 msgstr ""
-"La dépendance %s vis-à-vis de %s ne peut être satisfaite car le paquet %s ne "
-"peut être trouvé"
+"La dépendance %s vis-à-vis de %s ne peut être satisfaite car %s n'est pas "
+"autorisé avec les paquets « %s »."
 
 #: cmdline/apt-get.cc:2889
 #, c-format
@@ -1362,22 +1365,22 @@ msgstr ""
 "est trop récent"
 
 #: cmdline/apt-get.cc:2951
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because candidate version of "
 "package %s can't satisfy version requirements"
 msgstr ""
 "La dépendance %s vis-à-vis de %s ne peut être satisfaite car aucune version "
-"du paquet %s ne peut satisfaire à la version requise"
+"disponible du paquet %s ne peut satisfaire les prérequis de version."
 
 #: cmdline/apt-get.cc:2957
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because package %s has no candidate "
 "version"
 msgstr ""
-"La dépendance %s vis-à-vis de %s ne peut être satisfaite car le paquet %s ne "
-"peut être trouvé"
+"La dépendance %s vis-à-vis de %s ne peut être satisfaite car le paquet %s n'a "
+"pas de version disponible."
 
 #: cmdline/apt-get.cc:2980
 #, c-format
@@ -1404,7 +1407,6 @@ msgid "Supported modules:"
 msgstr "Modules reconnus :"
 
 #: cmdline/apt-get.cc:3266
-#, fuzzy
 msgid ""
 "Usage: apt-get [options] command\n"
 "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
@@ -1471,8 +1473,6 @@ msgstr ""
 "  clean - Supprime dans le cache local tous les fichiers téléchargés\n"
 "  autoclean - Supprime dans le cache local les fichiers inutiles\n"
 "  check - Vérifie qu'il n'y a pas de rupture de dépendances\n"
-"  markauto - Marque les paquets indiqués comme installés automatiquement\n"
-"  unmarkauto - Marque les paquets indiqués comme installés manuellement\n"
 "  changelog - Télécharge et affiche le journal des modifications\n"
 "              («  changelog ») du paquet indiqué\n"
 "  download - Télécharge le paquet dinaire dans le répertoire courant\n"
@@ -1548,43 +1548,45 @@ msgstr ""
 "dans le lecteur « %s » et appuyez sur la touche Entrée\n"
 
 #: cmdline/apt-mark.cc:46
-#, fuzzy, c-format
+#, c-format
 msgid "%s can not be marked as it is not installed.\n"
-msgstr "mais il n'est pas installé"
+msgstr "%s ne peut pas être marqué car il n'est pas installé.\n"
 
 #: cmdline/apt-mark.cc:52
-#, fuzzy, c-format
+#, c-format
 msgid "%s was already set to manually installed.\n"
-msgstr "%s passé en « installé manuellement ».\n"
+msgstr "%s était déjà marqué comme installé manuellement.\n"
 
 #: cmdline/apt-mark.cc:54
-#, fuzzy, c-format
+#, c-format
 msgid "%s was already set to automatically installed.\n"
-msgstr "%s passé en « installé automatiquement ».\n"
+msgstr "%s était déjà marqué comme installé automatiquement.\n"
 
 #: cmdline/apt-mark.cc:169
-#, fuzzy, c-format
+#, c-format
 msgid "%s was already set on hold.\n"
-msgstr "%s est déjà la plus récente version disponible.\n"
+msgstr "%s était déjà marqué comme figé (« hold »).\n"
 
 #: cmdline/apt-mark.cc:171
-#, fuzzy, c-format
+#, c-format
 msgid "%s was already not hold.\n"
-msgstr "%s est déjà la plus récente version disponible.\n"
+msgstr "%s était déjà marqué comme non figé.\n"
 
 #: cmdline/apt-mark.cc:185 cmdline/apt-mark.cc:207
-#, fuzzy, c-format
+#, c-format
 msgid "%s set on hold.\n"
-msgstr "%s passé en « installé manuellement ».\n"
+msgstr "%s passé en figé (« hold »).\n"
 
 #: cmdline/apt-mark.cc:187 cmdline/apt-mark.cc:212
-#, fuzzy, c-format
+#, c-format
 msgid "Canceled hold on %s.\n"
-msgstr "Impossible d'ouvrir %s"
+msgstr "Annulation de l'état figé pour %s.\n"
 
 #: cmdline/apt-mark.cc:220
 msgid "Executing dpkg failed. Are you root?"
 msgstr ""
+"Échec de l'exécution de dpkg. Possédez-vous les privilèges du "
+"superutilisateur ?"
 
 #: cmdline/apt-mark.cc:268
 msgid ""
@@ -3005,6 +3007,8 @@ msgid ""
 "The value '%s' is invalid for APT::Default-Release as such a release is not "
 "available in the sources"
 msgstr ""
+"La valeur « %s » n'est pas valable pour APT::Default-Release car cette "
+"version ne fait pas partie des sources disponibles."
 
 #: apt-pkg/policy.cc:389
 #, c-format
@@ -3162,6 +3166,8 @@ msgid ""
 "Release file for %s is expired (invalid since %s). Updates for this "
 "repository will not be applied."
 msgstr ""
+"Le fichier « Release » pour %s a expiré (plus valable depuis %s). Les mises à "
+"jour depuis ce dépôt  ne s'effectueront pas."
 
 #: apt-pkg/acquire-item.cc:1499
 #, c-format
@@ -3374,7 +3380,7 @@ msgstr "Somme de contrôle de hachage incohérente pour %s"
 #: apt-pkg/indexcopy.cc:677
 #, c-format
 msgid "File %s doesn't start with a clearsigned message"
-msgstr ""
+msgstr "Le fichier %s ne commence pas par un message signé en clair."
 
 #. TRANSLATOR: %s is the trusted keyring parts directory
 #: apt-pkg/indexcopy.cc:708
@@ -3610,9 +3616,9 @@ msgstr "Aucun fichier miroir « %s » n'a été trouvé"
 #. FIXME: fallback to a default mirror here instead
 #. and provide a config option to define that default
 #: methods/mirror.cc:267
-#, fuzzy, c-format
+#, c-format
 msgid "Can not read mirror file '%s'"
-msgstr "Aucun fichier miroir « %s » n'a été trouvé"
+msgstr "Impossible de lire le fichier de miroir « %s »."
 
 #: methods/mirror.cc:422
 #, c-format
index c6b254c5ddabec5fa00c4d5f15511274ae706c1d..e3bb07d08c574b8927090547ca216f6717ce5e15 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,24 +1,25 @@
-# translation of nl.po to Dutch
-# advanced package transfer - apt message translation catalog
-#
-# guus sliepen <guus@sliepen.warande.net>, 2002.
-# jochem berends <j@jochem.net>, 2002.
-# wannes soenen <wannes@wannes.cjb.net>, 2002.
+# Dutch translation of apt.
+# Copyright (C) 2002-2011 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the apt package.
+# Guus Sliepen <guus@sliepen.warande.net>, 2002.
+# Jochem Berends <j@jochem.net>, 2002.
+# Wannes Soenen <wannes@wannes.cjb.net>, 2002.
 # Frans Pop <elendil@planet.nl>, 2010.
+# Jeroen Schot <schot@a-eskwadraat.nl>, 2011. 
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: nl\n"
+"Project-Id-Version: apt 0.8.15.9\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-07-26 12:05+0200\n"
-"PO-Revision-Date: 2010-03-16 06:52+0100\n"
-"Last-Translator: Frans Pop <elendil@planet.nl>\n"
-"Language-Team: Dutch <debian-l10n-dutch@lists.debian.org>\n"
+"POT-Creation-Date: 2011-10-14 12:59+0200\n"
+"PO-Revision-Date: 2011-12-05 17:10+0100\n"
+"Last-Translator: Jeroen Schot <schot@a-eskwadraat.nl>\n"
+"Language-Team: Debian l10n Dutch <debian-l10n-dutch@lists.debian.org>\n"
 "Language: nl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Dutch\n"
-"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 #: cmdline/apt-cache.cc:154
 #, c-format
@@ -30,9 +31,8 @@ msgid "Total package names: "
 msgstr "Totaal aantal pakketnamen: "
 
 #: cmdline/apt-cache.cc:284
-#, fuzzy
 msgid "Total package structures: "
-msgstr "Totaal aantal pakketnamen: "
+msgstr "Totaal aantal pakketstructuren: "
 
 #: cmdline/apt-cache.cc:324
 msgid "  Normal packages: "
@@ -106,9 +106,8 @@ msgid "No packages found"
 msgstr "Geen pakketten gevonden"
 
 #: cmdline/apt-cache.cc:1218
-#, fuzzy
 msgid "You must give at least one search pattern"
-msgstr "U dient precies één patroon op te geven"
+msgstr "U dient precies één zoekpatroon op te geven"
 
 #: cmdline/apt-cache.cc:1353
 msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
@@ -159,13 +158,50 @@ msgstr "  Versietabel:"
 
 #: cmdline/apt-cache.cc:1675 cmdline/apt-cdrom.cc:197 cmdline/apt-config.cc:73
 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:589
-#: cmdline/apt-get.cc:3220 cmdline/apt-mark.cc:264 cmdline/apt-sortpkgs.cc:144
+#: cmdline/apt-get.cc:3235 cmdline/apt-mark.cc:264 cmdline/apt-sortpkgs.cc:144
 #, c-format
 msgid "%s %s for %s compiled on %s %s\n"
 msgstr "%s %s voor %s gecompileerd op %s %s\n"
 
 #: cmdline/apt-cache.cc:1682
 #, fuzzy
+#| msgid ""
+#| "Usage: apt-cache [options] command\n"
+#| "       apt-cache [options] add file1 [file2 ...]\n"
+#| "       apt-cache [options] showpkg pkg1 [pkg2 ...]\n"
+#| "       apt-cache [options] showsrc pkg1 [pkg2 ...]\n"
+#| "\n"
+#| "apt-cache is a low-level tool used to manipulate APT's binary\n"
+#| "cache files, and query information from them\n"
+#| "\n"
+#| "Commands:\n"
+#| "   add - Add a package file to the source cache\n"
+#| "   gencaches - Build both the package and source cache\n"
+#| "   showpkg - Show some general information for a single package\n"
+#| "   showsrc - Show source records\n"
+#| "   stats - Show some basic statistics\n"
+#| "   dump - Show the entire file in a terse form\n"
+#| "   dumpavail - Print an available file to stdout\n"
+#| "   unmet - Show unmet dependencies\n"
+#| "   search - Search the package list for a regex pattern\n"
+#| "   show - Show a readable record for the package\n"
+#| "   showauto - Display a list of automatically installed packages\n"
+#| "   depends - Show raw dependency information for a package\n"
+#| "   rdepends - Show reverse dependency information for a package\n"
+#| "   pkgnames - List the names of all packages in the system\n"
+#| "   dotty - Generate package graphs for GraphViz\n"
+#| "   xvcg - Generate package graphs for xvcg\n"
+#| "   policy - Show policy settings\n"
+#| "\n"
+#| "Options:\n"
+#| "  -h   This help text.\n"
+#| "  -p=? The package cache.\n"
+#| "  -s=? The source cache.\n"
+#| "  -q   Disable progress indicator.\n"
+#| "  -i   Show only important deps for the unmet command.\n"
+#| "  -c=? Read this configuration file\n"
+#| "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#| "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
 msgid ""
 "Usage: apt-cache [options] command\n"
 "       apt-cache [options] showpkg pkg1 [pkg2 ...]\n"
@@ -210,32 +246,33 @@ msgstr ""
 "van APT kunt manipuleren en informatie daaruit kunt opvragen.\n"
 "\n"
 "Opdrachten:\n"
-"   add - Voeg een pakketbestand toe aan de broncache\n"
-"   gencaches - Bouw zowel de pakket- als de broncache\n"
-"   showpkg - Toon algemene informatie over een enkel pakket\n"
-"   showsrc - Toon bronrecords\n"
-"   stats - Toon enkele basisstatistieken\n"
-"   dump - Toon het gehele bestand in een compacte vorm\n"
-"   dumpavail - Print een beschikbaarheidsbestand op stdout\n"
-"   unmet - Toon niet voldane vereisten\n"
-"   search - Toon lijst met pakketten die met regexpatroon overeenkomen\n"
-"   show - Toon een leesbaar overzicht voor het pakket\n"
-"   depends - Toon de afhankelijkheden van een pakket\n"
-"   rdepends - Toon de pakketten die afhankelijk zijn van een pakket\n"
-"   pkgnames - Toon de namen van alle pakketten op het systeem\n"
-"   dotty - Genereer pakketgrafen voor GraphViz\n"
-"   xvcg - Genereer pakketgrafen voor xvcg\n"
-"   policy - Toon beleidsinstellingen\n"
+"   add - Voeg een pakketbestand toe aan de broncache.\n"
+"   gencaches - Bouw zowel de pakket- als de broncache.\n"
+"   showpkg - Toon algemene informatie over een enkel pakket.\n"
+"   showsrc - Toon bronrecords.\n"
+"   stats - Toon enkele basisstatistieken.\n"
+"   dump - Toon het gehele bestand in een compacte vorm.\n"
+"   dumpavail - Print een beschikbaarheidsbestand op de standaarduitvoer.\n"
+"   unmet - Toon niet-voldane vereisten.\n"
+"   search - Toon lijst met pakketten die met regexpatroon overeenkomen.\n"
+"   show - Toon een leesbaar overzicht voor het pakket.\n"
+"   showauto - Toon een lijst van automatisch geïnstalleerde pakketten.\n"
+"   depends - Toon de afhankelijkheden van een pakket.\n"
+"   rdepends - Toon de pakketten die afhankelijk zijn van een pakket.\n"
+"   pkgnames - Toon de namen van alle pakketten op het systeem.\n"
+"   dotty - Genereer pakketgrafen voor GraphViz.\n"
+"   xvcg - Genereer pakketgrafen voor xvcg.\n"
+"   policy - Toon beleidsinstellingen.\n"
 "\n"
 "Opties:\n"
-"  -h   Deze hulptekst\n"
-"  -p=? De pakketcache\n"
-"  -s=? De broncache\n"
-"  -q   Voortgangsindicator uitschakelen\n"
-"  -i   Toon alleen belangrijke vereisten voor de 'unmet' opdracht\n"
-"  -c=? Lees dit configuratiebestand\n"
-"  -o=? Stel een willekeurige optie in, b.v. -o dir::cache=/tmp\n"
-"Zie de apt-cache(8) en apt.conf(5) handleidingen voor meer informatie.\n"
+"  -h   Deze hulptekst.\n"
+"  -p=? De pakketcache.\n"
+"  -s=? De broncache.\n"
+"  -q   Voortgangsindicator uitschakelen.\n"
+"  -i   Toon alleen belangrijke vereisten voor de 'unmet'-opdracht.\n"
+"  -c=? Lees dit configuratiebestand.\n"
+"  -o=? Stel een willekeurige optie in, b.v. -o dir::cache=/tmp.\n"
+"Zie de man-pagina's van apt-cache(8) en apt.conf(5) voor meer informatie.\n"
 
 #: cmdline/apt-cdrom.cc:77
 msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
@@ -248,9 +285,9 @@ msgid "Please insert a Disc in the drive and press enter"
 msgstr "Gelieve een schijf in het station te plaatsen en op 'enter' te drukken"
 
 #: cmdline/apt-cdrom.cc:127
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to mount '%s' to '%s'"
-msgstr "Hernoemen van %s naar %s is mislukt"
+msgstr "Aankoppelen van '%s' op '%s' is mislukt"
 
 #: cmdline/apt-cdrom.cc:162
 msgid "Repeat this process for the rest of the CDs in your set."
@@ -319,7 +356,7 @@ msgstr ""
 "  -c=? Lees dit configuratiebestand.\n"
 "  -o=? Stel een willekeurige optie in, b.v. -o dir::cache=/tmp\n"
 
-#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:1149
+#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:1164
 #, c-format
 msgid "Unable to write to %s"
 msgstr "Kan niet naar %s schrijven"
@@ -478,7 +515,7 @@ msgstr "stat op %s is mislukt"
 msgid "Archive has no control record"
 msgstr "Archief heeft geen 'control'-record"
 
-#: ftparchive/cachedb.cc:448
+#: ftparchive/cachedb.cc:452
 msgid "Unable to get a cursor"
 msgstr "Kan geen cursor verkrijgen"
 
@@ -763,14 +800,14 @@ msgid "%lu not fully installed or removed.\n"
 msgstr "%lu pakketten niet volledig geïnstalleerd of verwijderd.\n"
 
 #: cmdline/apt-get.cc:628
-#, fuzzy, c-format
+#, c-format
 msgid "Note, selecting '%s' for task '%s'\n"
-msgstr "Let op, %s wordt geselecteerd omwille van de regex '%s'\n"
+msgstr "Let op, '%s' wordt geselecteerd omwille van de taak '%s'\n"
 
 #: cmdline/apt-get.cc:634
-#, fuzzy, c-format
+#, c-format
 msgid "Note, selecting '%s' for regex '%s'\n"
-msgstr "Let op, %s wordt geselecteerd omwille van de regex '%s'\n"
+msgstr "Let op, '%s' wordt geselecteerd omwille van de regex '%s'\n"
 
 #: cmdline/apt-get.cc:651
 #, c-format
@@ -782,9 +819,8 @@ msgid " [Installed]"
 msgstr " [Geïnstalleerd]"
 
 #: cmdline/apt-get.cc:671
-#, fuzzy
 msgid " [Not candidate version]"
-msgstr "Kandidaat-versies"
+msgstr "[Niet de kandidaat-versie]"
 
 #: cmdline/apt-get.cc:673
 msgid "You should explicitly select one to install."
@@ -806,19 +842,19 @@ msgid "However the following packages replace it:"
 msgstr "Echter, de volgende pakketten vervangen dit:"
 
 #: cmdline/apt-get.cc:706
-#, fuzzy, c-format
+#, c-format
 msgid "Package '%s' has no installation candidate"
-msgstr "Pakket %s heeft geen installeerbare kandidaat"
+msgstr "Pakket '%s' heeft geen kandidaat voor installatie"
 
 #: cmdline/apt-get.cc:717
 #, c-format
 msgid "Virtual packages like '%s' can't be removed\n"
-msgstr ""
+msgstr "Virtuele pakketten zoals '%s' kunnen niet worden verwijderd\n"
 
 #: cmdline/apt-get.cc:748
-#, fuzzy, c-format
+#, c-format
 msgid "Note, selecting '%s' instead of '%s'\n"
-msgstr "Let op, %s wordt geselecteerd in plaats van %s\n"
+msgstr "Let op, '%s' wordt geselecteerd in plaats van '%s'\n"
 
 #: cmdline/apt-get.cc:778
 #, c-format
@@ -828,10 +864,10 @@ msgstr ""
 "gevraagd.\n"
 
 #: cmdline/apt-get.cc:782
-#, fuzzy, c-format
+#, c-format
 msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
 msgstr ""
-"%s wordt overgeslagen, het is al geïnstalleerd en opwaardering is niet "
+"%s wordt overgeslagen, het is niet geïnstalleerd en alleen opwaardering is "
 "gevraagd.\n"
 
 #: cmdline/apt-get.cc:794
@@ -845,88 +881,89 @@ msgstr ""
 msgid "%s is already the newest version.\n"
 msgstr "%s is reeds de nieuwste versie.\n"
 
-#: cmdline/apt-get.cc:818 cmdline/apt-get.cc:2088 cmdline/apt-mark.cc:59
+#: cmdline/apt-get.cc:818 cmdline/apt-get.cc:2096 cmdline/apt-mark.cc:59
 #, c-format
 msgid "%s set to manually installed.\n"
 msgstr "%s is ingesteld voor handmatige installatie.\n"
 
 #: cmdline/apt-get.cc:844
-#, fuzzy, c-format
+#, c-format
 msgid "Selected version '%s' (%s) for '%s'\n"
-msgstr "Versie %s (%s) geselecteerd voor %s\n"
+msgstr "Versie '%s' (%s) geselecteerd voor '%s'\n"
 
 #: cmdline/apt-get.cc:849
 #, fuzzy, c-format
+#| msgid "Selected version '%s' (%s) for '%s'\n"
 msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
-msgstr "Versie %s (%s) geselecteerd voor %s\n"
+msgstr "Versie '%s' (%s) geselecteerd voor '%s'\n"
 
-#: cmdline/apt-get.cc:893
+#: cmdline/apt-get.cc:891
 #, c-format
 msgid "Package %s is not installed, so not removed\n"
 msgstr "Pakket %s is niet geïnstalleerd, en wordt dus niet verwijderd\n"
 
-#: cmdline/apt-get.cc:971
+#: cmdline/apt-get.cc:969
 msgid "Correcting dependencies..."
 msgstr "Vereisten worden gecorrigeerd..."
 
-#: cmdline/apt-get.cc:974
+#: cmdline/apt-get.cc:972
 msgid " failed."
 msgstr " mislukt."
 
-#: cmdline/apt-get.cc:977
+#: cmdline/apt-get.cc:975
 msgid "Unable to correct dependencies"
 msgstr "Kan vereisten niet corrigeren"
 
-#: cmdline/apt-get.cc:980
+#: cmdline/apt-get.cc:978
 msgid "Unable to minimize the upgrade set"
 msgstr "Kon de verzameling op te waarderen pakketten niet minimaliseren"
 
-#: cmdline/apt-get.cc:982
+#: cmdline/apt-get.cc:980
 msgid " Done"
 msgstr " Klaar"
 
-#: cmdline/apt-get.cc:986
+#: cmdline/apt-get.cc:984
 msgid "You might want to run 'apt-get -f install' to correct these."
 msgstr "U kunt 'apt-get -f install' uitvoeren om dit op te lossen."
 
-#: cmdline/apt-get.cc:989
+#: cmdline/apt-get.cc:987
 msgid "Unmet dependencies. Try using -f."
 msgstr "Er zijn vereisten waaraan niet voldaan is. Probeer -f te gebruiken."
 
-#: cmdline/apt-get.cc:1014
+#: cmdline/apt-get.cc:1012
 msgid "WARNING: The following packages cannot be authenticated!"
 msgstr ""
 "WAARSCHUWING: De volgende pakketten kunnen niet geauthentificeerd worden:"
 
-#: cmdline/apt-get.cc:1018
+#: cmdline/apt-get.cc:1016
 msgid "Authentication warning overridden.\n"
 msgstr "Authentificatiewaarschuwing is genegeerd.\n"
 
-#: cmdline/apt-get.cc:1025
+#: cmdline/apt-get.cc:1023
 msgid "Install these packages without verification [y/N]? "
 msgstr "Wilt u deze pakketten installeren zonder verificatie [j/N]? "
 
-#: cmdline/apt-get.cc:1027
+#: cmdline/apt-get.cc:1025
 msgid "Some packages could not be authenticated"
 msgstr "Sommige pakketten konden niet geauthentificeerd worden"
 
-#: cmdline/apt-get.cc:1036 cmdline/apt-get.cc:1197
+#: cmdline/apt-get.cc:1034 cmdline/apt-get.cc:1195
 msgid "There are problems and -y was used without --force-yes"
 msgstr "Er zijn problemen en -y was gebruikt zonder --force-yes"
 
-#: cmdline/apt-get.cc:1077
+#: cmdline/apt-get.cc:1075
 msgid "Internal error, InstallPackages was called with broken packages!"
 msgstr "Interne fout, InstallPackages is aangeroepen met defecte pakketten!"
 
-#: cmdline/apt-get.cc:1086
+#: cmdline/apt-get.cc:1084
 msgid "Packages need to be removed but remove is disabled."
 msgstr "Pakketten moeten verwijderd worden maar verwijderen is uitgeschakeld."
 
-#: cmdline/apt-get.cc:1097
+#: cmdline/apt-get.cc:1095
 msgid "Internal error, Ordering didn't finish"
 msgstr "Interne fout, rangschikken is niet voltooid"
 
-#: cmdline/apt-get.cc:1135
+#: cmdline/apt-get.cc:1133
 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org"
 msgstr ""
 "Merkwaardig... De groottes kwamen niet overeen, gelieve apt@packages.debian."
@@ -934,52 +971,52 @@ msgstr ""
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1142
+#: cmdline/apt-get.cc:1140
 #, c-format
 msgid "Need to get %sB/%sB of archives.\n"
 msgstr "Er moeten %sB/%sB aan archieven opgehaald worden.\n"
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1147
+#: cmdline/apt-get.cc:1145
 #, c-format
 msgid "Need to get %sB of archives.\n"
 msgstr "Er moeten %sB aan archieven opgehaald worden.\n"
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1154
+#: cmdline/apt-get.cc:1152
 #, c-format
 msgid "After this operation, %sB of additional disk space will be used.\n"
 msgstr "Door deze operatie zal er %sB extra schijfruimte gebruikt worden.\n"
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1159
+#: cmdline/apt-get.cc:1157
 #, c-format
 msgid "After this operation, %sB disk space will be freed.\n"
 msgstr "Door deze operatie zal er %sB schijfruimte vrijkomen.\n"
 
-#: cmdline/apt-get.cc:1174 cmdline/apt-get.cc:1177 cmdline/apt-get.cc:2499
-#: cmdline/apt-get.cc:2502
+#: cmdline/apt-get.cc:1172 cmdline/apt-get.cc:1175 cmdline/apt-get.cc:2514
+#: cmdline/apt-get.cc:2517
 #, c-format
 msgid "Couldn't determine free space in %s"
 msgstr "Kon de hoeveelheid vrije schijfruimte op %s niet bepalen"
 
-#: cmdline/apt-get.cc:1187
+#: cmdline/apt-get.cc:1185
 #, c-format
 msgid "You don't have enough free space in %s."
 msgstr "U heeft onvoldoende vrije schijfruimte op %s."
 
-#: cmdline/apt-get.cc:1203 cmdline/apt-get.cc:1223
+#: cmdline/apt-get.cc:1201 cmdline/apt-get.cc:1221
 msgid "Trivial Only specified but this is not a trivial operation."
 msgstr "'Trivial Only' is opgegeven, dit is echter geen triviale bewerking."
 
-#: cmdline/apt-get.cc:1205
+#: cmdline/apt-get.cc:1203
 msgid "Yes, do as I say!"
 msgstr "Ja, doe wat ik zeg!"
 
-#: cmdline/apt-get.cc:1207
+#: cmdline/apt-get.cc:1205
 #, c-format
 msgid ""
 "You are about to do something potentially harmful.\n"
@@ -990,28 +1027,28 @@ msgstr ""
 "Als u wilt doorgaan, dient u de zin '%s' in te typen.\n"
 " ?] "
 
-#: cmdline/apt-get.cc:1213 cmdline/apt-get.cc:1232
+#: cmdline/apt-get.cc:1211 cmdline/apt-get.cc:1230
 msgid "Abort."
 msgstr "Afbreken."
 
-#: cmdline/apt-get.cc:1228
+#: cmdline/apt-get.cc:1226
 msgid "Do you want to continue [Y/n]? "
 msgstr "Wilt u doorgaan [J/n]? "
 
-#: cmdline/apt-get.cc:1300 cmdline/apt-get.cc:2564 apt-pkg/algorithms.cc:1438
+#: cmdline/apt-get.cc:1298 cmdline/apt-get.cc:2579 apt-pkg/algorithms.cc:1445
 #, c-format
 msgid "Failed to fetch %s  %s\n"
 msgstr "Ophalen van %s is mislukt  %s\n"
 
-#: cmdline/apt-get.cc:1318
+#: cmdline/apt-get.cc:1316
 msgid "Some files failed to download"
 msgstr "Ophalen van sommige bestanden is mislukt"
 
-#: cmdline/apt-get.cc:1319 cmdline/apt-get.cc:2576
+#: cmdline/apt-get.cc:1317 cmdline/apt-get.cc:2591
 msgid "Download complete and in download only mode"
 msgstr "Ophalen klaar en alleen-ophalen-modus staat aan"
 
-#: cmdline/apt-get.cc:1325
+#: cmdline/apt-get.cc:1323
 msgid ""
 "Unable to fetch some archives, maybe run apt-get update or try with --fix-"
 "missing?"
@@ -1019,19 +1056,19 @@ msgstr ""
 "Kon sommige archieven niet ophalen, misschien kunt u 'apt-get update' of --"
 "fix-missing proberen?"
 
-#: cmdline/apt-get.cc:1329
+#: cmdline/apt-get.cc:1327
 msgid "--fix-missing and media swapping is not currently supported"
 msgstr "--fix-missing en medium wisselen wordt op dit moment niet ondersteund"
 
-#: cmdline/apt-get.cc:1334
+#: cmdline/apt-get.cc:1332
 msgid "Unable to correct missing packages."
 msgstr "Geen oplossing voor de missende pakketten gevonden."
 
-#: cmdline/apt-get.cc:1335
+#: cmdline/apt-get.cc:1333
 msgid "Aborting install."
 msgstr "Installatie wordt afgebroken."
 
-#: cmdline/apt-get.cc:1363
+#: cmdline/apt-get.cc:1361
 msgid ""
 "The following package disappeared from your system as\n"
 "all files have been overwritten by other packages:"
@@ -1039,37 +1076,41 @@ msgid_plural ""
 "The following packages disappeared from your system as\n"
 "all files have been overwritten by other packages:"
 msgstr[0] ""
+"Het volgende pakket is van uw systeem verdwenen omdat\n"
+"alle bestanden zijn overschreven door andere pakketten:"
 msgstr[1] ""
+"De volgende pakketten zijn van uw systeem verdwenen omdat\n"
+"alle bestanden zijn overschreven door andere pakketten:"
 
-#: cmdline/apt-get.cc:1367
+#: cmdline/apt-get.cc:1365
 msgid "Note: This is done automatic and on purpose by dpkg."
-msgstr ""
+msgstr "Let op: Dit wordt automatische en bewust door dpkg gedaan."
 
-#: cmdline/apt-get.cc:1505
+#: cmdline/apt-get.cc:1503
 #, c-format
 msgid "Ignore unavailable target release '%s' of package '%s'"
 msgstr "Negeer niet beschikbare doelrelease '%s' van pakket '%s'"
 
-#: cmdline/apt-get.cc:1537
+#: cmdline/apt-get.cc:1535
 #, c-format
 msgid "Picking '%s' as source package instead of '%s'\n"
 msgstr "'%s' wordt genomen als bronpakket in plaats van '%s'\n"
 
 #. if (VerTag.empty() == false && Last == 0)
-#: cmdline/apt-get.cc:1575
+#: cmdline/apt-get.cc:1573
 #, c-format
 msgid "Ignore unavailable version '%s' of package '%s'"
 msgstr "Negeer niet beschikbare versie '%s' van pakket '%s'"
 
-#: cmdline/apt-get.cc:1591
+#: cmdline/apt-get.cc:1589
 msgid "The update command takes no arguments"
 msgstr "De opdracht 'update' aanvaard geen argumenten"
 
-#: cmdline/apt-get.cc:1653
+#: cmdline/apt-get.cc:1652
 msgid "We are not supposed to delete stuff, can't start AutoRemover"
 msgstr "We mogen geen dingen verwijderen, kan AutoRemover niet starten"
 
-#: cmdline/apt-get.cc:1748
+#: cmdline/apt-get.cc:1756
 msgid ""
 "Hmm, seems like the AutoRemover destroyed something which really\n"
 "shouldn't happen. Please file a bug report against apt."
@@ -1087,53 +1128,50 @@ msgstr ""
 #. "that package should be filed.") << endl;
 #. }
 #.
-#: cmdline/apt-get.cc:1751 cmdline/apt-get.cc:1921
+#: cmdline/apt-get.cc:1759 cmdline/apt-get.cc:1929
 msgid "The following information may help to resolve the situation:"
 msgstr "De volgende informatie helpt u mogelijk verder:"
 
-#: cmdline/apt-get.cc:1755
+#: cmdline/apt-get.cc:1763
 msgid "Internal Error, AutoRemover broke stuff"
 msgstr "Interne fout, AutoRemover heeft dingen stukgemaakt"
 
-#: cmdline/apt-get.cc:1762
-#, fuzzy
+#: cmdline/apt-get.cc:1770
 msgid ""
 "The following package was automatically installed and is no longer required:"
 msgid_plural ""
 "The following packages were automatically installed and are no longer "
 "required:"
 msgstr[0] ""
-"De volgende pakketten zijn automatisch geïnstalleerd en zijn niet langer "
-"nodig:"
+"Het volgende pakket is automatisch geïnstalleerd en is niet langer nodig:"
 msgstr[1] ""
 "De volgende pakketten zijn automatisch geïnstalleerd en zijn niet langer "
 "nodig:"
 
-#: cmdline/apt-get.cc:1766
-#, fuzzy, c-format
+#: cmdline/apt-get.cc:1774
+#, c-format
 msgid "%lu package was automatically installed and is no longer required.\n"
 msgid_plural ""
 "%lu packages were automatically installed and are no longer required.\n"
-msgstr[0] ""
-"%lu pakketten zijn automatisch geïnstalleerd en zijn niet langer nodig.\n"
+msgstr[0] "%lu pakket is automatisch geïnstalleerd en is niet langer nodig.\n"
 msgstr[1] ""
 "%lu pakketten zijn automatisch geïnstalleerd en zijn niet langer nodig.\n"
 
-#: cmdline/apt-get.cc:1768
+#: cmdline/apt-get.cc:1776
 msgid "Use 'apt-get autoremove' to remove them."
 msgstr "U kunt deze verwijderen via 'apt-get autoremove'."
 
-#: cmdline/apt-get.cc:1787
+#: cmdline/apt-get.cc:1795
 msgid "Internal error, AllUpgrade broke stuff"
 msgstr "Interne fout, AllUpgrade heeft dingen stukgemaakt"
 
-#: cmdline/apt-get.cc:1886
+#: cmdline/apt-get.cc:1894
 msgid "You might want to run 'apt-get -f install' to correct these:"
 msgstr ""
 "U wilt waarschijnlijk 'apt-get -f install' uitvoeren om volgende op te "
 "lossen:"
 
-#: cmdline/apt-get.cc:1890
+#: cmdline/apt-get.cc:1898
 msgid ""
 "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
 "solution)."
@@ -1141,7 +1179,7 @@ msgstr ""
 "Er zijn niet-voldane vereisten. U kunt best 'apt-get -f install' uitvoeren "
 "zonder pakketten op te geven, (of u kunt zelf een oplossing specificeren)."
 
-#: cmdline/apt-get.cc:1906
+#: cmdline/apt-get.cc:1914
 msgid ""
 "Some packages could not be installed. This may mean that you have\n"
 "requested an impossible situation or if you are using the unstable\n"
@@ -1152,171 +1190,181 @@ msgstr ""
 "een onmogelijke situatie gevraagd hebt of dat u de 'unstable'-distributie \n"
 "gebruikt en sommige benodigde pakketten nog vastzitten in 'incoming'."
 
-#: cmdline/apt-get.cc:1924
+#: cmdline/apt-get.cc:1932
 msgid "Broken packages"
 msgstr "Niet-werkende pakketten:"
 
-#: cmdline/apt-get.cc:1950
+#: cmdline/apt-get.cc:1958
 msgid "The following extra packages will be installed:"
 msgstr "De volgende extra pakketten zullen geïnstalleerd worden:"
 
-#: cmdline/apt-get.cc:2040
+#: cmdline/apt-get.cc:2048
 msgid "Suggested packages:"
 msgstr "Voorgestelde pakketten:"
 
-#: cmdline/apt-get.cc:2041
+#: cmdline/apt-get.cc:2049
 msgid "Recommended packages:"
 msgstr "Aanbevolen pakketten:"
 
-#: cmdline/apt-get.cc:2083
+#: cmdline/apt-get.cc:2091
 #, c-format
 msgid "Couldn't find package %s"
 msgstr "Kon pakket %s niet vinden"
 
-#: cmdline/apt-get.cc:2090 cmdline/apt-mark.cc:61
-#, fuzzy, c-format
+#: cmdline/apt-get.cc:2098 cmdline/apt-mark.cc:61
+#, c-format
 msgid "%s set to automatically installed.\n"
-msgstr "%s is ingesteld voor handmatige installatie.\n"
+msgstr "%s is ingesteld op automatische geïnstalleerd.\n"
 
-#: cmdline/apt-get.cc:2098 cmdline/apt-mark.cc:105
+#: cmdline/apt-get.cc:2106 cmdline/apt-mark.cc:105
 msgid ""
 "This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' "
 "instead."
 msgstr ""
 
-#: cmdline/apt-get.cc:2114
+#: cmdline/apt-get.cc:2122
 msgid "Calculating upgrade... "
 msgstr "Opwaardering wordt doorgerekend... "
 
-#: cmdline/apt-get.cc:2117 methods/ftp.cc:707 methods/connect.cc:111
+#: cmdline/apt-get.cc:2125 methods/ftp.cc:708 methods/connect.cc:111
 msgid "Failed"
 msgstr "Mislukt"
 
-#: cmdline/apt-get.cc:2122
+#: cmdline/apt-get.cc:2130
 msgid "Done"
 msgstr "Klaar"
 
-#: cmdline/apt-get.cc:2189 cmdline/apt-get.cc:2197
+#: cmdline/apt-get.cc:2197 cmdline/apt-get.cc:2205
 msgid "Internal error, problem resolver broke stuff"
 msgstr "Interne fout, probleemoplosser heeft dingen stukgemaakt"
 
-#: cmdline/apt-get.cc:2221 cmdline/apt-get.cc:2254
+#: cmdline/apt-get.cc:2233 cmdline/apt-get.cc:2269
 msgid "Unable to lock the download directory"
 msgstr "Kon de ophaalmap niet vergrendelen"
 
-#: cmdline/apt-get.cc:2305
+#: cmdline/apt-get.cc:2320
 #, c-format
 msgid "Downloading %s %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2361
+#: cmdline/apt-get.cc:2376
 msgid "Must specify at least one package to fetch source for"
 msgstr ""
 "U dient minstens 1 pakket op te geven waarvan de broncode opgehaald moet "
 "worden"
 
-#: cmdline/apt-get.cc:2401 cmdline/apt-get.cc:2713
+#: cmdline/apt-get.cc:2416 cmdline/apt-get.cc:2728
 #, c-format
 msgid "Unable to find a source package for %s"
 msgstr "Kan geen bronpakket vinden voor %s"
 
-#: cmdline/apt-get.cc:2418
+#: cmdline/apt-get.cc:2433
 #, c-format
 msgid ""
 "NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
 "%s\n"
 msgstr ""
+"MERK OP: Het verpakken van '%s' wordt bijgehouden in het versiebeheersysteem "
+"'%s' op:\n"
+"%s\n"
 
-#: cmdline/apt-get.cc:2423
+#: cmdline/apt-get.cc:2438
 #, c-format
 msgid ""
 "Please use:\n"
 "bzr get %s\n"
 "to retrieve the latest (possibly unreleased) updates to the package.\n"
 msgstr ""
+"Gebruik:\n"
+"bzr get %s\n"
+"om de nieuwste (mogelijk nog niet uit uitgebrachte) versie van het pakket op "
+"te halen.\n"
 
-#: cmdline/apt-get.cc:2476
+#: cmdline/apt-get.cc:2491
 #, c-format
 msgid "Skipping already downloaded file '%s'\n"
 msgstr "Reeds opgehaald bestand '%s' wordt overgeslagen\n"
 
-#: cmdline/apt-get.cc:2513
+#: cmdline/apt-get.cc:2528
 #, c-format
 msgid "You don't have enough free space in %s"
 msgstr "U heeft niet voldoende vrije schijfruimte op %s"
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:2522
+#: cmdline/apt-get.cc:2537
 #, c-format
 msgid "Need to get %sB/%sB of source archives.\n"
 msgstr "Moet %sB/%sB aan bronarchieven ophalen.\n"
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:2527
+#: cmdline/apt-get.cc:2542
 #, c-format
 msgid "Need to get %sB of source archives.\n"
 msgstr "Moet %sB aan bronarchieven ophalen.\n"
 
-#: cmdline/apt-get.cc:2533
+#: cmdline/apt-get.cc:2548
 #, c-format
 msgid "Fetch source %s\n"
 msgstr "Ophalen bron %s\n"
 
-#: cmdline/apt-get.cc:2571
+#: cmdline/apt-get.cc:2586
 msgid "Failed to fetch some archives."
 msgstr "Ophalen van sommige archieven is mislukt."
 
-#: cmdline/apt-get.cc:2602
+#: cmdline/apt-get.cc:2617
 #, c-format
 msgid "Skipping unpack of already unpacked source in %s\n"
 msgstr "Het uitpakken van de reeds uitgepakte bron in %s wordt overgeslagen\n"
 
-#: cmdline/apt-get.cc:2614
+#: cmdline/apt-get.cc:2629
 #, c-format
 msgid "Unpack command '%s' failed.\n"
 msgstr "Uitpakopdracht '%s' is mislukt.\n"
 
-#: cmdline/apt-get.cc:2615
+#: cmdline/apt-get.cc:2630
 #, c-format
 msgid "Check if the 'dpkg-dev' package is installed.\n"
 msgstr "Gelieve na te gaan of het 'dpkg-dev'-pakket geïnstalleerd is.\n"
 
-#: cmdline/apt-get.cc:2637
+#: cmdline/apt-get.cc:2652
 #, c-format
 msgid "Build command '%s' failed.\n"
 msgstr "Bouwopdracht '%s' is mislukt.\n"
 
-#: cmdline/apt-get.cc:2657
+#: cmdline/apt-get.cc:2672
 msgid "Child process failed"
 msgstr "Dochterproces is mislukt"
 
-#: cmdline/apt-get.cc:2676
+#: cmdline/apt-get.cc:2691
 msgid "Must specify at least one package to check builddeps for"
 msgstr ""
 "U dient tenminste één pakket op te geven om de bouwvereisten van te "
 "controleren"
 
-#: cmdline/apt-get.cc:2701
+#: cmdline/apt-get.cc:2716
 #, c-format
 msgid ""
 "No architecture information available for %s. See apt.conf(5) APT::"
 "Architectures for setup"
 msgstr ""
 
-#: cmdline/apt-get.cc:2718
+#: cmdline/apt-get.cc:2733
 #, c-format
 msgid "Unable to get build-dependency information for %s"
 msgstr "Kan de informatie over de bouwvereisten voor %s niet ophalen"
 
-#: cmdline/apt-get.cc:2738
+#: cmdline/apt-get.cc:2753
 #, c-format
 msgid "%s has no build depends.\n"
 msgstr "%s heeft geen bouwvereisten.\n"
 
-#: cmdline/apt-get.cc:2868
+#: cmdline/apt-get.cc:2883
 #, fuzzy, c-format
+#| msgid ""
+#| "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#| "found"
 msgid ""
 "%s dependency for %s can't be satisfied because %s is not allowed on '%s' "
 "packages"
@@ -1324,7 +1372,7 @@ msgstr ""
 "De vereiste %s van pakket %s kan niet voldaan worden omdat pakket %s "
 "onvindbaar is"
 
-#: cmdline/apt-get.cc:2889
+#: cmdline/apt-get.cc:2904
 #, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because the package %s cannot be "
@@ -1333,15 +1381,18 @@ msgstr ""
 "De vereiste %s van pakket %s kan niet voldaan worden omdat pakket %s "
 "onvindbaar is"
 
-#: cmdline/apt-get.cc:2912
+#: cmdline/apt-get.cc:2927
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
 msgstr ""
 "Voldoen van Vereiste %s van pakket %s is mislukt: geïnstalleerde versie %s "
 "is te nieuw"
 
-#: cmdline/apt-get.cc:2951
+#: cmdline/apt-get.cc:2966
 #, fuzzy, c-format
+#| msgid ""
+#| "%s dependency for %s cannot be satisfied because no available versions of "
+#| "package %s can satisfy version requirements"
 msgid ""
 "%s dependency for %s cannot be satisfied because candidate version of "
 "package %s can't satisfy version requirements"
@@ -1349,8 +1400,11 @@ msgstr ""
 "De vereiste %s van pakket %s kan niet voldaan worden omdat er geen "
 "beschikbare versies zijn van pakket %s die aan de versievereisten voldoen"
 
-#: cmdline/apt-get.cc:2957
+#: cmdline/apt-get.cc:2972
 #, fuzzy, c-format
+#| msgid ""
+#| "%s dependency for %s cannot be satisfied because the package %s cannot be "
+#| "found"
 msgid ""
 "%s dependency for %s cannot be satisfied because package %s has no candidate "
 "version"
@@ -1358,31 +1412,75 @@ msgstr ""
 "De vereiste %s van pakket %s kan niet voldaan worden omdat pakket %s "
 "onvindbaar is"
 
-#: cmdline/apt-get.cc:2980
+#: cmdline/apt-get.cc:2995
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: %s"
 msgstr "Voldoen van de vereiste %s van pakket %s is mislukt: %s"
 
-#: cmdline/apt-get.cc:2996
+#: cmdline/apt-get.cc:3011
 #, c-format
 msgid "Build-dependencies for %s could not be satisfied."
 msgstr "Bouwvereisten voor %s konden niet voldaan worden."
 
-#: cmdline/apt-get.cc:3001
+#: cmdline/apt-get.cc:3016
 msgid "Failed to process build dependencies"
 msgstr "Verwerken van de bouwvereisten is mislukt"
 
-#: cmdline/apt-get.cc:3094 cmdline/apt-get.cc:3106
+#: cmdline/apt-get.cc:3109 cmdline/apt-get.cc:3121
 #, fuzzy, c-format
+#| msgid "Connecting to %s (%s)"
 msgid "Changelog for %s (%s)"
 msgstr "Er wordt verbinding gemaakt met %s (%s)"
 
-#: cmdline/apt-get.cc:3225
+#: cmdline/apt-get.cc:3240
 msgid "Supported modules:"
 msgstr "Ondersteunde modules:"
 
-#: cmdline/apt-get.cc:3266
+#: cmdline/apt-get.cc:3281
 #, fuzzy
+#| msgid ""
+#| "Usage: apt-get [options] command\n"
+#| "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+#| "       apt-get [options] source pkg1 [pkg2 ...]\n"
+#| "\n"
+#| "apt-get is a simple command line interface for downloading and\n"
+#| "installing packages. The most frequently used commands are update\n"
+#| "and install.\n"
+#| "\n"
+#| "Commands:\n"
+#| "   update - Retrieve new lists of packages\n"
+#| "   upgrade - Perform an upgrade\n"
+#| "   install - Install new packages (pkg is libc6 not libc6.deb)\n"
+#| "   remove - Remove packages\n"
+#| "   autoremove - Remove automatically all unused packages\n"
+#| "   purge - Remove packages and config files\n"
+#| "   source - Download source archives\n"
+#| "   build-dep - Configure build-dependencies for source packages\n"
+#| "   dist-upgrade - Distribution upgrade, see apt-get(8)\n"
+#| "   dselect-upgrade - Follow dselect selections\n"
+#| "   clean - Erase downloaded archive files\n"
+#| "   autoclean - Erase old downloaded archive files\n"
+#| "   check - Verify that there are no broken dependencies\n"
+#| "   markauto - Mark the given packages as automatically installed\n"
+#| "   unmarkauto - Mark the given packages as manually installed\n"
+#| "\n"
+#| "Options:\n"
+#| "  -h  This help text.\n"
+#| "  -q  Loggable output - no progress indicator\n"
+#| "  -qq No output except for errors\n"
+#| "  -d  Download only - do NOT install or unpack archives\n"
+#| "  -s  No-act. Perform ordering simulation\n"
+#| "  -y  Assume Yes to all queries and do not prompt\n"
+#| "  -f  Attempt to correct a system with broken dependencies in place\n"
+#| "  -m  Attempt to continue if archives are unlocatable\n"
+#| "  -u  Show a list of upgraded packages as well\n"
+#| "  -b  Build the source package after fetching it\n"
+#| "  -V  Show verbose version numbers\n"
+#| "  -c=? Read this configuration file\n"
+#| "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#| "See the apt-get(8), sources.list(5) and apt.conf(5) manual\n"
+#| "pages for more information and options.\n"
+#| "                       This APT has Super Cow Powers.\n"
 msgid ""
 "Usage: apt-get [options] command\n"
 "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
@@ -1470,7 +1568,7 @@ msgstr ""
 "voor meer informatie en opties.\n"
 "                       Deze APT heeft Super Koe kracht.\n"
 
-#: cmdline/apt-get.cc:3429
+#: cmdline/apt-get.cc:3444
 msgid ""
 "NOTE: This is only a simulation!\n"
 "      apt-get needs root privileges for real execution.\n"
@@ -1521,36 +1619,43 @@ msgstr ""
 
 #: cmdline/apt-mark.cc:46
 #, fuzzy, c-format
+#| msgid "but it is not installed"
 msgid "%s can not be marked as it is not installed.\n"
 msgstr "maar het is niet geïnstalleerd"
 
 #: cmdline/apt-mark.cc:52
 #, fuzzy, c-format
+#| msgid "%s set to manually installed.\n"
 msgid "%s was already set to manually installed.\n"
 msgstr "%s is ingesteld voor handmatige installatie.\n"
 
 #: cmdline/apt-mark.cc:54
 #, fuzzy, c-format
+#| msgid "%s set to automatically installed.\n"
 msgid "%s was already set to automatically installed.\n"
-msgstr "%s is ingesteld voor handmatige installatie.\n"
+msgstr "%s is ingesteld op automatische geïnstalleerd.\n"
 
 #: cmdline/apt-mark.cc:169
 #, fuzzy, c-format
+#| msgid "%s is already the newest version.\n"
 msgid "%s was already set on hold.\n"
 msgstr "%s is reeds de nieuwste versie.\n"
 
 #: cmdline/apt-mark.cc:171
 #, fuzzy, c-format
+#| msgid "%s is already the newest version.\n"
 msgid "%s was already not hold.\n"
 msgstr "%s is reeds de nieuwste versie.\n"
 
 #: cmdline/apt-mark.cc:185 cmdline/apt-mark.cc:207
 #, fuzzy, c-format
+#| msgid "%s set to manually installed.\n"
 msgid "%s set on hold.\n"
 msgstr "%s is ingesteld voor handmatige installatie.\n"
 
 #: cmdline/apt-mark.cc:187 cmdline/apt-mark.cc:212
 #, fuzzy, c-format
+#| msgid "Failed to open %s"
 msgid "Canceled hold on %s.\n"
 msgstr "Openen van %s is mislukt"
 
@@ -1787,8 +1892,8 @@ msgstr "Het bestand %s/%s overschrijft het bestand van pakket %s"
 #. Only warn if there is no sources.list file.
 #: apt-inst/extract.cc:462 apt-pkg/contrib/cdromutl.cc:179
 #: apt-pkg/contrib/fileutl.cc:343 apt-pkg/sourcelist.cc:204
-#: apt-pkg/sourcelist.cc:210 apt-pkg/acquire.cc:450 apt-pkg/init.cc:104
-#: apt-pkg/init.cc:112 apt-pkg/clean.cc:33 apt-pkg/policy.cc:352
+#: apt-pkg/sourcelist.cc:210 apt-pkg/acquire.cc:454 apt-pkg/init.cc:103
+#: apt-pkg/init.cc:111 apt-pkg/clean.cc:33 apt-pkg/policy.cc:353
 #: methods/mirror.cc:91
 #, c-format
 msgid "Unable to read %s"
@@ -1819,9 +1924,9 @@ msgid "The info and temp directories need to be on the same filesystem"
 msgstr ""
 "De 'info'- en de 'temp'-mappen dienen op hetzelfde bestandsysteem te staan"
 
-#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:1048
-#: apt-pkg/pkgcachegen.cc:1152 apt-pkg/pkgcachegen.cc:1158
-#: apt-pkg/pkgcachegen.cc:1320
+#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:1063
+#: apt-pkg/pkgcachegen.cc:1167 apt-pkg/pkgcachegen.cc:1173
+#: apt-pkg/pkgcachegen.cc:1335
 msgid "Reading package lists"
 msgstr "Pakketlijsten worden ingelezen"
 
@@ -1942,22 +2047,22 @@ msgid "Read error from %s process"
 msgstr "Leesfout door proces %s"
 
 #: methods/bzip2.cc:140 methods/bzip2.cc:149 methods/copy.cc:43
-#: methods/gzip.cc:92 methods/gzip.cc:101 methods/rred.cc:524
-#: methods/rred.cc:533
+#: methods/gzip.cc:92 methods/gzip.cc:101 methods/rred.cc:527
+#: methods/rred.cc:536
 msgid "Failed to stat"
 msgstr "stat is mislukt"
 
 #: methods/bzip2.cc:146 methods/copy.cc:80 methods/gzip.cc:98
-#: methods/rred.cc:530
+#: methods/rred.cc:533
 msgid "Failed to set modification time"
 msgstr "Instellen van de aanpassingstijd is mislukt"
 
-#: methods/cdrom.cc:199
+#: methods/cdrom.cc:200
 #, c-format
 msgid "Unable to read the cdrom database %s"
 msgstr "Kan de cd databank %s niet lezen"
 
-#: methods/cdrom.cc:208
+#: methods/cdrom.cc:209
 msgid ""
 "Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
 "cannot be used to add new CD-ROMs"
@@ -1965,21 +2070,21 @@ msgstr ""
 "Om deze APT deze CD te laten herkennen kunt u best apt-cdrom gebruiken. 'apt-"
 "get update' is niet in staat om nieuwe CDs toe te voegen"
 
-#: methods/cdrom.cc:218
+#: methods/cdrom.cc:219
 msgid "Wrong CD-ROM"
 msgstr "Verkeerde CD"
 
-#: methods/cdrom.cc:245
+#: methods/cdrom.cc:246
 #, c-format
 msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
 msgstr ""
 "Kan de CD in %s niet loskoppelen, mogelijk wordt die nog steeds gebruikt."
 
-#: methods/cdrom.cc:250
+#: methods/cdrom.cc:251
 msgid "Disk not found."
 msgstr "Schijf niet gevonden"
 
-#: methods/cdrom.cc:258 methods/file.cc:79 methods/rsh.cc:265
+#: methods/cdrom.cc:259 methods/file.cc:79 methods/rsh.cc:265
 msgid "File not found"
 msgstr "Bestand niet gevonden"
 
@@ -1988,34 +2093,34 @@ msgid "Invalid URI, local URIS must not start with //"
 msgstr "Ongeldige URI, lokale URIs mogen niet beginnen met //"
 
 #. Login must be before getpeername otherwise dante won't work.
-#: methods/ftp.cc:168
+#: methods/ftp.cc:169
 msgid "Logging in"
 msgstr "Bezig met aanmelden"
 
-#: methods/ftp.cc:174
+#: methods/ftp.cc:175
 msgid "Unable to determine the peer name"
 msgstr "Kan de 'peer'-naam niet bepalen"
 
-#: methods/ftp.cc:179
+#: methods/ftp.cc:180
 msgid "Unable to determine the local name"
 msgstr "Kan de lokale naam niet bepalen"
 
-#: methods/ftp.cc:210 methods/ftp.cc:238
+#: methods/ftp.cc:211 methods/ftp.cc:239
 #, c-format
 msgid "The server refused the connection and said: %s"
 msgstr "Onze verbinding is door de server geweigerd met bericht: %s"
 
-#: methods/ftp.cc:216
+#: methods/ftp.cc:217
 #, c-format
 msgid "USER failed, server said: %s"
 msgstr "USER mislukt; bericht van server: %s"
 
-#: methods/ftp.cc:223
+#: methods/ftp.cc:224
 #, c-format
 msgid "PASS failed, server said: %s"
 msgstr "PASS mislukt; bericht van server: %s"
 
-#: methods/ftp.cc:243
+#: methods/ftp.cc:244
 msgid ""
 "A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
 "is empty."
@@ -2023,114 +2128,114 @@ msgstr ""
 "Er was een proxy-server opgegeven, maar geen aanmeldscript, Acquire::ftp::"
 "ProxyLogin is leeg."
 
-#: methods/ftp.cc:271
+#: methods/ftp.cc:272
 #, c-format
 msgid "Login script command '%s' failed, server said: %s"
 msgstr "Aanmeldscriptopdracht '%s' is mislukt; bericht van server: %s"
 
-#: methods/ftp.cc:297
+#: methods/ftp.cc:298
 #, c-format
 msgid "TYPE failed, server said: %s"
 msgstr "TYPE mislukt; bericht van server: %s"
 
-#: methods/ftp.cc:335 methods/ftp.cc:446 methods/rsh.cc:184 methods/rsh.cc:227
+#: methods/ftp.cc:336 methods/ftp.cc:447 methods/rsh.cc:184 methods/rsh.cc:227
 msgid "Connection timeout"
 msgstr "Verbinding is verlopen"
 
-#: methods/ftp.cc:341
+#: methods/ftp.cc:342
 msgid "Server closed the connection"
 msgstr "Verbinding is verbroken door de server"
 
-#: methods/ftp.cc:344 apt-pkg/contrib/fileutl.cc:820 methods/rsh.cc:191
+#: methods/ftp.cc:345 apt-pkg/contrib/fileutl.cc:831 methods/rsh.cc:191
 msgid "Read error"
 msgstr "Leesfout"
 
-#: methods/ftp.cc:351 methods/rsh.cc:198
+#: methods/ftp.cc:352 methods/rsh.cc:198
 msgid "A response overflowed the buffer."
 msgstr "Een reactie deed de buffer overlopen"
 
-#: methods/ftp.cc:368 methods/ftp.cc:380
+#: methods/ftp.cc:369 methods/ftp.cc:381
 msgid "Protocol corruption"
 msgstr "Protocolcorruptie"
 
-#: methods/ftp.cc:452 apt-pkg/contrib/fileutl.cc:862 methods/rsh.cc:233
+#: methods/ftp.cc:453 apt-pkg/contrib/fileutl.cc:873 methods/rsh.cc:233
 msgid "Write error"
 msgstr "Schrijffout"
 
-#: methods/ftp.cc:692 methods/ftp.cc:698 methods/ftp.cc:734
+#: methods/ftp.cc:693 methods/ftp.cc:699 methods/ftp.cc:735
 msgid "Could not create a socket"
 msgstr "Kon geen socket aanmaken"
 
-#: methods/ftp.cc:703
+#: methods/ftp.cc:704
 msgid "Could not connect data socket, connection timed out"
 msgstr "Kon de datasocket niet verbinden, de verbinding verliep"
 
-#: methods/ftp.cc:709
+#: methods/ftp.cc:710
 msgid "Could not connect passive socket."
 msgstr "Kon de passieve socket niet verbinden."
 
-#: methods/ftp.cc:727
+#: methods/ftp.cc:728
 msgid "getaddrinfo was unable to get a listening socket"
 msgstr "getaddrinfo kon geen luistersocket verkrijgen"
 
-#: methods/ftp.cc:741
+#: methods/ftp.cc:742
 msgid "Could not bind a socket"
 msgstr "Kon geen socket binden"
 
-#: methods/ftp.cc:745
+#: methods/ftp.cc:746
 msgid "Could not listen on the socket"
 msgstr "Kon niet op de socket niet luisteren"
 
-#: methods/ftp.cc:752
+#: methods/ftp.cc:753
 msgid "Could not determine the socket's name"
 msgstr "Kon de socketnaam niet bepalen"
 
-#: methods/ftp.cc:784
+#: methods/ftp.cc:785
 msgid "Unable to send PORT command"
 msgstr "Kan PORT-commando niet verzenden"
 
-#: methods/ftp.cc:794
+#: methods/ftp.cc:795
 #, c-format
 msgid "Unknown address family %u (AF_*)"
 msgstr "Onbekende adresfamilie %u (AF_*)"
 
-#: methods/ftp.cc:803
+#: methods/ftp.cc:804
 #, c-format
 msgid "EPRT failed, server said: %s"
 msgstr "EPRT is mislukt; bericht van server: %s"
 
-#: methods/ftp.cc:823
+#: methods/ftp.cc:824
 msgid "Data socket connect timed out"
 msgstr "Datasocket verbinding is verlopen"
 
-#: methods/ftp.cc:830
+#: methods/ftp.cc:831
 msgid "Unable to accept connection"
 msgstr "Kan de verbinding niet aanvaarden"
 
-#: methods/ftp.cc:869 methods/http.cc:1023 methods/rsh.cc:303
+#: methods/ftp.cc:870 methods/http.cc:1023 methods/rsh.cc:303
 msgid "Problem hashing file"
 msgstr "Probleem bij het hashen van het bestand"
 
-#: methods/ftp.cc:882
+#: methods/ftp.cc:883
 #, c-format
 msgid "Unable to fetch file, server said '%s'"
 msgstr "Kan bestand niet ophalen; bericht van server: %s"
 
-#: methods/ftp.cc:897 methods/rsh.cc:322
+#: methods/ftp.cc:898 methods/rsh.cc:322
 msgid "Data socket timed out"
 msgstr "Datasocket verliep"
 
-#: methods/ftp.cc:927
+#: methods/ftp.cc:928
 #, c-format
 msgid "Data transfer failed, server said '%s'"
 msgstr "Data transfer is mislukt, server zei: %s"
 
 #. Get the files information
-#: methods/ftp.cc:1004
+#: methods/ftp.cc:1005
 msgid "Query"
 msgstr "Zoekopdracht"
 
-#: methods/ftp.cc:1116
+#: methods/ftp.cc:1117
 msgid "Unable to invoke "
 msgstr "Aanroepen mislukt van "
 
@@ -2203,10 +2308,9 @@ msgid "At least one invalid signature was encountered."
 msgstr "Er is tenminste één ongeldige ondertekening gevonden."
 
 #: methods/gpgv.cc:175
-#, fuzzy
 msgid "Could not execute 'gpgv' to verify signature (is gpgv installed?)"
 msgstr ""
-"Kon '%s' niet uitvoeren om ondertekening te verifiëren (is gpgv "
+"Kon 'gpgv' niet uitvoeren om ondertekening te verifiëren (is gpgv "
 "geïnstalleerd?)"
 
 #: methods/gpgv.cc:180
@@ -2310,9 +2414,9 @@ msgid "Can't mmap an empty file"
 msgstr "Kan een leeg bestand niet mmappen"
 
 #: apt-pkg/contrib/mmap.cc:89
-#, fuzzy, c-format
+#, c-format
 msgid "Couldn't duplicate file descriptor %i"
-msgstr "Kon geen pijp openen voor %s"
+msgstr "Kon de bestandsindicator %i niet dupliceren"
 
 #: apt-pkg/contrib/mmap.cc:97 apt-pkg/contrib/mmap.cc:258
 #, c-format
@@ -2320,14 +2424,12 @@ msgid "Couldn't make mmap of %lu bytes"
 msgstr "Kon van %lu bytes geen mmap maken"
 
 #: apt-pkg/contrib/mmap.cc:124
-#, fuzzy
 msgid "Unable to close mmap"
-msgstr "Kan %s niet openen"
+msgstr "Kan mmap niet sluiten"
 
 #: apt-pkg/contrib/mmap.cc:152 apt-pkg/contrib/mmap.cc:180
-#, fuzzy
 msgid "Unable to synchronize mmap"
-msgstr "Aanroepen mislukt van "
+msgstr "Kan mmap niet synchronizeren"
 
 #: apt-pkg/contrib/mmap.cc:310
 #, c-format
@@ -2344,11 +2446,15 @@ msgid ""
 "Unable to increase the size of the MMap as the limit of %lu bytes is already "
 "reached."
 msgstr ""
+"Kan het formaat van de MMap niet vergroten omdat de grens van %lu bytes al "
+"is bereikt"
 
 #: apt-pkg/contrib/mmap.cc:412
 msgid ""
 "Unable to increase size of the MMap as automatic growing is disabled by user."
 msgstr ""
+"Kan het formaat van de MMap niet vergroten omdat het automatisch vergroten "
+"door de gebruiker is uitgeschakeld."
 
 #. d means days, h means hours, min means minutes, s means seconds
 #: apt-pkg/contrib/strutl.cc:371
@@ -2374,7 +2480,7 @@ msgstr "%limin %lis"
 msgid "%lis"
 msgstr "%lis"
 
-#: apt-pkg/contrib/strutl.cc:1138
+#: apt-pkg/contrib/strutl.cc:1137
 #, c-format
 msgid "Selection %s not found"
 msgstr "Selectie %s niet gevonden"
@@ -2427,11 +2533,10 @@ msgid "Syntax error %s:%u: Unsupported directive '%s'"
 msgstr "Syntaxfout %s:%u: Niet-ondersteunde richtlijn '%s'"
 
 #: apt-pkg/contrib/configuration.cc:790
-#, fuzzy, c-format
+#, c-format
 msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
 msgstr ""
-"Syntaxfout %s:%u: Richtlijnen kunnen enkel op het hoogste niveau gegeven "
-"worden"
+"Syntaxfout %s:%u: De richtlijn 'clear' vereist een optieboom als argument"
 
 #: apt-pkg/contrib/configuration.cc:840
 #, c-format
@@ -2453,45 +2558,45 @@ msgstr "%c%s... Klaar"
 msgid "Command line option '%c' [from %s] is not known."
 msgstr "Commandoregel-optie '%c' [van %s] is onbekend."
 
-#: apt-pkg/contrib/cmndline.cc:103 apt-pkg/contrib/cmndline.cc:111
-#: apt-pkg/contrib/cmndline.cc:119
+#: apt-pkg/contrib/cmndline.cc:101 apt-pkg/contrib/cmndline.cc:109
+#: apt-pkg/contrib/cmndline.cc:117
 #, c-format
 msgid "Command line option %s is not understood"
 msgstr "Commandoregel-optie %s wordt niet begrepen"
 
-#: apt-pkg/contrib/cmndline.cc:124
+#: apt-pkg/contrib/cmndline.cc:122
 #, c-format
 msgid "Command line option %s is not boolean"
 msgstr "Commandoregel-optie %s is niet booleaans"
 
-#: apt-pkg/contrib/cmndline.cc:165 apt-pkg/contrib/cmndline.cc:186
+#: apt-pkg/contrib/cmndline.cc:163 apt-pkg/contrib/cmndline.cc:184
 #, c-format
 msgid "Option %s requires an argument."
 msgstr "Optie %s vereist een argument."
 
-#: apt-pkg/contrib/cmndline.cc:200 apt-pkg/contrib/cmndline.cc:206
+#: apt-pkg/contrib/cmndline.cc:197 apt-pkg/contrib/cmndline.cc:203
 #, c-format
 msgid "Option %s: Configuration item specification must have an =<val>."
 msgstr ""
 "Optie %s: De specificatie van het configuratie-item dient een =<waarde> te "
 "bevatten."
 
-#: apt-pkg/contrib/cmndline.cc:236
+#: apt-pkg/contrib/cmndline.cc:232
 #, c-format
 msgid "Option %s requires an integer argument, not '%s'"
 msgstr "Optie %s vereist een integer getal als argument, niet '%s'"
 
-#: apt-pkg/contrib/cmndline.cc:267
+#: apt-pkg/contrib/cmndline.cc:263
 #, c-format
 msgid "Option '%s' is too long"
 msgstr "Optie '%s' is te lang"
 
-#: apt-pkg/contrib/cmndline.cc:300
+#: apt-pkg/contrib/cmndline.cc:295
 #, c-format
 msgid "Sense %s is not understood, try true or false."
 msgstr "Waarde %s wordt niet begrepen, probeer 'true' of 'false'."
 
-#: apt-pkg/contrib/cmndline.cc:350
+#: apt-pkg/contrib/cmndline.cc:345
 #, c-format
 msgid "Invalid operation %s"
 msgstr "Ongeldige operatie %s"
@@ -2502,7 +2607,7 @@ msgid "Unable to stat the mount point %s"
 msgstr "Kan de status van het aanhechtpunt %s niet opvragen"
 
 #: apt-pkg/contrib/cdromutl.cc:175 apt-pkg/contrib/cdromutl.cc:209
-#: apt-pkg/acquire.cc:456 apt-pkg/acquire.cc:481 apt-pkg/clean.cc:39
+#: apt-pkg/acquire.cc:460 apt-pkg/acquire.cc:485 apt-pkg/clean.cc:39
 #: methods/mirror.cc:97
 #, c-format
 msgid "Unable to change to %s"
@@ -2556,72 +2661,72 @@ msgid ""
 "Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:679
+#: apt-pkg/contrib/fileutl.cc:690
 #, c-format
 msgid "Waited for %s but it wasn't there"
 msgstr "Er is gewacht op %s, maar die kwam niet"
 
-#: apt-pkg/contrib/fileutl.cc:691
+#: apt-pkg/contrib/fileutl.cc:702
 #, c-format
 msgid "Sub-process %s received a segmentation fault."
 msgstr "Subproces %s ontving een segmentatiefout."
 
-#: apt-pkg/contrib/fileutl.cc:693
+#: apt-pkg/contrib/fileutl.cc:704
 #, c-format
 msgid "Sub-process %s received signal %u."
 msgstr "Subproces %s ontving signaal %u."
 
-#: apt-pkg/contrib/fileutl.cc:697
+#: apt-pkg/contrib/fileutl.cc:708
 #, c-format
 msgid "Sub-process %s returned an error code (%u)"
 msgstr "Subproces %s gaf de foutcode %u terug"
 
-#: apt-pkg/contrib/fileutl.cc:699
+#: apt-pkg/contrib/fileutl.cc:710
 #, c-format
 msgid "Sub-process %s exited unexpectedly"
 msgstr "Subproces %s sloot onverwacht af"
 
-#: apt-pkg/contrib/fileutl.cc:764 apt-pkg/indexcopy.cc:673
+#: apt-pkg/contrib/fileutl.cc:775 apt-pkg/indexcopy.cc:673
 #, c-format
 msgid "Could not open file %s"
 msgstr "Kon het bestand %s niet openen"
 
-#: apt-pkg/contrib/fileutl.cc:781
-#, fuzzy, c-format
+#: apt-pkg/contrib/fileutl.cc:792
+#, c-format
 msgid "Could not open file descriptor %d"
-msgstr "Kon geen pijp openen voor %s"
+msgstr "Kon de bestandsindicator %d niet openen"
 
-#: apt-pkg/contrib/fileutl.cc:841
+#: apt-pkg/contrib/fileutl.cc:852
 #, c-format
 msgid "read, still have %lu to read but none left"
 msgstr "lees, de laatste te lezen %lu zijn niet beschikbaar"
 
-#: apt-pkg/contrib/fileutl.cc:874
+#: apt-pkg/contrib/fileutl.cc:885
 #, c-format
 msgid "write, still have %lu to write but couldn't"
 msgstr "schrijf, de laatste %lu konden niet weggeschreven worden"
 
-#: apt-pkg/contrib/fileutl.cc:1010
-#, fuzzy, c-format
+#: apt-pkg/contrib/fileutl.cc:1021
+#, c-format
 msgid "Problem closing the gzip file %s"
-msgstr "Probleem bij het afsluiten van het bestand"
+msgstr "Probleem bij het afsluiten van het gzip-bestand %s"
 
-#: apt-pkg/contrib/fileutl.cc:1013
-#, fuzzy, c-format
+#: apt-pkg/contrib/fileutl.cc:1024
+#, c-format
 msgid "Problem closing the file %s"
-msgstr "Probleem bij het afsluiten van het bestand"
+msgstr "Probleem bij het afsluiten van het bestand %s"
 
-#: apt-pkg/contrib/fileutl.cc:1018
-#, fuzzy, c-format
+#: apt-pkg/contrib/fileutl.cc:1029
+#, c-format
 msgid "Problem renaming the file %s to %s"
-msgstr "Probleem bij het synchroniseren van het bestand"
+msgstr "Probleem bij het hernoemen van '%s' naar '%s'"
 
-#: apt-pkg/contrib/fileutl.cc:1029
-#, fuzzy, c-format
+#: apt-pkg/contrib/fileutl.cc:1040
+#, c-format
 msgid "Problem unlinking the file %s"
-msgstr "Probleem bij het ontlinken van het bestand"
+msgstr "Probleem bij het ontlinken van het bestand %s"
 
-#: apt-pkg/contrib/fileutl.cc:1042
+#: apt-pkg/contrib/fileutl.cc:1053
 msgid "Problem syncing the file"
 msgstr "Probleem bij het synchroniseren van het bestand"
 
@@ -2739,29 +2844,30 @@ msgid "Unable to parse package file %s (2)"
 msgstr "Kon pakketbestand %s niet ontleden (2)"
 
 #: apt-pkg/sourcelist.cc:92
-#, fuzzy, c-format
+#, c-format
 msgid "Malformed line %lu in source list %s ([option] unparseable)"
-msgstr "Misvormde regel %lu in bronlijst %s (dist parse)"
+msgstr "Misvormde regel %lu in bronlijst %s ([optie] onbegrijpelijk)"
 
 #: apt-pkg/sourcelist.cc:95
-#, fuzzy, c-format
+#, c-format
 msgid "Malformed line %lu in source list %s ([option] too short)"
-msgstr "Misvormde regel %lu in bronlijst %s (dist)"
+msgstr "Misvormde regel %lu in bronlijst %s ([optie] te kort)"
 
 #: apt-pkg/sourcelist.cc:106
-#, fuzzy, c-format
+#, c-format
 msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
-msgstr "Misvormde regel %lu in bronlijst %s (dist parse)"
+msgstr "Misvormde regel %lu in bronlijst %s ([%s] is geen toekenning)"
 
 #: apt-pkg/sourcelist.cc:112
-#, fuzzy, c-format
+#, c-format
 msgid "Malformed line %lu in source list %s ([%s] has no key)"
-msgstr "Misvormde regel %lu in bronlijst %s (dist parse)"
+msgstr "Misvormde regel %lu in bronlijst %s ([%s] heeft geen sleutel)"
 
 #: apt-pkg/sourcelist.cc:115
-#, fuzzy, c-format
+#, c-format
 msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
-msgstr "Misvormde regel %lu in bronlijst %s (dist parse)"
+msgstr ""
+"Misvormde regel %lu in bronlijst %s ([%s] sleutel %s heeft geen waarde)"
 
 #: apt-pkg/sourcelist.cc:128
 #, c-format
@@ -2808,8 +2914,8 @@ msgstr "Misvormde regel %u in bronlijst %s (type)"
 msgid "Type '%s' is not known on line %u in source list %s"
 msgstr "Type '%s' op regel %u in bronlijst %s is onbekend"
 
-#: apt-pkg/packagemanager.cc:335 apt-pkg/packagemanager.cc:623
-#, fuzzy, c-format
+#: apt-pkg/packagemanager.cc:335 apt-pkg/packagemanager.cc:645
+#, c-format
 msgid ""
 "Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
 "under APT::Immediate-Configure for details. (%d)"
@@ -2830,7 +2936,7 @@ msgstr ""
 "te activeren."
 
 #: apt-pkg/packagemanager.cc:501
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Could not perform immediate configuration on already unpacked '%s'. Please "
 "see man 5 apt.conf under APT::Immediate-Configure for details."
@@ -2863,8 +2969,11 @@ msgstr ""
 msgid "Unable to correct problems, you have held broken packages."
 msgstr "Kan problemen niet verhelpen, u houdt defecte pakketten vast."
 
-#: apt-pkg/algorithms.cc:1464 apt-pkg/algorithms.cc:1466
+#: apt-pkg/algorithms.cc:1471 apt-pkg/algorithms.cc:1473
 #, fuzzy
+#| msgid ""
+#| "Some index files failed to download, they have been ignored, or old ones "
+#| "used instead."
 msgid ""
 "Some index files failed to download. They have been ignored, or old ones "
 "used instead."
@@ -2873,28 +2982,28 @@ msgstr ""
 "zijn oudere versies van gebruikt."
 
 #: apt-pkg/acquire.cc:79
-#, fuzzy, c-format
+#, c-format
 msgid "List directory %spartial is missing."
 msgstr "Lijstmap %spartial is afwezig."
 
 #: apt-pkg/acquire.cc:83
-#, fuzzy, c-format
+#, c-format
 msgid "Archives directory %spartial is missing."
 msgstr "Archiefmap %spartial is afwezig."
 
 #: apt-pkg/acquire.cc:91
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to lock directory %s"
-msgstr "Kon de lijst-map niet vergrendelen"
+msgstr "Kan de map %s niet vergrendelen"
 
 #. only show the ETA if it makes sense
 #. two days
-#: apt-pkg/acquire.cc:857
+#: apt-pkg/acquire.cc:861
 #, c-format
 msgid "Retrieving file %li of %li (%s remaining)"
 msgstr "Bestand %li van %li wordt opgehaald (nog %s te gaan)"
 
-#: apt-pkg/acquire.cc:859
+#: apt-pkg/acquire.cc:863
 #, c-format
 msgid "Retrieving file %li of %li"
 msgstr "Bestand %li van %li wordt opgehaald"
@@ -2916,12 +3025,12 @@ msgstr ""
 "Gelieve de schijf met label '%s' in het station '%s' te plaatsen en op "
 "'enter' te drukken."
 
-#: apt-pkg/init.cc:147
+#: apt-pkg/init.cc:146
 #, c-format
 msgid "Packaging system '%s' is not supported"
 msgstr "Pakketbeheersysteem '%s' wordt niet ondersteund"
 
-#: apt-pkg/init.cc:163
+#: apt-pkg/init.cc:162
 msgid "Unable to determine a suitable packaging system type"
 msgstr "Kan geen geschikt pakketsysteemtype bepalen"
 
@@ -2951,25 +3060,25 @@ msgstr ""
 msgid "The list of sources could not be read."
 msgstr "De lijst van bronnen kon niet gelezen worden."
 
-#: apt-pkg/policy.cc:71
+#: apt-pkg/policy.cc:72
 #, c-format
 msgid ""
 "The value '%s' is invalid for APT::Default-Release as such a release is not "
 "available in the sources"
 msgstr ""
 
-#: apt-pkg/policy.cc:389
+#: apt-pkg/policy.cc:390
 #, c-format
 msgid "Invalid record in the preferences file %s, no Package header"
 msgstr ""
 "Ongeldige record in het voorkeurenbestand %s, 'Package' koptekst ontbreekt"
 
-#: apt-pkg/policy.cc:411
+#: apt-pkg/policy.cc:412
 #, c-format
 msgid "Did not understand pin type %s"
 msgstr "Pintype %s wordt niet begrepen"
 
-#: apt-pkg/policy.cc:419
+#: apt-pkg/policy.cc:420
 msgid "No priority (or zero) specified for pin"
 msgstr "Er is geen prioriteit (of nul) opgegeven voor deze pin"
 
@@ -2977,92 +3086,92 @@ msgstr "Er is geen prioriteit (of nul) opgegeven voor deze pin"
 msgid "Cache has an incompatible versioning system"
 msgstr "Cache heeft een niet-compatibel versienummeringssysteem"
 
-#: apt-pkg/pkgcachegen.cc:187
+#: apt-pkg/pkgcachegen.cc:190
 #, c-format
 msgid "Error occurred while processing %s (NewPackage)"
 msgstr "Fout tijdens verwerken van %s (NewPackage)"
 
-#: apt-pkg/pkgcachegen.cc:204
+#: apt-pkg/pkgcachegen.cc:207
 #, c-format
 msgid "Error occurred while processing %s (UsePackage1)"
 msgstr "Fout tijdens verwerken van %s (UsePackage1)"
 
-#: apt-pkg/pkgcachegen.cc:242
+#: apt-pkg/pkgcachegen.cc:245
 #, c-format
 msgid "Error occurred while processing %s (NewFileDesc1)"
 msgstr "Fout tijdens verwerken van %s (NewFileDesc1)"
 
-#: apt-pkg/pkgcachegen.cc:274
+#: apt-pkg/pkgcachegen.cc:277
 #, c-format
 msgid "Error occurred while processing %s (UsePackage2)"
 msgstr "Fout tijdens verwerken van %s (UsePackage2)"
 
-#: apt-pkg/pkgcachegen.cc:278
+#: apt-pkg/pkgcachegen.cc:281
 #, c-format
 msgid "Error occurred while processing %s (NewFileVer1)"
 msgstr "Fout tijdens verwerken van %s (NewFileVer1)"
 
-#: apt-pkg/pkgcachegen.cc:295 apt-pkg/pkgcachegen.cc:305
-#: apt-pkg/pkgcachegen.cc:313
-#, fuzzy, c-format
+#: apt-pkg/pkgcachegen.cc:298 apt-pkg/pkgcachegen.cc:308
+#: apt-pkg/pkgcachegen.cc:316
+#, c-format
 msgid "Error occurred while processing %s (NewVersion%d)"
-msgstr "Fout tijdens verwerken van %s (NewVersion1)"
+msgstr "Fout tijdens verwerken van %s (NewVersion%d)"
 
-#: apt-pkg/pkgcachegen.cc:309
+#: apt-pkg/pkgcachegen.cc:312
 #, c-format
 msgid "Error occurred while processing %s (UsePackage3)"
 msgstr "Fout tijdens verwerken van %s (UsePackage3)"
 
-#: apt-pkg/pkgcachegen.cc:342
+#: apt-pkg/pkgcachegen.cc:345
 #, c-format
 msgid "Error occurred while processing %s (NewFileDesc2)"
 msgstr "Fout tijdens verwerken van %s (NewFileDesc2)"
 
-#: apt-pkg/pkgcachegen.cc:348
+#: apt-pkg/pkgcachegen.cc:351
 msgid "Wow, you exceeded the number of package names this APT is capable of."
 msgstr "Wauw, u heeft meer pakketten dan deze APT aan kan."
 
-#: apt-pkg/pkgcachegen.cc:351
+#: apt-pkg/pkgcachegen.cc:354
 msgid "Wow, you exceeded the number of versions this APT is capable of."
 msgstr "Wauw, u heeft meer versies dan deze APT aan kan."
 
-#: apt-pkg/pkgcachegen.cc:354
+#: apt-pkg/pkgcachegen.cc:357
 msgid "Wow, you exceeded the number of descriptions this APT is capable of."
 msgstr ""
 "Wauw, u heeft het maximum aantal beschrijvingen dat deze APT aan kan "
 "overschreden."
 
-#: apt-pkg/pkgcachegen.cc:357
+#: apt-pkg/pkgcachegen.cc:360
 msgid "Wow, you exceeded the number of dependencies this APT is capable of."
 msgstr "Wauw, u heeft meer afhankelijkheden dan deze APT aan kan."
 
-#: apt-pkg/pkgcachegen.cc:386
+#: apt-pkg/pkgcachegen.cc:389
 #, c-format
 msgid "Error occurred while processing %s (FindPkg)"
 msgstr "Fout tijdens verwerken van %s (FindPkg)"
 
-#: apt-pkg/pkgcachegen.cc:400
+#: apt-pkg/pkgcachegen.cc:403
 #, c-format
 msgid "Error occurred while processing %s (CollectFileProvides)"
 msgstr "Fout tijdens verwerken van %s (CollectFileProvides)"
 
-#: apt-pkg/pkgcachegen.cc:406
+#: apt-pkg/pkgcachegen.cc:409
 #, c-format
 msgid "Package %s %s was not found while processing file dependencies"
 msgstr ""
 "Pakket %s %s werd niet gevonden bij het verwerken van de "
 "bestandsafhankelijkheden"
 
-#: apt-pkg/pkgcachegen.cc:960
+#: apt-pkg/pkgcachegen.cc:975
 #, c-format
 msgid "Couldn't stat source package list %s"
 msgstr "Kon de status van de bronpakketlijst %s niet opvragen"
 
-#: apt-pkg/pkgcachegen.cc:1065
+#: apt-pkg/pkgcachegen.cc:1080
 msgid "Collecting File Provides"
 msgstr "Voorziene bestanden worden verzameld"
 
-#: apt-pkg/pkgcachegen.cc:1259 apt-pkg/pkgcachegen.cc:1266
+#: apt-pkg/pkgcachegen.cc:1274 apt-pkg/pkgcachegen.cc:1281
 msgid "IO Error saving source cache"
 msgstr "Invoer/Uitvoer-fout tijdens wegschrijven bronpakket-cache"
 
@@ -3075,12 +3184,12 @@ msgstr "herbenoeming is mislukt, %s (%s -> %s)."
 msgid "MD5Sum mismatch"
 msgstr "MD5-som komt niet overeen"
 
-#: apt-pkg/acquire-item.cc:900 apt-pkg/acquire-item.cc:1848
-#: apt-pkg/acquire-item.cc:1991
+#: apt-pkg/acquire-item.cc:900 apt-pkg/acquire-item.cc:1847
+#: apt-pkg/acquire-item.cc:1990
 msgid "Hash Sum mismatch"
 msgstr "Hash-som komt niet overeen"
 
-#: apt-pkg/acquire-item.cc:1388
+#: apt-pkg/acquire-item.cc:1387
 #, c-format
 msgid ""
 "Unable to find expected entry '%s' in Release file (Wrong sources.list entry "
@@ -3089,40 +3198,44 @@ msgstr ""
 
 #: apt-pkg/acquire-item.cc:1403
 #, fuzzy, c-format
+#| msgid "Unable to parse Release file %s"
 msgid "Unable to find hash sum for '%s' in Release file"
 msgstr "Kon Release-bestand %s niet ontleden"
 
-#: apt-pkg/acquire-item.cc:1439
+#: apt-pkg/acquire-item.cc:1438
 msgid "There is no public key available for the following key IDs:\n"
 msgstr ""
 "Er zijn geen publieke sleutels beschikbaar voor de volgende sleutel-IDs:\n"
 
-#: apt-pkg/acquire-item.cc:1477
+#: apt-pkg/acquire-item.cc:1476
 #, c-format
 msgid ""
 "Release file for %s is expired (invalid since %s). Updates for this "
 "repository will not be applied."
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:1499
+#: apt-pkg/acquire-item.cc:1498
 #, c-format
 msgid "Conflicting distribution: %s (expected %s but got %s)"
-msgstr ""
+msgstr "Conflicterende distributie: %s (verwachtte %s, maar kreeg %s)"
 
-#: apt-pkg/acquire-item.cc:1532
+#: apt-pkg/acquire-item.cc:1531
 #, c-format
 msgid ""
 "A error occurred during the signature verification. The repository is not "
 "updated and the previous index files will be used. GPG error: %s: %s\n"
 msgstr ""
+"Er is een fout opgetreden bij de handtekeningcontrole. De pakketbron is niet "
+"bijgewerkt en de oude indexbestanden zullen worden gebruikt. GPG-fout: %s: "
+"%s\n"
 
 #. Invalid signature file, reject (LP: #346386) (Closes: #627642)
-#: apt-pkg/acquire-item.cc:1542 apt-pkg/acquire-item.cc:1547
+#: apt-pkg/acquire-item.cc:1541 apt-pkg/acquire-item.cc:1546
 #, c-format
 msgid "GPG error: %s: %s"
-msgstr ""
+msgstr "GPG-fout: %s: %s"
 
-#: apt-pkg/acquire-item.cc:1639
+#: apt-pkg/acquire-item.cc:1638
 #, c-format
 msgid ""
 "I wasn't able to locate a file for the %s package. This might mean you need "
@@ -3131,8 +3244,11 @@ msgstr ""
 "Er kon geen bestand gevonden worden voor pakket %s. Dit kan betekenen dat u "
 "dit pakket handmatig moet repareren (wegens missende architectuur)"
 
-#: apt-pkg/acquire-item.cc:1698
-#, c-format
+#: apt-pkg/acquire-item.cc:1697
+#, fuzzy, c-format
+#| msgid ""
+#| "I wasn't able to locate file for the %s package. This might mean you need "
+#| "to manually fix this package."
 msgid ""
 "I wasn't able to locate a file for the %s package. This might mean you need "
 "to manually fix this package."
@@ -3140,7 +3256,7 @@ msgstr ""
 "Er kon geen bestand gevonden worden voor pakket %s. Dit kan betekenen dat u "
 "dit pakket handmatig moet repareren."
 
-#: apt-pkg/acquire-item.cc:1753
+#: apt-pkg/acquire-item.cc:1752
 #, c-format
 msgid ""
 "The package index files are corrupted. No Filename: field for package %s."
@@ -3148,7 +3264,7 @@ msgstr ""
 "De pakketindex-bestanden zijn beschadigd. Er is geen 'Filename:'-veld voor "
 "pakket %s."
 
-#: apt-pkg/acquire-item.cc:1840
+#: apt-pkg/acquire-item.cc:1839
 msgid "Size mismatch"
 msgstr "Grootte komt niet overeen"
 
@@ -3168,14 +3284,14 @@ msgid "No Hash entry in Release file %s"
 msgstr "Geen Hash-vermelding in Release-bestand %s"
 
 #: apt-pkg/indexrecords.cc:110
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid 'Valid-Until' entry in Release file %s"
-msgstr "Geen Hash-vermelding in Release-bestand %s"
+msgstr "Geen 'Valid-Until'-vermelding in Release-bestand %s"
 
-#: apt-pkg/indexrecords.cc:125
-#, fuzzy, c-format
+#: apt-pkg/indexrecords.cc:129
+#, c-format
 msgid "Invalid 'Date' entry in Release file %s"
-msgstr "Geen Hash-vermelding in Release-bestand %s"
+msgstr "Geen 'Date'-vermelding in Release-bestand %s"
 
 #: apt-pkg/vendorlist.cc:71
 #, c-format
@@ -3272,22 +3388,22 @@ msgstr "Nieuwe bronlijst wordt weggeschreven\n"
 msgid "Source list entries for this disc are:\n"
 msgstr "Bronlijst-ingangen voor de schijf zijn:\n"
 
-#: apt-pkg/indexcopy.cc:270 apt-pkg/indexcopy.cc:928
+#: apt-pkg/indexcopy.cc:270 apt-pkg/indexcopy.cc:927
 #, c-format
 msgid "Wrote %i records.\n"
 msgstr "%i records weggeschreven.\n"
 
-#: apt-pkg/indexcopy.cc:272 apt-pkg/indexcopy.cc:930
+#: apt-pkg/indexcopy.cc:272 apt-pkg/indexcopy.cc:929
 #, c-format
 msgid "Wrote %i records with %i missing files.\n"
 msgstr "%i records weggeschreven met %i missende bestanden.\n"
 
-#: apt-pkg/indexcopy.cc:275 apt-pkg/indexcopy.cc:933
+#: apt-pkg/indexcopy.cc:275 apt-pkg/indexcopy.cc:932
 #, c-format
 msgid "Wrote %i records with %i mismatched files\n"
 msgstr "%i records weggeschreven met %i niet overeenkomende bestanden\n"
 
-#: apt-pkg/indexcopy.cc:278 apt-pkg/indexcopy.cc:936
+#: apt-pkg/indexcopy.cc:278 apt-pkg/indexcopy.cc:935
 #, c-format
 msgid "Wrote %i records with %i missing files and %i mismatched files\n"
 msgstr ""
@@ -3331,19 +3447,21 @@ msgid "Version '%s' for '%s' was not found"
 msgstr "Versie '%s' voor '%s' is niet gevonden"
 
 #: apt-pkg/cacheset.cc:447
-#, fuzzy, c-format
+#, c-format
 msgid "Couldn't find task '%s'"
-msgstr "Kon taak %s niet vinden"
+msgstr "Kon taak '%s' niet vinden"
 
 #: apt-pkg/cacheset.cc:454
-#, fuzzy, c-format
+#, c-format
 msgid "Couldn't find any package by regex '%s'"
-msgstr "Kon pakket %s niet vinden"
+msgstr "Kon geen enkel pakket vinden bij regex '%s'"
 
 #: apt-pkg/cacheset.cc:467
-#, c-format
+#, fuzzy, c-format
+#| msgid "Can't select versions from package '%s' as it purely virtual"
 msgid "Can't select versions from package '%s' as it is purely virtual"
 msgstr ""
+"Kan geen versies selecteren voor pakket '%s' omdat deze zuiver virtueel is"
 
 #: apt-pkg/cacheset.cc:475 apt-pkg/cacheset.cc:483
 #, c-format
@@ -3351,21 +3469,29 @@ msgid ""
 "Can't select installed nor candidate version from package '%s' as it has "
 "neither of them"
 msgstr ""
+"Kan noch de geïnstalleerde, noch de kandidaat-versie van het pakket '%s' "
+"selecteren omdat deze geen van beide heeft"
 
 #: apt-pkg/cacheset.cc:491
 #, c-format
 msgid "Can't select newest version from package '%s' as it is purely virtual"
 msgstr ""
+"Kan de nieuwste versie van het pakket '%s' niet selecteren omdat deze zuiver "
+"virtueel is"
 
 #: apt-pkg/cacheset.cc:499
 #, c-format
 msgid "Can't select candidate version from package %s as it has no candidate"
 msgstr ""
+"Kan de kandidaat-versie van het pakket %s niet selecteren omdat deze geen "
+"kandidaat heeft"
 
 #: apt-pkg/cacheset.cc:507
 #, c-format
 msgid "Can't select installed version from package %s as it is not installed"
 msgstr ""
+"Kan de geïnstalleerde versie van het pakket %s niet selecteren omdat deze "
+"niet geïnstalleerd is"
 
 #: apt-pkg/deb/dpkgpm.cc:54
 #, c-format
@@ -3390,7 +3516,7 @@ msgstr "%s wordt volledig verwijderd"
 #: apt-pkg/deb/dpkgpm.cc:58
 #, c-format
 msgid "Noting disappearance of %s"
-msgstr ""
+msgstr "De verdwijning van %s wordt opgemerkt"
 
 #: apt-pkg/deb/dpkgpm.cc:59
 #, c-format
@@ -3404,9 +3530,9 @@ msgid "Directory '%s' missing"
 msgstr "Map '%s' ontbreekt"
 
 #: apt-pkg/deb/dpkgpm.cc:669 apt-pkg/deb/dpkgpm.cc:689
-#, fuzzy, c-format
+#, c-format
 msgid "Could not open file '%s'"
-msgstr "Kon het bestand %s niet openen"
+msgstr "Kon het bestand '%s' niet openen"
 
 #: apt-pkg/deb/dpkgpm.cc:841
 #, c-format
@@ -3448,47 +3574,57 @@ msgstr "Volledige verwijdering van %s wordt voorbereid"
 msgid "Completely removed %s"
 msgstr "%s is volledig verwijderd"
 
-#: apt-pkg/deb/dpkgpm.cc:1082
+#: apt-pkg/deb/dpkgpm.cc:1087
 msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
 msgstr ""
 "Kon logbestand niet wegschrijven, openpty() is mislukt (/dev/pts niet "
 "aangekoppeld?)\n"
 
-#: apt-pkg/deb/dpkgpm.cc:1113
+#: apt-pkg/deb/dpkgpm.cc:1118
 msgid "Running dpkg"
 msgstr "dpkg wordt uitgevoerd"
 
-#: apt-pkg/deb/dpkgpm.cc:1338
+#: apt-pkg/deb/dpkgpm.cc:1344
 msgid "No apport report written because MaxReports is reached already"
 msgstr ""
+"Er is geen apport-verslag weggeschreven omdat het maximum aantal verslagen "
+"(MaxReports) al is bereikt"
 
 #. check if its not a follow up error
-#: apt-pkg/deb/dpkgpm.cc:1343
+#: apt-pkg/deb/dpkgpm.cc:1349
 msgid "dependency problems - leaving unconfigured"
-msgstr ""
+msgstr "problemen met vereisten - wordt niet geconfigureerd"
 
-#: apt-pkg/deb/dpkgpm.cc:1345
+#: apt-pkg/deb/dpkgpm.cc:1351
 msgid ""
 "No apport report written because the error message indicates its a followup "
 "error from a previous failure."
 msgstr ""
+"Er is geen apport-verslag weggeschreven omdat de foutmelding volgt op een "
+"eerdere mislukking."
 
-#: apt-pkg/deb/dpkgpm.cc:1351
+#: apt-pkg/deb/dpkgpm.cc:1357
 msgid ""
 "No apport report written because the error message indicates a disk full "
 "error"
 msgstr ""
+"Er is geen apport-verslag weggeschreven omdat de foutmelding een fout is "
+"over een volle schijf."
 
-#: apt-pkg/deb/dpkgpm.cc:1357
+#: apt-pkg/deb/dpkgpm.cc:1363
 msgid ""
 "No apport report written because the error message indicates a out of memory "
 "error"
 msgstr ""
+"Er is geen apport-verslag weggeschreven omdat de foutmelding een fout is "
+"over onvoldoende-geheugen."
 
-#: apt-pkg/deb/dpkgpm.cc:1364
+#: apt-pkg/deb/dpkgpm.cc:1370
 msgid ""
 "No apport report written because the error message indicates a dpkg I/O error"
 msgstr ""
+"Er is geen apport-verslag weggeschreven omdat de foutmelding een fout over "
+"dpkg-I/O is."
 
 #: apt-pkg/deb/debsystem.cc:69
 #, c-format
@@ -3507,12 +3643,11 @@ msgstr "Kan de beheersmap (%s) niet vergrendelen. Heeft u beheerdersrechten?"
 #. TRANSLATORS: the %s contains the recovery command, usually
 #. dpkg --configure -a
 #: apt-pkg/deb/debsystem.cc:88
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "dpkg was interrupted, you must manually run '%s' to correct the problem. "
 msgstr ""
-"dpkg werd onderbroken; voer handmatig 'dpkg --configure -a' uit om het "
-"probleem te verhelpen. "
+"dpkg werd onderbroken; voer handmatig '%s' uit om het probleem te verhelpen. "
 
 #: apt-pkg/deb/debsystem.cc:106
 msgid "Not locked"
@@ -3523,21 +3658,22 @@ msgstr "Niet vergrendeld"
 #: methods/mirror.cc:260
 #, c-format
 msgid "No mirror file '%s' found "
-msgstr ""
+msgstr "Geen spiegelbestand '%s' gevonden "
 
 #. FIXME: fallback to a default mirror here instead
 #. and provide a config option to define that default
 #: methods/mirror.cc:267
 #, fuzzy, c-format
+#| msgid "No mirror file '%s' found "
 msgid "Can not read mirror file '%s'"
-msgstr "Kon het bestand %s niet openen"
+msgstr "Geen spiegelbestand '%s' gevonden "
 
 #: methods/mirror.cc:422
 #, c-format
 msgid "[Mirror: %s]"
-msgstr ""
+msgstr "[Spiegelserver: %s]"
 
-#: methods/rred.cc:503
+#: methods/rred.cc:506
 #, c-format
 msgid ""
 "Could not patch %s with mmap and with file operation usage - the patch seems "
@@ -3546,7 +3682,7 @@ msgstr ""
 "Kon %s niet patchen met mmap of met een bestandsoperatie - de patch lijkt "
 "beschadigd te zijn."
 
-#: methods/rred.cc:508
+#: methods/rred.cc:511
 #, c-format
 msgid ""
 "Could not patch %s with mmap (but no mmap specific fail) - the patch seems "
@@ -3562,24 +3698,8 @@ msgstr "Verbinding werd voortijdig afgebroken"
 #~ msgid "Internal error, could not locate member"
 #~ msgstr "Interne fout, kon onderdeel niet vinden"
 
-#~ msgid "E: Too many keyrings should be passed to gpgv. Exiting."
-#~ msgstr ""
-#~ "E: Te veel sleutelringen om door te geven aan gpgv. Er wordt afgesloten."
-
-#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
-#~ msgstr ""
-#~ "F: argumentenlijst van Acquire::gpv::Options was te lang. Er wordt "
-#~ "afgesloten."
-
-#~ msgid ""
-#~ "The size of a MMap has already reached the defined limit of %lu bytes,"
-#~ "abort the try to grow the MMap."
-#~ msgstr ""
-#~ "De omvang van een MMap heeft de gedefinieerde limiet van %lu bytes al "
-#~ "bereikt; de MMap wordt niet verder vergroot."
-
-#~ msgid "Error occurred while processing %s (NewVersion2)"
-#~ msgstr "Fout tijdens verwerken van %s (NewVersion2)"
+#~ msgid "Internal error, group '%s' has no installable pseudo package"
+#~ msgstr "Interne fout, de groep '%s' heeft geen installeerbaar pseudopakket"
 
-#~ msgid "Malformed line %u in source list %s (vendor id)"
-#~ msgstr "Misvormde regel %u in bronlijst %s (verkopers-ID)"
+#~ msgid "Release file expired, ignoring %s (invalid since %s)"
+#~ msgstr "Release-bestand is verlopen, %s (ongeldig sinds %s) wordt genegeerd"
index 9157596a7eecc1479ae52cb3ab0f720810ab65fc..4f374b37f90a91c6191083c84a5da9adc0044894 100644 (file)
@@ -1,16 +1,3 @@
-Package: newstuff
-Version: 1.0
-Architecture: i386
-Maintainer: Joe Sixpack <joe@example.org>
-Installed-Size: 101
-Filename: pool/newstuff_1.0_i386.deb
-Size: 101100
-MD5sum: 311aeeadf78324aaff1ceaf3e1f76671
-SHA1: 3c695e028f7a1ae324deeddaaa1242desa81088c
-SHA256: b46fd154615edefab321cc56a5cc0e7deaef23e2da3e4f129727fd660f28f050
-Description: some cool and shiny new stuff
- This package will appear in the next mirror update
-
 Package: apt
 Priority: important
 Section: admin
@@ -35,3 +22,16 @@ Description: Advanced front-end for dpkg
  .
  APT features complete installation ordering, multiple source capability
  and several other unique features, see the Users Guide in apt-doc.
+
+Package: newstuff
+Version: 1.0
+Architecture: i386
+Maintainer: Joe Sixpack <joe@example.org>
+Installed-Size: 101
+Filename: pool/newstuff_1.0_i386.deb
+Size: 101100
+MD5sum: 311aeeadf78324aaff1ceaf3e1f76671
+SHA1: 3c695e028f7a1ae324deeddaaa1242desa81088c
+SHA256: b46fd154615edefab321cc56a5cc0e7deaef23e2da3e4f129727fd660f28f050
+Description: some cool and shiny new stuff
+ This package will appear in the next mirror update
index b55f793a4860b3590ca8d717a7222c86814a89cd..2ea1844f0fdbbe6d1d21007cf466937c78db78f8 100644 (file)
@@ -102,7 +102,7 @@ aptitude() {
 
 addtrap() {
        CURRENTTRAP="$CURRENTTRAP $1"
-       trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
+       trap "$CURRENTTRAP exit;" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
 }
 
 setupenvironment() {
diff --git a/test/integration/test-multiarch-foreign b/test/integration/test-multiarch-foreign
new file mode 100755 (executable)
index 0000000..332466d
--- /dev/null
@@ -0,0 +1,150 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'amd64' 'i386' 'armel'
+
+insertpackage 'unstable' 'cool-foo' 'amd64,i386' '1.0' 'Depends: foo'
+insertpackage 'unstable' 'foo' 'amd64,i386,armel' '1.0' 'Multi-Arch: foreign'
+
+insertpackage 'unstable' 'cool-bar' 'amd64,i386' '1.0' 'Depends: bar-provider'
+insertpackage 'unstable' 'bar' 'amd64,i386,armel' '1.0' 'Provides: bar-provider
+Multi-Arch: foreign'
+
+setupaptarchive
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  foo
+The following NEW packages will be installed:
+  cool-foo:i386 foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [amd64])
+Inst cool-foo:i386 (1.0 unstable [i386])
+Conf foo (1.0 unstable [amd64])
+Conf cool-foo:i386 (1.0 unstable [i386])' aptget install cool-foo:i386 -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  foo
+The following NEW packages will be installed:
+  cool-foo foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [amd64])
+Inst cool-foo (1.0 unstable [amd64])
+Conf foo (1.0 unstable [amd64])
+Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+  cool-foo foo
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo (1.0 unstable [amd64])
+Inst cool-foo (1.0 unstable [amd64])
+Conf foo (1.0 unstable [amd64])
+Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:amd64 -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+  cool-foo foo:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo:i386 (1.0 unstable [i386])
+Inst cool-foo (1.0 unstable [amd64])
+Conf foo:i386 (1.0 unstable [i386])
+Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:i386 -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+  cool-foo foo:armel
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst foo:armel (1.0 unstable [armel])
+Inst cool-foo (1.0 unstable [amd64])
+Conf foo:armel (1.0 unstable [armel])
+Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:armel -s
+
+
+
+
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  bar
+The following NEW packages will be installed:
+  bar cool-bar:i386
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [amd64])
+Inst cool-bar:i386 (1.0 unstable [i386])
+Conf bar (1.0 unstable [amd64])
+Conf cool-bar:i386 (1.0 unstable [i386])' aptget install cool-bar:i386 -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  bar
+The following NEW packages will be installed:
+  bar cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [amd64])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar (1.0 unstable [amd64])
+Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+  bar cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [amd64])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar (1.0 unstable [amd64])
+Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:amd64 -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+  bar:i386 cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar:i386 (1.0 unstable [i386])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar:i386 (1.0 unstable [i386])
+Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:i386 -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+  bar:armel cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar:armel (1.0 unstable [armel])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar:armel (1.0 unstable [armel])
+Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:armel -s
+
+testequal "Reading package lists...
+Building dependency tree...
+Note, selecting 'bar' instead of 'bar-provider'
+The following NEW packages will be installed:
+  bar cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1.0 unstable [amd64])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar (1.0 unstable [amd64])
+Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider -s -q=0
+
+testequal "Reading package lists...
+Building dependency tree...
+Note, selecting 'bar:i386' instead of 'bar-provider:i386'
+The following NEW packages will be installed:
+  bar:i386 cool-bar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar:i386 (1.0 unstable [i386])
+Inst cool-bar (1.0 unstable [amd64])
+Conf bar:i386 (1.0 unstable [i386])
+Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider:i386 -s -q=0
diff --git a/test/libapt/cdromfindpackages_test.cc b/test/libapt/cdromfindpackages_test.cc
new file mode 100644 (file)
index 0000000..e9f5a51
--- /dev/null
@@ -0,0 +1,86 @@
+#include <apt-pkg/cdrom.h>
+#include <apt-pkg/error.h>
+
+#include <algorithm>
+#include <string>
+#include <vector>
+
+#include "assert.h"
+
+class Cdrom : public pkgCdrom {
+       public:
+       bool FindPackages(std::string const &CD,
+                         std::vector<std::string> &List,
+                         std::vector<std::string> &SList,
+                         std::vector<std::string> &SigList,
+                         std::vector<std::string> &TransList,
+                         std::string &InfoDir) {
+               bool const result = pkgCdrom::FindPackages(CD, List, SList, SigList, TransList, InfoDir, NULL, 0);
+               std::sort(List.begin(), List.end());
+               std::sort(SList.begin(), SList.end());
+               std::sort(SigList.begin(), SigList.end());
+               std::sort(TransList.begin(), TransList.end());
+               return result;
+       }
+
+       bool DropRepeats(std::vector<std::string> &List, char const *Name) {
+               return pkgCdrom::DropRepeats(List, Name);
+       }
+};
+
+int main(int argc, char const *argv[]) {
+       if (argc != 2) {
+               std::cout << "One parameter expected - given " << argc << std::endl;
+               return 100;
+       }
+
+       Cdrom cd;
+       std::vector<std::string> Packages, Sources, Signatur, Translation;
+       std::string InfoDir;
+       std::string path = argv[1];
+       equals(true, cd.FindPackages(path, Packages, Sources, Signatur, Translation, InfoDir));
+       equals(4, Packages.size());
+       equals(path + "/dists/sid/main/binary-i386/", Packages[0]);
+       equals(path + "/dists/stable/contrib/binary-amd64/", Packages[1]);
+       equals(path + "/dists/stable/main/binary-i386/", Packages[2]);
+       equals(path + "/dists/unstable/main/binary-i386/", Packages[3]);
+       equals(3, Sources.size());
+       equals(path + "/dists/sid/main/source/", Sources[0]);
+       equals(path + "/dists/stable/main/source/", Sources[1]);
+       equals(path + "/dists/unstable/main/source/", Sources[2]);
+       equals(3, Signatur.size());
+       equals(path + "/dists/sid/", Signatur[0]);
+       equals(path + "/dists/stable/", Signatur[1]);
+       equals(path + "/dists/unstable/", Signatur[2]);
+       equals(4, Translation.size());
+       equals(path + "/dists/sid/main/i18n/Translation-de", Translation[0]);
+       equals(path + "/dists/sid/main/i18n/Translation-en", Translation[1]);
+       equals(path + "/dists/unstable/main/i18n/Translation-de", Translation[2]);
+       equals(path + "/dists/unstable/main/i18n/Translation-en", Translation[3]);
+       equals(path + "/.disk/", InfoDir);
+
+       cd.DropRepeats(Packages, "Packages");
+       cd.DropRepeats(Sources, "Sources");
+       _error->PushToStack();
+       cd.DropRepeats(Signatur, "InRelease");
+       cd.DropRepeats(Signatur, "Release.gpg");
+       _error->RevertToStack();
+       _error->DumpErrors();
+       cd.DropRepeats(Translation, "");
+
+       equals(3, Packages.size());
+       equals(path + "/dists/stable/contrib/binary-amd64/", Packages[0]);
+       equals(path + "/dists/stable/main/binary-i386/", Packages[1]);
+       equals(path + "/dists/unstable/main/binary-i386/", Packages[2]);
+       equals(2, Sources.size());
+       equals(path + "/dists/stable/main/source/", Sources[0]);
+       equals(path + "/dists/unstable/main/source/", Sources[1]);
+       equals(2, Signatur.size());
+       equals(path + "/dists/stable/", Signatur[0]);
+       equals(path + "/dists/unstable/", Signatur[1]);
+       equals(2, Translation.size());
+       equals(path + "/dists/unstable/main/i18n/Translation-de", Translation[0]);
+       equals(path + "/dists/unstable/main/i18n/Translation-en", Translation[1]);
+
+       return 0;
+}
index d3dddaeedcef5f9cf8a0decdb2b93f11e66696ce..1952051e28008e23a2bb552ed781f0923b1c2efb 100644 (file)
@@ -74,3 +74,9 @@ PROGRAM = Configuration${BASENAME}
 SLIBS = -lapt-pkg
 SOURCE = configuration_test.cc
 include $(PROGRAM_H)
+
+# test cdroms core FindPackages
+PROGRAM = CdromFindPackages${BASENAME}
+SLIBS = -lapt-pkg
+SOURCE = cdromfindpackages_test.cc
+include $(PROGRAM_H)
index ada2dc38b0a84e8b6b97afe6a875e221ddca0b9c..5fff4ecca4a7be787c280af8b3b72189f1d5e3bf 100755 (executable)
@@ -75,6 +75,35 @@ do
                continue
        elif [ $name = "CompareVersion${EXT}" ]; then
                tmppath="${DIR}/versions.lst"
+       elif [ $name = "CdromFindPackages${EXT}" ]; then
+               tmppath=$(mktemp -d)
+               mkdir -p "${tmppath}/.disk" "${tmppath}/pool" \
+                       "${tmppath}/dists/stable/main/binary-i386" \
+                       "${tmppath}/dists/stable/main/source" \
+                       "${tmppath}/dists/stable/contrib/binary-amd64" \
+                       "${tmppath}/dists/stable/contrib/binary-all" \
+                       "${tmppath}/dists/unstable/main/binary-i386" \
+                       "${tmppath}/dists/unstable/main/i18n" \
+                       "${tmppath}/dists/unstable/main/source" \
+                       "${tmppath}/dists/broken/non-free/source"
+               touch "${tmppath}/dists/broken/.aptignr" \
+                       "${tmppath}/dists/stable/main/binary-i386/Packages" \
+                       "${tmppath}/dists/stable/main/binary-i386/Packages.bz2" \
+                       "${tmppath}/dists/stable/main/source/Sources.xz" \
+                       "${tmppath}/dists/stable/contrib/binary-amd64/Packages" \
+                       "${tmppath}/dists/stable/contrib/binary-amd64/Packages.gz" \
+                       "${tmppath}/dists/stable/contrib/binary-all/Packages" \
+                       "${tmppath}/dists/unstable/main/binary-i386/Packages.xz" \
+                       "${tmppath}/dists/unstable/main/binary-i386/Packages.lzma" \
+                       "${tmppath}/dists/unstable/main/i18n/Translation-en" \
+                       "${tmppath}/dists/unstable/main/i18n/Translation-de.bz2" \
+                       "${tmppath}/dists/unstable/main/source/Sources.xz" \
+                       "${tmppath}/dists/broken/non-free/source/Sources.gz" \
+                       "${tmppath}/dists/stable/Release.gpg" \
+                       "${tmppath}/dists/stable/Release" \
+                       "${tmppath}/dists/unstable/InRelease" \
+                       "${tmppath}/dists/broken/Release.gpg"
+               ln -s "${tmppath}/dists/unstable" "${tmppath}/dists/sid"
        fi
 
        echo -n "Testing with ${NAME} "