diff options
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"><<xsl:apply-templates/>></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 " @@ -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 @@ -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} " |