summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2012-01-16 22:17:23 +0100
committerMichael Vogt <michael.vogt@ubuntu.com>2012-01-16 22:17:23 +0100
commite70c1d067335bfa686fa0c6e75e32afb095e1aaa (patch)
treee985e74ed4d613126b24839d710e4b49db753824
parente75aa33384d52635fba502bed628bc68f9cb5066 (diff)
parent85e1885525977809ff6a3b70abb84d3a63e41817 (diff)
merged from debian-experimental2
-rw-r--r--.bzrignore2
-rw-r--r--apt-inst/contrib/arfile.h3
-rw-r--r--apt-inst/contrib/extracttar.h6
-rw-r--r--apt-inst/database.h4
-rw-r--r--apt-inst/deb/debfile.h4
-rw-r--r--apt-pkg/acquire-item.cc4
-rw-r--r--apt-pkg/acquire-item.h8
-rw-r--r--apt-pkg/acquire-method.h5
-rw-r--r--apt-pkg/acquire.h5
-rw-r--r--apt-pkg/algorithms.h5
-rw-r--r--apt-pkg/cachefile.h6
-rw-r--r--apt-pkg/cacheiterators.h2
-rw-r--r--apt-pkg/cacheset.cc381
-rw-r--r--apt-pkg/cacheset.h620
-rw-r--r--apt-pkg/cdrom.cc110
-rw-r--r--apt-pkg/cdrom.h5
-rw-r--r--apt-pkg/contrib/cdromutl.h4
-rw-r--r--apt-pkg/contrib/cmndline.h4
-rw-r--r--apt-pkg/contrib/configuration.h4
-rw-r--r--apt-pkg/contrib/fileutl.cc553
-rw-r--r--apt-pkg/contrib/fileutl.h71
-rw-r--r--apt-pkg/contrib/hashes.cc40
-rw-r--r--apt-pkg/contrib/hashes.h11
-rw-r--r--apt-pkg/contrib/hashsum.cc22
-rw-r--r--apt-pkg/contrib/hashsum_template.h8
-rw-r--r--apt-pkg/contrib/md5.h5
-rw-r--r--apt-pkg/contrib/mmap.cc22
-rw-r--r--apt-pkg/contrib/mmap.h5
-rw-r--r--apt-pkg/contrib/netrc.h4
-rw-r--r--apt-pkg/contrib/progress.h4
-rw-r--r--apt-pkg/contrib/sha1.h5
-rw-r--r--apt-pkg/contrib/strutl.h6
-rw-r--r--apt-pkg/deb/debindexfile.cc35
-rw-r--r--apt-pkg/deb/deblistparser.cc1
-rw-r--r--apt-pkg/deb/deblistparser.h4
-rw-r--r--apt-pkg/deb/debmetaindex.h4
-rw-r--r--apt-pkg/deb/debrecords.cc2
-rw-r--r--apt-pkg/deb/debrecords.h4
-rw-r--r--apt-pkg/deb/debsrcrecords.h2
-rw-r--r--apt-pkg/deb/dpkgpm.cc73
-rw-r--r--apt-pkg/deb/dpkgpm.h5
-rw-r--r--apt-pkg/depcache.cc98
-rw-r--r--apt-pkg/depcache.h5
-rw-r--r--apt-pkg/edsp.h9
-rw-r--r--apt-pkg/edsp/edspindexfile.cc11
-rw-r--r--apt-pkg/edsp/edspindexfile.h4
-rw-r--r--apt-pkg/edsp/edsplistparser.h6
-rw-r--r--apt-pkg/indexcopy.cc175
-rw-r--r--apt-pkg/indexcopy.h5
-rw-r--r--apt-pkg/indexfile.h4
-rw-r--r--apt-pkg/indexrecords.h4
-rw-r--r--apt-pkg/init.h5
-rw-r--r--apt-pkg/metaindex.h7
-rw-r--r--apt-pkg/packagemanager.cc2
-rw-r--r--apt-pkg/packagemanager.h5
-rw-r--r--apt-pkg/pkgcache.cc44
-rw-r--r--apt-pkg/pkgcache.h7
-rw-r--r--apt-pkg/pkgcachegen.cc16
-rw-r--r--apt-pkg/pkgsystem.h4
-rw-r--r--apt-pkg/policy.h4
-rw-r--r--apt-pkg/sourcelist.h28
-rw-r--r--apt-pkg/srcrecords.cc8
-rw-r--r--apt-pkg/srcrecords.h5
-rw-r--r--apt-pkg/tagfile.h4
-rw-r--r--apt-pkg/vendor.h4
-rw-r--r--apt-pkg/vendorlist.h7
-rw-r--r--apt-pkg/version.h4
-rw-r--r--apt-pkg/versionmatch.h4
-rw-r--r--buildlib/config.h.in2
-rw-r--r--cmdline/apt-cache.cc38
-rw-r--r--cmdline/apt-config.cc16
-rw-r--r--cmdline/apt-extracttemplates.h10
-rw-r--r--cmdline/apt-get.cc47
-rw-r--r--cmdline/apt-mark.cc16
-rw-r--r--configure.in2
-rw-r--r--debian/changelog76
-rw-r--r--debian/control8
-rw-r--r--debian/libapt-inst1.4.install2
-rw-r--r--debian/libapt-inst1.4.install.in2
-rw-r--r--debian/libapt-pkg-dev.dirs2
-rw-r--r--debian/libapt-pkg-dev.install3
-rw-r--r--debian/libapt-pkg-dev.install.in3
-rw-r--r--debian/libapt-pkg4.12.install2
-rw-r--r--debian/libapt-pkg4.12.install.in2
-rwxr-xr-xdebian/rules12
-rw-r--r--doc/apt-get.8.xml6
-rw-r--r--doc/apt-key.8.xml2
-rw-r--r--doc/apt.conf.5.xml2
-rw-r--r--doc/manpage-style.xsl2
-rw-r--r--doc/po/de.po615
-rw-r--r--doc/po/es.po128
-rw-r--r--doc/po/fr.po168
-rw-r--r--doc/po/ja.po78
-rw-r--r--doc/po/pl.po72
-rw-r--r--doc/po/pt.po126
-rw-r--r--doc/sources.list.5.xml2
-rw-r--r--ftparchive/cachedb.cc8
-rw-r--r--ftparchive/multicompress.cc140
-rw-r--r--ftparchive/multicompress.h6
-rw-r--r--ftparchive/writer.cc25
-rw-r--r--methods/cdrom.cc2
-rw-r--r--methods/copy.cc2
-rw-r--r--methods/file.cc2
-rw-r--r--methods/ftp.cc2
-rw-r--r--methods/gzip.cc2
-rw-r--r--methods/http.cc24
-rw-r--r--methods/https.cc2
-rw-r--r--methods/rred.cc91
-rw-r--r--methods/rsh.cc2
-rw-r--r--po/apt-all.pot500
-rw-r--r--po/fr.po72
-rw-r--r--po/nl.po878
-rw-r--r--test/integration/Packages-pdiff-usage-new26
-rw-r--r--test/integration/framework2
-rwxr-xr-xtest/integration/test-dpkg-assert-multi-arch53
-rwxr-xr-xtest/integration/test-implicit-conflicts-real-not-virtual56
-rwxr-xr-xtest/integration/test-multiarch-foreign150
-rw-r--r--test/libapt/cdromfindpackages_test.cc86
-rw-r--r--test/libapt/makefile6
-rwxr-xr-xtest/libapt/run-tests29
120 files changed, 4071 insertions, 2086 deletions
diff --git a/.bzrignore b/.bzrignore
index 7c4b11b10..dab38cf71 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -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
diff --git a/apt-inst/contrib/arfile.h b/apt-inst/contrib/arfile.h
index 2be1323d1..0f62a34a0 100644
--- a/apt-inst/contrib/arfile.h
+++ b/apt-inst/contrib/arfile.h
@@ -17,6 +17,9 @@
#include <string>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+#endif
class FileFd;
diff --git a/apt-inst/contrib/extracttar.h b/apt-inst/contrib/extracttar.h
index 8754e8dcc..4b29df314 100644
--- a/apt-inst/contrib/extracttar.h
+++ b/apt-inst/contrib/extracttar.h
@@ -18,6 +18,12 @@
#include <string>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/dirstream.h>
+#include <algorithm>
+using std::min;
+#endif
+
class pkgDirStream;
class ExtractTar
diff --git a/apt-inst/database.h b/apt-inst/database.h
index ccfee3797..64e149f98 100644
--- a/apt-inst/database.h
+++ b/apt-inst/database.h
@@ -25,6 +25,10 @@
#include <string>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/filelist.h>
+#endif
+
class pkgFLCache;
class OpProgress;
diff --git a/apt-inst/deb/debfile.h b/apt-inst/deb/debfile.h
index 2c4734f9e..5e1ea1d2f 100644
--- a/apt-inst/deb/debfile.h
+++ b/apt-inst/deb/debfile.h
@@ -29,6 +29,10 @@
#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;
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc
index 453fce109..f231c42b4 100644
--- a/apt-pkg/acquire-item.cc
+++ b/apt-pkg/acquire-item.cc
@@ -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: "
diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h
index 27b8e887b..51d539450 100644
--- a/apt-pkg/acquire-item.h
+++ b/apt-pkg/acquire-item.h
@@ -25,6 +25,14 @@
#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
* @{
*
diff --git a/apt-pkg/acquire-method.h b/apt-pkg/acquire-method.h
index c3f042ee0..2dd9ad685 100644
--- a/apt-pkg/acquire-method.h
+++ b/apt-pkg/acquire-method.h
@@ -25,6 +25,11 @@
#include <string>
#include <vector>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/strutl.h>
+#endif
+
class Hashes;
class pkgAcqMethod
{
diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h
index 93772403d..3d5d7a4b7 100644
--- a/apt-pkg/acquire.h
+++ b/apt-pkg/acquire.h
@@ -75,6 +75,11 @@
#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. {{{
diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h
index 948fe1103..185d11e96 100644
--- a/apt-pkg/algorithms.h
+++ b/apt-pkg/algorithms.h
@@ -36,6 +36,11 @@
#include <iostream>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/acquire.h>
+using std::ostream;
+#endif
+
class pkgAcquireStatus;
class pkgSimulate : public pkgPackageManager /*{{{*/
diff --git a/apt-pkg/cachefile.h b/apt-pkg/cachefile.h
index b56e42855..802b12b61 100644
--- a/apt-pkg/cachefile.h
+++ b/apt-pkg/cachefile.h
@@ -20,6 +20,12 @@
#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;
diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h
index 5382f3838..e6a0fddb0 100644
--- a/apt-pkg/cacheiterators.h
+++ b/apt-pkg/cacheiterators.h
@@ -283,6 +283,8 @@ class pkgCache::DepIterator : public Iterator<Dependency, DepIterator> {
inline bool Reverse() const {return Type == DepRev;};
bool IsCritical() const;
bool IsNegative() const;
+ bool IsIgnorable(PrvIterator const &Prv) const;
+ bool IsIgnorable(PkgIterator const &Pkg) const;
void GlobOr(DepIterator &Start,DepIterator &End);
Version **AllTargets() const;
bool SmartTargetPkg(PkgIterator &Result) const;
diff --git a/apt-pkg/cacheset.cc b/apt-pkg/cacheset.cc
index 6b95eab70..b892ab4bf 100644
--- a/apt-pkg/cacheset.cc
+++ b/apt-pkg/cacheset.cc
@@ -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) {
+}
+ /*}}}*/
}
diff --git a/apt-pkg/cacheset.h b/apt-pkg/cacheset.h
index 3b1118bdc..91d7eec1c 100644
--- a/apt-pkg/cacheset.h
+++ b/apt-pkg/cacheset.h
@@ -14,17 +14,24 @@
#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
diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc
index a9c63fd21..4462d4e24 100644
--- a/apt-pkg/cdrom.cc
+++ b/apt-pkg/cdrom.cc
@@ -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("");
diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h
index 319254fd0..cedfccff7 100644
--- a/apt-pkg/cdrom.h
+++ b/apt-pkg/cdrom.h
@@ -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;
diff --git a/apt-pkg/contrib/cdromutl.h b/apt-pkg/contrib/cdromutl.h
index 2c6afac0f..e94045b5c 100644
--- a/apt-pkg/contrib/cdromutl.h
+++ b/apt-pkg/contrib/cdromutl.h
@@ -12,6 +12,10 @@
#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);
diff --git a/apt-pkg/contrib/cmndline.h b/apt-pkg/contrib/cmndline.h
index b201d9855..9f505fd41 100644
--- a/apt-pkg/contrib/cmndline.h
+++ b/apt-pkg/contrib/cmndline.h
@@ -44,6 +44,10 @@
#ifndef PKGLIB_CMNDLINE_H
#define PKGLIB_CMNDLINE_H
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/configuration.h>
+#endif
+
class Configuration;
class CommandLine
diff --git a/apt-pkg/contrib/configuration.h b/apt-pkg/contrib/configuration.h
index f6f2a3c1d..4c2e75041 100644
--- a/apt-pkg/contrib/configuration.h
+++ b/apt-pkg/contrib/configuration.h
@@ -34,6 +34,10 @@
#include <vector>
#include <iostream>
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
class Configuration
{
public:
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index 95058cbde..b350973af 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -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>
@@ -43,6 +44,16 @@
#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
@@ -52,6 +63,23 @@
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,85 +746,288 @@ 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; }
diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h
index 0d0451a46..147535df1 100644
--- a/apt-pkg/contrib/fileutl.h
+++ b/apt-pkg/contrib/fileutl.h
@@ -22,30 +22,51 @@
#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);
diff --git a/apt-pkg/contrib/hashes.cc b/apt-pkg/contrib/hashes.cc
index 05001f042..e1a431823 100644
--- a/apt-pkg/contrib/hashes.cc
+++ b/apt-pkg/contrib/hashes.cc
@@ -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();
@@ -135,5 +135,35 @@ bool Hashes::AddFD(int const Fd,unsigned long long Size, bool const addMD5,
}
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;
+}
/*}}}*/
-
diff --git a/apt-pkg/contrib/hashes.h b/apt-pkg/contrib/hashes.h
index 81851dede..0c0b6c6a7 100644
--- a/apt-pkg/contrib/hashes.h
+++ b/apt-pkg/contrib/hashes.h
@@ -17,11 +17,18 @@
#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);};
};
diff --git a/apt-pkg/contrib/hashsum.cc b/apt-pkg/contrib/hashsum.cc
index ff3b112bb..289e43aa4 100644
--- a/apt-pkg/contrib/hashsum.cc
+++ b/apt-pkg/contrib/hashsum.cc
@@ -25,4 +25,26 @@ bool SummationImplementation::AddFD(int const Fd, unsigned long long Size) {
}
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;
+}
/*}}}*/
diff --git a/apt-pkg/contrib/hashsum_template.h b/apt-pkg/contrib/hashsum_template.h
index d2d9f92ed..9bf160b2b 100644
--- a/apt-pkg/contrib/hashsum_template.h
+++ b/apt-pkg/contrib/hashsum_template.h
@@ -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>
@@ -17,6 +19,11 @@
#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
diff --git a/apt-pkg/contrib/md5.h b/apt-pkg/contrib/md5.h
index a207da4e4..25631b166 100644
--- a/apt-pkg/contrib/md5.h
+++ b/apt-pkg/contrib/md5.h
@@ -31,6 +31,11 @@
#include "hashsum_template.h"
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::min;
+#endif
+
typedef HashSumValue<128> MD5SumValue;
class MD5Summation : public SummationImplementation
diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc
index f76169a92..a67ab3698 100644
--- a/apt-pkg/contrib/mmap.cc
+++ b/apt-pkg/contrib/mmap.cc
@@ -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());
diff --git a/apt-pkg/contrib/mmap.h b/apt-pkg/contrib/mmap.h
index 2ed4a95f8..6bd4a2d86 100644
--- a/apt-pkg/contrib/mmap.h
+++ b/apt-pkg/contrib/mmap.h
@@ -28,6 +28,11 @@
#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
diff --git a/apt-pkg/contrib/netrc.h b/apt-pkg/contrib/netrc.h
index 7b94eba88..5931d4a42 100644
--- a/apt-pkg/contrib/netrc.h
+++ b/apt-pkg/contrib/netrc.h
@@ -16,6 +16,10 @@
#include <string>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/strutl.h>
+#endif
+
#define DOT_CHAR "."
#define DIR_CHAR "/"
diff --git a/apt-pkg/contrib/progress.h b/apt-pkg/contrib/progress.h
index 7635719bc..3a6943aee 100644
--- a/apt-pkg/contrib/progress.h
+++ b/apt-pkg/contrib/progress.h
@@ -25,6 +25,10 @@
#include <string>
#include <sys/time.h>
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
class Configuration;
class OpProgress
{
diff --git a/apt-pkg/contrib/sha1.h b/apt-pkg/contrib/sha1.h
index b4b139a22..a8d55eb13 100644
--- a/apt-pkg/contrib/sha1.h
+++ b/apt-pkg/contrib/sha1.h
@@ -20,6 +20,11 @@
#include "hashsum_template.h"
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::min;
+#endif
+
typedef HashSumValue<160> SHA1SumValue;
class SHA1Summation : public SummationImplementation
diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h
index 93f4bef4f..337139d5d 100644
--- a/apt-pkg/contrib/strutl.h
+++ b/apt-pkg/contrib/strutl.h
@@ -27,6 +27,12 @@
#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);
diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc
index 27c1f7f32..5dc2a2ac2 100644
--- a/apt-pkg/deb/debindexfile.cc
+++ b/apt-pkg/deb/debindexfile.cc
@@ -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)
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index 28568d5e3..bdb50f6bf 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -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;
diff --git a/apt-pkg/deb/deblistparser.h b/apt-pkg/deb/deblistparser.h
index 9519d9711..386d291a2 100644
--- a/apt-pkg/deb/deblistparser.h
+++ b/apt-pkg/deb/deblistparser.h
@@ -14,6 +14,10 @@
#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:
diff --git a/apt-pkg/deb/debmetaindex.h b/apt-pkg/deb/debmetaindex.h
index 0cba2d8a8..b9ecab97c 100644
--- a/apt-pkg/deb/debmetaindex.h
+++ b/apt-pkg/deb/debmetaindex.h
@@ -8,6 +8,10 @@
#include <string>
#include <vector>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/sourcelist.h>
+#endif
+
class debReleaseIndex : public metaIndex {
public:
diff --git a/apt-pkg/deb/debrecords.cc b/apt-pkg/deb/debrecords.cc
index 1afa7b74d..184c07c33 100644
--- a/apt-pkg/deb/debrecords.cc
+++ b/apt-pkg/deb/debrecords.cc
@@ -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)
{
diff --git a/apt-pkg/deb/debrecords.h b/apt-pkg/deb/debrecords.h
index 9c7ea6b48..b5e3bbdba 100644
--- a/apt-pkg/deb/debrecords.h
+++ b/apt-pkg/deb/debrecords.h
@@ -18,6 +18,10 @@
#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) */
diff --git a/apt-pkg/deb/debsrcrecords.h b/apt-pkg/deb/debsrcrecords.h
index 4c8d03224..5d2a67f4f 100644
--- a/apt-pkg/deb/debsrcrecords.h
+++ b/apt-pkg/deb/debsrcrecords.h
@@ -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();
};
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 7c0ed5639..4dc0baa50 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -108,7 +108,7 @@ ionice(int PID)
{
if (!FileExists("/usr/bin/ionice"))
return false;
- pid_t Process = ExecFork();
+ pid_t Process = ExecFork();
if (Process == 0)
{
char buf[32];
@@ -829,6 +829,40 @@ static int racy_pselect(int nfds, fd_set *readfds, fd_set *writefds,
*/
bool pkgDPkgPM::Go(int OutStatusFd)
{
+ // Generate the base argument list for dpkg
+ std::vector<const char *> Args;
+ unsigned long StartSize = 0;
+ string const Tmp = _config->Find("Dir::Bin::dpkg","dpkg");
+ Args.push_back(Tmp.c_str());
+ StartSize += Tmp.length();
+
+ // Stick in any custom dpkg options
+ Configuration::Item const *Opts = _config->Tree("DPkg::Options");
+ if (Opts != 0)
+ {
+ Opts = Opts->Child;
+ for (; Opts != 0; Opts = Opts->Next)
+ {
+ if (Opts->Value.empty() == true)
+ continue;
+ Args.push_back(Opts->Value.c_str());
+ StartSize += Opts->Value.length();
+ }
+ }
+
+ size_t const BaseArgs = Args.size();
+ // we need to detect if we can qualify packages with the architecture or not
+ Args.push_back("--assert-multi-arch");
+ Args.push_back(NULL);
+
+ pid_t dpkgAssertMultiArch = ExecFork();
+ if (dpkgAssertMultiArch == 0)
+ {
+ execv(Args[0], (char**) &Args[0]);
+ _error->WarningE("dpkgGo", "Can't detect if dpkg supports multi-arch!");
+ _exit(2);
+ }
+
fd_set rfds;
struct timespec tv;
sigset_t sigmask;
@@ -905,27 +939,20 @@ bool pkgDPkgPM::Go(int OutStatusFd)
// create log
OpenLog();
- // Generate the base argument list for dpkg
- std::vector<const char *> Args;
- unsigned long StartSize = 0;
- string const Tmp = _config->Find("Dir::Bin::dpkg","dpkg");
- Args.push_back(Tmp.c_str());
- StartSize += Tmp.length();
-
- // Stick in any custom dpkg options
- Configuration::Item const *Opts = _config->Tree("DPkg::Options");
- if (Opts != 0)
+ bool dpkgMultiArch = false;
+ if (dpkgAssertMultiArch > 0)
{
- Opts = Opts->Child;
- for (; Opts != 0; Opts = Opts->Next)
+ int Status = 0;
+ while (waitpid(dpkgAssertMultiArch, &Status, 0) != dpkgAssertMultiArch)
{
- if (Opts->Value.empty() == true)
+ if (errno == EINTR)
continue;
- Args.push_back(Opts->Value.c_str());
- StartSize += Opts->Value.length();
+ _error->WarningE("dpkgGo", _("Waited for %s but it wasn't there"), "dpkg --assert-multi-arch");
+ break;
}
+ if (WIFEXITED(Status) == true && WEXITSTATUS(Status) == 0)
+ dpkgMultiArch = true;
}
- size_t const BaseArgs = Args.size();
// this loop is runs once per operation
for (vector<Item>::const_iterator I = List.begin(); I != List.end();)
@@ -965,14 +992,17 @@ bool pkgDPkgPM::Go(int OutStatusFd)
if (J - I > (signed)MaxArgs)
{
J = I + MaxArgs;
- Args.reserve(MaxArgs + 10);
+ unsigned long const size = MaxArgs + 10;
+ Args.reserve(size);
+ Packages.reserve(size);
}
else
{
- Args.reserve((J - I) + 10);
+ unsigned long const size = (J - I) + 10;
+ Args.reserve(size);
+ Packages.reserve(size);
}
-
int fd[2];
pipe(fd);
@@ -1047,7 +1077,8 @@ bool pkgDPkgPM::Go(int OutStatusFd)
continue;
if (I->Op == Item::Configure && disappearedPkgs.find(I->Pkg.Name()) != disappearedPkgs.end())
continue;
- if (I->Pkg.Arch() == nativeArch || !strcmp(I->Pkg.Arch(), "all"))
+ // We keep this here to allow "smooth" transitions from e.g. multiarch dpkg/ubuntu to dpkg/debian
+ if (dpkgMultiArch == false && (I->Pkg.Arch() == nativeArch || !strcmp(I->Pkg.Arch(), "all")))
{
char const * const name = I->Pkg.Name();
ADDARG(name);
diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h
index 6b62360b7..aab39f633 100644
--- a/apt-pkg/deb/dpkgpm.h
+++ b/apt-pkg/deb/dpkgpm.h
@@ -15,6 +15,11 @@
#include <map>
#include <stdio.h>
+#ifndef APT_8_CLEANER_HEADERS
+using std::vector;
+using std::map;
+#endif
+
class pkgDPkgPMPrivate;
class pkgDPkgPM : public pkgPackageManager
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index 529e9240d..085159711 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -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>
@@ -369,14 +371,11 @@ bool pkgDepCache::CheckDep(DepIterator Dep,int Type,PkgIterator &Res)
// Check the providing packages
PrvIterator P = Dep.TargetPkg().ProvidesList();
- PkgIterator Pkg = Dep.ParentPkg();
for (; P.end() != true; ++P)
{
- /* Provides may never be applied against the same package (or group)
- if it is a conflicts. See the comment above. */
- if (P.OwnerPkg()->Group == Pkg->Group && Dep.IsNegative() == true)
+ if (Dep.IsIgnorable(P) == true)
continue;
-
+
// Check if the provides is a hit
if (Type == NowVersion)
{
@@ -940,6 +939,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 +1146,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 +1185,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 +1197,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);
diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h
index f6e6c0afc..7358048ed 100644
--- a/apt-pkg/depcache.h
+++ b/apt-pkg/depcache.h
@@ -46,6 +46,11 @@
#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
diff --git a/apt-pkg/edsp.h b/apt-pkg/edsp.h
index c14309422..12b06d143 100644
--- a/apt-pkg/edsp.h
+++ b/apt-pkg/edsp.h
@@ -10,13 +10,16 @@
#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;
diff --git a/apt-pkg/edsp/edspindexfile.cc b/apt-pkg/edsp/edspindexfile.cc
index 058cef636..482581979 100644
--- a/apt-pkg/edsp/edspindexfile.cc
+++ b/apt-pkg/edsp/edspindexfile.cc
@@ -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)
diff --git a/apt-pkg/edsp/edspindexfile.h b/apt-pkg/edsp/edspindexfile.h
index 9670c4837..de10f2d2f 100644
--- a/apt-pkg/edsp/edspindexfile.h
+++ b/apt-pkg/edsp/edspindexfile.h
@@ -10,6 +10,10 @@
#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) */
diff --git a/apt-pkg/edsp/edsplistparser.h b/apt-pkg/edsp/edsplistparser.h
index 5d82716c7..a7bf9de95 100644
--- a/apt-pkg/edsp/edsplistparser.h
+++ b/apt-pkg/edsp/edsplistparser.h
@@ -13,6 +13,12 @@
#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
diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc
index 4df018ef4..3747e3570 100644
--- a/apt-pkg/indexcopy.cc
+++ b/apt-pkg/indexcopy.cc
@@ -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;
diff --git a/apt-pkg/indexcopy.h b/apt-pkg/indexcopy.h
index 21294ae7e..e3de1afd9 100644
--- a/apt-pkg/indexcopy.h
+++ b/apt-pkg/indexcopy.h
@@ -14,6 +14,11 @@
#include <string>
#include <stdio.h>
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::vector;
+#endif
+
class pkgTagSection;
class FileFd;
class indexRecords;
diff --git a/apt-pkg/indexfile.h b/apt-pkg/indexfile.h
index 5e162a846..1d34dc773 100644
--- a/apt-pkg/indexfile.h
+++ b/apt-pkg/indexfile.h
@@ -29,6 +29,10 @@
#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;
diff --git a/apt-pkg/indexrecords.h b/apt-pkg/indexrecords.h
index fa60a0847..a98b939bc 100644
--- a/apt-pkg/indexrecords.h
+++ b/apt-pkg/indexrecords.h
@@ -13,6 +13,10 @@
#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,
diff --git a/apt-pkg/init.h b/apt-pkg/init.h
index 0c1c7ae5a..b6f3df753 100644
--- a/apt-pkg/init.h
+++ b/apt-pkg/init.h
@@ -13,6 +13,11 @@
#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;
diff --git a/apt-pkg/metaindex.h b/apt-pkg/metaindex.h
index 9cc79a7a6..5783735ff 100644
--- a/apt-pkg/metaindex.h
+++ b/apt-pkg/metaindex.h
@@ -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;
diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc
index 4f9762701..c9d7a3024 100644
--- a/apt-pkg/packagemanager.cc
+++ b/apt-pkg/packagemanager.cc
@@ -250,7 +250,7 @@ bool pkgPackageManager::CheckRConflicts(PkgIterator Pkg,DepIterator D,
continue;
// Ignore self conflicts, ignore conflicts from irrelevent versions
- if (D.ParentPkg() == Pkg || D.ParentVer() != D.ParentPkg().CurrentVer())
+ if (D.IsIgnorable(Pkg) || D.ParentVer() != D.ParentPkg().CurrentVer())
continue;
if (Cache.VS().CheckDep(Ver,D->CompareOp,D.TargetVer()) == false)
diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h
index d4989a6e0..1a6a9f01c 100644
--- a/apt-pkg/packagemanager.h
+++ b/apt-pkg/packagemanager.h
@@ -29,6 +29,11 @@
#include <iostream>
#include <set>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/depcache.h>
+using std::string;
+#endif
+
class pkgAcquire;
class pkgDepCache;
class pkgSourceList;
diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc
index c854249e4..997c70768 100644
--- a/apt-pkg/pkgcache.cc
+++ b/apt-pkg/pkgcache.cc
@@ -619,13 +619,12 @@ pkgCache::Version **pkgCache::DepIterator::AllTargets() const
// Walk along the actual package providing versions
for (VerIterator I = DPkg.VersionList(); I.end() == false; ++I)
{
- if (Owner->VS->CheckDep(I.VerStr(),S->CompareOp,TargetVer()) == false)
+ if (IsIgnorable(I.ParentPkg()) == true)
continue;
- if (IsNegative() == true &&
- ParentPkg() == I.ParentPkg())
+ if (Owner->VS->CheckDep(I.VerStr(),S->CompareOp,TargetVer()) == false)
continue;
-
+
Size++;
if (Res != 0)
*End++ = I;
@@ -634,13 +633,12 @@ pkgCache::Version **pkgCache::DepIterator::AllTargets() const
// Follow all provides
for (PrvIterator I = DPkg.ProvidesList(); I.end() == false; ++I)
{
- if (Owner->VS->CheckDep(I.ProvideVersion(),S->CompareOp,TargetVer()) == false)
+ if (IsIgnorable(I) == true)
continue;
-
- if (IsNegative() == true &&
- ParentPkg()->Group == I.OwnerPkg()->Group)
+
+ if (Owner->VS->CheckDep(I.ProvideVersion(),S->CompareOp,TargetVer()) == false)
continue;
-
+
Size++;
if (Res != 0)
*End++ = I.OwnerVer();
@@ -682,6 +680,34 @@ void pkgCache::DepIterator::GlobOr(DepIterator &Start,DepIterator &End)
}
}
/*}}}*/
+// DepIterator::IsIgnorable - should this packag/providr be ignored? /*{{{*/
+// ---------------------------------------------------------------------
+/* Deps like self-conflicts should be ignored as well as implicit conflicts
+ on virtual packages. */
+bool pkgCache::DepIterator::IsIgnorable(PkgIterator const &Pkg) const
+{
+ if (ParentPkg() == TargetPkg())
+ return IsNegative();
+
+ return false;
+}
+bool pkgCache::DepIterator::IsIgnorable(PrvIterator const &Prv) const
+{
+ if (IsNegative() == false)
+ return false;
+
+ PkgIterator const Pkg = ParentPkg();
+ /* Provides may never be applied against the same package (or group)
+ if it is a conflicts. See the comment above. */
+ if (Prv.OwnerPkg()->Group == Pkg->Group)
+ return true;
+ // Implicit group-conflicts should not be applied on providers of other groups
+ if (Pkg->Group == TargetPkg()->Group && Prv.OwnerPkg()->Group != Pkg->Group)
+ return true;
+
+ return false;
+}
+ /*}}}*/
// ostream operator to handle string representation of a dependecy /*{{{*/
// ---------------------------------------------------------------------
/* */
diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h
index 7e32a3a96..1a7013551 100644
--- a/apt-pkg/pkgcache.h
+++ b/apt-pkg/pkgcache.h
@@ -74,11 +74,14 @@
#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 /*{{{*/
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc
index 9f999c41b..ec072fddd 100644
--- a/apt-pkg/pkgcachegen.cc
+++ b/apt-pkg/pkgcachegen.cc
@@ -35,12 +35,14 @@
#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;
diff --git a/apt-pkg/pkgsystem.h b/apt-pkg/pkgsystem.h
index 211fd0d56..75f7b9fcc 100644
--- a/apt-pkg/pkgsystem.h
+++ b/apt-pkg/pkgsystem.h
@@ -41,6 +41,10 @@
#include <vector>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/depcache.h>
+#endif
+
class pkgDepCache;
class pkgPackageManager;
class pkgVersioningSystem;
diff --git a/apt-pkg/policy.h b/apt-pkg/policy.h
index 3c8246e3b..5172a3c3b 100644
--- a/apt-pkg/policy.h
+++ b/apt-pkg/policy.h
@@ -38,6 +38,10 @@
#include <apt-pkg/versionmatch.h>
#include <vector>
+#ifndef APT_8_CLEANER_HEADERS
+using std::vector;
+#endif
+
class pkgPolicy : public pkgDepCache::Policy
{
protected:
diff --git a/apt-pkg/sourcelist.h b/apt-pkg/sourcelist.h
index 4509e54b9..02e27101a 100644
--- a/apt-pkg/sourcelist.h
+++ b/apt-pkg/sourcelist.h
@@ -32,9 +32,11 @@
#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();
};
diff --git a/apt-pkg/srcrecords.cc b/apt-pkg/srcrecords.cc
index f6d2d5158..48b643eac 100644
--- a/apt-pkg/srcrecords.cc
+++ b/apt-pkg/srcrecords.cc
@@ -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();
diff --git a/apt-pkg/srcrecords.h b/apt-pkg/srcrecords.h
index a55bc74fa..06f0dce6c 100644
--- a/apt-pkg/srcrecords.h
+++ b/apt-pkg/srcrecords.h
@@ -17,6 +17,11 @@
#include <string>
#include <vector>
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+using std::vector;
+#endif
+
class pkgSourceList;
class pkgIndexFile;
class pkgSrcRecords
diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h
index a5bf5ac90..fd24471c1 100644
--- a/apt-pkg/tagfile.h
+++ b/apt-pkg/tagfile.h
@@ -24,6 +24,10 @@
#include <string>
+#ifndef APT_8_CLEANER_HEADERS
+#include <apt-pkg/fileutl.h>
+#endif
+
class FileFd;
class pkgTagSection
diff --git a/apt-pkg/vendor.h b/apt-pkg/vendor.h
index 9b157378c..6484adf9b 100644
--- a/apt-pkg/vendor.h
+++ b/apt-pkg/vendor.h
@@ -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
{
diff --git a/apt-pkg/vendorlist.h b/apt-pkg/vendorlist.h
index 733d23a32..a86ccde7c 100644
--- a/apt-pkg/vendorlist.h
+++ b/apt-pkg/vendorlist.h
@@ -17,6 +17,13 @@
#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;
diff --git a/apt-pkg/version.h b/apt-pkg/version.h
index 92dbc2576..e0e0e6c14 100644
--- a/apt-pkg/version.h
+++ b/apt-pkg/version.h
@@ -23,6 +23,10 @@
#include <apt-pkg/strutl.h>
#include <string>
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
class pkgVersioningSystem
{
public:
diff --git a/apt-pkg/versionmatch.h b/apt-pkg/versionmatch.h
index da103fc5b..433396fc9 100644
--- a/apt-pkg/versionmatch.h
+++ b/apt-pkg/versionmatch.h
@@ -39,6 +39,10 @@
#include <string>
#include <apt-pkg/pkgcache.h>
+#ifndef APT_8_CLEANER_HEADERS
+using std::string;
+#endif
+
class pkgVersionMatch
{
// Version Matching
diff --git a/buildlib/config.h.in b/buildlib/config.h.in
index 256911231..4798fe3f5 100644
--- a/buildlib/config.h.in
+++ b/buildlib/config.h.in
@@ -44,3 +44,5 @@
/* The package name string */
#undef PACKAGE
+
+#define APT_8_CLEANER_HEADERS
diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc
index 82a31c9b1..1cd5080cc 100644
--- a/cmdline/apt-cache.cc
+++ b/cmdline/apt-cache.cc
@@ -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)
{
diff --git a/cmdline/apt-config.cc b/cmdline/apt-config.cc
index 94f6ee9b0..47bedfe3f 100644
--- a/cmdline/apt-config.cc
+++ b/cmdline/apt-config.cc
@@ -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);
diff --git a/cmdline/apt-extracttemplates.h b/cmdline/apt-extracttemplates.h
index d0f90d3f4..6d07a09c2 100644
--- a/cmdline/apt-extracttemplates.h
+++ b/cmdline/apt-extracttemplates.h
@@ -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;
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index 1925dea87..ca1169401 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -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)
{
diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc
index 9a628d714..c7d9b6f6a 100644
--- a/cmdline/apt-mark.cc
+++ b/cmdline/apt-mark.cc
@@ -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)
{
diff --git a/configure.in b/configure.in
index c2602cf36..065afccf1 100644
--- a/configure.in
+++ b/configure.in
@@ -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)
diff --git a/debian/changelog b/debian/changelog
index e6389dd06..5eb4e593f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,63 @@
+apt (0.8.16~exp10) UNRELEASED; urgency=low
+
+ [ David Kalnischkies ]
+ * apt-pkg/depcache.cc:
+ - implicit conflicts (for multiarch) are supposed to conflict
+ only with real packages, not with virtual providers
+ * apt-pkg/pkgcache.cc:
+ - ignore implicit conflicts on providers in AllTarget, too
+ * apt-pkg/deb/dpkgpm.cc:
+ - check if dpkg supports multiarch with --assert-multi-arch
+ and if it does be always explicit about the architecture
+
+ -- David Kalnischkies <kalnischkies@gmail.com> Fri, 13 Jan 2012 17:29:07 +0100
+
+apt (0.8.16~exp9) experimental; 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
+ * g++ 4.7 fixes
+
+ [ 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 <mvo@debian.org> Thu, 05 Jan 2012 20:26:31 +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 +66,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 +253,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
diff --git a/debian/control b/debian/control
index 7efb6ca8a..03d74c51f 100644
--- a/debian/control
+++ b/debian/control
@@ -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
index b7b63be81..000000000
--- a/debian/libapt-inst1.4.install
+++ /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
index 000000000..8bcce2c28
--- /dev/null
+++ b/debian/libapt-inst1.4.install.in
@@ -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
index 844642ab0..000000000
--- a/debian/libapt-pkg-dev.dirs
+++ /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
index bd1a6c174..000000000
--- a/debian/libapt-pkg-dev.install
+++ /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
index 000000000..be8022107
--- /dev/null
+++ b/debian/libapt-pkg-dev.install.in
@@ -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
index 91b39a31b..000000000
--- a/debian/libapt-pkg4.12.install
+++ /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
index 000000000..56bed39d3
--- /dev/null
+++ b/debian/libapt-pkg4.12.install.in
@@ -0,0 +1,2 @@
+bin/libapt-pkg*.so.* usr/lib/@DEB_HOST_MULTIARCH@/
+usr/share/locale/*/*/libapt-pkg*.mo
diff --git a/debian/rules b/debian/rules
index 30474c06b..4ef5bb47a 100755
--- a/debian/rules
+++ b/debian/rules
@@ -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$@
diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml
index 03a418e5c..fd1cd2540 100644
--- a/doc/apt-get.8.xml
+++ b/doc/apt-get.8.xml
@@ -280,7 +280,7 @@
<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>
@@ -453,8 +453,8 @@
<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>
diff --git a/doc/apt-key.8.xml b/doc/apt-key.8.xml
index f17f0c45e..cae2b00a0 100644
--- a/doc/apt-key.8.xml
+++ b/doc/apt-key.8.xml
@@ -165,7 +165,7 @@
<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>
diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml
index d7d56f3a1..c2220b1bf 100644
--- a/doc/apt.conf.5.xml
+++ b/doc/apt.conf.5.xml
@@ -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>
diff --git a/doc/manpage-style.xsl b/doc/manpage-style.xsl
index f1024c4f4..85aa4521f 100644
--- a/doc/manpage-style.xsl
+++ b/doc/manpage-style.xsl
@@ -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>
diff --git a/doc/po/de.po b/doc/po/de.po
index 1c3ab0e90..9a3415051 100644
--- a/doc/po/de.po
+++ b/doc/po/de.po
@@ -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"
diff --git a/doc/po/es.po b/doc/po/es.po
index db8b9a848..35b8d0af7 100644
--- a/doc/po/es.po
+++ b/doc/po/es.po
@@ -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>"
diff --git a/doc/po/fr.po b/doc/po/fr.po
index 037c50de5..2e0e766a7 100644
--- a/doc/po/fr.po
+++ b/doc/po/fr.po
@@ -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>"
diff --git a/doc/po/ja.po b/doc/po/ja.po
index 4b08de7df..22488b227 100644
--- a/doc/po/ja.po
+++ b/doc/po/ja.po
@@ -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>"
diff --git a/doc/po/pl.po b/doc/po/pl.po
index 0721cbf13..41eb56684 100644
--- a/doc/po/pl.po
+++ b/doc/po/pl.po
@@ -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>"
diff --git a/doc/po/pt.po b/doc/po/pt.po
index 3c82b2df1..e298281f8 100644
--- a/doc/po/pt.po
+++ b/doc/po/pt.po
@@ -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>"
diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml
index bf8356348..dd94f58f1 100644
--- a/doc/sources.list.5.xml
+++ b/doc/sources.list.5.xml
@@ -113,7 +113,7 @@
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
diff --git a/ftparchive/cachedb.cc b/ftparchive/cachedb.cc
index f0bfa2a6d..a8b637a80 100644
--- a/ftparchive/cachedb.cc
+++ b/ftparchive/cachedb.cc
@@ -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();
diff --git a/ftparchive/multicompress.cc b/ftparchive/multicompress.cc
index bf0f858d9..1fea589e2 100644
--- a/ftparchive/multicompress.cc
+++ b/ftparchive/multicompress.cc
@@ -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() &&
diff --git a/ftparchive/multicompress.h b/ftparchive/multicompress.h
index 5496b06d0..388fad22e 100644
--- a/ftparchive/multicompress.h
+++ b/ftparchive/multicompress.h
@@ -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,
diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc
index 27e53faf8..159772991 100644
--- a/ftparchive/writer.cc
+++ b/ftparchive/writer.cc
@@ -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)
diff --git a/methods/cdrom.cc b/methods/cdrom.cc
index e7114b168..22d4b9164 100644
--- a/methods/cdrom.cc
+++ b/methods/cdrom.cc
@@ -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);
diff --git a/methods/copy.cc b/methods/copy.cc
index f8d58e479..e81d0022b 100644
--- a/methods/copy.cc
+++ b/methods/copy.cc
@@ -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);
diff --git a/methods/file.cc b/methods/file.cc
index 5025c996d..7ed4e6f60 100644
--- a/methods/file.cc
+++ b/methods/file.cc
@@ -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;
diff --git a/methods/ftp.cc b/methods/ftp.cc
index 2ca0ac6f7..ad8a7b828 100644
--- a/methods/ftp.cc
+++ b/methods/ftp.cc
@@ -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;
diff --git a/methods/gzip.cc b/methods/gzip.cc
index a51497948..6ab6548ef 100644
--- a/methods/gzip.cc
+++ b/methods/gzip.cc
@@ -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"));
diff --git a/methods/http.cc b/methods/http.cc
index 0d81c73ed..b8ed43cd2 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -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);
diff --git a/methods/https.cc b/methods/https.cc
index 335699907..317c8a587 100644
--- a/methods/https.cc
+++ b/methods/https.cc
@@ -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
diff --git a/methods/rred.cc b/methods/rred.cc
index ef00fcaa3..e37a12ed9 100644
--- a/methods/rred.cc
+++ b/methods/rred.cc
@@ -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,23 +232,12 @@ 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)
+ unsigned long long const ed_size = ed_cmds.Size();
+ unsigned long long const in_size = in_file.Size();
+ if (ed_size == 0 || in_size == 0)
return MMAP_FAILED;
EdCommand* commands = 0;
@@ -283,10 +246,10 @@ RredMethod::State RredMethod::patchMMap(FileFd &Patch, FileFd &From, /*{{{*/
const char* begin = (char*) ed_cmds.Data();
const char* end = begin;
- const char* ed_end = (char*) ed_cmds.Data() + ed_cmds.Size();
+ const char* ed_end = (char*) ed_cmds.Data() + ed_size;
const char* input = (char*) in_file.Data();
- const char* input_end = (char*) in_file.Data() + in_file.Size();
+ const char* input_end = (char*) in_file.Data() + in_size;
size_t i;
@@ -489,7 +452,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)
diff --git a/methods/rsh.cc b/methods/rsh.cc
index da9777fc4..d249ae961 100644
--- a/methods/rsh.cc
+++ b/methods/rsh.cc
@@ -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;
}
diff --git a/po/apt-all.pot b/po/apt-all.pot
index 8e4d9d62b..82d61f4c4 100644
--- a/po/apt-all.pot
+++ b/po/apt-all.pot
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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 "
diff --git a/po/fr.po b/po/fr.po
index d70cf8da0..cc2a9d8ba 100644
--- 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
diff --git a/po/nl.po b/po/nl.po
index c6b254c5d..e3bb07d08 100644
--- 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"
diff --git a/test/integration/Packages-pdiff-usage-new b/test/integration/Packages-pdiff-usage-new
index 9157596a7..4f374b37f 100644
--- a/test/integration/Packages-pdiff-usage-new
+++ b/test/integration/Packages-pdiff-usage-new
@@ -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
diff --git a/test/integration/framework b/test/integration/framework
index b55f793a4..2ea1844f0 100644
--- a/test/integration/framework
+++ b/test/integration/framework
@@ -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-dpkg-assert-multi-arch b/test/integration/test-dpkg-assert-multi-arch
new file mode 100755
index 000000000..b1ec73e18
--- /dev/null
+++ b/test/integration/test-dpkg-assert-multi-arch
@@ -0,0 +1,53 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+buildsimplenativepackage 'native-pkg' 'amd64' '1.0' 'stable'
+buildsimplenativepackage 'foreign-pkg' 'i386' '0.5' 'stable' 'Multi-Arch: foreign'
+buildsimplenativepackage 'same-lib' 'amd64,i386' '0.5' 'stable' 'Multi-Arch: same'
+
+setupaptarchive
+
+testqualifier() {
+ msgtest 'Test for correct qualifier mode' $2
+ GIVEN="$(aptget install $1 -qq -o Debug::pkgDPkgPM=1 2>&1 | grep -- '--configure' | sed -e 's/^.*--configure \([^ ]*\).*$/\1/')"
+ test "$GIVEN" = "$2" && msgpass || msgfail
+}
+
+# non-multiarch or "ubuntus" old multiarchified dpkg
+echo 'Dir::Bin::dpkg "./dpkg-wrapper";' > rootdir/etc/apt/apt.conf.d/99dpkgwrapper
+echo '#! /bin/sh
+if echo "$*" | grep -q -- "--assert-multi-arch"; then
+ return 2;
+fi
+return $*' > ./dpkg-wrapper
+chmod +x ./dpkg-wrapper
+
+testqualifier 'native-pkg' 'native-pkg'
+testqualifier 'native-pkg:amd64' 'native-pkg'
+testqualifier 'foreign-pkg' 'foreign-pkg:i386'
+testqualifier 'foreign-pkg:i386' 'foreign-pkg:i386'
+testqualifier 'same-lib' 'same-lib'
+testqualifier 'same-lib:amd64' 'same-lib'
+testqualifier 'same-lib:i386' 'same-lib:i386'
+
+# multiarch dpkg (new interface version)
+
+echo 'Dir::Bin::dpkg "./dpkg-wrapper";' > rootdir/etc/apt/apt.conf.d/99dpkgwrapper
+echo '#! /bin/sh
+if echo "$*" | grep -q -- "--assert-multi-arch"; then
+ return 0;
+fi
+return $*' > ./dpkg-wrapper
+
+testqualifier 'native-pkg' 'native-pkg:amd64'
+testqualifier 'native-pkg:amd64' 'native-pkg:amd64'
+testqualifier 'foreign-pkg' 'foreign-pkg:i386'
+testqualifier 'foreign-pkg:i386' 'foreign-pkg:i386'
+testqualifier 'same-lib' 'same-lib:amd64'
+testqualifier 'same-lib:amd64' 'same-lib:amd64'
+testqualifier 'same-lib:i386' 'same-lib:i386'
diff --git a/test/integration/test-implicit-conflicts-real-not-virtual b/test/integration/test-implicit-conflicts-real-not-virtual
new file mode 100755
index 000000000..c9fca4edf
--- /dev/null
+++ b/test/integration/test-implicit-conflicts-real-not-virtual
@@ -0,0 +1,56 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertpackage 'unstable-mp' 'crda' 'i386,amd64' '1.1.1-1ubuntu4mp' 'Provides: wireless-crda
+Multi-Arch: foreign'
+insertpackage 'unstable-m' 'crda' 'i386,amd64' '1.1.1-1ubuntu4m' 'Multi-Arch: foreign'
+insertpackage 'unstable-p' 'crda' 'i386,amd64' '1.1.1-1ubuntu4p' 'Provides: wireless-crda'
+insertpackage 'unstable' 'wireless-crda' 'i386,amd64' '1.16'
+
+
+insertinstalledpackage 'wireless-crda' 'amd64' '1.14'
+
+setupaptarchive
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ crda
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst crda (1.1.1-1ubuntu4m unstable-m [amd64])
+Conf crda (1.1.1-1ubuntu4m unstable-m [amd64])' aptget install crda -s -t unstable-m
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ crda
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst crda (1.1.1-1ubuntu4p unstable-p [amd64])
+Conf crda (1.1.1-1ubuntu4p unstable-p [amd64])' aptget install crda -s -t unstable-p
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ crda
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst crda (1.1.1-1ubuntu4mp unstable-mp [amd64])
+Conf crda (1.1.1-1ubuntu4mp unstable-mp [amd64])' aptget install crda -s -t unstable-mp
+
+rm rootdir/var/lib/dpkg/status
+insertinstalledpackage 'crda' 'amd64' '1.1.1-1ubuntu4mp' 'Provides: wireless-crda
+Conflicts: wireless-crda (<< 1.15)
+Replaces: wireless-crda ( << 1.15)
+Multi-arch: foreign'
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ wireless-crda
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst wireless-crda (1.16 unstable [amd64])
+Conf wireless-crda (1.16 unstable [amd64])' aptget install wireless-crda -s -t unstable
diff --git a/test/integration/test-multiarch-foreign b/test/integration/test-multiarch-foreign
new file mode 100755
index 000000000..332466d96
--- /dev/null
+++ b/test/integration/test-multiarch-foreign
@@ -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
index 000000000..e9f5a51b0
--- /dev/null
+++ b/test/libapt/cdromfindpackages_test.cc
@@ -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;
+}
diff --git a/test/libapt/makefile b/test/libapt/makefile
index d3dddaeed..1952051e2 100644
--- a/test/libapt/makefile
+++ b/test/libapt/makefile
@@ -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)
diff --git a/test/libapt/run-tests b/test/libapt/run-tests
index ada2dc38b..5fff4ecca 100755
--- a/test/libapt/run-tests
+++ b/test/libapt/run-tests
@@ -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} "