summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMake/Misc.cmake18
-rw-r--r--CMake/Translations.cmake8
-rw-r--r--CMakeLists.txt2
-rw-r--r--apt-pkg/algorithms.cc49
-rw-r--r--apt-pkg/contrib/gpgv.cc3
-rw-r--r--apt-pkg/contrib/srvrec.cc17
-rw-r--r--apt-pkg/contrib/strutl.cc2
-rw-r--r--apt-pkg/deb/deblistparser.cc11
-rw-r--r--apt-pkg/deb/debsystem.cc7
-rw-r--r--apt-pkg/deb/debsystem.h1
-rw-r--r--apt-pkg/deb/dpkgpm.cc14
-rw-r--r--apt-pkg/depcache.cc196
-rw-r--r--apt-pkg/depcache.h3
-rw-r--r--apt-pkg/edsp.cc28
-rw-r--r--apt-pkg/tagfile-keys.list1
-rw-r--r--apt-pkg/tagfile-order.c3
-rw-r--r--apt-private/private-update.cc2
-rw-r--r--cmdline/CMakeLists.txt2
-rw-r--r--cmdline/apt-dump-solver.cc5
-rw-r--r--cmdline/apt-key.in20
-rwxr-xr-xdebian/apt.postinst2
-rw-r--r--debian/changelog40
-rw-r--r--doc/apt-key.8.xml32
-rw-r--r--doc/apt-verbatim.ent2
-rw-r--r--doc/examples/configure-index1
-rw-r--r--doc/po/apt-doc.pot4
-rw-r--r--doc/po/pt.po412
-rw-r--r--methods/CMakeLists.txt6
-rw-r--r--methods/gpgv.cc8
-rw-r--r--methods/http.cc86
-rw-r--r--po/apt-all.pot4
-rw-r--r--po/ca.po2
-rw-r--r--po/nl.po35
-rw-r--r--test/integration/framework12
-rw-r--r--test/integration/status-bug-lp1347721-dpkg-ordering14
-rw-r--r--test/integration/status-ubuntu-bug-61499312
-rwxr-xr-xtest/integration/test-bug-549968-install-depends-of-not-installed1
-rwxr-xr-xtest/integration/test-bug-618848-always-respect-user-requests1
-rwxr-xr-xtest/integration/test-bug-960705-propagate-protected-to-satisfied-conflict2
-rwxr-xr-xtest/integration/test-dpkg-protected20
-rwxr-xr-xtest/integration/test-external-dependency-solver-protocol25
-rwxr-xr-xtest/integration/test-no-fds-leaked-to-maintainer-scripts2
-rwxr-xr-xtest/integration/test-resolver-delays-remove-decisions107
-rwxr-xr-xtest/integration/test-resolver-provider-exchange107
-rw-r--r--test/interactive-helper/aptwebserver.cc9
45 files changed, 900 insertions, 438 deletions
diff --git a/CMake/Misc.cmake b/CMake/Misc.cmake
index 6ad0b9479..8cb18b6ac 100644
--- a/CMake/Misc.cmake
+++ b/CMake/Misc.cmake
@@ -51,17 +51,17 @@ function(add_vendor_file)
endfunction()
# Add symbolic links to a file
-function(add_slaves destination master)
- set(slaves "")
- foreach(slave ${ARGN})
- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${slave}
- COMMAND ${CMAKE_COMMAND} -E create_symlink ${master} ${CMAKE_CURRENT_BINARY_DIR}/${slave})
- list(APPEND slaves ${CMAKE_CURRENT_BINARY_DIR}/${slave})
+function(add_links directory target)
+ set(link_names "")
+ foreach(link_name ${ARGN})
+ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${link_name}
+ COMMAND ${CMAKE_COMMAND} -E create_symlink ${target} ${CMAKE_CURRENT_BINARY_DIR}/${link_name})
+ list(APPEND link_names ${CMAKE_CURRENT_BINARY_DIR}/${link_name})
endforeach()
- STRING(REPLACE "/" "-" master "${master}")
- add_custom_target(${master}-slaves ALL DEPENDS ${slaves})
- install(FILES ${slaves} DESTINATION ${destination})
+ STRING(REPLACE "/" "-" target "${target}")
+ add_custom_target(${target}-link_names ALL DEPENDS ${link_names})
+ install(FILES ${link_names} DESTINATION ${directory})
endfunction()
# Generates a simple version script versioning everything with current SOVERSION
diff --git a/CMake/Translations.cmake b/CMake/Translations.cmake
index 54a635ab6..24925105c 100644
--- a/CMake/Translations.cmake
+++ b/CMake/Translations.cmake
@@ -136,8 +136,8 @@ function(apt_add_update_po)
list(APPEND potfiles ${CMAKE_CURRENT_BINARY_DIR}/${domain}.pot)
endforeach()
- get_filename_component(master_name ${output} NAME_WE)
- add_custom_target(nls-${master_name}
+ get_filename_component(primary_name ${output} NAME_WE)
+ add_custom_target(nls-${primary_name}
COMMAND msgcomm --sort-by-file --add-location=file
--more-than=0 --output=${output}
${potfiles}
@@ -154,11 +154,11 @@ function(apt_add_update_po)
endif()
add_custom_target(update-po-${langcode}
COMMAND msgmerge -q --previous --update --backup=none ${translation} ${output}
- DEPENDS nls-${master_name}
+ DEPENDS nls-${primary_name}
)
add_dependencies(update-po update-po-${langcode})
endforeach()
- add_dependencies(update-po nls-${master_name})
+ add_dependencies(update-po nls-${primary_name})
endfunction()
function(apt_add_po_statistics excluded)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7dbf8abc3..afd74adb5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -204,7 +204,7 @@ check_cxx_target(HAVE_FMV_SSE42_AND_CRC32DI "sse4.2" "__builtin_ia32_crc32di(0,i
# 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.1.6")
+set(PACKAGE_VERSION "2.1.7")
string(REGEX MATCH "^[0-9.]+" PROJECT_VERSION ${PACKAGE_VERSION})
if (NOT DEFINED DPKG_DATADIR)
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index cba772d41..cd09a6944 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -517,18 +517,37 @@ void pkgProblemResolver::MakeScores()
Score += PrioInstalledAndNotObsolete;
// propagate score points along dependencies
- for (pkgCache::DepIterator D = InstVer.DependsList(); D.end() == false; ++D)
+ for (pkgCache::DepIterator D = InstVer.DependsList(); not D.end(); ++D)
{
if (DepMap[D->Type] == 0)
continue;
pkgCache::PkgIterator const T = D.TargetPkg();
- if (D->Version != 0)
+ if (not D.IsIgnorable(T))
{
- pkgCache::VerIterator const IV = Cache[T].InstVerIter(Cache);
- if (IV.end() == true || D.IsSatisfied(IV) == false)
+ if (D->Version != 0)
+ {
+ pkgCache::VerIterator const IV = Cache[T].InstVerIter(Cache);
+ if (IV.end() || not D.IsSatisfied(IV))
+ continue;
+ }
+ Scores[T->ID] += DepMap[D->Type];
+ }
+
+ std::vector<map_id_t> providers;
+ for (auto Prv = T.ProvidesList(); not Prv.end(); ++Prv)
+ {
+ if (D.IsIgnorable(Prv))
+ continue;
+ auto const PV = Prv.OwnerVer();
+ auto const PP = PV.ParentPkg();
+ if (PV != Cache[PP].InstVerIter(Cache) || not D.IsSatisfied(Prv))
continue;
+ providers.push_back(PP->ID);
}
- Scores[T->ID] += DepMap[D->Type];
+ std::sort(providers.begin(), providers.end());
+ providers.erase(std::unique(providers.begin(), providers.end()), providers.end());
+ for (auto const prv : providers)
+ Scores[prv] += DepMap[D->Type];
}
}
@@ -564,13 +583,25 @@ void pkgProblemResolver::MakeScores()
provide important packages extremely important */
for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I)
{
- for (pkgCache::PrvIterator P = I.ProvidesList(); P.end() == false; ++P)
+ auto const transfer = abs(Scores[I->ID] - OldScores[I->ID]);
+ if (transfer == 0)
+ continue;
+
+ std::vector<map_id_t> providers;
+ for (auto Prv = I.ProvidesList(); not Prv.end(); ++Prv)
{
- // Only do it once per package
- if ((pkgCache::Version *)P.OwnerVer() != Cache[P.OwnerPkg()].InstallVer)
+ if (Prv.IsMultiArchImplicit())
+ continue;
+ auto const PV = Prv.OwnerVer();
+ auto const PP = PV.ParentPkg();
+ if (PV != Cache[PP].InstVerIter(Cache))
continue;
- Scores[P.OwnerPkg()->ID] += abs(Scores[I->ID] - OldScores[I->ID]);
+ providers.push_back(PP->ID);
}
+ std::sort(providers.begin(), providers.end());
+ providers.erase(std::unique(providers.begin(), providers.end()), providers.end());
+ for (auto const prv : providers)
+ Scores[prv] += transfer;
}
/* Protected things are pushed really high up. This number should put them
diff --git a/apt-pkg/contrib/gpgv.cc b/apt-pkg/contrib/gpgv.cc
index d956eaf00..28f3150c3 100644
--- a/apt-pkg/contrib/gpgv.cc
+++ b/apt-pkg/contrib/gpgv.cc
@@ -251,6 +251,9 @@ void ExecGPGV(std::string const &File, std::string const &FileGPG,
setenv("APT_CONFIG", conf.get(), 1);
}
+ // Tell apt-key not to emit warnings
+ setenv("APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE", "1", 1);
+
if (releaseSignature == DETACHED)
{
auto detached = make_unique_FILE(FileGPG, "r");
diff --git a/apt-pkg/contrib/srvrec.cc b/apt-pkg/contrib/srvrec.cc
index 7d9bf116e..4ca208273 100644
--- a/apt-pkg/contrib/srvrec.cc
+++ b/apt-pkg/contrib/srvrec.cc
@@ -137,17 +137,12 @@ bool GetSrvRecords(std::string name, std::vector<SrvRec> &Result)
// sort them by priority
std::stable_sort(Result.begin(), Result.end());
- for(std::vector<SrvRec>::iterator I = Result.begin();
- I != Result.end(); ++I)
- {
- if (_config->FindB("Debug::Acquire::SrvRecs", false) == true)
- {
- std::cerr << "SrvRecs: got " << I->target
- << " prio: " << I->priority
- << " weight: " << I->weight
- << std::endl;
- }
- }
+ if (_config->FindB("Debug::Acquire::SrvRecs", false))
+ for(auto const &R : Result)
+ std::cerr << "SrvRecs: got " << R.target
+ << " prio: " << R.priority
+ << " weight: " << R.weight
+ << '\n';
return true;
}
diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc
index 972472986..bd4856526 100644
--- a/apt-pkg/contrib/strutl.cc
+++ b/apt-pkg/contrib/strutl.cc
@@ -1771,7 +1771,7 @@ URI::operator string()
{
// FIXME: Technically userinfo is permitted even less
// characters than these, but this is not conveniently
- // expressed with a blacklist.
+ // expressed with a denylist.
Res << QuoteString(User, ":/?#[]@");
if (Password.empty() == false)
Res << ":" << QuoteString(Password, ":/?#[]@");
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index ab957a01a..240946529 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -318,6 +318,8 @@ bool debListParser::UsePackage(pkgCache::PkgIterator &Pkg,
return false;
if (Section.FindFlag(pkgTagSection::Key::Important,Pkg->Flags,pkgCache::Flag::Important) == false)
return false;
+ if (Section.FindFlag(pkgTagSection::Key::Protected, Pkg->Flags, pkgCache::Flag::Important) == false)
+ return false;
if (std::find(forceEssential.begin(), forceEssential.end(), Pkg.Name()) != forceEssential.end())
{
@@ -1018,12 +1020,11 @@ debDebFileParser::debDebFileParser(FileFd *File, std::string const &DebFile)
bool debDebFileParser::UsePackage(pkgCache::PkgIterator &Pkg,
pkgCache::VerIterator &Ver)
{
- bool res = debListParser::UsePackage(Pkg, Ver);
- // we use the full file path as a provides so that the file is found
- // by its name
- if(NewProvides(Ver, DebFile, Pkg.Cache()->NativeArch(), Ver.VerStr(), 0) == false)
+ if (not debListParser::UsePackage(Pkg, Ver))
return false;
- return res;
+ // we use the full file path as a provides so that the file is found by its name
+ // using the MultiArchImplicit flag for this is a bit of a stretch
+ return NewProvides(Ver, DebFile, Pkg.Cache()->NativeArch(), Ver.VerStr(), pkgCache::Flag::MultiArchImplicit | pkgCache::Flag::ArchSpecific);
}
debListParser::~debListParser() {}
diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc
index 7d4bf7213..eac43c3b7 100644
--- a/apt-pkg/deb/debsystem.cc
+++ b/apt-pkg/deb/debsystem.cc
@@ -466,8 +466,13 @@ pid_t debSystem::ExecDpkg(std::vector<std::string> const &sArgs, int * const inp
/*}}}*/
bool debSystem::MultiArchSupported() const /*{{{*/
{
+ return AssertFeature("multi-arch");
+}
+ /*}}}*/
+bool debSystem::AssertFeature(std::string const &feature) /*{{{*/
+{
std::vector<std::string> Args = GetDpkgBaseCommand();
- Args.push_back("--assert-multi-arch");
+ Args.push_back("--assert-" + feature);
pid_t const dpkgAssertMultiArch = ExecDpkg(Args, nullptr, nullptr, true);
if (dpkgAssertMultiArch > 0)
{
diff --git a/apt-pkg/deb/debsystem.h b/apt-pkg/deb/debsystem.h
index 2e5a8550c..b3d241512 100644
--- a/apt-pkg/deb/debsystem.h
+++ b/apt-pkg/deb/debsystem.h
@@ -45,6 +45,7 @@ class debSystem : public pkgSystem
APT_HIDDEN static void DpkgChrootDirectory();
APT_HIDDEN static pid_t ExecDpkg(std::vector<std::string> const &sArgs, int * const inputFd, int * const outputFd, bool const DiscardOutput);
bool MultiArchSupported() const override;
+ static bool AssertFeature(std::string const &Feature);
std::vector<std::string> ArchitecturesSupported() const override;
bool LockInner(OpProgress *const Progress, int timeoutSec) override;
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index ef73881c8..c496538cc 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -1416,6 +1416,15 @@ static bool ItemIsEssential(pkgDPkgPM::Item const &I)
return true;
return (I.Pkg->Flags & pkgCache::Flag::Essential) != 0;
}
+static bool ItemIsProtected(pkgDPkgPM::Item const &I)
+{
+ static auto const cachegen = _config->Find("pkgCacheGen::Protected");
+ if (cachegen == "none" || cachegen == "native")
+ return true;
+ if (unlikely(I.Pkg.end()))
+ return true;
+ return (I.Pkg->Flags & pkgCache::Flag::Important) != 0;
+}
bool pkgDPkgPM::ExpandPendingCalls(std::vector<Item> &List, pkgDepCache &Cache)
{
{
@@ -1712,6 +1721,7 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
OpenLog();
bool dpkgMultiArch = _system->MultiArchSupported();
+ bool dpkgProtectedField = debSystem::AssertFeature("protected-field");
// start pty magic before the loop
StartPtyMagic();
@@ -1780,6 +1790,10 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
{
ADDARGC("--force-remove-essential");
}
+ if (dpkgProtectedField && std::any_of(I, J, ItemIsProtected))
+ {
+ ADDARGC("--force-remove-protected");
+ }
ADDARGC("--remove");
break;
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index f90a41e22..c7ef7a400 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -839,13 +839,73 @@ void pkgDepCache::Update(PkgIterator const &Pkg)
Update(P.ParentPkg().RevDependsList());
}
/*}}}*/
+// DepCache::IsModeChangeOk - check if it is ok to change the mode /*{{{*/
+// ---------------------------------------------------------------------
+/* this is used by all Mark methods on the very first line to check sanity
+ and prevents mode changes for packages on hold for example.
+ If you want to check Mode specific stuff you can use the virtual public
+ Is<Mode>Ok methods instead */
+static char const* PrintMode(char const mode)
+{
+ switch (mode)
+ {
+ case pkgDepCache::ModeInstall: return "Install";
+ case pkgDepCache::ModeKeep: return "Keep";
+ case pkgDepCache::ModeDelete: return "Delete";
+ case pkgDepCache::ModeGarbage: return "Garbage";
+ default: return "UNKNOWN";
+ }
+}
+static bool IsModeChangeOk(pkgDepCache &Cache, pkgDepCache::ModeList const mode, pkgCache::PkgIterator const &Pkg,
+ unsigned long const Depth, bool const FromUser, bool const DebugMarker)
+{
+ // we are not trying to hard…
+ if (unlikely(Depth > 100))
+ return false;
+
+ // general sanity
+ if (unlikely(Pkg.end() == true || Pkg->VersionList == 0))
+ return false;
+
+ // the user is always right
+ if (FromUser == true)
+ return true;
+
+ auto &P = Cache[Pkg];
+ // not changing the mode is obviously also fine as we might want to call
+ // e.g. MarkInstall multiple times with different arguments for the same package
+ if (P.Mode == mode)
+ return true;
+
+ // if previous state was set by user only user can reset it
+ if ((P.iFlags & pkgDepCache::Protected) == pkgDepCache::Protected)
+ {
+ if (unlikely(DebugMarker == true))
+ std::clog << OutputInDepth(Depth) << "Ignore Mark" << PrintMode(mode)
+ << " of " << APT::PrettyPkg(&Cache, Pkg) << " as its mode (" << PrintMode(P.Mode)
+ << ") is protected" << std::endl;
+ return false;
+ }
+ // enforce dpkg holds
+ else if (mode != pkgDepCache::ModeKeep && Pkg->SelectedState == pkgCache::State::Hold &&
+ _config->FindB("APT::Ignore-Hold",false) == false)
+ {
+ if (unlikely(DebugMarker == true))
+ std::clog << OutputInDepth(Depth) << "Hold prevents Mark" << PrintMode(mode)
+ << " of " << APT::PrettyPkg(&Cache, Pkg) << std::endl;
+ return false;
+ }
+
+ return true;
+}
+ /*}}}*/
// DepCache::MarkKeep - Put the package in the keep state /*{{{*/
// ---------------------------------------------------------------------
/* */
bool pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser,
unsigned long Depth)
{
- if (IsModeChangeOk(ModeKeep, Pkg, Depth, FromUser) == false)
+ if (not IsModeChangeOk(*this, ModeKeep, Pkg, Depth, FromUser, DebugMarker))
return false;
/* Reject an attempt to keep a non-source broken installed package, those
@@ -905,7 +965,7 @@ bool pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser,
bool pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge,
unsigned long Depth, bool FromUser)
{
- if (IsModeChangeOk(ModeDelete, Pkg, Depth, FromUser) == false)
+ if (not IsModeChangeOk(*this, ModeDelete, Pkg, Depth, FromUser, DebugMarker))
return false;
StateCache &P = PkgState[Pkg->ID];
@@ -1004,66 +1064,6 @@ bool pkgDepCache::IsDeleteOkProtectInstallRequests(PkgIterator const &Pkg,
return true;
}
/*}}}*/
-// DepCache::IsModeChangeOk - check if it is ok to change the mode /*{{{*/
-// ---------------------------------------------------------------------
-/* this is used by all Mark methods on the very first line to check sanity
- and prevents mode changes for packages on hold for example.
- If you want to check Mode specific stuff you can use the virtual public
- Is<Mode>Ok methods instead */
-static char const* PrintMode(char const mode)
-{
- switch (mode)
- {
- case pkgDepCache::ModeInstall: return "Install";
- case pkgDepCache::ModeKeep: return "Keep";
- case pkgDepCache::ModeDelete: return "Delete";
- case pkgDepCache::ModeGarbage: return "Garbage";
- default: return "UNKNOWN";
- }
-}
-bool pkgDepCache::IsModeChangeOk(ModeList const mode, PkgIterator const &Pkg,
- unsigned long const Depth, bool const FromUser)
-{
- // we are not trying to hard…
- if (unlikely(Depth > 100))
- return false;
-
- // general sanity
- if (unlikely(Pkg.end() == true || Pkg->VersionList == 0))
- return false;
-
- // the user is always right
- if (FromUser == true)
- return true;
-
- StateCache &P = PkgState[Pkg->ID];
- // not changing the mode is obviously also fine as we might want to call
- // e.g. MarkInstall multiple times with different arguments for the same package
- if (P.Mode == mode)
- return true;
-
- // if previous state was set by user only user can reset it
- if ((P.iFlags & Protected) == Protected)
- {
- if (unlikely(DebugMarker == true))
- std::clog << OutputInDepth(Depth) << "Ignore Mark" << PrintMode(mode)
- << " of " << APT::PrettyPkg(this, Pkg) << " as its mode (" << PrintMode(P.Mode)
- << ") is protected" << std::endl;
- return false;
- }
- // enforce dpkg holds
- else if (mode != ModeKeep && Pkg->SelectedState == pkgCache::State::Hold &&
- _config->FindB("APT::Ignore-Hold",false) == false)
- {
- if (unlikely(DebugMarker == true))
- std::clog << OutputInDepth(Depth) << "Hold prevents Mark" << PrintMode(mode)
- << " of " << APT::PrettyPkg(this, Pkg) << std::endl;
- return false;
- }
-
- return true;
-}
- /*}}}*/
struct CompareProviders /*{{{*/
{
pkgDepCache const &Cache;
@@ -1279,32 +1279,55 @@ static APT::VersionVector getAllPossibleSolutions(pkgDepCache &Cache, pkgCache::
toNewInstall.emplace_back(std::move(Ver));
}
} while (Start++ != End);
- std::move(toNewInstall.begin(), toNewInstall.end(), std::back_inserter(toUpgrade));
+ if (toUpgrade.empty())
+ toUpgrade = std::move(toNewInstall);
+ else
+ std::move(toNewInstall.begin(), toNewInstall.end(), std::back_inserter(toUpgrade));
+
if (not sorted)
std::sort(toUpgrade.begin(), toUpgrade.end(), [](pkgCache::VerIterator const &A, pkgCache::VerIterator const &B) { return A->ID < B->ID; });
toUpgrade.erase(std::unique(toUpgrade.begin(), toUpgrade.end()), toUpgrade.end());
+
+ if (not End.IsNegative())
+ toUpgrade.erase(std::remove_if(toUpgrade.begin(), toUpgrade.end(), [&Cache](pkgCache::VerIterator const &V) {
+ auto const P = V.ParentPkg();
+ auto const &State = Cache[P];
+ return State.Protect() && (State.Delete() || (State.Keep() && P->CurrentVer == 0));
+ }),
+ toUpgrade.end());
+
return toUpgrade;
}
/*}}}*/
-static bool MarkInstall_MarkDeleteForNotUpgradeable(pkgDepCache &Cache, bool const DebugAutoInstall, pkgCache::VerIterator const &PV, unsigned long const Depth, pkgCache::PkgIterator const &Pkg, bool const propagateProctected)/*{{{*/
+static bool MarkInstall_MarkDeleteForNotUpgradeable(pkgDepCache &Cache, bool const DebugAutoInstall, pkgCache::VerIterator const &PV, unsigned long const Depth, pkgCache::PkgIterator const &Pkg, bool const propagateProctected, APT::PackageVector &delayedRemove)/*{{{*/
{
auto &State = Cache[Pkg];
- if (not State.Delete())
+ if (not propagateProctected)
{
+ if (State.Delete())
+ return true;
if(DebugAutoInstall)
- std::clog << OutputInDepth(Depth) << " Removing: " << Pkg.Name() << " as upgrade is not an option for " << PV.ParentPkg().FullName() << " (" << PV.VerStr() << ")\n";
- if (not Cache.MarkDelete(Pkg, false, Depth + 1, false))
+ std::clog << OutputInDepth(Depth) << " Delayed Removing: " << Pkg.FullName() << " as upgrade is not an option for " << PV.ParentPkg().FullName() << " (" << PV.VerStr() << ")\n";
+ if (not IsModeChangeOk(Cache, pkgDepCache::ModeDelete, Pkg, Depth, false, DebugAutoInstall) ||
+ not Cache.IsDeleteOk(Pkg, false, Depth, false))
return false;
+ delayedRemove.push_back(Pkg);
+ return true;
}
- if (propagateProctected)
+
+ if (not State.Delete())
{
- MarkInstall_DiscardCandidate(Cache, Pkg);
- Cache.MarkProtected(Pkg);
+ if(DebugAutoInstall)
+ std::clog << OutputInDepth(Depth) << " Removing: " << Pkg.FullName() << " as upgrade is not an option for " << PV.ParentPkg().FullName() << " (" << PV.VerStr() << ")\n";
+ if (not Cache.MarkDelete(Pkg, false, Depth + 1, false))
+ return false;
}
+ MarkInstall_DiscardCandidate(Cache, Pkg);
+ Cache.MarkProtected(Pkg);
return true;
}
/*}}}*/
-static bool MarkInstall_RemoveConflictsIfNotUpgradeable(pkgDepCache &Cache, bool const DebugAutoInstall, pkgCache::VerIterator const &PV, unsigned long Depth, std::vector<pkgCache::DepIterator> &toRemove, APT::PackageVector &toUpgrade, bool const propagateProctected, bool const FromUser) /*{{{*/
+static bool MarkInstall_RemoveConflictsIfNotUpgradeable(pkgDepCache &Cache, bool const DebugAutoInstall, pkgCache::VerIterator const &PV, unsigned long Depth, std::vector<pkgCache::DepIterator> &toRemove, APT::PackageVector &toUpgrade, APT::PackageVector &delayedRemove, bool const propagateProctected, bool const FromUser) /*{{{*/
{
/* Negative dependencies have no or-group
If the candidate is effected try to keep current and discard candidate
@@ -1336,7 +1359,7 @@ static bool MarkInstall_RemoveConflictsIfNotUpgradeable(pkgDepCache &Cache, bool
else
badCandidate.push_back(Pkg);
}
- else if (not MarkInstall_MarkDeleteForNotUpgradeable(Cache, DebugAutoInstall, PV, Depth, Pkg, propagateProctected))
+ else if (not MarkInstall_MarkDeleteForNotUpgradeable(Cache, DebugAutoInstall, PV, Depth, Pkg, propagateProctected, delayedRemove))
{
failedToRemoveSomething = true;
if (not propagateProctected && not FromUser)
@@ -1352,7 +1375,9 @@ static bool MarkInstall_RemoveConflictsIfNotUpgradeable(pkgDepCache &Cache, bool
if (State.CandidateVer != Ver && State.CandidateVer != nullptr &&
std::find(badCandidate.cbegin(), badCandidate.cend(), Pkg) == badCandidate.end())
toUpgrade.push_back(Pkg);
- else if (not MarkInstall_MarkDeleteForNotUpgradeable(Cache, DebugAutoInstall, PV, Depth, Pkg, propagateProctected))
+ else if (State.CandidateVer == Pkg.CurrentVer())
+ ; // already done in the first loop above
+ else if (not MarkInstall_MarkDeleteForNotUpgradeable(Cache, DebugAutoInstall, PV, Depth, Pkg, propagateProctected, delayedRemove))
{
failedToRemoveSomething = true;
if (not propagateProctected && not FromUser)
@@ -1510,10 +1535,12 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg, bool AutoInst,
unsigned long Depth, bool FromUser,
bool ForceImportantDeps)
{
- if (IsModeChangeOk(ModeInstall, Pkg, Depth, FromUser) == false)
+ StateCache &P = PkgState[Pkg->ID];
+ if (P.Protect() && P.Keep() && P.CandidateVer != nullptr && P.CandidateVer == Pkg.CurrentVer())
+ ; // we are here to mark our dependencies as protected, no state is changed
+ else if (not IsModeChangeOk(*this, ModeInstall, Pkg, Depth, FromUser, DebugMarker))
return false;
- StateCache &P = PkgState[Pkg->ID];
// See if there is even any possible installation candidate
if (P.CandidateVer == 0)
@@ -1545,7 +1572,7 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg, bool AutoInst,
bool hasFailed = false;
std::vector<pkgCache::DepIterator> toInstall, toRemove;
- APT::PackageVector toUpgrade;
+ APT::PackageVector toUpgrade, delayedRemove;
if (AutoSolve)
{
VerIterator const PV = P.CandidateVerIter(*this);
@@ -1554,7 +1581,7 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg, bool AutoInst,
if (not MarkInstall_CollectDependencies(*this, PV, toInstall, toRemove))
return false;
- if (not MarkInstall_RemoveConflictsIfNotUpgradeable(*this, DebugAutoInstall, PV, Depth, toRemove, toUpgrade, P.Protect(), FromUser))
+ if (not MarkInstall_RemoveConflictsIfNotUpgradeable(*this, DebugAutoInstall, PV, Depth, toRemove, toUpgrade, delayedRemove, P.Protect(), FromUser))
{
if (failEarly)
return false;
@@ -1628,6 +1655,19 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg, bool AutoInst,
hasFailed = true;
}
+ for (auto const &R : delayedRemove)
+ {
+ if (not MarkDelete(R, false, Depth, false))
+ {
+ if (failEarly)
+ {
+ MarkInstall_DiscardInstall(Pkg);
+ return false;
+ }
+ hasFailed = true;
+ }
+ }
+
if (MoveAutoBitToDependencies)
{
if (DebugAutoInstall)
@@ -2183,7 +2223,7 @@ bool pkgDepCache::MarkRequired(InRootSetFunc &userFunc)
reason = "Required";
else if (userFunc.InRootSet(P))
reason = "Blacklisted [APT::NeverAutoRemove]";
- else if (IsModeChangeOk(ModeGarbage, P, 0, false) == false)
+ else if (not IsModeChangeOk(*this, ModeGarbage, P, 0, false, DebugMarker))
reason = "Hold";
else
continue;
diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h
index d9bb69a18..78f88ba2f 100644
--- a/apt-pkg/depcache.h
+++ b/apt-pkg/depcache.h
@@ -518,9 +518,6 @@ class APT_PUBLIC pkgDepCache : protected pkgCache::Namespace
private:
void * const d;
- APT_HIDDEN bool IsModeChangeOk(ModeList const mode, PkgIterator const &Pkg,
- unsigned long const Depth, bool const FromUser);
-
APT_HIDDEN bool MarkInstall_StateChange(PkgIterator const &Pkg, bool AutoInst, bool FromUser);
APT_HIDDEN bool MarkInstall_DiscardInstall(PkgIterator const &Pkg);
diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc
index 3f8534234..7e3993be4 100644
--- a/apt-pkg/edsp.cc
+++ b/apt-pkg/edsp.cc
@@ -29,8 +29,10 @@
#include <sys/stat.h>
#include <unistd.h>
+#include <algorithm>
#include <array>
#include <limits>
+#include <sstream>
#include <string>
#include <apti18n.h>
@@ -119,19 +121,25 @@ static bool WriteScenarioDependency(FileFd &output, pkgCache::VerIterator const
for (size_t i = 1; i < dependencies.size(); ++i)
if (dependencies[i].empty() == false)
WriteOkay(Okay, output, "\n", DepMap[i], ": ", dependencies[i]);
- string provides;
- for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv)
+ std::vector<std::string> provides;
+ for (auto Prv = Ver.ProvidesList(); not Prv.end(); ++Prv)
{
- if (Prv.IsMultiArchImplicit() == true)
+ if (Prv.IsMultiArchImplicit())
continue;
- if (provides.empty() == false)
- provides.append(", ");
- provides.append(Prv.Name());
+ std::string provide = Prv.Name();
if (Prv->ProvideVersion != 0)
- provides.append(" (= ").append(Prv.ProvideVersion()).append(")");
+ provide.append(" (= ").append(Prv.ProvideVersion()).append(")");
+ if ((Ver->MultiArch & pkgCache::Version::Foreign) != 0 && std::find(provides.cbegin(), provides.cend(), provide) != provides.cend())
+ continue;
+ provides.emplace_back(std::move(provide));
+ }
+ if (not provides.empty())
+ {
+ std::ostringstream out;
+ std::copy(provides.begin(), provides.end() - 1, std::ostream_iterator<std::string>(out, ", "));
+ out << provides.back();
+ WriteOkay(Okay, output, "\nProvides: ", out.str());
}
- if (provides.empty() == false)
- WriteOkay(Okay, output, "\nProvides: ", provides);
return WriteOkay(Okay, output, "\n");
}
/*}}}*/
@@ -262,7 +270,7 @@ bool EDSP::WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress *Progres
for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false && likely(Okay); ++Pkg)
{
std::string const arch = Pkg.Arch();
- if (std::find(archs.begin(), archs.end(), arch) == archs.end())
+ if (Pkg->CurrentVer == 0 && std::find(archs.begin(), archs.end(), arch) == archs.end())
continue;
for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false && likely(Okay); ++Ver, ++p)
{
diff --git a/apt-pkg/tagfile-keys.list b/apt-pkg/tagfile-keys.list
index a979a404b..a16bc686a 100644
--- a/apt-pkg/tagfile-keys.list
+++ b/apt-pkg/tagfile-keys.list
@@ -48,6 +48,7 @@ Package-Revision
Package-Type
Pre-Depends
Priority
+Protected
Provides
Recommended
Recommends
diff --git a/apt-pkg/tagfile-order.c b/apt-pkg/tagfile-order.c
index 4c2068c00..bb199b32e 100644
--- a/apt-pkg/tagfile-order.c
+++ b/apt-pkg/tagfile-order.c
@@ -11,7 +11,7 @@ static const char *iTFRewritePackageOrder[] = {
"Architecture",
"Subarchitecture", // Used only by d-i
"Version",
- "Revision", // Obsolete (warning in dpkg)
+ "Revision", // Obsolete (warning in dpkg)
"Package-Revision", // Obsolete (warning in dpkg)
"Package_Revision", // Obsolete (warning in dpkg)
"Kernel-Version", // Used only by d-i
@@ -23,6 +23,7 @@ static const char *iTFRewritePackageOrder[] = {
"Priority",
"Class", // dpkg nickname for Priority
"Build-Essential",
+ "Protected",
"Essential",
"Installer-Menu-Item", // Used only by d-i
"Section",
diff --git a/apt-private/private-update.cc b/apt-private/private-update.cc
index 248f1f36e..affae655d 100644
--- a/apt-private/private-update.cc
+++ b/apt-private/private-update.cc
@@ -110,7 +110,7 @@ bool DoUpdate(CommandLine &CmdL)
if (uri.User.empty() && uri.Password.empty())
continue;
// we can't really predict if a +http method supports everything http does,
- // so we play it safe and use a whitelist here.
+ // so we play it safe and use an allowlist here.
char const *const affected[] = {"http", "https", "tor+http", "tor+https", "ftp"};
if (std::find(std::begin(affected), std::end(affected), uri.Access) != std::end(affected))
// TRANSLATOR: the first two are manpage references, the last the URI from a sources.list
diff --git a/cmdline/CMakeLists.txt b/cmdline/CMakeLists.txt
index d82239bee..91bf9bb0c 100644
--- a/cmdline/CMakeLists.txt
+++ b/cmdline/CMakeLists.txt
@@ -53,7 +53,7 @@ install(TARGETS apt-helper RUNTIME DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/apt/)
install(TARGETS apt-dump-solver apt-internal-solver RUNTIME DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/apt/solvers)
install(TARGETS apt-internal-planner RUNTIME DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/apt/planners)
-add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/planners ../solvers/dump planners/dump)
+add_links(${CMAKE_INSTALL_LIBEXECDIR}/apt/planners ../solvers/dump planners/dump)
# Install the not-to-be-compiled programs
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/apt-key DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/cmdline/apt-dump-solver.cc b/cmdline/apt-dump-solver.cc
index 24a9f23eb..ab44b9fd1 100644
--- a/cmdline/apt-dump-solver.cc
+++ b/cmdline/apt-dump-solver.cc
@@ -134,11 +134,10 @@ int main(int argc,const char *argv[]) /*{{{*/
return WriteError("ERR_READ_ERROR", out, stdoutfd, Solver);
}
- constexpr size_t BufSize = 64 * 1024;
- std::unique_ptr<char[]> Buf(new char[BufSize]);
+ std::unique_ptr<char[]> Buf(new char[APT_BUFFER_SIZE]);
unsigned long long ToRead = 0;
do {
- if (input.Read(Buf.get(),BufSize, &ToRead) == false)
+ if (input.Read(Buf.get(), APT_BUFFER_SIZE, &ToRead) == false)
{
std::ostringstream out;
out << "Writing EDSP solver input to file '" << filename << "' failed as reading from stdin failed!\n";
diff --git a/cmdline/apt-key.in b/cmdline/apt-key.in
index e9187b423..baf3df5c3 100644
--- a/cmdline/apt-key.in
+++ b/cmdline/apt-key.in
@@ -671,10 +671,10 @@ prepare_gpg_home() {
# well as the script hopefully uses apt-key optionally then like e.g.
# debian-archive-keyring for (upgrade) cleanup did
if [ -n "$DPKG_MAINTSCRIPT_PACKAGE" ] && [ -z "$APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE" ]; then
- if ! dpkg-query --show --showformat '${Pre-Depends}${Depends}${Recommends}\n' "$DPKG_MAINTSCRIPT_PACKAGE" 2>/dev/null | grep -q gnupg; then
+ if ! dpkg-query --show --showformat '${Pre-Depends}${Depends}${Recommends}\n' "$DPKG_MAINTSCRIPT_PACKAGE" 2>/dev/null | grep -E -q 'gpg|gnupg'; then
cat >&2 <<EOF
Warning: The $DPKG_MAINTSCRIPT_NAME maintainerscript of the package $DPKG_MAINTSCRIPT_PACKAGE
-Warning: seems to use apt-key (provided by apt) without depending on gnupg or gnupg2.
+Warning: seems to use apt-key (provided by apt) without depending on gpg, gnupg, or gnupg2.
Warning: This will BREAK in the future and should be fixed by the package maintainer(s).
Note: Check first if apt-key functionality is needed at all - it probably isn't!
EOF
@@ -740,8 +740,18 @@ warn_on_script_usage() {
# (Maintainer) scripts should not be using apt-key
if [ -n "$DPKG_MAINTSCRIPT_PACKAGE" ]; then
echo >&2 "Warning: apt-key should not be used in scripts (called from $DPKG_MAINTSCRIPT_NAME maintainerscript of the package ${DPKG_MAINTSCRIPT_PACKAGE})"
- elif [ ! -t 1 ]; then
- echo >&2 "Warning: apt-key output should not be parsed (stdout is not a terminal)"
+ fi
+
+ echo >&2 "Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8))."
+}
+
+warn_outside_maintscript() {
+ # In del, we want to warn in interactive use, but not inside maintainer
+ # scripts, so as to give people a chance to migrate keyrings.
+ #
+ # FIXME: We should always warn starting in 2022.
+ if [ -z "$DPKG_MAINTSCRIPT_PACKAGE" ]; then
+ echo >&2 "Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8))."
fi
}
@@ -760,6 +770,7 @@ case "$command" in
;;
del|rm|remove)
# no script warning here as removing 'add' usage needs 'del' for cleanup
+ warn_outside_maintscript
requires_root
foreach_keyring_do 'remove_key_from_keyring' "$@"
aptkey_echo "OK"
@@ -772,6 +783,7 @@ case "$command" in
merge_back_changes
;;
net-update)
+ warn_on_script_usage
requires_root
setup_merged_keyring
net_update
diff --git a/debian/apt.postinst b/debian/apt.postinst
index 8d1cdb1b3..0c6b5db9c 100755
--- a/debian/apt.postinst
+++ b/debian/apt.postinst
@@ -60,7 +60,7 @@ case "$1" in
chmod -f 0640 /var/log/apt/term.log* || true
fi
- # create kernel autoremoval blacklist on update
+ # create kernel autoremoval denylist on update
if dpkg --compare-versions "$2" lt 0.9.9.3; then
/etc/kernel/postinst.d/apt-auto-removal
fi
diff --git a/debian/changelog b/debian/changelog
index 4f4e835d6..bf2335543 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,33 @@
+apt (2.1.7) unstable; urgency=medium
+
+ [ David Kalnischkies ]
+ * Do not hardcode (wrong) group and mode in setup warning (Closes: #962310)
+ * Do not sent our filename-provides trick to EDSP solvers (Closes: #962741)
+ * Tell EDSP solvers about all installed pkgs ignoring arch
+ * Deduplicate EDSP Provides line of M-A:foreign packages
+ * Delay removals due to Conflicts until Depends are resolved
+ * Filter out impossible solutions for protected propagation
+ * Add dependency points in the resolver also to providers
+ * Reorder config check before checking systemd for non-interactive http
+ * Reorder config check before result looping for SRV parsing debug
+ * Fix test due to display change in ls (coreutils 8.32)
+ * Detect pkg-config-dpkghook failure in tests to avoid fallback (Closes: #964475)
+
+ [ Américo Monteiro ]
+ * Portuguese manpages translation update (Closes: #962483)
+
+ [ Julian Andres Klode ]
+ * Replace some magic 64*1024 with APT_BUFFER_SIZE
+ * Add basic support for the Protected field
+
+ [ Sergio Oller Moreno ]
+ * Minor Catalan grammar typo
+
+ [ Frans Spiesschaert ]
+ * Dutch program translation update (Closes: #963008)
+
+ -- Julian Andres Klode <jak@debian.org> Wed, 08 Jul 2020 09:38:35 +0200
+
apt (2.1.6) unstable; urgency=medium
[ David Kalnischkies ]
@@ -964,7 +994,7 @@ apt (1.6~alpha3) unstable; urgency=medium
apt (1.6~alpha2) unstable; urgency=medium
- * seccomp: Conditionalize statx() whitelisting
+ * seccomp: Conditionalize statx() allowlisting
* CMake: methods: Cleanup link libraries, use OBJECT libraries
* methods: Enable additional syscalls (SYSV IPC) in fakeroot (Closes: #879662)
* Don't segfault if receiving a method warning on empty queue
@@ -1333,7 +1363,7 @@ apt (1.4~rc1) unstable; urgency=medium
* make the moo reproducible.
Thanks to Chris Lamb for initial patch and guru meditation (Closes: #848721)
* update release mappings in documentation
- * avoid malloc if option whitelist is disabled (default)
+ * avoid malloc if option allowlist is disabled (default)
[ Julian Andres Klode ]
* basehttp: Only read Content-Range on 416 and 206 responses (LP: #1657567)
@@ -1383,7 +1413,7 @@ apt (1.4~beta3) unstable; urgency=medium
Thanks to Kristian Glass for initial patch! (Closes: #709092)
* separating state variables regarding server/request (Closes: #440057)
* fix minimum pkgs option for dpkg --recursive usage
- * allow warning generation for non-whitelisted options
+ * allow warning generation for non-allowlisted options
[ Oriol Debian ]
* Catalan program translation update (Closes: #846514)
@@ -4280,7 +4310,7 @@ apt (0.9.9.3) unstable; urgency=low
[ Ben Hutchings ]
* debian/apt.auto-removal.sh:
- do not include debug symbol packages for the kernel in the
- blacklist (closes: #717616)
+ denylist (closes: #717616)
[ Michael Vogt ]
* debian/apt.postinst:
@@ -6597,7 +6627,7 @@ apt (0.8.11) unstable; urgency=low
* methods/{gzip,bzip}.cc:
- print a good error message if FileSize() is zero
* apt-pkg/aptconfiguration.cc:
- - remove the inbuilt Translation files whitelist
+ - remove the inbuilt Translation files allowlist
* cmdline/apt-cache.cc:
- remove not implemented 'apt-cache add' command
* doc/apt-cache.8.xml:
diff --git a/doc/apt-key.8.xml b/doc/apt-key.8.xml
index 1ab4d784e..2c8c3f655 100644
--- a/doc/apt-key.8.xml
+++ b/doc/apt-key.8.xml
@@ -25,7 +25,7 @@
<!-- Man page title -->
<refnamediv>
<refname>apt-key</refname>
- <refpurpose>APT key management utility</refpurpose>
+ <refpurpose>Deprecated APT key management utility</refpurpose>
</refnamediv>
&synopsis-command-apt-key;
@@ -37,13 +37,15 @@
authenticated using these keys will be considered trusted.
</para>
<para>
- Note that if usage of <command>apt-key</command> is desired the additional
+ Use of <command>apt-key</command> is deprecated, except for the use of
+ <command>apt-key del</command> in maintainer scripts to remove existing
+ keys from the main keyring.
+ If such usage of <command>apt-key</command> is desired the additional
installation of the GNU Privacy Guard suite (packaged in
- <package>gnupg</package>) is required. For this reason alone the programmatic
- usage (especially in package maintainer scripts!) is strongly discouraged.
- Further more the output format of all commands is undefined and can and does
- change whenever the underlying commands change. <command>apt-key</command> will
- try to detect such usage and generates warnings on stderr in these cases.
+ <package>gnupg</package>) is required.
+ </para>
+ <para>
+ apt-key(8) will last be available in Debian 11 and Ubuntu 22.04.
</para>
</refsect1>
@@ -63,7 +65,7 @@
<refsect1><title>Commands</title>
<variablelist>
- <varlistentry><term><option>add</option> <option>&synopsis-param-filename;</option></term>
+ <varlistentry><term><option>add</option> <option>&synopsis-param-filename;</option> (deprecated)</term>
<listitem>
<para>
Add a new key to the list of trusted keys.
@@ -85,7 +87,7 @@
</listitem>
</varlistentry>
- <varlistentry><term><option>del</option> <option>&synopsis-param-keyid;</option></term>
+ <varlistentry><term><option>del</option> <option>&synopsis-param-keyid;</option> (mostly deprecated)</term>
<listitem>
<para>
@@ -96,7 +98,7 @@
</listitem>
</varlistentry>
- <varlistentry><term><option>export</option> <option>&synopsis-param-keyid;</option></term>
+ <varlistentry><term><option>export</option> <option>&synopsis-param-keyid;</option> (deprecated)</term>
<listitem>
<para>
@@ -107,7 +109,7 @@
</listitem>
</varlistentry>
- <varlistentry><term><option>exportall</option></term>
+ <varlistentry><term><option>exportall</option> (deprecated)</term>
<listitem>
<para>
@@ -118,7 +120,7 @@
</listitem>
</varlistentry>
- <varlistentry><term><option>list</option>, <option>finger</option></term>
+ <varlistentry><term><option>list</option>, <option>finger</option> (deprecated)</term>
<listitem>
<para>
@@ -129,7 +131,7 @@
</listitem>
</varlistentry>
- <varlistentry><term><option>adv</option></term>
+ <varlistentry><term><option>adv</option> (deprecated)</term>
<listitem>
<para>
Pass advanced options to gpg. With <command>adv --recv-key</command> you
@@ -160,7 +162,7 @@
</listitem>
</varlistentry>
- <varlistentry><term><option>net-update</option></term>
+ <varlistentry><term><option>net-update</option> (deprecated)</term>
<listitem>
<para>
@@ -183,7 +185,7 @@
<refsect1><title>Options</title>
<para>Note that options need to be defined before the commands described in the previous section.</para>
<variablelist>
- <varlistentry><term><option>--keyring</option> <option>&synopsis-param-filename;</option></term>
+ <varlistentry><term><option>--keyring</option> <option>&synopsis-param-filename;</option> (deprecated)</term>
<listitem><para>With this option it is possible to specify a particular 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
diff --git a/doc/apt-verbatim.ent b/doc/apt-verbatim.ent
index 6a72016e6..c691d1de8 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.1.6">
+<!ENTITY apt-product-version "2.1.7">
<!-- (Code)names for various things used all over the place -->
<!ENTITY debian-oldstable-codename "stretch">
diff --git a/doc/examples/configure-index b/doc/examples/configure-index
index 9e02f0b13..d9f269344 100644
--- a/doc/examples/configure-index
+++ b/doc/examples/configure-index
@@ -559,6 +559,7 @@ Debug
pkgCacheGen
{
Essential "<STRING>"; // native,all, none, installed
+ Protected "<STRING>"; // native,all, none, installed
ForceEssential "<STRING_OR_LIST>"; // package names
ForceImportant "<LIST>"; // package names
};
diff --git a/doc/po/apt-doc.pot b/doc/po/apt-doc.pot
index e69b006fe..f0bf7bdf1 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.1.6\n"
+"Project-Id-Version: apt-doc 2.1.7\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2020-06-03 18:25+0200\n"
+"POT-Creation-Date: 2020-07-08 09:40+0200\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"
diff --git a/doc/po/pt.po b/doc/po/pt.po
index 8bf531370..1d30c9b31 100644
--- a/doc/po/pt.po
+++ b/doc/po/pt.po
@@ -2,13 +2,13 @@
# Copyright (C) 2009 Free Software Foundation, Inc.
# This file is distributed under the same license as the apt package.
#
-# Américo Monteiro <a_monteiro@gmx.com>, 2014 - 2017, 2019.
+# Américo Monteiro <a_monteiro@gmx.com>, 2014 - 2020.
msgid ""
msgstr ""
-"Project-Id-Version: apt 1.8.0\n"
+"Project-Id-Version: apt 2.1.6\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2020-02-26 21:29+0100\n"
-"PO-Revision-Date: 2019-04-07 22:02+0000\n"
+"POT-Creation-Date: 2020-06-14 10:17+0200\n"
+"PO-Revision-Date: 2020-06-08 17:06+0000\n"
"Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n"
"Language-Team: Portuguese <>\n"
"Language: pt\n"
@@ -460,7 +460,7 @@ msgid ""
msgstr ""
"<!-- TRANSLATOR: This is the section header for the following paragraphs - comparable\n"
" to the other headers like NAME and DESCRIPTION and should therefore be uppercase. -->\n"
-"<!ENTITY translation-title \"TRADUÇÂO\">\n"
+"<!ENTITY translation-title \"TRADUÇÃO\">\n"
#. type: Plain text
#: apt.ent
@@ -774,8 +774,8 @@ msgstr ","
msgid ""
"Performs the requested action on one or more packages specified via &regex;, "
"&glob; or exact match. The requested action can be overridden for specific "
-"packages by appending a plus (+) to the package name to install this package or "
-"a minus (-) to remove it."
+"packages by appending a plus (+) to the package name to install this package "
+"or a minus (-) to remove it."
msgstr ""
"Executa a acção requisitada em um ou mais pacotes especificados via &regex;, "
"&glob; ou por correspondência exacta. A acção requisitada pode ser "
@@ -793,12 +793,12 @@ msgid ""
"testing, unstable). This will also select versions from this release for "
"dependencies of this package if needed to satisfy the request."
msgstr ""
-"Pode ser seleccionada para instalação uma versão específica de um pacote ao "
+"Pode ser selecionada para instalação uma versão específica de um pacote ao "
"adicionar ao nome do pacote o símbolo igual (=) e a versão do pacote a "
-"seleccionar. Alternativamente a versão de um lançamento específico pode ser "
-"seleccionada ao adicionar ao nome do pacote uma barra de divisão (/) e o "
-"nome de código (&debian-stable-codename;, &debian-testing-codename;, sid …) "
-"ou o nome de suite (stable, testing, unstable). Isto irá também seleccionar "
+"selecionar. Alternativamente a versão de um lançamento específico pode ser "
+"selecionada ao adicionar ao nome do pacote uma barra de divisão (/) e o nome "
+"de código (&debian-stable-codename;, &debian-testing-codename;, sid …) ou o "
+"nome de suite (stable, testing, unstable). Isto irá também selecionar "
"versões a partir deste lançamento para as dependências deste pacote se "
"necessário para satisfazer o pedido."
@@ -857,6 +857,9 @@ msgid ""
"Depends. It also handles conflicts, by prefixing an argument with <literal>"
"\"Conflicts: \"</literal>."
msgstr ""
+"<option>satisfy</option> satisfaz strings de dependências, como usado em "
+"Build-Depends. Também lida com conflitos, ao prefixar um argumento com "
+"<literal>\"Conflicts: \"</literal>."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt.8.xml
@@ -864,6 +867,8 @@ msgid ""
"Example: <literal>apt satisfy \"foo, bar (>= 1.0)\" \"Conflicts: baz, fuzz"
"\"</literal>"
msgstr ""
+"Exemplo: <literal>apt satisfy \"foo, bar (>= 1.0)\" \"Conflicts: baz, fuzz"
+"\"</literal>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt.8.xml
@@ -1160,12 +1165,12 @@ msgid ""
"package name with a slash and the version of the distribution or the Archive "
"name (stable, testing, unstable)."
msgstr ""
-"Pode ser seleccionada para instalação uma versão específica de um pacote ao "
+"Pode ser selecionada para instalação uma versão específica de um pacote ao "
"continuar o nome do pacote com um igual (=) e a versão do pacote a "
-"seleccionar. Isto irá fazer com que essa versão seja localizada e "
-"seleccionada para instalação. Alternativamente pode ser seleccionada uma "
-"distribuição específica ao continuar o nome do pacote com uma slash (/) e a "
-"versão da distribuição ou o nome de Arquivo (stable, testing, unstable)."
+"selecionar. Isto irá fazer com que essa versão seja localizada e selecionada "
+"para instalação. Alternativamente pode ser selecionada uma distribuição "
+"específica ao continuar o nome do pacote com uma slash (/) e a versão da "
+"distribuição ou o nome de Arquivo (stable, testing, unstable)."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-get.8.xml
@@ -1231,6 +1236,9 @@ msgid ""
"in &apt;, except for anchored expressions, and will be removed from &apt-"
"get; in a future version. Use &apt-patterns; instead."
msgstr ""
+"O cair (fallback) para expressões regulares está descontinuado no APT 2.0, "
+"foi removido no &apt;, excepto para expressões ancoradas, irá ser removido "
+"do &apt-get; numa versão futura. Use &apt-patterns; em vez disto."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-get.8.xml
@@ -1384,6 +1392,12 @@ msgid ""
"with <literal>\"Conflicts: \"</literal> to unsatisfy the dependency string. "
"Multiple strings of the same type can be specified."
msgstr ""
+"<literal>satisfy</literal> faz o apt-get satisfazer as strings de "
+"dependências fornecidas. As strings de dependências podem ter perfiles de "
+"compilação e listas de restrição de arquitecturas como dependem de "
+"compilação. Podem opcionalmente ser prefixadas com <literal>\"Conflicts: \"</"
+"literal> para satisfazer a string de dependência. Podem ser especificadas "
+"várias strings do mesmo tipo."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-get.8.xml
@@ -1391,12 +1405,16 @@ msgid ""
"Example: <literal>apt-get satisfy \"foo\" \"Conflicts: bar\" \"baz (&gt;&gt; "
"1.0) | bar (= 2.0), moo\"</literal>"
msgstr ""
+"Exemplo: <literal>apt-get satisfy \"foo\" \"Conflicts: bar\" \"baz (&gt;&gt; "
+"1.0) | bar (= 2.0), moo\"</literal>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-get.8.xml
msgid ""
"The legacy operator '&lt;/&gt;' is not supported, use '&lt;=/&gt;=' instead."
msgstr ""
+"O operador antigo '&lt;/&gt;' não é suportado, use '&lt;=/&gt;=' em vez "
+"disto."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-get.8.xml
@@ -1584,7 +1602,7 @@ msgstr ""
"verificação de integridade após obtenção (ficheiros de pacotes corrompidos), "
"retêm esses pacotes e manuseia o resultado. Usar esta opção em conjunto com "
"<option>-f</option> pode produzir erros em algumas situações. Se um pacote "
-"for seleccionado para instalação (particularmente se for mencionado na linha "
+"for selecionado para instalação (particularmente se for mencionado na linha "
"de comandos) e não pode ser descarregado estão será segurado em silêncio. "
"Item de Configuração: <literal>APT::Get::Fix-Missing</literal>."
@@ -1732,7 +1750,7 @@ msgstr ""
"fonte é compilado por <command>apt-get source --compile</command> e como as "
"dependências de compilação são satisfeitas. Por predefinição, nenhum perfil "
"de compilação está activo. Podem ser activados ao mesmo tempo mais do que um "
-"perfil de compilação ao concatená-los com uma vírgula. Item de configuração: "
+"perfil de compilação ao concatena-los com uma vírgula. Item de configuração: "
"<literal>APT::Build-Profiles</literal>."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
@@ -1812,7 +1830,7 @@ msgid ""
msgstr ""
"Esta é uma opção perigosa que irá fazer com que o apt continue sem avisar "
"quando está a instalar versões anteriores (downgrades) Não deve ser usado "
-"excepto em situações muito especiais. Usá-lo pode potencialmente destruir o "
+"excepto em situações muito especiais. Usa-lo pode potencialmente destruir o "
"seu sistema! Item de Configuração: <literal>APT::Get::allow-downgrades</"
"literal>. introduzido no APT 1.1."
@@ -1827,7 +1845,7 @@ msgid ""
msgstr ""
"Força o sim; Esta é uma opção perigosa que irá fazer com que o apt continue "
"sem avisar quando está a remover coisas essenciais. Não deve ser usado "
-"excepto em situações muito especiais. Usá-lo pode potencialmente destruir o "
+"excepto em situações muito especiais. Usa-lo pode potencialmente destruir o "
"seu sistema! Item de Configuração: <literal>APT::Get::allow-remove-"
"essential</literal>. Introduzido no APT 1.1."
@@ -1842,7 +1860,7 @@ msgid ""
msgstr ""
"Força o sim; Esta é uma opção perigosa que irá fazer com que o apt continue "
"sem avisar se estiver a alterar pacotes segurados. Não deve ser usado "
-"excepto em situações muito especiais. Usá-lo pode destruir potencialmente o "
+"excepto em situações muito especiais. Usa-lo pode destruir potencialmente o "
"seu sistema! Item de Configuração: <literal>APT::Get::allow-change-held-"
"packages</literal>. Introduzido em APT 1.1."
@@ -2611,8 +2629,8 @@ msgid ""
"cache used by all operations. Configuration Item: <literal>Dir::Cache::"
"pkgcache</literal>."
msgstr ""
-"Selecciona o ficheiro para armazenar a cache do pacote. A cache do pacote é "
-"a cache principal usada por todas as operações. Item de Configuração: "
+"Seleciona o ficheiro para armazenar a cache do pacote. A cache do pacote é a "
+"cache principal usada por todas as operações. Item de Configuração: "
"<literal>Dir::Cache::pkgcache</literal>."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
@@ -2624,8 +2642,8 @@ msgid ""
"cache is used to avoid reparsing all of the package files. Configuration "
"Item: <literal>Dir::Cache::srcpkgcache</literal>."
msgstr ""
-"Selecciona o ficheiro para armazenar a cache de fonte. A fonte é usada "
-"apenas pelo <literal>gencaches</literal> e armazena uma versão analisada da "
+"Seleciona o ficheiro para armazenar a cache de fonte. A fonte é usada apenas "
+"pelo <literal>gencaches</literal> e armazena uma versão analisada da "
"informação do pacote a partir de fontes remotas. Ao construir a cache de "
"pacote é usada a cache fonte para evitar reanalisar todos os ficheiros do "
"pacote. Item de Configuração: <literal>Dir::Cache::srcpkgcache</literal>."
@@ -2711,8 +2729,8 @@ msgstr ""
"Escreve registos completos para todas as versões disponíveis. Isto é a "
"predefinição; para a desligar, use <option>--no-all-versions</option>. Se "
"<option>--no-all-versions</option> for especificada, apenas a versão "
-"candidata será mostrada (aquela que seria seleccionada para instalação). "
-"Esta opção é aplicável apenas ao comando <literal>show</literal>. Item de "
+"candidata será mostrada (aquela que seria selecionada para instalação). Esta "
+"opção é aplicável apenas ao comando <literal>show</literal>. Item de "
"Configuração: <literal>APT::Cache::AllVersions</literal>."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
@@ -3466,7 +3484,7 @@ msgstr ""
"<literal>Ataques de rede \"man in the middle\"</literal>. Sem verificação de "
"assinatura, um agente malicioso pode introduzir-se ele próprio no processo "
"de descarga de pacotes e disponibilizar software malicioso seja ao controlar "
-"um elemento de rede (router, switch, etc.) ou ao redireccionar tráfego para "
+"um elemento de rede (router, switch, etc.) ou ao redirecionar tráfego para "
"um servidor impostor (através de ataques de fraude de ARP ou DNS)."
#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
@@ -5169,7 +5187,7 @@ msgid ""
"\"true\"."
msgstr ""
"Esta opção controla se o apt irá usar o registo do servidor DNS SRV como "
-"especificado em RFC 2782 para seleccionar um servidor alternativo a onde "
+"especificado em RFC 2782 para selecionar um servidor alternativo a onde "
"ligar: A predefinição é \"true\"."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
@@ -6111,7 +6129,7 @@ msgstr ""
"O ficheiro de preferências do APT <filename>/etc/apt/preferences</filename> "
"e os ficheiros fragmentados no directório <filename>/etc/apt/preferences.d/</"
"filename> podem ser usados para controlar quais as versões de pacotes irão "
-"ser seleccionadas para instalação."
+"ser selecionadas para instalação."
#. type: Content of: <refentry><refsect1><para>
#: apt_preferences.5.xml
@@ -6129,10 +6147,10 @@ msgstr ""
"ficheiro &sources-list; contém referências a mais do que uma distribuição "
"(por exemplo, <literal>stable</literal> e <literal>testing</literal>). O APT "
"atribui uma prioridade a cada versão que está disponível. Sujeito a "
-"constrangimentos de dependências, o <command>apt-get</command> selecciona a "
+"constrangimentos de dependências, o <command>apt-get</command> seleciona a "
"versão com a prioridade mais alta para instalação. As preferências do APT "
"sobrepõem as prioridades que o APT atribui às versões de pacotes por "
-"predefinição, assim dando controle ao utilizador sobre qual é seleccionado "
+"predefinição, assim dando controle ao utilizador sobre qual é selecionado "
"para instalação."
#. type: Content of: <refentry><refsect1><para>
@@ -6717,7 +6735,7 @@ msgstr ""
#. type: Content of: <refentry><refsect1><refsect2><title>
#: apt_preferences.5.xml
msgid "Pinning by source package"
-msgstr ""
+msgstr "Fixação pelo pacote de origem"
#. type: Content of: <refentry><refsect1><refsect2><para>
#: apt_preferences.5.xml
@@ -6725,6 +6743,8 @@ msgid ""
"APT supports pinning by source packages. To pin by a source package, prepend "
"\"src:\" to the package name."
msgstr ""
+"O APT suporta fixar pelo pacote fonte. Para fixar um pacote fonte, preceda "
+"\"src:\" ao nome do pacote."
#. type: Content of: <refentry><refsect1><refsect2><para>
#: apt_preferences.5.xml
@@ -6732,22 +6752,20 @@ msgid ""
"For example, to pin all binaries produced by the apt source package of this "
"APT's version to 990, you can do:"
msgstr ""
+"Por exemplo, para fixar todos os binários produzidos pelo pacote fonte do "
+"apt desta versão do APT para 990, você pode fazer:"
#. type: Content of: <refentry><refsect1><refsect2><programlisting>
#: apt_preferences.5.xml
-#, fuzzy, no-wrap
-#| msgid ""
-#| "Package: perl\n"
-#| "Pin: version &good-perl;*\n"
-#| "Pin-Priority: 1001\n"
+#, no-wrap
msgid ""
"Package: src:apt\n"
"Pin: version &apt-product-version;\n"
"Pin-Priority: 990\n"
msgstr ""
-"Package: perl\n"
-"Pin: version &good-perl;*\n"
-"Pin-Priority: 1001\n"
+"Package: src:apt\n"
+"Pin: version &apt-product-version;\n"
+"Pin-Priority: 990\n"
#. type: Content of: <refentry><refsect1><refsect2><para>
#: apt_preferences.5.xml
@@ -6755,6 +6773,8 @@ msgid ""
"Source package pinning can be combined with regular expressions and glob "
"patterns, and can also take a binary architecture."
msgstr ""
+"A fixação de pacote fonte pode ser combinada com expressões regulares e "
+"padrões glob, e também podem tomar uma arquitectura binária."
#. type: Content of: <refentry><refsect1><refsect2><para>
#: apt_preferences.5.xml
@@ -6762,22 +6782,20 @@ msgid ""
"For example, let's pin all binaries for all architectures produced by any "
"source package containing apt in its name to 990:"
msgstr ""
+"Por exemplo, vamos fixar todos os binários para todas as arquitecturas "
+"produzidas por qualquer pacote fonte que contenha apt no seu nome para 990:"
#. type: Content of: <refentry><refsect1><refsect2><programlisting>
#: apt_preferences.5.xml
-#, fuzzy, no-wrap
-#| msgid ""
-#| "Package: *\n"
-#| "Pin: origin \"\"\n"
-#| "Pin-Priority: 999\n"
+#, no-wrap
msgid ""
"Package: src:*apt*:any\n"
"Pin: version *\n"
"Pin-Priority: 990\n"
msgstr ""
-"Package: *\n"
-"Pin: origin \"\"\n"
-"Pin-Priority: 999\n"
+"Package: src:*apt*:any\n"
+"Pin: version *\n"
+"Pin-Priority: 990\n"
#. type: Content of: <refentry><refsect1><refsect2><title>
#: apt_preferences.5.xml
@@ -6980,7 +6998,7 @@ msgid ""
msgstr ""
"Uma versão de um pacote cuja origem não é o sistema local mas qualquer outro "
"site listado em &sources-list; e o qual pertence a uma distribuição "
-"<literal>unstable</literal> apenas é instalado se for seleccionado para "
+"<literal>unstable</literal> apenas é instalado se for selecionado para "
"instalação e se nenhuma versão do pacote já estiver instalada."
#. type: Content of: <refentry><refsect1><refsect2><title>
@@ -8131,14 +8149,14 @@ msgstr ""
"ficheiros de chaveiro (têm de estar acessíveis e legíveis para o utilizador "
"do sistema <literal>_apt</literal>, portanto assegure que todos têm "
"permissões de leitura ao ficheiro) e impressões digitais de chaves para "
-"seleccionar a partir destes chaveiros. Se não forem especificados nenhuns "
+"selecionar a partir destes chaveiros. Se não forem especificados nenhuns "
"ficheiros chaveiro, o predefinido é o chaveiro <filename>trusted.gpg</"
"filename> e todos os chaveiros no directório <filename>trusted.gpg.d/</"
"filename> (veja <command>apt-key fingerprint</command>). Se não for "
-"especificada nenhuma impressão digital, são seleccionadas todas as chaves "
-"nos chaveiros. Uma impressão digital irá também aceitar todas as assinaturas "
-"por uma sub-chave dessa chave. Se isto não for desejado pode ser adicionado "
-"um ponto de exclamação (<literal>!</literal>) à impressão digital para "
+"especificada nenhuma impressão digital, são selecionadas todas as chaves nos "
+"chaveiros. Uma impressão digital irá também aceitar todas as assinaturas por "
+"uma sub-chave dessa chave. Se isto não for desejado pode ser adicionado um "
+"ponto de exclamação (<literal>!</literal>) à impressão digital para "
"desactivar este comportamento. A opção usa por predefinição o valor da opção "
"com o mesmo nome se for definida no ficheiro <filename>Release</filename> "
"previamente adquirido deste repositório (apenas impressões digitais podem "
@@ -9775,7 +9793,7 @@ msgid ""
"command. Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
"literal>."
msgstr ""
-"Selecciona o ficheiro de sobreposição de fonte a usar com o comando "
+"Seleciona o ficheiro de sobreposição de fonte a usar com o comando "
"<literal>sources</literal>. Item de Configuração: <literal>APT::FTPArchive::"
"SourceOverride</literal>."
@@ -9925,17 +9943,14 @@ msgstr ""
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt_auth.conf.5.xml
-#, fuzzy
-#| msgid ""
-#| "<literal>machine</literal> <replaceable>hostname</replaceable>[:"
-#| "<replaceable>port</replaceable>][/<replaceable>path</replaceable>]"
msgid ""
"<literal>machine</literal> <replaceable>[protocol://]</"
"replaceable><replaceable>hostname</replaceable>[:<replaceable>port</"
"replaceable>][/<replaceable>path</replaceable>]"
msgstr ""
-"<literal>machine</literal> <replaceable>nome-de-máquina</replaceable>[:"
-"<replaceable>porto</replaceable>][/<replaceable>caminho</replaceable>]"
+"<literal>machine</literal> <replaceable>[protocolo://]</"
+"replaceable><replaceable>nome-de-máquina</replaceable>[:<replaceable>porto</"
+"replaceable>][/<replaceable>caminho</replaceable>]"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt_auth.conf.5.xml
@@ -9968,6 +9983,8 @@ msgstr ""
msgid ""
"If protocol is not specified, the entry only matches https and tor+https."
msgstr ""
+"Se o protocolo não for especificado, a entrada apenas coincide com https e "
+"tor+https."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt_auth.conf.5.xml
@@ -9996,17 +10013,15 @@ msgstr "Exemplo"
#. type: Content of: <refentry><refsect1><para><literallayout>
#: apt_auth.conf.5.xml
-#, fuzzy, no-wrap
-#| msgid "deb http://example.org/debian &debian-stable-codename; main"
+#, no-wrap
msgid "deb https://example.org/debian &debian-stable-codename; main"
-msgstr "deb http://example.org/debian &debian-stable-codename; main"
+msgstr "deb https://example.org/debian &debian-stable-codename; main"
#. type: Content of: <refentry><refsect1><para><literallayout>
#: apt_auth.conf.5.xml
-#, fuzzy, no-wrap
-#| msgid "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+#, no-wrap
msgid "deb https://apt:debian@example.org/debian &debian-stable-codename; main"
-msgstr "deb http://apt:debian@example.org/debian &debian-stable-codename; main"
+msgstr "deb https://apt:debian@example.org/debian &debian-stable-codename; main"
#. type: Content of: <refentry><refsect1><para><literallayout>
#: apt_auth.conf.5.xml
@@ -10040,13 +10055,7 @@ msgstr ""
#. type: Content of: <refentry><refsect1><para><literallayout>
#: apt_auth.conf.5.xml
-#, fuzzy, no-wrap
-#| msgid ""
-#| "machine example.org:80 login apt password debian\n"
-#| "machine example.org/deb/ login apt password debian\n"
-#| "machine example.org/ubuntu login apt password debian\n"
-#| "machine example.orga login apt password debian\n"
-#| "machine example.net login apt password debian\n"
+#, no-wrap
msgid ""
"machine example.org:443 login apt password debian\n"
"machine example.org/deb/ login apt password debian\n"
@@ -10054,7 +10063,7 @@ msgid ""
"machine example.orga login apt password debian\n"
"machine example.net login apt password debian\n"
msgstr ""
-"machine example.org:80 login apt password debian\n"
+"machine example.org:443 login apt password debian\n"
"machine example.org/deb/ login apt password debian\n"
"machine example.org/ubuntu login apt password debian\n"
"machine example.orga login apt password debian\n"
@@ -10117,6 +10126,11 @@ msgid ""
"only, or if the sources.list entry redirects elsewhere, login information "
"for the redirect destination can be supplied."
msgstr ""
+"As informações de Login em auth.conf são mais flexíveis que aquelas em "
+"sources.list. Por exemplo, a informação de login pode ser especificada para "
+"apenas partes de um repositório, ou se a entrada de sources.list "
+"redirecionar para outro lado, pode ser fornecida informação de login para o "
+"destino do redirecionamento."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt_auth.conf.5.xml
@@ -10389,7 +10403,7 @@ msgid ""
"follow redirects, which is enabled by default."
msgstr ""
"<literal>Acquire::http::AllowRedirect</literal> controla se o APT irá seguir "
-"os redireccionamentos, o que está activo por predefinição."
+"os redirecionamentos, o que está activo por predefinição."
#. type: Content of: <refentry><refsect1><refsect2><para>
#: apt-transport-http.1.xml
@@ -10709,7 +10723,7 @@ msgid ""
msgstr ""
"Este transporte do APT não está por si só a implementar um protocolo para "
"aceder a repositórios locais ou remotos, mas obtêm uma mirrorlist e "
-"redirecciona todos os pedidos para os mirro(s) retirados dessa lista, "
+"redireciona todos os pedidos para os mirro(s) retirados dessa lista, "
"acedendo a eles via outros transportes como &apt-transport-http;. A "
"funcionalidade básica esteve disponível desde o apt 0.7.24, mas não esteve "
"documentada até ao apt 1.6 o qual continha uma reconstrução do transporte e "
@@ -10823,7 +10837,7 @@ msgid ""
"literal>) and type of the file (<literal>type</literal>)."
msgstr ""
"Como especificado no formato, um mirror pode ter meta-dados adicionais "
-"acrescentados para impedir que um mirror seja seleccionado para obter um "
+"acrescentados para impedir que um mirror seja selecionado para obter um "
"ficheiro que não corresponda a esses meta-dados. Deste modo a mirrorlist "
"pode por exemplo conter mirrors parciais que servem apenas certas "
"arquitecturas e o APT irá automaticamente escolher um mirror diferente para "
@@ -11036,12 +11050,12 @@ msgstr ""
#. type: Content of: <refentry><refmeta><manvolnum>
#: apt-patterns.7.xml
msgid "7"
-msgstr ""
+msgstr "7"
#. type: Content of: <refentry><refnamediv><refpurpose>
#: apt-patterns.7.xml
msgid "Syntax and semantics of apt search patterns"
-msgstr ""
+msgstr "Sintaxe e semânticas dos padrões do apt search"
#. type: Content of: <refentry><refsect1><para>
#: apt-patterns.7.xml
@@ -11049,11 +11063,13 @@ msgid ""
"Starting with version 2.0, <command>APT</command> provides support for "
"patterns, which can be used to query the apt cache for packages."
msgstr ""
+"A partir da versão 2.0, o <command>APT</command> disponibiliza suporte para "
+"padrões, o que pode ser usado para pesquisar a cache do apt por pacotes."
#. type: Content of: <refentry><refsect1><title>
#: apt-patterns.7.xml
msgid "Logic patterns"
-msgstr ""
+msgstr "Padrões de lógica"
#. type: Content of: <refentry><refsect1><para>
#: apt-patterns.7.xml
@@ -11062,86 +11078,90 @@ msgid ""
"complex expressions, as well as <code>?true</code> and <code>?false</code> "
"patterns."
msgstr ""
+"Estes padrões fornecem os meios básicos para combinar outros padrões em "
+"expressões mais complexas, assim como padrões <code>?true</code> e <code>?"
+"false</code>."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?and(PATTERN, PATTERN, ...)</code>"
-msgstr ""
+msgstr "<code>?and(PATTERN, PATTERN, ...)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>PATTERN PATTERN ...</code>"
-msgstr ""
+msgstr "<code>PATTERN PATTERN ...</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects objects where all specified patterns match."
-msgstr ""
+msgstr "Seleciona objectos onde coincidem todos os padrões especificados."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?false</code>"
-msgstr ""
+msgstr "<code>?false</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~F</code>"
-msgstr ""
+msgstr "<code>~F</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects nothing."
-msgstr ""
+msgstr "Não seleciona nada."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?not(PATTERN)</code>"
-msgstr ""
+msgstr "<code>?not(PATTERN)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>!PATTERN</code>"
-msgstr ""
+msgstr "<code>!PATTERN</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects objects where PATTERN does not match."
-msgstr ""
+msgstr "Seleciona objectos onde PATTERN não coincide."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?or(PATTERN, PATTERN, ...)</code>"
-msgstr ""
+msgstr "<code>?or(PATTERN, PATTERN, ...)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>PATTERN | PATTERN | ...</code>"
-msgstr ""
+msgstr "<code>PATTERN | PATTERN | ...</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects objects where at least one of the specified patterns match."
msgstr ""
+"Seleciona objectos onde pelo menos um dos padrões especificados coincide."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?true</code>"
-msgstr ""
+msgstr "<code>?true</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~T</code>"
-msgstr ""
+msgstr "<code>~T</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects all objects."
-msgstr ""
+msgstr "Seleciona todos os objectos."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>(PATTERN)</code>"
-msgstr ""
+msgstr "<code>(PATTERN)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11149,16 +11169,18 @@ msgid ""
"Selects the same as <code>PATTERN</code>, can be used to work around "
"precedence, for example, <code>(~ramd64|~ri386)~nfoo</code>"
msgstr ""
+"Seleciona o mesmo que <code>PATTERN</code>, pode ser usado para contornar "
+"precedência, por exemplo, <code>(~ramd64|~ri386)~nfoo</code>"
#. type: Content of: <refentry><refsect1><title>
#: apt-patterns.7.xml
msgid "Narrowing patterns"
-msgstr ""
+msgstr "Estreitar padrões"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?all-versions(PATTERN)</code>"
-msgstr ""
+msgstr "<code>?all-versions(PATTERN)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11166,16 +11188,18 @@ msgid ""
"Selects packages where all versions match PATTERN. When matching versions "
"instead, same as PATTERN."
msgstr ""
+"Seleciona pacotes onde todas as versões coincidem com PATTERN. Quando em vez "
+"disso coincide versões, o mesmo que PATTERN."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?any-version(PATTERN)</code>"
-msgstr ""
+msgstr "<code>?any-version(PATTERN)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects any version where the pattern matches on the version."
-msgstr ""
+msgstr "Seleciona qualquer versão onde o padrão coincide com a versão."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11185,11 +11209,15 @@ msgid ""
"<code>?any-version(?and(?version(1),?version(2)))</code> restricts the "
"<code>?and</code> to act on the same version."
msgstr ""
+"por exemplo, enquanto <code>?and(?version(1),?version(2))</code> corresponde "
+"a pacote que tem uma versão contendo 1 e uma versão contendo 2, <code>?any-"
+"version(?and(?version(1),?version(2)))</code> restringe o <code>?and</code> "
+"a actuar na mesma versão."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?narrow(PATTERN...)</code>"
-msgstr ""
+msgstr "<code>?narrow(PATTERN...)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11197,26 +11225,28 @@ msgid ""
"Selects any version matching all PATTERNs, short for <code>?any-version(?"
"and(PATTERN...))</code>."
msgstr ""
+"Seleciona qualquer versão que corresponda a todos os PATTERNs, abreviatura "
+"de <code>?any-version(?and(PATTERN...))</code>."
#. type: Content of: <refentry><refsect1><title>
#: apt-patterns.7.xml
msgid "Package patterns"
-msgstr ""
+msgstr "Padrões de pacotes"
#. type: Content of: <refentry><refsect1><para>
#: apt-patterns.7.xml
msgid "These patterns select specific packages."
-msgstr ""
+msgstr "Estes padrões selecionam pacotes específicos."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?architecture(WILDCARD)</code>"
-msgstr ""
+msgstr "<code>?architecture(WILDCARD)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~rWILDCARD</code>"
-msgstr ""
+msgstr "<code>~rWILDCARD</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11224,46 +11254,48 @@ msgid ""
"Selects packages matching the specified architecture, which may contain "
"wildcards using any."
msgstr ""
+"Seleciona pacotes que coincidam com a arquitectura especificada, a qual pode "
+"conter wildcards usando qualquer uma delas."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?automatic</code>"
-msgstr ""
+msgstr "<code>?automatic</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~M</code>"
-msgstr ""
+msgstr "<code>~M</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects packages that were installed automatically."
-msgstr ""
+msgstr "Seleciona pacotes que foram instalados automaticamente."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?broken</code>"
-msgstr ""
+msgstr "<code>?broken</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~b</code>"
-msgstr ""
+msgstr "<code>~b</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects packages that have broken dependencies."
-msgstr ""
+msgstr "Seleciona pacotes que têm dependências quebradas."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?config-files</code>"
-msgstr ""
+msgstr "<code>?config-files</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~c</code>"
-msgstr ""
+msgstr "<code>~c</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11271,116 +11303,122 @@ msgid ""
"Selects packages that are not fully installed, but have solely residual "
"configuration files left."
msgstr ""
+"Seleciona pacotes que não estão totalmente instalados, mas têm somente "
+"deixados ficheiros residuais de configuração."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?essential</code>"
-msgstr ""
+msgstr "<code>?essential</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~E</code>"
-msgstr ""
+msgstr "<code>~E</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects packages that have Essential: yes set in their control file."
msgstr ""
+"Seleciona pacotes que têm Essential: yes definido no seu ficheiro de "
+"controle."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?exact-name(NAME)</code>"
-msgstr ""
+msgstr "<code>?exact-name(NAME)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects packages with the exact specified name."
-msgstr ""
+msgstr "Seleciona pacotes com o nome exacto especificado."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?garbage</code>"
-msgstr ""
+msgstr "<code>?garbage</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~g</code>"
-msgstr ""
+msgstr "<code>~g</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects packages that can be removed automatically."
-msgstr ""
+msgstr "Seleciona pacotes que podem ser removidos automaticamente."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?installed</code>"
-msgstr ""
+msgstr "<code>?installed</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~i</code>"
-msgstr ""
+msgstr "<code>~i</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects packages that are currently installed."
-msgstr ""
+msgstr "Seleciona pacotes que estão presentemente instalados."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?name(REGEX)</code>"
-msgstr ""
+msgstr "<code>?name(REGEX)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~nREGEX</code>"
-msgstr ""
+msgstr "<code>~nREGEX</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects packages where the name matches the given regular expression."
msgstr ""
+"Seleciona pacotes onde o nome coincide com a expressão regular fornecida."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?obsolete</code>"
-msgstr ""
+msgstr "<code>?obsolete</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~o</code>"
-msgstr ""
+msgstr "<code>~o</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects packages that no longer exist in repositories."
-msgstr ""
+msgstr "Seleciona todos os pacotes que já não existem nos repositórios."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?upgradable</code>"
-msgstr ""
+msgstr "<code>?upgradable</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~U</code>"
-msgstr ""
+msgstr "<code>~U</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Selects packages that can be upgraded (have a newer candidate)."
msgstr ""
+"Seleciona pacotes que podem ser actualizados (têm um candidato mais recente)."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?virtual</code>"
-msgstr ""
+msgstr "<code>?virtual</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~v</code>"
-msgstr ""
+msgstr "<code>~v</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11389,28 +11427,29 @@ msgid ""
"exist when they are referenced somewhere in the archive, for example because "
"something depends on that name."
msgstr ""
+"Seleciona todos os pacotes virtuais; que são pacotes sem versão. Estes "
+"existem quando são referenciados algures no arquivo, por exemplo porque algo "
+"depende desse nome."
#. type: Content of: <refentry><refsect1><title>
#: apt-patterns.7.xml
-#, fuzzy
-#| msgid "Version &apt-product-version;"
msgid "Version patterns"
-msgstr "Versão &apt-product-version;"
+msgstr "Padrões de versão"
#. type: Content of: <refentry><refsect1><para>
#: apt-patterns.7.xml
msgid "These patterns select specific versions of a package."
-msgstr ""
+msgstr "Estes padrões selecionam versões específicas de um pacote."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?archive(REGEX)</code>"
-msgstr ""
+msgstr "<code>?archive(REGEX)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~AREGEX</code>"
-msgstr ""
+msgstr "<code>~AREGEX</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11419,16 +11458,19 @@ msgid ""
"regular expression. Archive, here, means the values after <code>a=</code> in "
"<command>apt-cache policy</command>."
msgstr ""
+"Seleciona versões que vêm do arquivo que correspondem à expressão regular "
+"fornecida. Archive, aqui, significa os valores após <code>a=</code> em "
+"<command>apt-cache policy</command>."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?origin(REGEX)</code>"
-msgstr ""
+msgstr "<code>?origin(REGEX)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~OREGEX</code>"
-msgstr ""
+msgstr "<code>~OREGEX</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11437,32 +11479,36 @@ msgid ""
"regular expression. Origin, here, means the values after <code>o=</code> in "
"<command>apt-cache policy</command>."
msgstr ""
+"Seleciona versões que vêm do arquivo que correspondem à expressão regular "
+"fornecida. Origin, aqui, significa os valores após <code>a=</code> em "
+"<command>apt-cache policy</command>."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?section(REGEX)</code>"
-msgstr ""
+msgstr "<code>?section(REGEX)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~sREGEX</code>"
-msgstr ""
+msgstr "<code>~sREGEX</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid ""
"Selects versions where the section matches the specified regular expression."
msgstr ""
+"Seleciona versões onde a secção coincide com a expressão regular fornecida."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?source-package(REGEX)</code>"
-msgstr ""
+msgstr "<code>?source-package(REGEX)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~eREGEX</code>"
-msgstr ""
+msgstr "<code>~eREGEX</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11470,11 +11516,13 @@ msgid ""
"Selects versions where the source package name matches the specified regular "
"expression."
msgstr ""
+"Seleciona versões onde o nome do pacote fonte coincide com a expressão "
+"regular fornecida."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?source-version(REGEX)</code>"
-msgstr ""
+msgstr "<code>?source-version(REGEX)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11482,16 +11530,18 @@ msgid ""
"Selects versions where the source package version matches the specified "
"regular expression."
msgstr ""
+"Seleciona versões onde a versão do pacote fonte coincide com a expressão "
+"regular fornecida."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>?version(REGEX)</code>"
-msgstr ""
+msgstr "<code>?version(REGEX)</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>~VREGEX</code>"
-msgstr ""
+msgstr "<code>~VREGEX</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11499,11 +11549,13 @@ msgid ""
"Selects versions where the version string matches the specified regular "
"expression."
msgstr ""
+"Seleciona versões onde a string de versão coincide com a expressão regular "
+"fornecida."
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>apt remove ?garbage</code>"
-msgstr ""
+msgstr "<code>apt remove ?garbage</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11511,21 +11563,24 @@ msgid ""
"Remove all packages that are automatically installed and no longer needed - "
"same as apt autoremove"
msgstr ""
+"Remove todos os pacotes que foram instalados automaticamente e já não fazem "
+"falta - o mesmo que apt autoremove"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>apt purge ?config-files</code>"
-msgstr ""
+msgstr "<code>apt purge ?config-files</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
msgid "Purge all packages that only have configuration files left"
msgstr ""
+"Purga todos os pacotes que apenas têm ficheiros de configuração deixados"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
#: apt-patterns.7.xml
msgid "<code>apt list '~i !~M (~slibs|~sperl|~spython)'</code>"
-msgstr ""
+msgstr "<code>apt list '~i !~M (~slibs|~sperl|~spython)'</code>"
#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
#: apt-patterns.7.xml
@@ -11533,11 +11588,13 @@ msgid ""
"List all manually-installed packages in sections matching libs, perl, or "
"python."
msgstr ""
+"Lista todos os pacotes instalados manualmente em secções que correspondam a "
+"libs, perl, ou python."
#. type: Content of: <refentry><refsect1><title>
#: apt-patterns.7.xml
msgid "Migrating from aptitude"
-msgstr ""
+msgstr "Migrar do aptitude"
#. type: Content of: <refentry><refsect1><para>
#: apt-patterns.7.xml
@@ -11545,6 +11602,8 @@ msgid ""
"Patterns in apt are heavily inspired by patterns in aptitude, but with some "
"tweaks:"
msgstr ""
+"Os padrões no apt são fortemente inspirados pelos padrões no aptitude, mas "
+"com alguns ajustes:"
#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
#: apt-patterns.7.xml
@@ -11552,6 +11611,8 @@ msgid ""
"Syntax is uniform: If there is an opening parenthesis after a term, it is "
"always assumed to be the beginning of an argument list."
msgstr ""
+"A sintaxe é uniforme: Se existir um abre-parênteses após um termo, será "
+"sempre assumido ao inicio de uma lista de argumentos. "
#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
#: apt-patterns.7.xml
@@ -11560,11 +11621,14 @@ msgid ""
"and(?foo,bar)\"</code> if foo does not take an argument. In APT, this will "
"cause an error."
msgstr ""
+"No aptitude, a forma de sintaxe <code>\"?foo(bar)\"</code> pode significar "
+"<code>\"?and(?foo,bar)\"</code> se foo não tiver um argumento. No APT, isto "
+"irá causar um erro."
#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
#: apt-patterns.7.xml
msgid "Not all patterns are supported."
-msgstr ""
+msgstr "Nem todos os padrões são suportados."
#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
#: apt-patterns.7.xml
@@ -11572,21 +11636,23 @@ msgid ""
"Some additional patterns are available, for example, for finding gstreamer "
"codecs."
msgstr ""
+"Estão disponíveis alguns padrões adicionais, por exemplo, para encontrar "
+"codecs do gstreamer."
#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
#: apt-patterns.7.xml
msgid "Escaping terms with <code>~</code> is not supported."
-msgstr ""
+msgstr "Escapar termos com <code>~</code> não é suportado."
#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
#: apt-patterns.7.xml
msgid "A trailing comma is allowed in argument lists"
-msgstr ""
+msgstr "Uma vírgula final é permitida em listas de argumentos"
#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
#: apt-patterns.7.xml
msgid "?narrow accepts infinite arguments"
-msgstr ""
+msgstr "?narrow aceita argumentos infinitos"
#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
#: apt-patterns.7.xml
@@ -11597,6 +11663,11 @@ msgid ""
"priority, but if you do not type the <code>~</code>, it would require the "
"package name to contain <code>poptional</code>."
msgstr ""
+"<code>foo</code> não pode ser usado como abreviatura para <code>?name(foo)</"
+"code>, pois isto pode fazer com que erros de escrita passem despercebidos: "
+"Considere <code>?and(...,~poptional)</code>: isto requer que um pacote tenha "
+"prioridade <code>required</code>, mas se você não escrever o <code>~</code>, "
+"irá requerer que o nome do pacote contenha <code>poptional</code>."
#. type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
#: apt-patterns.7.xml
@@ -11605,13 +11676,14 @@ msgid ""
"as <code>A|B</code> are not supported. We do not believe that the use of "
"<code>|</code> is that common, and the grouping is not necessary without it."
msgstr ""
+"Agrupar padrões com <code>(...)</code> ou escrever <code>?or(A,B)</code> "
+"como <code>A|B</code> não é suportado. Não acreditamos que o uso de <code>|</"
+"code> seja tão comum, e o agrupar não seja necessário sem ele."
#. type: Content of: <refentry><refsect1><para>
#: apt-patterns.7.xml
-#, fuzzy
-#| msgid "&apt-get;, &apt-conf;"
msgid "&apt-get;, &apt;"
-msgstr "&apt-get;, &apt-conf;"
+msgstr "&apt-get;, &apt;"
#. type: Attribute 'lang' of: <book>
#: guide.dbk offline.dbk
@@ -11811,7 +11883,7 @@ msgstr ""
"Em qualquer altura uma única dependência pode ser satisfeita por pacotes que "
"já estão instalados ou podem não estar. O APT tenta ajudar a resolver "
"problemas com dependências ao disponibilizar um número de algoritmos "
-"automáticos que ajudam a seleccionar os pacotes para instalação."
+"automáticos que ajudam a selecionar os pacotes para instalação."
#. type: Content of: <book><chapter><title>
#: guide.dbk
@@ -11920,11 +11992,11 @@ msgid ""
msgstr ""
"Install é usado para instalar pacotes pelo nome. O pacote é obtido "
"automaticamente e instalado. Isto pode ser útil se você já conhecer o nome "
-"do pacote a instalar e não quer ir para uma GUI para o seleccionar. Podem "
-"ser passados qualquer número de pacotes para instalar, todos eles serão "
-"obtidos. Install tenta automaticamente resolver problemas de dependências "
-"com os pacotes listados e irá escrever um sumário e pedir confirmação se "
-"algo mais que os seus argumentos serão alterados."
+"do pacote a instalar e não quer ir para uma GUI para o selecionar. Podem ser "
+"passados qualquer número de pacotes para instalar, todos eles serão obtidos. "
+"Install tenta automaticamente resolver problemas de dependências com os "
+"pacotes listados e irá escrever um sumário e pedir confirmação se algo mais "
+"que os seus argumentos serão alterados."
#. type: Content of: <book><chapter><variablelist><varlistentry><term>
#: guide.dbk
@@ -11998,7 +12070,7 @@ msgid ""
msgstr ""
"O método <command>dselect</command> do APT disponibiliza o sistema APT "
"completo com a GUI de selecção de pacotes <command>dselect</command>. O "
-"<command>dselect</command> é usado para seleccionar os pacotes a serem "
+"<command>dselect</command> é usado para selecionar os pacotes a serem "
"instalados ou removidos e o APT instala-os."
#. type: Content of: <book><chapter><para>
@@ -12014,7 +12086,7 @@ msgid ""
"have access to the latest bug fixes. APT will automatically use packages on "
"your CD-ROM before downloading from the Internet."
msgstr ""
-"Para activar o método APT você precisa de seleccionar [A]ccess no "
+"Para activar o método APT você precisa de selecionar [A]ccess no "
"<command>dselect</command> e depois escolher o método APT. Ser-lhe-à "
"perguntado por um conjunto de <emphasis>Sources</emphasis> que são os "
"lugares de onde obter os arquivos. Estes podem ser sites remotos da "
@@ -12146,7 +12218,7 @@ msgid ""
"<literal>apt-get update</literal> has been run before."
msgstr ""
"Antes de começar a usar o <command>dselect</command> é necessário actualizar "
-"a lista disponível ao seleccionar [U]pdate no menu. Isto é um super-conjunto "
+"a lista disponível ao selecionar [U]pdate no menu. Isto é um super-conjunto "
"do <literal>apt-get update</literal> que torna a informação obtida "
"disponível ao <command>dselect</command>. Deve ser executado o [U]pdate "
"mesmo que tenha sido feito <literal>apt-get update</literal> antes."
@@ -12964,7 +13036,7 @@ msgstr ""
"\n"
" Dir\n"
" {\n"
-" /* Usa o disco para informação de estado e redirecciona o ficheiro de estado a partir de\n"
+" /* Usa o disco para informação de estado e redireciona o ficheiro de estado a partir de\n"
" the /var/lib/dpkg default */\n"
" State \"/disc/\";\n"
" State::status \"status\";\n"
diff --git a/methods/CMakeLists.txt b/methods/CMakeLists.txt
index 8589484cf..d575382f7 100644
--- a/methods/CMakeLists.txt
+++ b/methods/CMakeLists.txt
@@ -27,8 +27,8 @@ target_link_libraries(ftp ${GNUTLS_LIBRARIES})
install(TARGETS file copy store gpgv cdrom http ftp rred rsh mirror
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/apt/methods)
-add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods mirror mirror+ftp mirror+http mirror+https mirror+file mirror+copy)
-add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods rsh ssh)
+add_links(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods mirror mirror+ftp mirror+http mirror+https mirror+file mirror+copy)
+add_links(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods rsh ssh)
-add_slaves(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods http https)
+add_links(${CMAKE_INSTALL_LIBEXECDIR}/apt/methods http https)
diff --git a/methods/gpgv.cc b/methods/gpgv.cc
index 1ca62557c..5597e7cff 100644
--- a/methods/gpgv.cc
+++ b/methods/gpgv.cc
@@ -307,13 +307,13 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
}
else if (exactKey == false)
{
- auto const master = SubKeyMapping.find(l);
- if (master == SubKeyMapping.end())
+ auto const primary = SubKeyMapping.find(l);
+ if (primary == SubKeyMapping.end())
continue;
- auto const validsubkeysig = std::find_if(master->second.cbegin(), master->second.cend(), [&](auto const subkey) {
+ auto const validsubkeysig = std::find_if(primary->second.cbegin(), primary->second.cend(), [&](auto const subkey) {
return IsTheSameKey(subkey, good) && std::find(Signers.Valid.cbegin(), Signers.Valid.cend(), subkey) != Signers.Valid.cend();
});
- if (validsubkeysig != master->second.cend())
+ if (validsubkeysig != primary->second.cend())
{
found = true;
Signers.SignedBy.push_back(l);
diff --git a/methods/http.cc b/methods/http.cc
index 71aa56751..9cfc91330 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -23,6 +23,7 @@
#include <apt-pkg/fileutl.h>
#include <apt-pkg/hashes.h>
#include <apt-pkg/proxy.h>
+#include <apt-pkg/string_view.h>
#include <apt-pkg/strutl.h>
#include <chrono>
@@ -93,6 +94,7 @@ void CircleBuf::Reset()
is non-blocking.. */
bool CircleBuf::Read(std::unique_ptr<MethodFd> const &Fd)
{
+ size_t ReadThisCycle = 0;
while (1)
{
// Woops, buffer is full
@@ -130,7 +132,7 @@ bool CircleBuf::Read(std::unique_ptr<MethodFd> const &Fd)
CircleBuf::BwTickReadData += Res;
if (Res == 0)
- return false;
+ return ReadThisCycle != 0;
if (Res < 0)
{
if (errno == EAGAIN)
@@ -139,6 +141,7 @@ bool CircleBuf::Read(std::unique_ptr<MethodFd> const &Fd)
}
InP += Res;
+ ReadThisCycle += Res;
}
}
/*}}}*/
@@ -203,8 +206,6 @@ bool CircleBuf::Write(std::unique_ptr<MethodFd> const &Fd)
ssize_t Res;
Res = Fd->Write(Buf + (OutP % Size), LeftWrite());
- if (Res == 0)
- return false;
if (Res < 0)
{
if (errno == EAGAIN)
@@ -214,7 +215,7 @@ bool CircleBuf::Write(std::unique_ptr<MethodFd> const &Fd)
}
TotalWriten += Res;
-
+
if (Hash != NULL)
Hash->Add(Buf + (OutP%Size),Res);
@@ -407,7 +408,7 @@ static ResultState UnwrapHTTPConnect(std::string Host, int Port, URI Proxy, std:
/*}}}*/
// HttpServerState::HttpServerState - Constructor /*{{{*/
-HttpServerState::HttpServerState(URI Srv,HttpMethod *Owner) : ServerState(Srv, Owner), In(Owner, 64*1024), Out(Owner, 4*1024)
+HttpServerState::HttpServerState(URI Srv, HttpMethod *Owner) : ServerState(Srv, Owner), In(Owner, APT_BUFFER_SIZE), Out(Owner, 4 * 1024)
{
TimeOut = Owner->ConfigFindI("Timeout", TimeOut);
ServerFd = MethodFd::FromFd(-1);
@@ -699,26 +700,18 @@ ResultState HttpServerState::Die(RequestState &Req)
{
unsigned int LErrno = errno;
+ Close();
+
// Dump the buffer to the file
if (Req.State == RequestState::Data)
{
- if (Req.File.IsOpen() == false)
- return ResultState::SUCCESSFUL;
// on GNU/kFreeBSD, apt dies on /dev/null because non-blocking
// can't be set
if (Req.File.Name() != "/dev/null")
SetNonBlock(Req.File.Fd(),false);
- while (In.WriteSpace() == true)
- {
- if (In.Write(MethodFd::FromFd(Req.File.Fd())) == false)
- {
- _error->Errno("write", _("Error writing to the file"));
- return ResultState::TRANSIENT_ERROR;
- }
-
- // Done
- if (In.IsLimit() == true)
- return ResultState::SUCCESSFUL;
+ if (In.WriteSpace()) {
+ _error->Error(_("Data left in buffer"));
+ return ResultState::TRANSIENT_ERROR;
}
}
@@ -726,7 +719,6 @@ ResultState HttpServerState::Die(RequestState &Req)
if (In.IsLimit() == false && Req.State != RequestState::Header &&
Persistent == true)
{
- Close();
if (LErrno == 0)
{
_error->Error(_("Error reading from server. Remote end closed connection"));
@@ -745,7 +737,6 @@ ResultState HttpServerState::Die(RequestState &Req)
return ResultState::TRANSIENT_ERROR;
// We may have got multiple responses back in one packet..
- Close();
return ResultState::SUCCESSFUL;
}
@@ -792,13 +783,11 @@ ResultState HttpServerState::Go(bool ToFile, RequestState &Req)
ToFile == false))
return ResultState::TRANSIENT_ERROR;
- // Handle server IO
- if (ServerFd->HasPending() && In.ReadSpace() == true)
- {
- errno = 0;
- if (In.Read(ServerFd) == false)
- return Die(Req);
- }
+ // Record if we have data pending to read in the server, so that we can
+ // skip the wait in select(). This can happen if data has already been
+ // read into a methodfd's buffer - the TCP queue might be empty at that
+ // point.
+ bool ServerPending = ServerFd->HasPending();
fd_set rfds,wfds;
FD_ZERO(&rfds);
@@ -830,7 +819,7 @@ ResultState HttpServerState::Go(bool ToFile, RequestState &Req)
// Select
struct timeval tv;
- tv.tv_sec = TimeOut;
+ tv.tv_sec = ServerPending ? 0 : TimeOut;
tv.tv_usec = 0;
int Res = 0;
if ((Res = select(MaxFd+1,&rfds,&wfds,0,&tv)) < 0)
@@ -841,27 +830,20 @@ ResultState HttpServerState::Go(bool ToFile, RequestState &Req)
return ResultState::TRANSIENT_ERROR;
}
- if (Res == 0)
+ if (Res == 0 && not ServerPending)
{
_error->Error(_("Connection timed out"));
- return Die(Req);
+ return ResultState::TRANSIENT_ERROR;
}
// Handle server IO
- if (ServerFd->Fd() != -1 && FD_ISSET(ServerFd->Fd(), &rfds))
+ if (ServerPending || (ServerFd->Fd() != -1 && FD_ISSET(ServerFd->Fd(), &rfds)))
{
errno = 0;
if (In.Read(ServerFd) == false)
return Die(Req);
}
- if (ServerFd->Fd() != -1 && FD_ISSET(ServerFd->Fd(), &wfds))
- {
- errno = 0;
- if (Out.Write(ServerFd) == false)
- return Die(Req);
- }
-
// Send data to the file
if (FileFD->Fd() != -1 && FD_ISSET(FileFD->Fd(), &wfds))
{
@@ -872,6 +854,13 @@ ResultState HttpServerState::Go(bool ToFile, RequestState &Req)
}
}
+ if (ServerFd->Fd() != -1 && FD_ISSET(ServerFd->Fd(), &wfds))
+ {
+ errno = 0;
+ if (Out.Write(ServerFd) == false)
+ return Die(Req);
+ }
+
if (Req.MaximumSize > 0 && Req.File.IsOpen() && Req.File.Failed() == false && Req.File.Tell() > Req.MaximumSize)
{
Owner->SetFailReason("MaximumSizeExceeded");
@@ -979,15 +968,18 @@ void HttpMethod::SendReq(FetchItem *Itm)
"Debian APT-HTTP/1.3 (" PACKAGE_VERSION ")");
#ifdef HAVE_SYSTEMD
- char *unit = nullptr;
- sd_pid_get_unit(getpid(), &unit);
- if (unit != nullptr && *unit != '\0' && not APT::String::Startswith(unit, "user@") // user@ _is_ interactive
- && unit != "packagekit.service"s // packagekit likely is interactive
- && unit != "dbus.service"s // aptdaemon and qapt don't have systemd services
- && ConfigFindB("User-Agent-Non-Interactive", false))
- Req << " non-interactive";
-
- free(unit);
+ if (ConfigFindB("User-Agent-Non-Interactive", false))
+ {
+ using APT::operator""_sv;
+ char *unit = nullptr;
+ sd_pid_get_unit(getpid(), &unit);
+ if (unit != nullptr && *unit != '\0' && not APT::String::Startswith(unit, "user@") // user@ _is_ interactive
+ && "packagekit.service"_sv != unit // packagekit likely is interactive
+ && "dbus.service"_sv != unit) // aptdaemon and qapt don't have systemd services
+ Req << " non-interactive";
+
+ free(unit);
+ }
#endif
Req << "\r\n";
diff --git a/po/apt-all.pot b/po/apt-all.pot
index 80273ad11..395e52cee 100644
--- a/po/apt-all.pot
+++ b/po/apt-all.pot
@@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: apt 2.1.6\n"
+"Project-Id-Version: apt 2.1.7\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2020-06-03 18:25+0200\n"
+"POT-Creation-Date: 2020-07-08 09:40+0200\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"
diff --git a/po/ca.po b/po/ca.po
index 202114da7..e2b08c70d 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -2094,7 +2094,7 @@ msgid_plural ""
msgstr[0] ""
"El paquet següent s'ha instal·lat automàticament i ja no serà necessari:"
msgstr[1] ""
-"El paquets següents s'han instal·lat automàticament i ja no serà necessaris:"
+"El paquets següents s'han instal·lat automàticament i ja no seran necessaris:"
#: apt-private/private-install.cc
#, c-format
diff --git a/po/nl.po b/po/nl.po
index f558f62a5..a5a2d7f1d 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -10,10 +10,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: apt 2.0.0\n"
+"Project-Id-Version: apt 2.1.4\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
"POT-Creation-Date: 2020-05-12 22:50+0200\n"
-"PO-Revision-Date: 2020-04-14 11:09+0200\n"
+"PO-Revision-Date: 2020-05-24 14:43+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"
@@ -566,11 +566,11 @@ msgstr "Ongeldige archiefondertekening"
#: apt-pkg/contrib/arfile.cc
msgid "Error reading archive member header"
-msgstr "Fout bij het lezen van de koptekst van het archiefonderdeel"
+msgstr "Fout bij het lezen van de header van het archiefonderdeel"
#: apt-pkg/contrib/arfile.cc
msgid "Invalid archive member header"
-msgstr "Ongeldige koptekst in archiefonderdeel"
+msgstr "Ongeldige header in archiefonderdeel"
#: apt-pkg/contrib/arfile.cc
msgid "Archive is too short"
@@ -578,7 +578,7 @@ msgstr "Archief is te kort"
#: apt-pkg/contrib/arfile.cc
msgid "Failed to read the archive headers"
-msgstr "Lezen van de archiefkopteksten is mislukt"
+msgstr "Lezen van de archiefheaders is mislukt"
#: apt-pkg/contrib/cdromutl.cc
#, c-format
@@ -711,10 +711,9 @@ msgid "Tar checksum failed, archive corrupted"
msgstr "Tar-controlesom klopt niet, het archief is beschadigd"
#: apt-pkg/contrib/extracttar.cc
-#, fuzzy, c-format
-#| msgid "Unknown TAR header type %u, member %s"
+#, c-format
msgid "Unknown TAR header type %u"
-msgstr "Onbekend TAR-kopteksttype %u, onderdeel %s"
+msgstr "Onbekend TAR-headertype %u"
#: apt-pkg/contrib/fileutl.cc
#, c-format
@@ -1573,8 +1572,7 @@ msgstr ""
#: apt-pkg/policy.cc
#, c-format
msgid "Invalid record in the preferences file %s, no Package header"
-msgstr ""
-"Ongeldig record in het voorkeurenbestand %s, 'Package'-koptekst ontbreekt"
+msgstr "Ongeldig record in het voorkeurenbestand %s, geen 'Package'-header"
#: apt-pkg/policy.cc
#, c-format
@@ -3301,7 +3299,7 @@ msgstr "Bron-extensielijst is te lang"
#: ftparchive/apt-ftparchive.cc
msgid "Error writing header to contents file"
-msgstr "Fout bij het wegschrijven van de koptekst naar het inhoudsbestand"
+msgstr "Fout bij het wegschrijven van de header naar het inhoudsbestand"
#: ftparchive/apt-ftparchive.cc
#, c-format
@@ -3589,23 +3587,23 @@ msgstr " %s heeft ook geen voorrangsvermelding voor binaire pakketten\n"
#: methods/basehttp.cc
msgid "Waiting for headers"
-msgstr "Wachten op de kopteksten"
+msgstr "Wachten op de headers"
#: methods/basehttp.cc
msgid "The HTTP server sent an invalid reply header"
-msgstr "De HTTP-server verstuurde een ongeldige 'reply'-koptekst"
+msgstr "De HTTP-server verstuurde een ongeldige 'reply'-header"
#: methods/basehttp.cc
msgid "Bad header line"
-msgstr "Foute koptekstregel"
+msgstr "Foute header-regel"
#: methods/basehttp.cc
msgid "The HTTP server sent an invalid Content-Length header"
-msgstr "De HTTP-server verstuurde een ongeldige 'Content-Length'-koptekst"
+msgstr "De HTTP-server verstuurde een ongeldige header 'Content-Length'"
#: methods/basehttp.cc
msgid "The HTTP server sent an invalid Content-Range header"
-msgstr "De HTTP-server verstuurde een ongeldige 'Content-Range'-koptekst"
+msgstr "De HTTP-server verstuurde een ongeldige header 'Content-Range'"
#: methods/basehttp.cc
msgid "This HTTP server has broken range support"
@@ -3617,7 +3615,7 @@ msgstr "Onbekend datumformaat"
#: methods/basehttp.cc
msgid "Bad header data"
-msgstr "Foute koptekstdata"
+msgstr "Foute headerdata"
#: methods/basehttp.cc
msgid "Connection failed"
@@ -3989,6 +3987,3 @@ msgstr "Verbinding werd voortijdig afgebroken"
#: methods/store.cc
msgid "Empty files can't be valid archives"
msgstr "Lege bestanden kunnen geen geldige archieven zijn"
-
-#~ msgid "Invalid archive member header %s"
-#~ msgstr "Ongeldige koptekst voor archiefonderdeel %s"
diff --git a/test/integration/framework b/test/integration/framework
index 44dedb10b..e30fa066c 100644
--- a/test/integration/framework
+++ b/test/integration/framework
@@ -585,10 +585,14 @@ configdpkg() {
# the arch apt treats as native might be foreign for dpkg
for ARCH in ${ARCHS}; do
if [ "${ARCH}" != "${DPKGARCH}" ]; then
- if ! dpkg --add-architecture ${ARCH} >/dev/null 2>&1; then
- # old-style used e.g. in Ubuntu-P – and as it seems travis
- echo "DPKG::options:: \"--foreign-architecture\";" >> rootdir/etc/apt/apt.conf.d/00foreigndpkg
- echo "DPKG::options:: \"${ARCH}\";" >> rootdir/etc/apt/apt.conf.d/00foreigndpkg
+ if ! dpkg --add-architecture ${ARCH} >rootdir/tmp/dpkgaddarch.output 2>&1; then
+ if grep -q 'pkg-config-dpkghook' rootdir/tmp/dpkgaddarch.output; then
+ msgwarn 'Ignoring failure of dpkg --add-architecture as it is likely due to pkg-config-dpkghook (see #824774)'
+ else
+ # old-style used e.g. in Ubuntu-P – and as it seems travis
+ echo "DPKG::options:: \"--foreign-architecture\";" >> rootdir/etc/apt/apt.conf.d/00foreigndpkg
+ echo "DPKG::options:: \"${ARCH}\";" >> rootdir/etc/apt/apt.conf.d/00foreigndpkg
+ fi
fi
fi
done
diff --git a/test/integration/status-bug-lp1347721-dpkg-ordering b/test/integration/status-bug-lp1347721-dpkg-ordering
index 62e545c55..eaea10b2d 100644
--- a/test/integration/status-bug-lp1347721-dpkg-ordering
+++ b/test/integration/status-bug-lp1347721-dpkg-ordering
@@ -684,14 +684,14 @@ Depends: libc6 (>= 2.17), libkmod2, sysv-rc (>= 2.88dsf-24) | file-rc (>= 0.8.16
Breaks: module-init-tools (<< 4)
Conffiles:
/etc/init/kmod.conf 2686532745c8b71d6d3df91c3a53aef3
- /etc/modprobe.d/blacklist-framebuffer.conf 097e2142ae3e4dd2911eda7844ce0c18
- /etc/modprobe.d/blacklist-rare-network.conf 8fb4b96124e461f53adceba9ca91f09a
- /etc/modprobe.d/blacklist.conf bc6754fa320733c6d239a4bb0148ffd7
+ /etc/modprobe.d/denylist-framebuffer.conf 097e2142ae3e4dd2911eda7844ce0c18
+ /etc/modprobe.d/denylist-rare-network.conf 8fb4b96124e461f53adceba9ca91f09a
+ /etc/modprobe.d/denylist.conf bc6754fa320733c6d239a4bb0148ffd7
/etc/modprobe.d/iwlwifi.conf f27bc645e93e20c8e532325d190ac8ee
- /etc/modprobe.d/blacklist-ath_pci.conf d1da9bb08c2b0f56f3be93fd0e37946b
+ /etc/modprobe.d/denylist-ath_pci.conf d1da9bb08c2b0f56f3be93fd0e37946b
/etc/modprobe.d/mlx4.conf b2a0bedb7461daeb0138270639581bbf
- /etc/modprobe.d/blacklist-firewire.conf 9cc07a17e8e64f9cd35ff59c29debe69
- /etc/modprobe.d/blacklist-watchdog.conf 55327f9270c8a6257a833c4d127a39e1
+ /etc/modprobe.d/denylist-firewire.conf 9cc07a17e8e64f9cd35ff59c29debe69
+ /etc/modprobe.d/denylist-watchdog.conf 55327f9270c8a6257a833c4d127a39e1
/etc/init.d/kmod e6d43abead3714ceb8aca68dd77e1dad
/etc/depmod.d/ubuntu.conf 7c8439ef36b12e5f226b5dbfa20b8c2d
Description: tools for managing Linux kernel modules
@@ -1884,7 +1884,7 @@ Conffiles:
/etc/init/udev-finish.conf 5c953c5b98ccfbb2a02985bfa2f80aed
/etc/init/udev.conf 41c0081f3a830e0902aaff76a53edf98
/etc/init/udevmonitor.conf b541dfb5aa4958e9a5336ecaec00ca15
- /etc/modprobe.d/fbdev-blacklist.conf 01cd03c88ce6821c03baf904f7dfcbd0
+ /etc/modprobe.d/fbdev-denylist.conf 01cd03c88ce6821c03baf904f7dfcbd0
/etc/udev/rules.d/README 3b6de9f3f911176734c66903b4f8735c obsolete
Description: /dev/ and hotplug management daemon
udev is a daemon which dynamically creates and removes device nodes from
diff --git a/test/integration/status-ubuntu-bug-614993 b/test/integration/status-ubuntu-bug-614993
index 99de51d12..1e95b51e6 100644
--- a/test/integration/status-ubuntu-bug-614993
+++ b/test/integration/status-ubuntu-bug-614993
@@ -488,11 +488,11 @@ Depends: libc6 (>= 2.8), upstart-job
Breaks: initramfs-tools (<< 0.92bubuntu23)
Conffiles:
/etc/depmod.d/ubuntu.conf 7c8439ef36b12e5f226b5dbfa20b8c2d
- /etc/modprobe.d/blacklist-ath_pci.conf d1da9bb08c2b0f56f3be93fd0e37946b
- /etc/modprobe.d/blacklist-firewire.conf cb8a4c10a5dddd1d67092198b1ae415f
- /etc/modprobe.d/blacklist-framebuffer.conf b46c9509180b5a76145f08be46b1aff5
- /etc/modprobe.d/blacklist-watchdog.conf 55327f9270c8a6257a833c4d127a39e1
- /etc/modprobe.d/blacklist.conf bc6754fa320733c6d239a4bb0148ffd7
+ /etc/modprobe.d/denylist-ath_pci.conf d1da9bb08c2b0f56f3be93fd0e37946b
+ /etc/modprobe.d/denylist-firewire.conf cb8a4c10a5dddd1d67092198b1ae415f
+ /etc/modprobe.d/denylist-framebuffer.conf b46c9509180b5a76145f08be46b1aff5
+ /etc/modprobe.d/denylist-watchdog.conf 55327f9270c8a6257a833c4d127a39e1
+ /etc/modprobe.d/denylist.conf bc6754fa320733c6d239a4bb0148ffd7
/etc/init/module-init-tools.conf 48db1b767c3148fd83eba59d12fc9a5e
Description: tools for managing Linux kernel modules
This package contains a set of programs for loading, inserting, and
@@ -4886,7 +4886,7 @@ Version: 2.11.1-0ubuntu7
Replaces: libc0.1, libc0.3, libc6, libc6.1
Breaks: libc0.1 (<< 2.10), libc0.3 (<< 2.10), libc6 (<< 2.10), libc6.1 (<< 2.10)
Conffiles:
- /etc/bindresvport.blacklist 154db0e55fa99051ff1bd99e5b2c0584
+ /etc/bindresvport.denylist 154db0e55fa99051ff1bd99e5b2c0584
/etc/ld.so.conf.d/libc.conf d4d833fd095fb7b90e1bb4a547f16de6
/etc/gai.conf 4b3389be7132a6a8805f3df8d0ff00f6
Description: Embedded GNU C Library: Binaries
diff --git a/test/integration/test-bug-549968-install-depends-of-not-installed b/test/integration/test-bug-549968-install-depends-of-not-installed
index 75e7474ff..90ce58a33 100755
--- a/test/integration/test-bug-549968-install-depends-of-not-installed
+++ b/test/integration/test-bug-549968-install-depends-of-not-installed
@@ -17,7 +17,6 @@ setupaptarchive
testsuccessequal "Reading package lists...
Building dependency tree...
MarkInstall coolstuff:i386 < none -> 1.0 @un puN IPb > FU=1
- Ignore MarkInstall of extracoolstuff:i386 < none | 1.0 @hn puH > as its mode (Keep) is protected
coolstuff:i386 Recommends on extracoolstuff:i386 < none | 1.0 @hn puH > can't be satisfied! (dep)
Package 'extracoolstuff' is not installed, so not removed
Recommended packages:
diff --git a/test/integration/test-bug-618848-always-respect-user-requests b/test/integration/test-bug-618848-always-respect-user-requests
index c9a7b714e..1e144f1ee 100755
--- a/test/integration/test-bug-618848-always-respect-user-requests
+++ b/test/integration/test-bug-618848-always-respect-user-requests
@@ -18,7 +18,6 @@ Building dependency tree...
MarkDelete libdb4.8:i386 < 1.0 @ii pmK > FU=1
MarkDelete exim4-daemon-light:i386 < 1.0 @ii mK Ib > FU=0
MarkInstall exim4-daemon-heavy:i386 < none -> 1.0 @un uN Ib > FU=0
- Ignore MarkInstall of libdb4.8:i386 < 1.0 @ii pmR > as its mode (Delete) is protected
exim4-daemon-heavy:i386 Depends on libdb4.8:i386 < 1.0 @ii pmR > can't be satisfied! (dep)
MarkDelete exim4:i386 < 1.0 @ii mK Ib > FU=0
The following packages will be REMOVED:
diff --git a/test/integration/test-bug-960705-propagate-protected-to-satisfied-conflict b/test/integration/test-bug-960705-propagate-protected-to-satisfied-conflict
index e793193c3..ad1501b66 100755
--- a/test/integration/test-bug-960705-propagate-protected-to-satisfied-conflict
+++ b/test/integration/test-bug-960705-propagate-protected-to-satisfied-conflict
@@ -17,7 +17,7 @@ setupaptarchive
testsuccessequal "Reading package lists...
Building dependency tree...
- Removing: systemd-sysv as upgrade is not an option for runit-init:amd64 (1)
+ Removing: systemd-sysv:amd64 as upgrade is not an option for runit-init:amd64 (1)
MarkDelete systemd-sysv:amd64 < 1 @ii mK > FU=0
MarkInstall runit-init:amd64 < none -> 1 @un puN > FU=1
Starting pkgProblemResolver with broken count: 1
diff --git a/test/integration/test-dpkg-protected b/test/integration/test-dpkg-protected
new file mode 100755
index 000000000..3d0994d89
--- /dev/null
+++ b/test/integration/test-dpkg-protected
@@ -0,0 +1,20 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'protected-package' 'native' '1' 'Protected: yes'
+
+setupaptarchive
+
+
+if dpkg --assert-protected-field 2>/dev/null; then
+ testsuccess aptget remove protected-package "$@" -o Debug::pkgDpkgPm=1 -y --allow-remove-essential
+ cp rootdir/tmp/testsuccess.output rootdir/tmp/output
+ testsuccess grep -- '--force-remove-protected' rootdir/tmp/output
+else
+ msgskip "dpkg does not support protected field"
+fi
diff --git a/test/integration/test-external-dependency-solver-protocol b/test/integration/test-external-dependency-solver-protocol
index 2c451d5f9..0091263b7 100755
--- a/test/integration/test-external-dependency-solver-protocol
+++ b/test/integration/test-external-dependency-solver-protocol
@@ -292,3 +292,28 @@ echo 'Error: instant-exit
Message: This solver exits instantly'
exit 1" 'E: External solver failed with: This solver exits instantly
E: Sub-process exit1withmsg returned an error code (1)'
+
+configarchitecture 'amd64' 'i386'
+for arch in 'amd64' 'i386' 'armel' 'armhf'; do
+ insertinstalledpackage "dummy-httpd-$arch" "$arch" '1' 'Provides: httpd'
+done
+buildsimplenativepackage 'dummy-webserver' 'all' '1' 'unstable' 'Provides: httpd
+Multi-Arch: foreign'
+testfailure apt install -s dummy-webserver
+testsuccess apt install -s ./incoming/dummy-webserver_1_all.deb
+testsuccess apt install -s ./incoming/dummy-webserver_1_all.deb --solver apt
+testfailure apt install -s ./incoming/dummy-webserver_1_all.deb --solver dump
+
+testsuccess aptcache showpkg dummy-webserver --with-source ./incoming/dummy-webserver_1_all.deb
+cp -a rootdir/tmp/testsuccess.output showpkg.output
+testequal 'Reverse Depends:
+Dependencies:
+1 -
+Provides:
+1 - ./incoming/dummy-webserver_1_all.deb (= 1) httpd:armhf (= ) httpd:armel (= ) httpd:i386 (= ) httpd (= )
+Reverse Provides: ' tail -n 6 showpkg.output
+testsuccessequal 'Provides: httpd
+Provides: httpd
+Provides: httpd
+Provides: httpd
+Provides: httpd' grep 'Provides:' "$APT_EDSP_DUMP_FILENAME"
diff --git a/test/integration/test-no-fds-leaked-to-maintainer-scripts b/test/integration/test-no-fds-leaked-to-maintainer-scripts
index 85b3d0ee1..4606408fc 100755
--- a/test/integration/test-no-fds-leaked-to-maintainer-scripts
+++ b/test/integration/test-no-fds-leaked-to-maintainer-scripts
@@ -40,7 +40,7 @@ testsuccess aptget install -y fdleaks -qq < /dev/null
checkfdleak() {
msgtest 'Check if fds were not' "leaked: expect $1"
- if [ "$(grep 'root root' rootdir/tmp/testsuccess.output | wc -l)" = "$1" ]; then
+ if [ "$(grep -e 'root root' -e "$(id -un) $(id -gn)" rootdir/tmp/testsuccess.output | wc -l)" = "$1" ]; then
msgpass
else
echo
diff --git a/test/integration/test-resolver-delays-remove-decisions b/test/integration/test-resolver-delays-remove-decisions
new file mode 100755
index 000000000..d8dfd7c9a
--- /dev/null
+++ b/test/integration/test-resolver-delays-remove-decisions
@@ -0,0 +1,107 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'stuff' 'all' '1'
+
+insertpackage 'unstable' 'foobar' 'all' '1' 'Depends: foo | bar'
+insertpackage 'unstable' 'foo' 'all' '1' 'Conflicts: stuff
+Depends: foo-dep'
+insertpackage 'unstable' 'foo-dep' 'all' '1' 'Depends: uninstallable'
+
+insertpackage 'unstable' 'bar' 'all' '1'
+
+setupaptarchive
+
+# We are needlessly removing "stuff" if we don't delay its marking here
+# as we do not question the remove later on
+testsuccessequal "Reading package lists...
+Building dependency tree...
+ MarkInstall foobar:amd64 < none -> 1 @un puN Ib > FU=1
+ Installing foo:amd64 as Depends of foobar:amd64
+ Delayed Removing: stuff:amd64 as upgrade is not an option for foo:amd64 (1)
+ MarkInstall foo:amd64 < none -> 1 @un uN Ib > FU=0
+ Installing foo-dep:amd64 as Depends of foo:amd64
+ foo-dep:amd64 Depends on uninstallable:amd64 < none @un H > can't be satisfied!
+ foo:amd64 Depends on foo-dep:amd64 < none @un H > can't be satisfied! (dep)
+ Installing bar:amd64 as Depends of foobar:amd64
+ MarkInstall bar:amd64 < none -> 1 @un uN > FU=0
+Starting pkgProblemResolver with broken count: 0
+Starting 2 pkgProblemResolver with broken count: 0
+Done
+The following additional packages will be installed:
+ bar
+The following NEW packages will be installed:
+ bar foobar
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst bar (1 unstable [all])
+Inst foobar (1 unstable [all])
+Conf bar (1 unstable [all])
+Conf foobar (1 unstable [all])" apt install foobar -s -o Debug::pkgProblemResolver=1 -o Debug::pkgDepCache::Marker=1 -o Debug::pkgDepCache::AutoInstall=1
+
+insertinstalledpackage 'uninstallable' 'all' '1'
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+ MarkInstall foobar:amd64 < none -> 1 @un puN Ib > FU=1
+ Installing foo:amd64 as Depends of foobar:amd64
+ Delayed Removing: stuff:amd64 as upgrade is not an option for foo:amd64 (1)
+ MarkInstall foo:amd64 < none -> 1 @un uN Ib > FU=0
+ Installing foo-dep:amd64 as Depends of foo:amd64
+ MarkInstall foo-dep:amd64 < none -> 1 @un uN > FU=0
+ MarkDelete stuff:amd64 < 1 @ii mK > FU=0
+Starting pkgProblemResolver with broken count: 0
+Starting 2 pkgProblemResolver with broken count: 0
+Done
+The following additional packages will be installed:
+ foo foo-dep
+The following packages will be REMOVED:
+ stuff
+The following NEW packages will be installed:
+ foo foo-dep foobar
+ MarkDelete stuff:amd64 < 1 @ii K > FU=1
+0 upgraded, 3 newly installed, 1 to remove and 0 not upgraded.
+Remv stuff [1]
+Inst foo-dep (1 unstable [all])
+Inst foo (1 unstable [all])
+Inst foobar (1 unstable [all])
+Conf foo-dep (1 unstable [all])
+Conf foo (1 unstable [all])
+Conf foobar (1 unstable [all])" apt install foobar -s -o Debug::pkgProblemResolver=1 -o Debug::pkgDepCache::Marker=1 -o Debug::pkgDepCache::AutoInstall=1
+
+# Same solution but the installs are considered protected now as there is no other solution
+testsuccessequal "Reading package lists...
+Building dependency tree...
+ MarkInstall foobar:amd64 < none -> 1 @un puN Ib > FU=1
+ Installing foo:amd64 as Depends of foobar:amd64
+ Removing: stuff:amd64 as upgrade is not an option for foo:amd64 (1)
+ MarkDelete stuff:amd64 < 1 @ii mK > FU=0
+ MarkInstall foo:amd64 < none -> 1 @un puN Ib > FU=0
+ Installing foo-dep:amd64 as Depends of foo:amd64
+ MarkInstall foo-dep:amd64 < none -> 1 @un puN > FU=0
+ MarkInstall uninstallable:amd64 < 1 @ii pmK > FU=0
+Starting pkgProblemResolver with broken count: 0
+Starting 2 pkgProblemResolver with broken count: 0
+Done
+ Ignore MarkGarbage of foo:amd64 < none -> 1 @un puN > as its mode (Install) is protected
+ Ignore MarkGarbage of foo:amd64 < none -> 1 @un puN > as its mode (Install) is protected
+Package 'bar' is not installed, so not removed
+The following additional packages will be installed:
+ foo foo-dep
+The following packages will be REMOVED:
+ stuff
+The following NEW packages will be installed:
+ foo foo-dep foobar
+ MarkDelete stuff:amd64 < 1 | none @ii H > FU=1
+0 upgraded, 3 newly installed, 1 to remove and 0 not upgraded.
+Remv stuff [1]
+Inst foo-dep (1 unstable [all])
+Inst foo (1 unstable [all])
+Inst foobar (1 unstable [all])
+Conf foo-dep (1 unstable [all])
+Conf foo (1 unstable [all])
+Conf foobar (1 unstable [all])" apt install foobar bar- -q=0 -s -o Debug::pkgProblemResolver=1 -o Debug::pkgDepCache::Marker=1 -o Debug::pkgDepCache::AutoInstall=1
diff --git a/test/integration/test-resolver-provider-exchange b/test/integration/test-resolver-provider-exchange
new file mode 100755
index 000000000..3f5310fa6
--- /dev/null
+++ b/test/integration/test-resolver-provider-exchange
@@ -0,0 +1,107 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+
+insertinstalledpackage 'fuse' 'all' '2'
+insertpackage 'unstable' 'fuse3' 'all' '3' 'Conflicts: fuse
+Provides: fuse'
+
+insertpackage 'unstable' 'foobar-d' 'all' '1' 'Depends: fuse'
+insertpackage 'unstable' 'foobar-d2' 'all' '1' 'Depends: fuse
+Conflicts: fuse3'
+insertpackage 'unstable' 'foobar-d3' 'all' '1' 'Depends: fuse3'
+insertpackage 'unstable' 'foobar-r' 'all' '1' 'Recommends: fuse'
+insertpackage 'unstable' 'foobar-r2' 'all' '1' 'Recommends: fuse
+Conflicts: fuse3'
+insertpackage 'unstable' 'foobar-r3' 'all' '1' 'Recommends: fuse3'
+
+setupaptarchive
+
+installfoobars() {
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foobar-d
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foobar-d (1 unstable [all])
+Conf foobar-d (1 unstable [all])' apt install -s foobar-d
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foobar-d2
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foobar-d2 (1 unstable [all])
+Conf foobar-d2 (1 unstable [all])' apt install -s foobar-d2
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ fuse3
+The following packages will be REMOVED:
+ fuse
+The following NEW packages will be installed:
+ foobar-d3 fuse3
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv fuse [2]$1
+Inst fuse3 (3 unstable [all])
+Inst foobar-d3 (1 unstable [all])
+Conf fuse3 (3 unstable [all])
+Conf foobar-d3 (1 unstable [all])" apt install -s foobar-d3
+
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foobar-r
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foobar-r (1 unstable [all])
+Conf foobar-r (1 unstable [all])' apt install -s foobar-r
+ testsuccessequal 'Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ foobar-r2
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst foobar-r2 (1 unstable [all])
+Conf foobar-r2 (1 unstable [all])' apt install -s foobar-r2
+ if [ -z "$1" ]; then
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ fuse3
+The following packages will be REMOVED:
+ fuse
+The following NEW packages will be installed:
+ foobar-r3 fuse3
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv fuse [2]$1
+Inst foobar-r3 (1 unstable [all])
+Inst fuse3 (3 unstable [all])
+Conf foobar-r3 (1 unstable [all])
+Conf fuse3 (3 unstable [all])" apt install -s foobar-r3
+ else
+ testsuccessequal "Reading package lists...
+Building dependency tree...
+The following additional packages will be installed:
+ fuse3
+The following packages will be REMOVED:
+ fuse
+The following NEW packages will be installed:
+ foobar-r3 fuse3
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv fuse [2]$1
+Inst fuse3 (3 unstable [all])
+Inst foobar-r3 (1 unstable [all])
+Conf fuse3 (3 unstable [all])
+Conf foobar-r3 (1 unstable [all])" apt install -s foobar-r3
+ fi
+}
+msgmsg 'fuse has no installed dependers'
+installfoobars
+
+for i in $(seq 0 10); do
+ insertinstalledpackage "stuff$i" 'all' '1' 'Depends: fuse'
+done
+msgmsg 'fuse has many dependers installed'
+installfoobars ' [stuff10:amd64 stuff0:amd64 stuff1:amd64 stuff2:amd64 stuff3:amd64 stuff4:amd64 stuff5:amd64 stuff6:amd64 stuff7:amd64 stuff8:amd64 stuff9:amd64 ]'
diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc
index 0398a12b6..f074cd148 100644
--- a/test/interactive-helper/aptwebserver.cc
+++ b/test/interactive-helper/aptwebserver.cc
@@ -960,7 +960,8 @@ int main(int const argc, const char * argv[])
// create socket, bind and listen to it {{{
// ignore SIGPIPE, this can happen on write() if the socket closes connection
signal(SIGPIPE, SIG_IGN);
- // we don't care for our slaves, so ignore their death
+ // ignore worker processes exiting, as we don't want to cause them to stay
+ // around as zombies because we're busy.
signal(SIGCHLD, SIG_IGN);
int sock = socket(AF_INET6, SOCK_STREAM, 0);
@@ -1051,9 +1052,9 @@ int main(int const argc, const char * argv[])
std::clog << "Serving ANY file on port: " << port << std::endl;
- int const slaves = _config->FindI("aptwebserver::slaves", SOMAXCONN);
- std::cerr << "SLAVES: " << slaves << std::endl;
- listen(sock, slaves);
+ int const workers = _config->FindI("aptwebserver::workers", SOMAXCONN);
+ std::cerr << "WORKERS: " << workers << std::endl;
+ listen(sock, workers);
/*}}}*/
_config->CndSet("aptwebserver::response-header::Server", "APT webserver");