diff options
-rw-r--r-- | .gitlab-ci.yml | 2 | ||||
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | apt-pkg/edsp/edsplistparser.cc | 15 | ||||
-rw-r--r-- | apt-pkg/solver3.cc | 127 | ||||
-rw-r--r-- | apt-pkg/solver3.h | 52 | ||||
-rw-r--r-- | apt-pkg/tagfile-keys.list | 1 | ||||
-rw-r--r-- | cmdline/apt-key.in | 14 | ||||
-rw-r--r-- | doc/apt-verbatim.ent | 2 | ||||
-rw-r--r-- | doc/apt.conf.5.xml | 4 | ||||
-rw-r--r-- | doc/po/apt-doc.pot | 6 | ||||
-rw-r--r-- | doc/po/de.po | 10 | ||||
-rw-r--r-- | doc/po/es.po | 10 | ||||
-rw-r--r-- | doc/po/fr.po | 10 | ||||
-rw-r--r-- | doc/po/it.po | 10 | ||||
-rw-r--r-- | doc/po/ja.po | 10 | ||||
-rw-r--r-- | doc/po/nl.po | 109 | ||||
-rw-r--r-- | doc/po/pl.po | 10 | ||||
-rw-r--r-- | doc/po/pt.po | 27 | ||||
-rw-r--r-- | doc/po/pt_BR.po | 10 | ||||
-rw-r--r-- | po/apt-all.pot | 4 | ||||
-rw-r--r-- | po/nl.po | 18 | ||||
-rwxr-xr-x | test/integration/run-tests | 2 | ||||
-rwxr-xr-x | test/integration/test-bug-64141-install-dependencies-for-on-hold | 3 | ||||
-rwxr-xr-x | test/integration/test-prefer-higher-priority-providers | 9 | ||||
-rwxr-xr-x | test/integration/test-resolver-provider-exchange | 1 |
25 files changed, 281 insertions, 187 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 528edf7..dc8cfc9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,7 +12,7 @@ before_script: - rm -f /etc/dpkg/dpkg.cfg.d/excludes - apt-get update - apt-get install --no-install-recommends -qq build-essential expect sudo ccache moreutils adduser - - adduser --home /home/travis travis --quiet --disabled-login --gecos "" + - adduser --home /home/travis travis --quiet --disabled-login --gecos "" --shell /bin/sh - chmod 755 /root - chmod -R o+rwX $PWD - ./prepare-release travis-ci diff --git a/CMakeLists.txt b/CMakeLists.txt index 50d7884..a457110 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -206,7 +206,7 @@ endif() # Configure some variables like package, version and architecture. set(PACKAGE ${PROJECT_NAME}) set(PACKAGE_MAIL "APT Development Team <deity@lists.debian.org>") -set(PACKAGE_VERSION "2.9.4") +set(PACKAGE_VERSION "2.9.5") string(REGEX MATCH "^[0-9.]+" PROJECT_VERSION ${PACKAGE_VERSION}) if (NOT DEFINED DPKG_DATADIR) diff --git a/apt-pkg/edsp/edsplistparser.cc b/apt-pkg/edsp/edsplistparser.cc index 5419069..183ace6 100644 --- a/apt-pkg/edsp/edsplistparser.cc +++ b/apt-pkg/edsp/edsplistparser.cc @@ -44,7 +44,20 @@ edspListParser::edspListParser(FileFd * const File) : edspLikeListParser(File) bool edspLikeListParser::NewVersion(pkgCache::VerIterator &Ver) { _system->SetVersionMapping(Ver->ID, Section.FindI("APT-ID", Ver->ID)); - return debListParser::NewVersion(Ver); + if (not debListParser::NewVersion(Ver)) + return false; + + // Patch up the source version, it is stored in the Source-Version field in EDSP. + if (APT::StringView version = Section.Find(pkgTagSection::Key::Source_Version); not version.empty()) + { + if (version != Ver.VerStr()) + { + map_stringitem_t const idx = StoreString(pkgCacheGenerator::VERSIONNUMBER, version); + Ver->SourceVerStr = idx; + } + } + + return true; } /*}}}*/ // ListParser::Description - Return the description string /*{{{*/ diff --git a/apt-pkg/solver3.cc b/apt-pkg/solver3.cc index 9831f7e..dc70adb 100644 --- a/apt-pkg/solver3.cc +++ b/apt-pkg/solver3.cc @@ -26,11 +26,12 @@ #include <sstream> // FIXME: Helpers stolen from DepCache, please give them back. -struct CompareProviders3 /*{{{*/ +struct APT::Solver::CompareProviders3 /*{{{*/ { pkgCache &Cache; pkgDepCache::Policy &Policy; pkgCache::PkgIterator const Pkg; + APT::Solver &Solver; bool upgrade{_config->FindB("APT::Solver::Upgrade", false)}; bool operator()(pkgCache::Version *AV, pkgCache::Version *BV) @@ -60,6 +61,11 @@ struct CompareProviders3 /*{{{*/ return _system->VS->CmpVersion(AV.VerStr(), BV.VerStr()) > 0; } + // Try obsolete choices only after exhausting non-obsolete choices such that we install + // packages replacing them and don't keep back upgrades depending on the replacement to + // keep the obsolete package installed. + if (auto obsoleteAV = Solver.Obsolete(AV), obsoleteBV = Solver.Obsolete(BV); obsoleteAV != obsoleteBV) + return obsoleteBV; // Prefer MA:same packages if other architectures for it are installed if ((AV->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same || (BV->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same) @@ -158,8 +164,9 @@ class DefaultRootSetFunc2 : public pkgDepCache::DefaultRootSetFunc APT::Solver::Solver(pkgCache &cache, pkgDepCache::Policy &policy) : cache(cache), policy(policy), - pkgStates{cache.Head().PackageCount}, - verStates{cache.Head().VersionCount} + pkgStates(cache.Head().PackageCount), + verStates(cache.Head().VersionCount), + verObsolete(cache.Head().VersionCount) { static_assert(sizeof(APT::Solver::State<pkgCache::PkgIterator>) == 3 * sizeof(int)); static_assert(sizeof(APT::Solver::State<pkgCache::VerIterator>) == 3 * sizeof(int)); @@ -170,33 +177,15 @@ APT::Solver::Solver(pkgCache &cache, pkgDepCache::Policy &policy) // This function determines if a work item is less important than another. bool APT::Solver::Work::operator<(APT::Solver::Work const &b) const { - if (optional && b.optional && reason.empty() && b.reason.empty() && upgrade != b.upgrade) - { - // Assuming we have libfoo-dev=5.1 Depends libfoo5.1-dev upgrade to libfoo-dev=5.3 Depends libfoo5.3-dev, - // We schedule libfoo-dev=5.3|libfoo-dev=5.1, libfoo5.1-dev. The latter would be resolved first, resulting - // in libfoo-dev being kept back. - // - // However, if we schedule not libfoo5.1-dev but bar Recommends libfoo5.1-dev, we should not be breaking that - // Recommends, hence we need to ensure that if we order an upgrade before an optional package that this optional - // package was a top level package, i.e. b.reason is empty (or our reason in the reverse case). - // - // So if we are the upgrade, and b also Depends on one of our versions, we need to satisfy b after we - // have scheduled the upgrade. - if (upgrade) - return std::any_of(b.solutions.begin(), b.solutions.end(), [this](auto bsol) -> bool - { return std::find(solutions.begin(), solutions.end(), bsol) != solutions.end(); }); - else - return std::any_of(solutions.begin(), solutions.end(), [b](auto sol) -> bool - { return std::find(b.solutions.begin(), b.solutions.end(), sol) != b.solutions.end(); }); - } + if ((not optional && size < 2) != (not b.optional && b.size < 2)) + return not b.optional && b.size < 2; + if (group != b.group) + return group > b.group; if (optional && b.optional && reason.empty() != b.reason.empty()) return reason.empty(); // An optional item is less important than a required one. if (optional != b.optional) return optional; - // More solutions to explore are more expensive. - if (size != b.size) - return size > b.size; // We enqueue common dependencies at the package level to avoid choosing versions, so let's solve package items first, // this improves the implication graph as it now tells you that common dependencies were installed by the package. if (reason.Pkg() != b.reason.Pkg()) @@ -211,7 +200,7 @@ void APT::Solver::Work::Dump(pkgCache &cache) std::cerr << "Dirty "; if (optional) std::cerr << "Optional "; - std::cerr << "Item (" << size << "@" << depth << (upgrade ? "u" : "") << ") "; + std::cerr << "Item (" << ssize_t(size <= solutions.size() ? size : -1) << "@" << depth << (upgrade ? "u" : "") << ") "; if (auto Pkg = reason.Pkg(); Pkg != 0) std::cerr << pkgCache::PkgIterator(cache, cache.PkgP + Pkg).FullName(); if (auto Ver = reason.Ver(); Ver != 0) @@ -257,7 +246,27 @@ std::string APT::Solver::WhyStr(Reason reason) return outstr; } -bool APT::Solver::Install(pkgCache::PkgIterator Pkg, Reason reason) +bool APT::Solver::Obsolete(pkgCache::VerIterator ver) +{ + if (verObsolete[ver->ID] != 0) + return verObsolete[ver->ID] == 2; + for (auto bin = ver.Cache()->FindGrp(ver.SourcePkgName()).VersionsInSource(); not bin.end(); bin = bin.NextInSource()) + if (bin != ver && bin.ParentPkg()->Arch == ver.ParentPkg()->Arch && bin->ParentPkg != ver->ParentPkg && policy.GetCandidateVer(bin.ParentPkg()) == bin && _system->VS->CmpVersion(bin.SourceVerStr(), ver.SourceVerStr()) > 0) + { + verObsolete[ver->ID] = 2; + return true; + } + for (auto file = ver.FileList(); !file.end(); file++) + if ((file.File()->Flags & pkgCache::Flag::NotSource) == 0) + { + verObsolete[ver->ID] = 1; + return false; + } + verObsolete[ver->ID] = 2; + return true; +} + +bool APT::Solver::Install(pkgCache::PkgIterator Pkg, Reason reason, Group group) { if ((*this)[Pkg].decision == Decision::MUST) return true; @@ -286,16 +295,16 @@ bool APT::Solver::Install(pkgCache::PkgIterator Pkg, Reason reason) (*this)[Pkg] = {reason, depth(), Decision::MUST,}; // Insert the work item. - Work workItem{Reason(Pkg), depth()}; + Work workItem{Reason(Pkg), depth(), group}; for (auto ver = Pkg.VersionList(); not ver.end(); ver++) if (IsAllowedVersion(ver)) workItem.solutions.push_back(ver); - std::stable_sort(workItem.solutions.begin(), workItem.solutions.end(), CompareProviders3{cache, policy, Pkg}); + std::stable_sort(workItem.solutions.begin(), workItem.solutions.end(), CompareProviders3{cache, policy, Pkg, *this}); assert(workItem.solutions.size() > 0); if (workItem.solutions.size() > 1 || workItem.optional) AddWork(std::move(workItem)); - else if (not Install(pkgCache::VerIterator(cache, workItem.solutions[0]), workItem.reason)) + else if (not Install(pkgCache::VerIterator(cache, workItem.solutions[0]), workItem.reason, group)) return false; if (not EnqueueCommonDependencies(Pkg)) @@ -304,7 +313,7 @@ bool APT::Solver::Install(pkgCache::PkgIterator Pkg, Reason reason) return true; } -bool APT::Solver::Install(pkgCache::VerIterator Ver, Reason reason) +bool APT::Solver::Install(pkgCache::VerIterator Ver, Reason reason, Group group) { if ((*this)[Ver].decision == Decision::MUST) return true; @@ -339,7 +348,7 @@ bool APT::Solver::Install(pkgCache::VerIterator Ver, Reason reason) for (auto OV = Ver.ParentPkg().VersionList(); not OV.end(); ++OV) { - if (OV != Ver && not Reject(OV, Reason(Ver))) + if (OV != Ver && not Reject(OV, Reason(Ver), group)) return false; } @@ -357,7 +366,7 @@ bool APT::Solver::Install(pkgCache::VerIterator Ver, Reason reason) return true; } -bool APT::Solver::Reject(pkgCache::PkgIterator Pkg, Reason reason) +bool APT::Solver::Reject(pkgCache::PkgIterator Pkg, Reason reason, Group group) { if ((*this)[Pkg].decision == Decision::MUSTNOT) return true; @@ -374,7 +383,7 @@ bool APT::Solver::Reject(pkgCache::PkgIterator Pkg, Reason reason) std::cerr << "[" << depth() << "] Reject:" << Pkg.FullName() << " (" << WhyStr(reason) << ")\n"; (*this)[Pkg] = {reason, depth(), Decision::MUSTNOT,}; for (auto ver = Pkg.VersionList(); not ver.end(); ver++) - if (not Reject(ver, Reason(Pkg))) + if (not Reject(ver, Reason(Pkg), group)) return false; needsRescore = true; @@ -383,8 +392,10 @@ bool APT::Solver::Reject(pkgCache::PkgIterator Pkg, Reason reason) } // \brief Do not install this version -bool APT::Solver::Reject(pkgCache::VerIterator Ver, Reason reason) +bool APT::Solver::Reject(pkgCache::VerIterator Ver, Reason reason, Group group) { + (void) group; + if ((*this)[Ver].decision == Decision::MUSTNOT) return true; @@ -473,7 +484,7 @@ bool APT::Solver::EnqueueOrGroup(pkgCache::DepIterator start, pkgCache::DepItera if (unlikely(debug >= 3)) std::cerr << "Found dependency critical " << Ver.ParentPkg().FullName() << "=" << Ver.VerStr() << " -> " << start.TargetPkg().FullName() << "\n"; - Work workItem{reason, depth(), not start.IsCritical() /* optional */}; + Work workItem{reason, depth(), Group::Satisfy, not start.IsCritical() /* optional */}; do { @@ -489,7 +500,7 @@ bool APT::Solver::EnqueueOrGroup(pkgCache::DepIterator start, pkgCache::DepItera if (unlikely(debug >= 3)) std::cerr << "Reject: " << Ver.ParentPkg().FullName() << "=" << Ver.VerStr() << " -> " << tgti.ParentPkg().FullName() << "=" << tgti.VerStr() << "\n"; // FIXME: We should be collecting these and marking the heap only once. - if (not Reject(pkgCache::VerIterator(cache, *tgt), Reason(Ver))) + if (not Reject(pkgCache::VerIterator(cache, *tgt), Reason(Ver), Group::HoldOrDelete)) return false; } else @@ -506,7 +517,7 @@ bool APT::Solver::EnqueueOrGroup(pkgCache::DepIterator start, pkgCache::DepItera // FIXME: This is not really true, though, we should fix the CompareProviders to ignore the // installed state if (fixPolicy) - std::stable_sort(workItem.solutions.begin() + begin, workItem.solutions.end(), CompareProviders3{cache, policy, TgtPkg}); + std::stable_sort(workItem.solutions.begin() + begin, workItem.solutions.end(), CompareProviders3{cache, policy, TgtPkg, *this}); if (start == end) break; @@ -514,8 +525,14 @@ bool APT::Solver::EnqueueOrGroup(pkgCache::DepIterator start, pkgCache::DepItera } while (1); if (not fixPolicy) - std::stable_sort(workItem.solutions.begin(), workItem.solutions.end(), CompareProviders3{cache, policy, TgtPkg}); - + std::stable_sort(workItem.solutions.begin(), workItem.solutions.end(), CompareProviders3{cache, policy, TgtPkg, *this}); + + if (std::all_of(workItem.solutions.begin(), workItem.solutions.end(), [this](auto V) -> auto + { return pkgCache::VerIterator(cache, V).ParentPkg()->CurrentVer == 0; })) + workItem.group = Group::SatisfyNew; + if (std::any_of(workItem.solutions.begin(), workItem.solutions.end(), [this](auto V) -> auto + { return Obsolete(pkgCache::VerIterator(cache, V)); })) + workItem.group = Group::SatisfyObsolete; // Try to perserve satisfied Recommends. FIXME: We should check if the Recommends was there in the installed version? if (workItem.optional && start.ParentPkg()->CurrentVer) { @@ -560,6 +577,8 @@ bool APT::Solver::EnqueueOrGroup(pkgCache::DepIterator start, pkgCache::DepItera return true; } } + else if (workItem.optional && start.ParentPkg()->CurrentVer == 0) + workItem.group = Group::NewUnsatRecommends; if (not workItem.solutions.empty()) { @@ -572,7 +591,7 @@ bool APT::Solver::EnqueueOrGroup(pkgCache::DepIterator start, pkgCache::DepItera } if (workItem.optional || workItem.solutions.size() > 1) AddWork(std::move(workItem)); - else if (not Install(pkgCache::VerIterator(cache, workItem.solutions[0]), reason)) + else if (not Install(pkgCache::VerIterator(cache, workItem.solutions[0]), reason, workItem.group)) return false; } else if (start.IsCritical() && not start.IsNegative()) @@ -643,7 +662,7 @@ bool APT::Solver::RejectReverseDependencies(pkgCache::VerIterator Ver) if (unlikely(debug >= 3)) std::cerr << "Propagate NOT " << Ver.ParentPkg().FullName() << "=" << Ver.VerStr() << " to " << RDV.ParentPkg().FullName() << "=" << RDV.VerStr() << " for dependency group starting with" << start.TargetPkg().FullName() << std::endl; - if (not Reject(RDV, Reason(Ver))) + if (not Reject(RDV, Reason(Ver), Group::HoldOrDelete)) return false; } return true; @@ -738,7 +757,7 @@ bool APT::Solver::Pop() assert(w.choice != nullptr); // FIXME: There should be a reason! - if (not Reject(pkgCache::VerIterator(cache, w.choice), {})) + if (not Reject(pkgCache::VerIterator(cache, w.choice), {}, Group::HoldOrDelete)) return false; w.choice = nullptr; @@ -857,7 +876,7 @@ bool APT::Solver::Solve() } if (unlikely(debug >= 3)) std::cerr << "(try it: " << ver.ParentPkg().FullName() << "=" << ver.VerStr() << ")\n"; - if (not Install(pkgCache::VerIterator(cache, ver), item.reason) && not Pop()) + if (not Install(pkgCache::VerIterator(cache, ver), item.reason, Group::Satisfy) && not Pop()) return false; foundSolution = true; break; @@ -905,48 +924,52 @@ bool APT::Solver::FromDepCache(pkgDepCache &depcache) { if (unlikely(debug >= 1)) std::cerr << "Hold " << P.FullName() << "\n"; - if (P->CurrentVer ? not Install(P.CurrentVer(), {}) : not Reject(P, {})) + if (P->CurrentVer ? not Install(P.CurrentVer(), {}, Group::HoldOrDelete) : not Reject(P, {}, Group::HoldOrDelete)) return false; } else if (reject) { if (unlikely(debug >= 1)) std::cerr << "Delete " << P.FullName() << "\n"; - if (!Reject(P, {})) + if (!Reject(P, {}, Group::HoldOrDelete)) return false; } else if (maybeInstall && P->Flags & (pkgCache::Flag::Essential | pkgCache::Flag::Important)) { if (unlikely(debug >= 1)) std::cerr << "ESSENTIAL " << P.FullName() << "\n"; - if (depcache[P].Keep() ? not Install(P, {}) : not Install(depcache.GetCandidateVersion(P), {})) + if (depcache[P].Keep() ? not Install(P, {}, Group::InstallManual) : not Install(depcache.GetCandidateVersion(P), {}, Group::InstallManual)) return false; } else if (maybeInstall && not isOptional) { + auto Upgrade = depcache.GetCandidateVersion(P) != P.CurrentVer(); + auto Group = (Upgrade ? Group::UpgradeManual : Group::InstallManual); if (unlikely(debug >= 1)) std::cerr << "MANUAL " << P.FullName() << "\n"; - if (depcache[P].Keep() ? not Install(P, {}) : not Install(depcache.GetCandidateVersion(P), {})) + if (depcache[P].Keep() ? not Install(P, {}, Group) : not Install(depcache.GetCandidateVersion(P), {}, Group)) return false; } else if (maybeInstall && isOptional && (KeepAuto || rootSet.InRootSet(P) || not isAuto)) { auto Upgrade = depcache.GetCandidateVersion(P) != P.CurrentVer(); + auto Group = isAuto ? (Upgrade ? Group::UpgradeAuto : Group::KeepAuto) + : (Upgrade ? Group::UpgradeManual : Group::InstallManual); if (unlikely(debug >= 1)) std::cerr << "AUTOMATIC " << P.FullName() << (Upgrade ? " - upgrade" : "") << "\n"; if (not AllowRemove) { - if (depcache[P].Keep() ? not Install(P, {}) : not Install(depcache.GetCandidateVersion(P), {})) + if (depcache[P].Keep() ? not Install(P, {}, Group) : not Install(depcache.GetCandidateVersion(P), {}, Group)) return false; } else { - Work w{Reason(), depth(), true, Upgrade}; + Work w{Reason(), depth(), Group, true, Upgrade}; for (auto V = P.VersionList(); not V.end(); ++V) if (IsAllowedVersion(V)) w.solutions.push_back(V); - std::stable_sort(w.solutions.begin(), w.solutions.end(), CompareProviders3{cache, policy, P}); + std::stable_sort(w.solutions.begin(), w.solutions.end(), CompareProviders3{cache, policy, P, *this}); AddWork(std::move(w)); } } @@ -954,7 +977,7 @@ bool APT::Solver::FromDepCache(pkgDepCache &depcache) { if (unlikely(debug >= 1)) std::cerr << "NOT ALLOWING INSTALL OF " << P.FullName() << "\n"; - if (not Reject(P, {})) + if (not Reject(P, {}, Group::HoldOrDelete)) return false; } } diff --git a/apt-pkg/solver3.h b/apt-pkg/solver3.h index cf2fb2e..9a9d67a 100644 --- a/apt-pkg/solver3.h +++ b/apt-pkg/solver3.h @@ -32,10 +32,46 @@ class Solver enum class Decision : uint16_t; enum class Hint : uint16_t; struct Reason; + struct CompareProviders3; template <typename T> struct State; struct Work; + // \brief Groups of works, these are ordered. + // + // Later items will be skipped if they are optional, or we will when backtracking, + // try a different choice for them. + enum class Group : uint8_t + { + HoldOrDelete, + NewUnsatRecommends, + + // Satisfying dependencies on entirely new packages first is a good idea because + // it may contain replacement packages like libfoo1t64 whereas we later will see + // Depends: libfoo1 where libfoo1t64 Provides libfoo1 and we'd have to choose. + SatisfyNew, + Satisfy, + // On a similar note as for SatisfyNew, if the dependency contains obsolete packages + // try it last. + SatisfyObsolete, + + // My intuition tells me that we should try to schedule upgrades first, then + // any non-obsolete installed packages, and only finally obsolete ones, such + // that newer packages guide resolution of dependencies for older ones, they + // may have more stringent dependencies, like a (>> 2) whereas an obsolete + // package may have a (>> 1), for example. + UpgradeManual, + InstallManual, + ObsoleteManual, + + // Automatically installed packages must come last in the group, this allows + // us to see if they were installed as a dependency of a manually installed package, + // allowing a simple implementation of an autoremoval code. + UpgradeAuto, + KeepAuto, + ObsoleteAuto + }; + // \brief Type to record depth at. This may very well be a 16-bit // unsigned integer, then change Solver::State::Decision to be a // uint16_t class enum as well to get a more compact space. @@ -68,6 +104,9 @@ class Solver return verStates[V->ID]; } + std::vector<char> verObsolete; + bool Obsolete(pkgCache::VerIterator ver); + // \brief Heap of the remaining work. // // We are using an std::vector with std::make_heap(), std::push_heap(), @@ -131,13 +170,13 @@ class Solver Solver(pkgCache &Cache, pkgDepCache::Policy &Policy); // \brief Mark the package for install. This is annoying as it incurs a decision - bool Install(pkgCache::PkgIterator Pkg, Reason reason); + bool Install(pkgCache::PkgIterator Pkg, Reason reason, Group group); // \brief Install a version. - bool Install(pkgCache::VerIterator Ver, Reason reason); + bool Install(pkgCache::VerIterator Ver, Reason reason, Group group); // \brief Do not install this package - bool Reject(pkgCache::PkgIterator Pkg, Reason reason); + bool Reject(pkgCache::PkgIterator Pkg, Reason reason, Group group); // \brief Do not install this version. - bool Reject(pkgCache::VerIterator Ver, Reason reason); + bool Reject(pkgCache::VerIterator Ver, Reason reason, Group group); // \brief Apply the selections from the dep cache to the solver bool FromDepCache(pkgDepCache &depcache); @@ -203,7 +242,8 @@ struct APT::Solver::Work Reason reason; // \brief The depth at which the item has been added depth_type depth; - + // \brief The group we are in + Group group; // \brief Possible solutions to this task, ordered in order of preference. std::vector<pkgCache::Version *> solutions{}; @@ -228,7 +268,7 @@ struct APT::Solver::Work // \brief Dump the work item to std::cerr void Dump(pkgCache &cache); - inline Work(Reason reason, depth_type depth, bool optional = false, bool upgrade = false) : reason(reason), depth(depth), size(0), optional(optional), upgrade(upgrade), dirty(false) {} + inline Work(Reason reason, depth_type depth, Group group, bool optional = false, bool upgrade = false) : reason(reason), depth(depth), group(group), size(0), optional(optional), upgrade(upgrade), dirty(false) {} }; // \brief This essentially describes the install state in RFC2119 terms. diff --git a/apt-pkg/tagfile-keys.list b/apt-pkg/tagfile-keys.list index 4b57e46..d198ea0 100644 --- a/apt-pkg/tagfile-keys.list +++ b/apt-pkg/tagfile-keys.list @@ -80,3 +80,4 @@ Vcs-Mtn Vcs-Svn Version ### APPEND BELOW, sort in with next ABI break ### +Source-Version diff --git a/cmdline/apt-key.in b/cmdline/apt-key.in index 0752272..8738094 100644 --- a/cmdline/apt-key.in +++ b/cmdline/apt-key.in @@ -811,18 +811,8 @@ case "$command" in exit 29 fi GPGV_ARGS="" - if [ "$ASSERT_PUBKEY_ALGO" ]; then - test="$(LC_ALL=C.UTF-8 "$GPGV" --assert-pubkey-algo 2>&1 || :)" - case "$test" in - *"missing argument"*) - GPGV_ARGS="--assert-pubkey-algo=$ASSERT_PUBKEY_ALGO" - ;; - *[Ii]"nvalid option"*"assert-pubkey-algo"*) - ;; - *) - apt_warn "Unknown response from gpgv to --assert-pubkey-algo check: $test" - ;; - esac + if [ "$ASSERT_PUBKEY_ALGO" ] && $GPGV --dump-options | grep -q -- --assert-pubkey-algo; then + GPGV_ARGS="--assert-pubkey-algo=$ASSERT_PUBKEY_ALGO" fi # for a forced keyid we need gpg --export, so full wrapping required if [ -n "$FORCED_KEYID" ]; then diff --git a/doc/apt-verbatim.ent b/doc/apt-verbatim.ent index c462ecd..f849c0c 100644 --- a/doc/apt-verbatim.ent +++ b/doc/apt-verbatim.ent @@ -274,7 +274,7 @@ "> <!-- this will be updated by 'prepare-release' --> -<!ENTITY apt-product-version "2.9.4"> +<!ENTITY apt-product-version "2.9.5"> <!-- (Code)names for various things used all over the place --> <!ENTITY debian-oldstable-codename "bullseye"> diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index e873cf5..702a71c 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -19,7 +19,7 @@ &apt-email; &apt-product; <!-- The last update date --> - <date>2024-04-19T00:00:00Z</date> + <date>2024-05-30T00:00:00Z</date> </refentryinfo> <refmeta> @@ -759,7 +759,7 @@ APT::Compressor::rev { or <literal>Acquire::Snapshots::URI::Override::Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a normal URI to a directory, except that the snapshot ID replaced with the - placeholder <literal>@SNAPSHOTID</literal>. + placeholder <literal>@SNAPSHOTID@</literal>. The special value '<literal>no</literal>' is available for this option indicating that this source cannot be used to acquire snapshots from. Another source will be tried diff --git a/doc/po/apt-doc.pot b/doc/po/apt-doc.pot index aab31f7..979992b 100644 --- a/doc/po/apt-doc.pot +++ b/doc/po/apt-doc.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: apt-doc 2.9.4\n" +"Project-Id-Version: apt-doc 2.9.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-05-25 09:01+0000\n" +"POT-Creation-Date: 2024-06-13 19:06+0000\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" @@ -4016,7 +4016,7 @@ msgid "" "or " "<literal>Acquire::Snapshots::URI::Override::Origin::<replaceable>ORIGIN</replaceable></literal>. " "The value should be a normal URI to a directory, except that the snapshot ID " -"replaced with the placeholder <literal>@SNAPSHOTID</literal>. The special " +"replaced with the placeholder <literal>@SNAPSHOTID@</literal>. The special " "value '<literal>no</literal>' is available for this option indicating that " "this source cannot be used to acquire snapshots from. Another source will be " "tried if available in this case." diff --git a/doc/po/de.po b/doc/po/de.po index 4675d12..ab02835 100644 --- a/doc/po/de.po +++ b/doc/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 2.0.1\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-04-22 17:38+0000\n" +"POT-Creation-Date: 2024-06-13 19:06+0000\n" "PO-Revision-Date: 2020-04-04 08:45+0200\n" "Last-Translator: Chris Leick <c.leick@vollbio.de>\n" "Language-Team: German <debian-l10n-german@lists.debian.org>\n" @@ -5773,10 +5773,10 @@ msgid "" "replaceable></literal> or <literal>Acquire::Snapshots::URI::Override::" "Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a " "normal URI to a directory, except that the snapshot ID replaced with the " -"placeholder <literal>@SNAPSHOTID</literal>. The special value '<literal>no</" -"literal>' is available for this option indicating that this source cannot be " -"used to acquire snapshots from. Another source will be tried if available in " -"this case." +"placeholder <literal>@SNAPSHOTID@</literal>. The special value " +"'<literal>no</literal>' is available for this option indicating that this " +"source cannot be used to acquire snapshots from. Another source will be " +"tried if available in this case." msgstr "" "Changelogs können nur beschafft werden, falls ein URI bekannt ist, von dem " "sie geholt werden können. Vorzugsweise gibt die Release-Datei ihn in einem " diff --git a/doc/po/es.po b/doc/po/es.po index c3c6067..5e2dc92 100644 --- a/doc/po/es.po +++ b/doc/po/es.po @@ -38,7 +38,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-04-22 17:38+0000\n" +"POT-Creation-Date: 2024-06-13 19:06+0000\n" "PO-Revision-Date: 2014-07-04 01:31+0200\n" "Last-Translator: Omar Campagne <ocampagne@gmail.com>\n" "Language-Team: Debian l10n Spanish <debian-l10n-spanish@lists.debian.org>\n" @@ -5674,10 +5674,10 @@ msgid "" "replaceable></literal> or <literal>Acquire::Snapshots::URI::Override::" "Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a " "normal URI to a directory, except that the snapshot ID replaced with the " -"placeholder <literal>@SNAPSHOTID</literal>. The special value '<literal>no</" -"literal>' is available for this option indicating that this source cannot be " -"used to acquire snapshots from. Another source will be tried if available in " -"this case." +"placeholder <literal>@SNAPSHOTID@</literal>. The special value " +"'<literal>no</literal>' is available for this option indicating that this " +"source cannot be used to acquire snapshots from. Another source will be " +"tried if available in this case." msgstr "" #. type: Content of: <refentry><refsect1><title> diff --git a/doc/po/fr.po b/doc/po/fr.po index d0419ec..d2166e3 100644 --- a/doc/po/fr.po +++ b/doc/po/fr.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.8.0\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-04-22 17:38+0000\n" +"POT-Creation-Date: 2024-06-13 19:06+0000\n" "PO-Revision-Date: 2019-05-01 17:00+0100\n" "Last-Translator: Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>\n" "Language-Team: French <debian-l10n-french@lists.debian.org>\n" @@ -5752,10 +5752,10 @@ msgid "" "replaceable></literal> or <literal>Acquire::Snapshots::URI::Override::" "Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a " "normal URI to a directory, except that the snapshot ID replaced with the " -"placeholder <literal>@SNAPSHOTID</literal>. The special value '<literal>no</" -"literal>' is available for this option indicating that this source cannot be " -"used to acquire snapshots from. Another source will be tried if available in " -"this case." +"placeholder <literal>@SNAPSHOTID@</literal>. The special value " +"'<literal>no</literal>' is available for this option indicating that this " +"source cannot be used to acquire snapshots from. Another source will be " +"tried if available in this case." msgstr "" "La récupération des journaux des modifications n'est possible que si l'URI " "où les télécharger est connu. De préférence, le fichier Release l'indique " diff --git a/doc/po/it.po b/doc/po/it.po index 120fd9f..20af323 100644 --- a/doc/po/it.po +++ b/doc/po/it.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-04-22 17:38+0000\n" +"POT-Creation-Date: 2024-06-13 19:06+0000\n" "PO-Revision-Date: 2017-03-27 19:05+0200\n" "Last-Translator: Beatrice Torracca <beatricet@libero.it>\n" "Language-Team: Italian <debian-l10n-italian@lists.debian.org>\n" @@ -5743,10 +5743,10 @@ msgid "" "replaceable></literal> or <literal>Acquire::Snapshots::URI::Override::" "Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a " "normal URI to a directory, except that the snapshot ID replaced with the " -"placeholder <literal>@SNAPSHOTID</literal>. The special value '<literal>no</" -"literal>' is available for this option indicating that this source cannot be " -"used to acquire snapshots from. Another source will be tried if available in " -"this case." +"placeholder <literal>@SNAPSHOTID@</literal>. The special value " +"'<literal>no</literal>' is available for this option indicating that this " +"source cannot be used to acquire snapshots from. Another source will be " +"tried if available in this case." msgstr "" "L'acquisizione di changelog è possibile solamente se è noto un URI da cui " "ottenerli. Il file Release indica questa informazione preferibilmente in un " diff --git a/doc/po/ja.po b/doc/po/ja.po index ad96ef5..822c41c 100644 --- a/doc/po/ja.po +++ b/doc/po/ja.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.4\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-04-22 17:38+0000\n" +"POT-Creation-Date: 2024-06-13 19:06+0000\n" "PO-Revision-Date: 2017-01-06 04:50+0900\n" "Last-Translator: Takuma Yamada <tyamada@takumayamada.com>\n" "Language-Team: Japanese <debian-japanese@lists.debian.org>\n" @@ -5535,10 +5535,10 @@ msgid "" "replaceable></literal> or <literal>Acquire::Snapshots::URI::Override::" "Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a " "normal URI to a directory, except that the snapshot ID replaced with the " -"placeholder <literal>@SNAPSHOTID</literal>. The special value '<literal>no</" -"literal>' is available for this option indicating that this source cannot be " -"used to acquire snapshots from. Another source will be tried if available in " -"this case." +"placeholder <literal>@SNAPSHOTID@</literal>. The special value " +"'<literal>no</literal>' is available for this option indicating that this " +"source cannot be used to acquire snapshots from. Another source will be " +"tried if available in this case." msgstr "" "URI は、それらを取得する場所から知られている場合は、変更履歴の取得のみ行うこ" "とができます。好ましいリリースファイルは、「変更履歴」フィールドでこのことを" diff --git a/doc/po/nl.po b/doc/po/nl.po index 0d45a86..f31bbcc 100644 --- a/doc/po/nl.po +++ b/doc/po/nl.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: apt-doc 2.9.1\n" +"Project-Id-Version: apt-doc 2.9.3\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-05-06 11:01+0000\n" -"PO-Revision-Date: 2024-04-20 21:59+0200\n" +"POT-Creation-Date: 2024-06-13 19:06+0000\n" +"PO-Revision-Date: 2024-05-21 23:41+0200\n" "Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n" "Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n" "Language: nl\n" @@ -143,15 +143,7 @@ msgstr "" #. type: Plain text #: apt.ent -#, fuzzy, no-wrap -#| msgid "" -#| " <varlistentry>\n" -#| " <term><option>-v</option></term>\n" -#| " <term><option>--version</option></term>\n" -#| " <listitem><para>Show the program version.\n" -#| " </para>\n" -#| " </listitem>\n" -#| " </varlistentry>\n" +#, no-wrap msgid "" " <varlistentry>\n" " <term><option>--audit</option></term>\n" @@ -161,9 +153,8 @@ msgid "" " </varlistentry>\n" msgstr "" " <varlistentry>\n" -" <term><option>-v</option></term>\n" -" <term><option>--version</option></term>\n" -" <listitem><para>Het versienummer van het programma weergeven.\n" +" <term><option>--audit</option></term>\n" +" <listitem><para>Controle- (en kennisgevings)berichten tonen. Dit heeft voorrang op de optie quiet, maar alleen voor waarschuwingsberichten, niet voor voortgangsberichten.\n" " </para>\n" " </listitem>\n" " </varlistentry>\n" @@ -199,19 +190,7 @@ msgstr "" #. type: Plain text #: apt.ent -#, fuzzy, no-wrap -#| msgid "" -#| " <varlistentry>\n" -#| " <term><option>-o</option></term>\n" -#| " <term><option>--option</option></term>\n" -#| " <listitem><para>Set a Configuration Option; This will set an arbitrary\n" -#| " configuration option. The syntax is <option>-o Foo::Bar=bar</option>.\n" -#| " <option>-o</option> and <option>--option</option> can be used multiple\n" -#| " times to set different options.\n" -#| " </para>\n" -#| " </listitem>\n" -#| " </varlistentry>\n" -#| "\">\n" +#, no-wrap msgid "" " <varlistentry>\n" " <term><option>-o</option></term>\n" @@ -234,23 +213,10 @@ msgstr "" " </para>\n" " </listitem>\n" " </varlistentry>\n" -"\">\n" #. type: Plain text #: apt.ent -#, fuzzy, no-wrap -#| msgid "" -#| " <varlistentry>\n" -#| " <term><option>-o</option></term>\n" -#| " <term><option>--option</option></term>\n" -#| " <listitem><para>Set a Configuration Option; This will set an arbitrary\n" -#| " configuration option. The syntax is <option>-o Foo::Bar=bar</option>.\n" -#| " <option>-o</option> and <option>--option</option> can be used multiple\n" -#| " times to set different options.\n" -#| " </para>\n" -#| " </listitem>\n" -#| " </varlistentry>\n" -#| "\">\n" +#, no-wrap msgid "" " <varlistentry>\n" " <term><option>--no-color</option></term>\n" @@ -264,12 +230,11 @@ msgid "" "\">\n" msgstr "" " <varlistentry>\n" -" <term><option>-o</option></term>\n" -" <term><option>--option</option></term>\n" -" <listitem><para>Een configuratieoptie instellen; Dit stelt een\n" -" willekeurige configuratieoptie in. De syntaxis is <option>-o Foo::Bar=bar</option>.\n" -" <option>-o</option> en <option>--option</option> kunnen meermaals\n" -" gebruikt worden om verschillende opties in te stellen.\n" +" <term><option>--no-color</option></term>\n" +" <term><option>--color</option></term>\n" +"<listitem><para>Kleur aan- of uitzetten. Kleur staat standaard aan voor &apt; op ondersteunde terminals en\n" +"kan ook uitgezet worden met de omgevingsvariabelen <envar>NO_COLOR</envar> en <envar>APT_NO_COLOR</envar>,\n" +"of verder geconfigureerd worden met de configuratieoptie en -scope <option>APT::Color</option>; zie &apt-conf; voor informatie hierover.\n" " </para>\n" " </listitem>\n" " </varlistentry>\n" @@ -4784,6 +4749,10 @@ msgid "" "<option>blue</option>, <option>magenta</option>, <option>cyan</option>, and " "<option>white</option>." msgstr "" +"Deze scoop definieert kleuren en stijlen. De ondersteunde basiskleuren zijn " +"<option>rood</option>, <option>groen</option>, <option>geel</option>, " +"<option>blauw</option>, <option>magenta</option>, <option>cyaan</option> en " +"<option>wit</option>." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml @@ -4795,6 +4764,13 @@ msgid "" "option>, <option>APT::Color::Action::Downgrade</option>, <option>APT::Color::" "Action::Remove</option>; corresponding to their lists in the &apt; output." msgstr "" +"De subscoop <option>action</option> definieert de kleuren voor pakketlijsten " +"in <option>install</option> en gelijkaardige commando's. De volgende opties " +"kunnen ingesteld worden: <option>APT::Color::Action::Upgrade</option>, " +"<option>APT::Color::Action::Install</option>, <option>APT::Color::Action::" +"Install-Dependencies</option>, <option>APT::Color::Action::Downgrade</" +"option>, <option>APT::Color::Action::Remove</option>; die overeenkomen met " +"hun lijsten in de uitvoer van &apt;." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml @@ -4802,6 +4778,9 @@ msgid "" "Each color may reference one or more other color options by name, relative " "to <option>APT::Color</option>. Their escape sequences will be combined." msgstr "" +"Elke kleur kan bij naam verwijzen naar een of meer andere kleuropties, " +"relatief ten opzichte van <option>APT::Color</option>. Hun escape-sequenties " +"worden gecombineerd." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><informalexample><programlisting> #: apt.conf.5.xml @@ -4812,6 +4791,10 @@ msgid "" "APT::Color::Action::Upgrade \"bold action::install\";\n" " " msgstr "" +"APT::Color::Bold \"\\x1B[1m\";\n" +"APT::Color::Action::Install \"cyan\";\n" +"APT::Color::Action::Upgrade \"bold action::install\";\n" +" " #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml @@ -4822,6 +4805,11 @@ msgid "" "variables, or using the <option>--color</option>, <option>--no-color</" "option> command-line options." msgstr "" +"Kleuren kunnen volledig worden in- of uitgeschakeld door <option>APT::Color</" +"option> in te stellen op <option>yes</option> of <option>no</option>, door " +"gebruik te maken van de omgevingsvariabelen <envar>NO_COLOR</envar> of " +"<envar>APT_NO_COLOR</envar>, of met behulp van de commandoregelopties " +"<option>--color</option>, <option>--no-color</option>." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml @@ -5876,6 +5864,23 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml +#, fuzzy +#| msgid "" +#| "Like changelogs, snapshots can only be acquired if an URI is known from " +#| "where to get them. Preferable the Release file indicates this in a " +#| "'Snapshots' field. If this isn't available the Label/Origin field of the " +#| "Release file is used to check if a <literal>Acquire::Snapshots::URI::" +#| "Label::<replaceable>LABEL</replaceable></literal> or <literal>Acquire::" +#| "Snapshots::URI::Origin::<replaceable>ORIGIN</replaceable></literal> " +#| "option exists and if so this value is taken. The value in the Release " +#| "file can be overridden with <literal>Acquire::Snapshots::URI::Override::" +#| "Label::<replaceable>LABEL</replaceable></literal> or <literal>Acquire::" +#| "Snapshots::URI::Override::Origin::<replaceable>ORIGIN</replaceable></" +#| "literal>. The value should be a normal URI to a directory, except that " +#| "the snapshot ID replaced with the placeholder <literal>@SNAPSHOTID</" +#| "literal>. The special value '<literal>no</literal>' is available for " +#| "this option indicating that this source cannot be used to acquire " +#| "snapshots from. Another source will be tried if available in this case." msgid "" "Like changelogs, snapshots can only be acquired if an URI is known from " "where to get them. Preferable the Release file indicates this in a " @@ -5888,10 +5893,10 @@ msgid "" "replaceable></literal> or <literal>Acquire::Snapshots::URI::Override::" "Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a " "normal URI to a directory, except that the snapshot ID replaced with the " -"placeholder <literal>@SNAPSHOTID</literal>. The special value '<literal>no</" -"literal>' is available for this option indicating that this source cannot be " -"used to acquire snapshots from. Another source will be tried if available in " -"this case." +"placeholder <literal>@SNAPSHOTID@</literal>. The special value " +"'<literal>no</literal>' is available for this option indicating that this " +"source cannot be used to acquire snapshots from. Another source will be " +"tried if available in this case." msgstr "" "Zoals changelogs (bestanden met de registratie van aangebrachte wijzigingen) " "kunnen momentopnames enkel verkregen worden als er een URI gekend is waar ze " diff --git a/doc/po/pl.po b/doc/po/pl.po index c3ef57e..92574fd 100644 --- a/doc/po/pl.po +++ b/doc/po/pl.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-04-22 17:38+0000\n" +"POT-Creation-Date: 2024-06-13 19:06+0000\n" "PO-Revision-Date: 2014-07-04 02:13+0200\n" "Last-Translator: Robert Luberda <robert@debian.org>\n" "Language-Team: Polish <manpages-pl-list@lists.sourceforge.net>\n" @@ -5328,10 +5328,10 @@ msgid "" "replaceable></literal> or <literal>Acquire::Snapshots::URI::Override::" "Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a " "normal URI to a directory, except that the snapshot ID replaced with the " -"placeholder <literal>@SNAPSHOTID</literal>. The special value '<literal>no</" -"literal>' is available for this option indicating that this source cannot be " -"used to acquire snapshots from. Another source will be tried if available in " -"this case." +"placeholder <literal>@SNAPSHOTID@</literal>. The special value " +"'<literal>no</literal>' is available for this option indicating that this " +"source cannot be used to acquire snapshots from. Another source will be " +"tried if available in this case." msgstr "" #. type: Content of: <refentry><refsect1><title> diff --git a/doc/po/pt.po b/doc/po/pt.po index 67a70d9..715f80c 100644 --- a/doc/po/pt.po +++ b/doc/po/pt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 2.7.3\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-04-22 17:38+0000\n" +"POT-Creation-Date: 2024-06-13 19:06+0000\n" "PO-Revision-Date: 2023-09-11 20:47+0100\n" "Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n" "Language-Team: Portuguese <>\n" @@ -5708,6 +5708,23 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml +#, fuzzy +#| msgid "" +#| "Like changelogs, snapshots can only be acquired if an URI is known from " +#| "where to get them. Preferable the Release file indicates this in a " +#| "'Snapshots' field. If this isn't available the Label/Origin field of the " +#| "Release file is used to check if a <literal>Acquire::Snapshots::URI::" +#| "Label::<replaceable>LABEL</replaceable></literal> or <literal>Acquire::" +#| "Snapshots::URI::Origin::<replaceable>ORIGIN</replaceable></literal> " +#| "option exists and if so this value is taken. The value in the Release " +#| "file can be overridden with <literal>Acquire::Snapshots::URI::Override::" +#| "Label::<replaceable>LABEL</replaceable></literal> or <literal>Acquire::" +#| "Snapshots::URI::Override::Origin::<replaceable>ORIGIN</replaceable></" +#| "literal>. The value should be a normal URI to a directory, except that " +#| "the snapshot ID replaced with the placeholder <literal>@SNAPSHOTID</" +#| "literal>. The special value '<literal>no</literal>' is available for " +#| "this option indicating that this source cannot be used to acquire " +#| "snapshots from. Another source will be tried if available in this case." msgid "" "Like changelogs, snapshots can only be acquired if an URI is known from " "where to get them. Preferable the Release file indicates this in a " @@ -5720,10 +5737,10 @@ msgid "" "replaceable></literal> or <literal>Acquire::Snapshots::URI::Override::" "Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a " "normal URI to a directory, except that the snapshot ID replaced with the " -"placeholder <literal>@SNAPSHOTID</literal>. The special value '<literal>no</" -"literal>' is available for this option indicating that this source cannot be " -"used to acquire snapshots from. Another source will be tried if available in " -"this case." +"placeholder <literal>@SNAPSHOTID@</literal>. The special value " +"'<literal>no</literal>' is available for this option indicating that this " +"source cannot be used to acquire snapshots from. Another source will be " +"tried if available in this case." msgstr "" "Tal como changelogs, os instantâneos só podem ser adquiridos se for " "conhecido um URI de onde os obter. Preferencialmente o ficheiro Release " diff --git a/doc/po/pt_BR.po b/doc/po/pt_BR.po index 313bfaf..86fb117 100644 --- a/doc/po/pt_BR.po +++ b/doc/po/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-doc 1.0.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-04-22 17:38+0000\n" +"POT-Creation-Date: 2024-06-13 19:06+0000\n" "PO-Revision-Date: 2004-09-20 17:02+0000\n" "Last-Translator: André Luís Lopes <andrelop@debian.org>\n" "Language-Team: <debian-l10n-portuguese@lists.debian.org>\n" @@ -3960,10 +3960,10 @@ msgid "" "replaceable></literal> or <literal>Acquire::Snapshots::URI::Override::" "Origin::<replaceable>ORIGIN</replaceable></literal>. The value should be a " "normal URI to a directory, except that the snapshot ID replaced with the " -"placeholder <literal>@SNAPSHOTID</literal>. The special value '<literal>no</" -"literal>' is available for this option indicating that this source cannot be " -"used to acquire snapshots from. Another source will be tried if available in " -"this case." +"placeholder <literal>@SNAPSHOTID@</literal>. The special value " +"'<literal>no</literal>' is available for this option indicating that this " +"source cannot be used to acquire snapshots from. Another source will be " +"tried if available in this case." msgstr "" #. type: Content of: <refentry><refsect1><title> diff --git a/po/apt-all.pot b/po/apt-all.pot index bafe73e..51f7bf3 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: apt 2.9.4\n" +"Project-Id-Version: apt 2.9.5\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-05-25 09:01+0000\n" +"POT-Creation-Date: 2024-06-13 19:06+0000\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" @@ -13,10 +13,10 @@ # msgid "" msgstr "" -"Project-Id-Version: apt 2.9.1\n" +"Project-Id-Version: apt 2.9.3\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2024-05-25 09:01+0000\n" -"PO-Revision-Date: 2024-04-20 20:28+0200\n" +"POT-Creation-Date: 2024-06-11 12:57+0000\n" +"PO-Revision-Date: 2024-05-21 22:12+0200\n" "Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n" "Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n" "Language: nl\n" @@ -258,6 +258,8 @@ msgid "" "Repositories should provide a clear-signed InRelease file, but none found at " "%s." msgstr "" +"Pakketbronnen zouden een duidelijk ondertekend InRelease-bestand moeten " +"leveren, maar er is er geen gevonden op %s." #: apt-pkg/acquire-item.cc #, c-format @@ -706,26 +708,26 @@ msgstr "Syntactische fout %s:%u: extra rommel aan het einde van het bestand" #. TRANSLATOR: This is a warning level displayed before the message #: apt-pkg/contrib/error.cc msgid "Error:" -msgstr "" +msgstr "Fout:" #. TRANSLATOR: This is a warning level displayed before the message #: apt-pkg/contrib/error.cc msgid "Warning:" -msgstr "" +msgstr "Waarschuwing:" #. TRANSLATOR: This is a warning level displayed before the message #: apt-pkg/contrib/error.cc msgid "Notice:" -msgstr "" +msgstr "Kennisgeving:" #: apt-pkg/contrib/error.cc msgid "Audit:" -msgstr "" +msgstr "Controle:" #. TRANSLATOR: This is a warning level displayed before the message #: apt-pkg/contrib/error.cc msgid "Debug:" -msgstr "" +msgstr "Debug:" #: apt-pkg/contrib/extracttar.cc #, c-format diff --git a/test/integration/run-tests b/test/integration/run-tests index 3100e8e..331adfc 100755 --- a/test/integration/run-tests +++ b/test/integration/run-tests @@ -31,7 +31,7 @@ while [ -n "$1" ]; do elif [ "$1" = '--only' ]; then TESTLIST="$2" shift - elif [ -x "$1" ]; then + elif [ -e "$1" ]; then TESTTORUN="$1" else echo >&2 "WARNING: Unknown parameter »$1« will be ignored" diff --git a/test/integration/test-bug-64141-install-dependencies-for-on-hold b/test/integration/test-bug-64141-install-dependencies-for-on-hold index 2565c94..1ad1952 100755 --- a/test/integration/test-bug-64141-install-dependencies-for-on-hold +++ b/test/integration/test-bug-64141-install-dependencies-for-on-hold @@ -5,6 +5,7 @@ TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment configarchitecture 'native' 'strange-arch' +native=$(getarchitecture 'native') insertpackage 'unstable' 'unrelated' 'strange-arch' '1' @@ -33,7 +34,7 @@ After this operation, 0 B of additional disk space will be used. E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only --solver 3.0 testfailure aptget dist-upgrade --trivial-only --solver 3.0 -o debug::apt::solver=2 -testsuccess grep -Fx 'Branch failed: Conflict: apt:amd64 -> apt:amd64=0.8.10 -> not oldcrap:amd64=1-1 but oldcrap:amd64 -> oldcrap:amd64=1-1' rootdir/tmp/testfailure.output +testsuccess grep -Fx "Branch failed: Conflict: apt:$native -> apt:$native=0.8.10 -> not oldcrap:$native=1-1 but oldcrap:$native -> oldcrap:$native=1-1" rootdir/tmp/testfailure.output allowremovemanual diff --git a/test/integration/test-prefer-higher-priority-providers b/test/integration/test-prefer-higher-priority-providers index 6f07db5..5fed20a 100755 --- a/test/integration/test-prefer-higher-priority-providers +++ b/test/integration/test-prefer-higher-priority-providers @@ -5,6 +5,7 @@ TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment configarchitecture 'native' +native=$(getarchitecture 'native') insertpackage 'unstable' 'foo' 'all' '1' 'Provides: stuff' 'important' insertpackage 'unstable' 'bar' 'all' '1' 'Provides: stuff' 'optional' @@ -90,10 +91,10 @@ Inst awesome (1 unstable [all]) Conf baz (1 unstable [all]) Conf awesome (1 unstable [all])" aptget install awesome foo- bar- -s -testfailuremsg "E: Unsatisfiable dependency: awesome:amd64=1 -> foo:amd64=1 | bar:amd64=1 | baz:amd64=1 -E: Not considered: foo:amd64=1: not foo:amd64 -> not foo:amd64=1 -E: Not considered: bar:amd64=1: not bar:amd64 -> not bar:amd64=1 -E: Not considered: baz:amd64=1: not baz:amd64 -> not baz:amd64=1" aptget install awesome foo- bar- baz- -s --solver 3.0 +testfailuremsg "E: Unsatisfiable dependency: awesome:$native=1 -> foo:$native=1 | bar:$native=1 | baz:$native=1 +E: Not considered: foo:$native=1: not foo:$native -> not foo:$native=1 +E: Not considered: bar:$native=1: not bar:$native -> not bar:$native=1 +E: Not considered: baz:$native=1: not baz:$native -> not baz:$native=1" aptget install awesome foo- bar- baz- -s --solver 3.0 testfailureequal "Reading package lists... Building dependency tree... Package 'foo' is not installed, so not removed diff --git a/test/integration/test-resolver-provider-exchange b/test/integration/test-resolver-provider-exchange index 45d9369..2874b88 100755 --- a/test/integration/test-resolver-provider-exchange +++ b/test/integration/test-resolver-provider-exchange @@ -8,6 +8,7 @@ allowremovemanual configarchitecture 'amd64' insertinstalledpackage 'fuse' 'all' '2' +insertpackage 'unstable' 'fuse' 'all' '2' insertpackage 'unstable' 'fuse3' 'all' '3' 'Conflicts: fuse Provides: fuse' |