summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt2
-rw-r--r--apt-pkg/acquire-worker.cc5
-rw-r--r--apt-pkg/contrib/gpgv.cc32
-rw-r--r--apt-pkg/contrib/gpgv.h1
-rw-r--r--apt-pkg/init.cc4
-rw-r--r--apt-pkg/solver3.cc60
-rw-r--r--apt-pkg/solver3.h15
-rw-r--r--apt-private/private-main.cc2
-rw-r--r--debian/changelog26
-rw-r--r--doc/apt-verbatim.ent2
-rw-r--r--doc/examples/configure-index2
-rw-r--r--doc/po/apt-doc.pot4
-rw-r--r--methods/aptmethod.h12
-rw-r--r--methods/gpgv.cc21
-rw-r--r--po/apt-all.pot9
-rw-r--r--po/ar.po7
-rw-r--r--po/ast.po7
-rw-r--r--po/bg.po7
-rw-r--r--po/bs.po7
-rw-r--r--po/ca.po141
-rw-r--r--po/cs.po7
-rw-r--r--po/cy.po7
-rw-r--r--po/da.po7
-rw-r--r--po/de.po7
-rw-r--r--po/dz.po7
-rw-r--r--po/el.po7
-rw-r--r--po/es.po7
-rw-r--r--po/eu.po7
-rw-r--r--po/fi.po7
-rw-r--r--po/fr.po7
-rw-r--r--po/gl.po7
-rw-r--r--po/hu.po7
-rw-r--r--po/it.po7
-rw-r--r--po/ja.po7
-rw-r--r--po/km.po7
-rw-r--r--po/ko.po7
-rw-r--r--po/ku.po7
-rw-r--r--po/lt.po7
-rw-r--r--po/mr.po7
-rw-r--r--po/nb.po7
-rw-r--r--po/ne.po7
-rw-r--r--po/nl.po7
-rw-r--r--po/nn.po7
-rw-r--r--po/pl.po7
-rw-r--r--po/pt.po7
-rw-r--r--po/pt_BR.po7
-rw-r--r--po/ro.po7
-rw-r--r--po/ru.po7
-rw-r--r--po/sk.po7
-rw-r--r--po/sl.po7
-rw-r--r--po/sv.po7
-rw-r--r--po/th.po7
-rw-r--r--po/tl.po7
-rw-r--r--po/tr.po7
-rw-r--r--po/uk.po7
-rw-r--r--po/vi.po7
-rw-r--r--po/zh_CN.po7
-rw-r--r--po/zh_TW.po7
-rwxr-xr-xtest/integration/test-method-gpgv43
-rwxr-xr-xtest/integration/test-solver3-obsoleted-by87
-rw-r--r--test/libapt/assert_pubkeyalgo_test.cc56
61 files changed, 680 insertions, 138 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1998ca889..12a4ab227 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -206,7 +206,7 @@ endif()
# Configure some variables like package, version and architecture.
set(PACKAGE ${PROJECT_NAME})
set(PACKAGE_MAIL "APT Development Team <deity@lists.debian.org>")
-set(PACKAGE_VERSION "2.9.6")
+set(PACKAGE_VERSION "2.9.7")
string(REGEX MATCH "^[0-9.]+" PROJECT_VERSION ${PACKAGE_VERSION})
if (NOT DEFINED DPKG_DATADIR)
diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc
index 4f247cf84..696a3e0b8 100644
--- a/apt-pkg/acquire-worker.cc
+++ b/apt-pkg/acquire-worker.cc
@@ -200,6 +200,7 @@ enum class APT_HIDDEN MessageType
STATUS = 102,
REDIRECT = 103,
WARNING = 104,
+ AUDIT = 105,
URI_START = 200,
URI_DONE = 201,
AUX_REQUEST = 351,
@@ -388,6 +389,10 @@ bool pkgAcquire::Worker::RunMessages()
_error->Warning("%s: %s", Itm ? Itm->Owner ? Itm->Owner->DescURI().c_str() : Access.c_str() : Access.c_str(), LookupTag(Message, "Message").c_str());
break;
+ case MessageType::AUDIT:
+ _error->Audit("%s: %s", Itm ? Itm->Owner ? Itm->Owner->DescURI().c_str() : Access.c_str() : Access.c_str(), LookupTag(Message, "Message").c_str());
+ break;
+
case MessageType::URI_START:
{
if (Itm == nullptr)
diff --git a/apt-pkg/contrib/gpgv.cc b/apt-pkg/contrib/gpgv.cc
index 2fa5b0c30..225acae88 100644
--- a/apt-pkg/contrib/gpgv.cc
+++ b/apt-pkg/contrib/gpgv.cc
@@ -566,3 +566,35 @@ bool OpenMaybeClearSignedFile(std::string const &ClearSignedFileName, FileFd &Me
return not MessageFile.Failed();
}
/*}}}*/
+bool IsAssertedPubKeyAlgo(std::string const &pkstr, std::string const &option) /*{{{*/
+{
+ auto fullAss = APT::String::Startswith(option, "APT::Key") ? _config->Find(option) : option;
+ for (auto &ass : VectorizeString(fullAss, ','))
+ {
+ if (ass == pkstr)
+ return true;
+ // We only implement >= for rsa
+ if (APT::String::Startswith(ass, ">=rsa"))
+ {
+ if (not APT::String::Startswith(pkstr, "rsa"))
+ continue;
+ if (not std::all_of(ass.begin() + 5, ass.end(), isdigit))
+ return _error->Error("Unrecognized public key specification '%s' in option %s: expect only digits after >=rsa", ass.c_str(), option.c_str());
+
+ int assBits = std::stoi(ass.substr(5));
+ int pkBits = std::stoi(pkstr.substr(3));
+
+ if (pkBits >= assBits)
+ return true;
+
+ continue;
+ }
+ if (ass.empty())
+ return _error->Error("Empty item in public key assertion string option %s", option.c_str());
+ if (not std::all_of(ass.begin(), ass.end(), [](char c)
+ { return isalpha(c) || isdigit(c); }))
+ return _error->Error("Unrecognized public key specification '%s' in option %s", ass.c_str(), option.c_str());
+ }
+ return false;
+}
+ /*}}}*/
diff --git a/apt-pkg/contrib/gpgv.h b/apt-pkg/contrib/gpgv.h
index 1cabed4e6..1f3ef26f9 100644
--- a/apt-pkg/contrib/gpgv.h
+++ b/apt-pkg/contrib/gpgv.h
@@ -86,4 +86,5 @@ APT_PUBLIC bool SplitClearSignedFile(std::string const &InFile, FileFd * const C
*/
APT_PUBLIC bool OpenMaybeClearSignedFile(std::string const &ClearSignedFileName, FileFd &MessageFile);
+APT_PUBLIC bool IsAssertedPubKeyAlgo(std::string const &pkstr, std::string const &option);
#endif
diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc
index 487f94f20..d71d9541f 100644
--- a/apt-pkg/init.cc
+++ b/apt-pkg/init.cc
@@ -131,7 +131,9 @@ bool pkgInitConfig(Configuration &Cnf)
Cnf.Set("APT::Build-Essential::", "build-essential");
Cnf.CndSet("APT::Install-Recommends", true);
Cnf.CndSet("APT::Install-Suggests", false);
- Cnf.CndSet("APT::Key::Assert-Pubkey-Algo", ">=rsa2048,ed25519,ed448");
+ Cnf.CndSet("APT::Key::Assert-Pubkey-Algo", ">=rsa2048,ed25519,ed448,nistp256,nistp384,nistp512,brainpoolP256r1,brainpoolP320r1,brainpoolP384r1,brainpoolP512r1,secp256k1");
+ Cnf.CndSet("APT::Key::Assert-Pubkey-Algo::Next", ">=rsa2048,ed25519,ed448,nistp256,nistp384,nistp512");
+ Cnf.CndSet("APT::Key::Assert-Pubkey-Algo::Future", ">=rsa3072,ed25519,ed448");
Cnf.CndSet("Dir","/");
// State
diff --git a/apt-pkg/solver3.cc b/apt-pkg/solver3.cc
index 67aa68dca..2ba6f6065 100644
--- a/apt-pkg/solver3.cc
+++ b/apt-pkg/solver3.cc
@@ -202,10 +202,10 @@ void APT::Solver::Work::Dump(pkgCache &cache)
if (optional)
std::cerr << "Optional ";
std::cerr << "Item (" << ssize_t(size <= solutions.size() ? size : -1) << "@" << depth << (upgrade ? "u" : "") << ") ";
- if (auto Pkg = reason.Pkg(); Pkg != 0)
- std::cerr << pkgCache::PkgIterator(cache, cache.PkgP + Pkg).FullName();
- if (auto Ver = reason.Ver(); Ver != 0)
- std::cerr << pkgCache::VerIterator(cache, cache.VerP + Ver).ParentPkg().FullName() << "=" << pkgCache::VerIterator(cache, cache.VerP + Ver).VerStr();
+ if (auto Pkg = reason.Pkg(cache); not Pkg.end())
+ std::cerr << Pkg.FullName();
+ if (auto Ver = reason.Ver(cache); not Ver.end())
+ std::cerr << Ver.ParentPkg().FullName() << "=" << Ver.VerStr();
std::cerr << " -> ";
for (auto sol : solutions)
{
@@ -221,7 +221,7 @@ std::string APT::Solver::WhyStr(Reason reason)
while (not reason.empty())
{
- if (auto Pkg = pkgCache::PkgIterator(cache, cache.PkgP + reason.Pkg()); not Pkg.end())
+ if (auto Pkg = reason.Pkg(cache); not Pkg.end())
{
if ((*this)[Pkg].decision == Decision::MUSTNOT)
out.push_back(std::string("not ") + Pkg.FullName());
@@ -229,7 +229,7 @@ std::string APT::Solver::WhyStr(Reason reason)
out.push_back(Pkg.FullName());
reason = (*this)[Pkg].reason;
}
- if (auto Ver = pkgCache::VerIterator(cache, cache.VerP + reason.Ver()); not Ver.end())
+ if (auto Ver = reason.Ver(cache); not Ver.end())
{
if ((*this)[Ver].decision == Decision::MUSTNOT)
out.push_back(std::string("not ") + Ver.ParentPkg().FullName() + "=" + Ver.VerStr());
@@ -247,8 +247,39 @@ std::string APT::Solver::WhyStr(Reason reason)
return outstr;
}
-bool APT::Solver::Obsolete(pkgCache::PkgIterator pkg)
+// This is essentially asking whether any other binary in the source package has a higher candidate
+// version. This pretends that each package is installed at the same source version as the package
+// under consideration.
+bool APT::Solver::ObsoletedByNewerSourceVersion(pkgCache::VerIterator cand) const
{
+ const auto pkg = cand.ParentPkg();
+ const int candPriority = policy.GetPriority(cand);
+
+ for (auto ver = cand.Cache()->FindGrp(cand.SourcePkgName()).VersionsInSource(); not ver.end(); ver = ver.NextInSource())
+ {
+ // We are only interested in other packages in the same source package; built for the same architecture.
+ if (ver->ParentPkg == cand->ParentPkg || ver.ParentPkg()->Arch != cand.ParentPkg()->Arch || cache.VS->CmpVersion(ver.SourceVerStr(), cand.SourceVerStr()) <= 0)
+ continue;
+
+ // We also take equal priority here, given that we have a higher version
+ const int priority = policy.GetPriority(ver, true);
+ if (priority == 0 || priority < candPriority)
+ continue;
+
+ pkgObsolete[pkg->ID] = 2;
+ if (debug >= 3)
+ std::cerr << "Obsolete: " << cand.ParentPkg().FullName() << "=" << cand.VerStr() << " due to " << ver.ParentPkg().FullName() << "=" << ver.VerStr() << "\n";
+ return true;
+ }
+
+ return false;
+}
+
+bool APT::Solver::Obsolete(pkgCache::PkgIterator pkg) const
+{
+ if (pkgObsolete[pkg->ID] != 0)
+ return pkgObsolete[pkg->ID] == 2;
+
auto ver = policy.GetCandidateVer(pkg);
if (ver.end() && not StrictPinning)
@@ -256,18 +287,13 @@ bool APT::Solver::Obsolete(pkgCache::PkgIterator pkg)
if (ver.end())
{
std::cerr << "Obsolete: " << pkg.FullName() << " - not installable\n";
+ pkgObsolete[pkg->ID] = 2;
return true;
}
- if (pkgObsolete[pkg->ID] != 0)
- return pkgObsolete[pkg->ID] == 2;
- for (auto bin = ver.Cache()->FindGrp(ver.SourcePkgName()).VersionsInSource(); not bin.end(); bin = bin.NextInSource())
- if (bin != ver && bin.ParentPkg()->Arch == ver.ParentPkg()->Arch && bin->ParentPkg != ver->ParentPkg && (not StrictPinning || policy.GetCandidateVer(bin.ParentPkg()) == bin) && _system->VS->CmpVersion(bin.SourceVerStr(), ver.SourceVerStr()) > 0)
- {
- pkgObsolete[pkg->ID] = 2;
- if (debug >= 3)
- std::cerr << "Obsolete: " << ver.ParentPkg().FullName() << "=" << ver.VerStr() << " due to " << bin.ParentPkg().FullName() << "=" << bin.VerStr() << "\n";
- return true;
- }
+
+ if (ObsoletedByNewerSourceVersion(ver))
+ return true;
+
for (auto file = ver.FileList(); !file.end(); file++)
if ((file.File()->Flags & pkgCache::Flag::NotSource) == 0)
{
diff --git a/apt-pkg/solver3.h b/apt-pkg/solver3.h
index d460c95d9..33067a0ad 100644
--- a/apt-pkg/solver3.h
+++ b/apt-pkg/solver3.h
@@ -104,8 +104,9 @@ class Solver
return verStates[V->ID];
}
- std::vector<char> pkgObsolete;
- bool Obsolete(pkgCache::PkgIterator pkg);
+ mutable std::vector<char> pkgObsolete;
+ bool Obsolete(pkgCache::PkgIterator pkg) const;
+ bool ObsoletedByNewerSourceVersion(pkgCache::VerIterator cand) const;
// \brief Heap of the remaining work.
//
@@ -219,6 +220,16 @@ struct APT::Solver::Reason
{
return IsVersion ? map_pointer<pkgCache::Version>{(uint32_t)MapPtr} : 0;
}
+ // \brief Return the package iterator if storing a package, or an empty one
+ pkgCache::PkgIterator Pkg(pkgCache &cache) const
+ {
+ return IsVersion ? pkgCache::PkgIterator() : pkgCache::PkgIterator(cache, cache.PkgP + Pkg());
+ }
+ // \brief Return the version iterator if storing a package, or an empty end.
+ pkgCache::VerIterator Ver(pkgCache &cache) const
+ {
+ return IsVersion ? pkgCache::VerIterator(cache, cache.VerP + Ver()) : pkgCache::VerIterator();
+ }
// \brief Check if there is no reason.
bool empty() const
{
diff --git a/apt-private/private-main.cc b/apt-private/private-main.cc
index f28f5cb80..39ad07b36 100644
--- a/apt-private/private-main.cc
+++ b/apt-private/private-main.cc
@@ -81,6 +81,8 @@ void CheckIfCalledByScript(int argc, const char *argv[]) /*{{{*/
if(!isatty(STDOUT_FILENO) &&
_config->FindB("Apt::Cmd::Disable-Script-Warning", false) == false)
{
+ // NOTE: CLI interface is redundant on the I/interface, this is
+ // intentional to make it easier to read.
std::cerr << std::endl
<< "WARNING: " << flNotDir(argv[0]) << " "
<< "does not have a stable CLI interface. "
diff --git a/debian/changelog b/debian/changelog
index ab7133ac4..bc576da0f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,29 @@
+apt (2.9.7) unstable; urgency=medium
+
+ [ sid ]
+ * Show installed version (not candidate version) while removing a package
+
+ [ David Kalnischkies ]
+ * Parse snapshot option for apt show/list (Closes: #1075819)
+
+ [ Frans Spiesschaert ]
+ * Dutch program translation update (Closes: #1075874)
+ * Dutch manpages translation update (Closes: #1075875)
+
+ [ Michał Kułach ]
+ * Polish program translation update (Closes: #1075975)
+
+ [ Julian Andres Klode ]
+ * worker: Add an audit level to log audit messages
+ * gpgv: Add a LaterWorthless level, a SoonWorthless but at 'audit' level
+ * gpgv: Add IsAssertedPubKeyAlgo() function
+ * Only revoke weak RSA keys for now, add 'next' and 'future' levels
+ (LP: #2073126)
+ * solver3: Refactor Reason.Pkg()/Reason.Ver() use with iterator
+ * Add note that redundant 'CLI interface' is intentional
+
+ -- Julian Andres Klode <jak@debian.org> Tue, 30 Jul 2024 13:19:24 +0900
+
apt (2.9.6) unstable; urgency=medium
* solver3: Do not accidentally promote Replaces and Enhances to
diff --git a/doc/apt-verbatim.ent b/doc/apt-verbatim.ent
index b2b38f9dc..f415a0eba 100644
--- a/doc/apt-verbatim.ent
+++ b/doc/apt-verbatim.ent
@@ -274,7 +274,7 @@
">
<!-- this will be updated by 'prepare-release' -->
-<!ENTITY apt-product-version "2.9.6">
+<!ENTITY apt-product-version "2.9.7">
<!-- (Code)names for various things used all over the place -->
<!ENTITY debian-oldstable-codename "bullseye">
diff --git a/doc/examples/configure-index b/doc/examples/configure-index
index 6bcf8e354..72ce1fe3a 100644
--- a/doc/examples/configure-index
+++ b/doc/examples/configure-index
@@ -776,6 +776,8 @@ apt::key::masterkeyring "<STRING>";
apt::key::archivekeyringuri "<STRING>";
apt::key::net-update-enabled "<STRING>";
apt::key::assert-pubkey-algo "<STRING>";
+apt::key::assert-pubkey-algo::next "<STRING>";
+apt::key::assert-pubkey-algo::future "<STRING>";
apt::ftparchive::release::patterns "<LIST>";
apt::ftparchive::release::validtime "<INT>";
diff --git a/doc/po/apt-doc.pot b/doc/po/apt-doc.pot
index 84ac0e802..4779a0d98 100644
--- a/doc/po/apt-doc.pot
+++ b/doc/po/apt-doc.pot
@@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: apt-doc 2.9.6\n"
+"Project-Id-Version: apt-doc 2.9.7\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-07-02 20:27+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/methods/aptmethod.h b/methods/aptmethod.h
index 26b8c0b55..1c24f3a98 100644
--- a/methods/aptmethod.h
+++ b/methods/aptmethod.h
@@ -448,7 +448,7 @@ protected:
return true;
}
- void Warning(std::string &&msg)
+ void Message(std::string &&msg, std::string code)
{
std::unordered_map<std::string, std::string> fields;
if (Queue != 0)
@@ -458,7 +458,15 @@ protected:
if (not UsedMirror.empty())
fields.emplace("UsedMirror", UsedMirror);
fields.emplace("Message", std::move(msg));
- SendMessage("104 Warning", std::move(fields));
+ SendMessage(code, std::move(fields));
+ }
+ void Warning(std::string &&msg)
+ {
+ return Message(std::move(msg), "104 Warning");
+ }
+ void Audit(std::string &&msg)
+ {
+ return Message(std::move(msg), "105 Audit");
}
bool TransferModificationTimes(char const * const From, char const * const To, time_t &LastModified) APT_NONNULL(2, 3)
diff --git a/methods/gpgv.cc b/methods/gpgv.cc
index 20ef2861d..4a0866555 100644
--- a/methods/gpgv.cc
+++ b/methods/gpgv.cc
@@ -112,6 +112,7 @@ struct APT_HIDDEN SignersStorage {
std::vector<Signer> Worthless;
// a worthless signature is a expired or revoked one
std::vector<Signer> SoonWorthless;
+ std::vector<Signer> LaterWorthless;
std::vector<std::string> NoPubKey;
std::vector<std::string> Valid;
std::vector<std::string> SignedBy;
@@ -261,6 +262,17 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
{ return IsTheSameKey(fpr, goodsig); }),
Signers.Good.end());
}
+ else if (not IsAssertedPubKeyAlgo(pkstr, "APT::Key::Assert-Pubkey-Algo::Next"))
+ {
+ std::string reason;
+ Signers.SoonWorthless.push_back({fpr, pkstr});
+ }
+ else if (not IsAssertedPubKeyAlgo(pkstr, "APT::Key::Assert-Pubkey-Algo::Future"))
+ {
+ std::string reason;
+ strprintf(reason, _("%s will be deprecated in a future release"), pkstr.c_str());
+ Signers.LaterWorthless.push_back({fpr, reason});
+ }
}
else if (strncmp(buffer, GNUPGGOODSIG, sizeof(GNUPGGOODSIG)-1) == 0)
PushEntryWithKeyID(Signers.Good, buffer, Debug);
@@ -420,6 +432,8 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
std::for_each(Signers.Worthless.begin(), Signers.Worthless.end(), [](Signer const &sig) { std::cerr << sig.key << ", "; });
std::cerr << "\n SoonWorthless: ";
std::for_each(Signers.SoonWorthless.begin(), Signers.SoonWorthless.end(), [](Signer const &sig) { std::cerr << sig.key << ", "; });
+ std::cerr << "\n LaterWorthless: ";
+ std::for_each(Signers.LaterWorthless.begin(), Signers.LaterWorthless.end(), [](Signer const &sig) { std::cerr << sig.key << ", "; });
std::cerr << "\n NoPubKey: ";
implodeVector(Signers.NoPubKey, std::cerr, ", ");
std::cerr << "\n Signed-By: ";
@@ -565,6 +579,13 @@ bool GPGVMethod::URIAcquire(std::string const &Message, FetchItem *Itm)
strprintf(msg, _("Signature by key %s uses weak algorithm (%s)"), Signer.key.c_str(), Signer.note.c_str());
Warning(std::move(msg));
}
+ for (auto const &Signer : Signers.LaterWorthless)
+ {
+ std::string msg;
+ // TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
+ strprintf(msg, _("Signature by key %s uses weak algorithm (%s)"), Signer.key.c_str(), Signer.note.c_str());
+ Audit(std::move(msg));
+ }
}
if (Signers.Good.empty() || !Signers.Bad.empty() || !Signers.NoPubKey.empty())
diff --git a/po/apt-all.pot b/po/apt-all.pot
index 1f74e756e..7259cd41e 100644
--- a/po/apt-all.pot
+++ b/po/apt-all.pot
@@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: apt 2.9.6\n"
+"Project-Id-Version: apt 2.9.7\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-07-02 20:27+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -3681,6 +3681,11 @@ msgstr ""
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/ar.po b/po/ar.po
index 63b4f7972..54617fbc7 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2006-10-20 21:28+0300\n"
"Last-Translator: Ossama M. Khayat <okhayat@yahoo.com>\n"
"Language-Team: Arabic <support@arabeyes.org>\n"
@@ -3769,6 +3769,11 @@ msgstr ""
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/ast.po b/po/ast.po
index 49cad880f..1ba96838e 100644
--- a/po/ast.po
+++ b/po/ast.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 0.7.18\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2010-10-02 23:35+0100\n"
"Last-Translator: Iñigo Varela <ivarela@softastur.org>\n"
"Language-Team: Asturian (ast)\n"
@@ -3946,6 +3946,11 @@ msgstr "Nun se pudo invocar "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/bg.po b/po/bg.po
index c4131b52d..5e135ea65 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 0.7.21\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2012-06-25 17:23+0300\n"
"Last-Translator: Damyan Ivanov <dmn@debian.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
@@ -4002,6 +4002,11 @@ msgstr "Неуспех при извикването на "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/bs.po b/po/bs.po
index c3bdb39db..4bc93a042 100644
--- a/po/bs.po
+++ b/po/bs.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 0.5.26\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2004-05-06 15:25+0100\n"
"Last-Translator: Safir Šećerović <sapphire@linux.org.ba>\n"
"Language-Team: Bosnian <lokal@lugbih.org>\n"
@@ -3753,6 +3753,11 @@ msgstr ""
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/ca.po b/po/ca.po
index 505a1bc5c..a77094d62 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,20 +9,21 @@
# Jordi Mallach <jordi@debian.org>, 2004, 2005, 2006, 2008, 2009, 2011, 2012.
# Agustí Grau <fletxa@gmail.com>, 2010.
# Oriol Debian <oriol.debian@gmail.com>, 2016.
+# Carles Pina i Estany <cpina@debian.org>, 2024
msgid ""
msgstr ""
"Project-Id-Version: apt 1.4~beta1\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
"POT-Creation-Date: 2024-05-25 09:01+0000\n"
-"PO-Revision-Date: 2020-08-09 22:43+0200\n"
-"Last-Translator: Aleix Vidal i Gaya <aleix@softcatala.org>\n"
+"PO-Revision-Date: 2024-08-08 22:47+0100\n"
+"Last-Translator: Carles Pina i Estany <cpina@debian.org>\n"
"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.2.1\n"
+"X-Generator: Poedit 3.2.2\n"
"X-Poedit-Bookmarks: 502,178,-1,-1,-1,-1,-1,-1,-1,-1\n"
#: apt-pkg/acquire-item.cc
@@ -249,6 +250,8 @@ msgid ""
"Repositories should provide a clear-signed InRelease file, but none found at "
"%s."
msgstr ""
+"Els repositoris han de tenir un fitxer «InRelease» signat, però no se n'ha "
+"trobat cap a %s."
#: apt-pkg/acquire-item.cc
#, c-format
@@ -691,26 +694,26 @@ msgstr "Error de sintaxi %s:%u: Hi ha brossa extra al final del fitxer"
#. TRANSLATOR: This is a warning level displayed before the message
#: apt-pkg/contrib/error.cc
msgid "Error:"
-msgstr ""
+msgstr "Error:"
#. TRANSLATOR: This is a warning level displayed before the message
#: apt-pkg/contrib/error.cc
msgid "Warning:"
-msgstr ""
+msgstr "Avís:"
#. TRANSLATOR: This is a warning level displayed before the message
#: apt-pkg/contrib/error.cc
msgid "Notice:"
-msgstr ""
+msgstr "Notificació:"
#: apt-pkg/contrib/error.cc
msgid "Audit:"
-msgstr ""
+msgstr "Auditoria:"
#. TRANSLATOR: This is a warning level displayed before the message
#: apt-pkg/contrib/error.cc
msgid "Debug:"
-msgstr ""
+msgstr "Depuració:"
#: apt-pkg/contrib/extracttar.cc
#, c-format
@@ -1352,10 +1355,8 @@ msgid "Calculating upgrade"
msgstr "S'està calculant l'actualització"
#: apt-pkg/edsp.cc
-#, fuzzy
-#| msgid "Total dependencies: "
msgid "Solving dependencies"
-msgstr "Nombre total de dependències: "
+msgstr "S'està resolent les dependències"
#: apt-pkg/edsp.cc
msgid "Execute external solver"
@@ -1958,21 +1959,22 @@ msgid ""
"Unmerged usr is no longer supported, use usrmerge to convert to a merged-usr "
"system."
msgstr ""
+"Un «usr» no unificat ja no està suportat, useu «usrmerge» per convertir-lo "
+"en un sistema amb l'«usr» unificat."
#. TRANSLATORS: %s is a url to a page describing merged-usr (bookworm release notes)
#: apt-private/private-install.cc
-#, fuzzy, c-format
-#| msgid "Selected %s for removal.\n"
+#, c-format
msgid "See %s for more details."
-msgstr "Seleccionat %s per eliminar.\n"
+msgstr "Per més detalls, vegeu %s."
#: apt-private/private-install.cc
msgid ""
"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
"missing?"
msgstr ""
-"No es poden obtenir alguns arxius. Proveu a executar apt-get update o "
-"intenteu-ho amb --fix-missing."
+"No es poden obtenir alguns arxius. Voleu provar a executar «apt-get update» "
+"o intentar-ho amb «--fix-missing»?"
#: apt-private/private-install.cc
msgid "Internal error, InstallPackages was called with broken packages!"
@@ -2016,10 +2018,10 @@ msgstr ""
"Que estrany… Les mides no coincideixen, informeu-ho a apt@packages.debian.org"
#: apt-private/private-install.cc
-#, fuzzy, c-format
+#, c-format
#| msgid "Download Failed"
msgid " Download size: %sB / %sB\n"
-msgstr "Ha fallat la baixada"
+msgstr " Mida de la descàrrega: %sB / %sB\n"
#. TRANSLATOR: The required space between number and unit is already included
#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
@@ -2029,10 +2031,10 @@ msgid "Need to get %sB/%sB of archives.\n"
msgstr "S'ha d'obtenir %sB/%sB d'arxius.\n"
#: apt-private/private-install.cc
-#, fuzzy, c-format
+#, c-format
#| msgid "Download Failed"
msgid " Download size: %sB\n"
-msgstr "Ha fallat la baixada"
+msgstr " Mida de la descàrrega: %sB\n"
#. TRANSLATOR: The required space between number and unit is already included
#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
@@ -2052,7 +2054,7 @@ msgstr ""
#: apt-private/private-install.cc
#, c-format
msgid "Space needed: %sB / %sB available\n"
-msgstr ""
+msgstr "Espai necessari: %sB / %sB disponible\n"
#. TRANSLATOR: The required space between number and unit is already included
#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
@@ -2060,6 +2062,7 @@ msgstr ""
#, c-format
msgid "More space needed than available: %sB > %sB, installation may fail"
msgstr ""
+"Cal més espai del que hi ha disponible: %sB > %sB, la instal·lació pot fallar"
#. TRANSLATOR: The required space between number and unit is already included
#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB -
@@ -2069,7 +2072,7 @@ msgstr ""
#: apt-private/private-install.cc
#, c-format
msgid "in %s: %sB / %sB available\n"
-msgstr ""
+msgstr "a %s: %sB / %sB disponible\n"
#. TRANSLATOR: The required space between number and unit is already included
#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
@@ -2079,17 +2082,18 @@ msgstr ""
msgid ""
"More space needed in %s than available: %sB > %sB, installation may fail"
msgstr ""
+"Cal més espai a %s del que hi ha disponible: %sB > %sB, la instal·lació pot "
+"fallar"
#: apt-private/private-install.cc
#, c-format
msgid "Space needed: %sB\n"
-msgstr ""
+msgstr "Espai necessari: %sB\n"
#: apt-private/private-install.cc
-#, fuzzy, c-format
-#| msgid "Stored label: %s\n"
+#, c-format
msgid " Freed space: %sB\n"
-msgstr "Etiqueta desada: %s\n"
+msgstr " Espai recuperat: %sB\n"
#. TRANSLATOR: The required space between number and unit is already included
#. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
@@ -2107,14 +2111,16 @@ msgid ""
"Removing essential system-critical packages is not permitted. This might "
"break the system."
msgstr ""
+"No està permès eliminar paquets essencials crítics pel sistema. Això podria "
+"inutilitzar el sistema."
#: apt-private/private-install.cc
msgid "Continue anyway?"
-msgstr ""
+msgstr "Voleu continuar igualment?"
#: apt-private/private-install.cc
msgid "Continue?"
-msgstr ""
+msgstr "Voleu continuar?"
#: apt-private/private-install.cc cmdline/apt-mark.cc
msgid "Do you want to continue?"
@@ -2355,50 +2361,53 @@ msgid "The following packages have unmet dependencies:"
msgstr "Els següents paquets tenen dependències sense satisfer:"
#: apt-private/private-output.cc
-#, fuzzy
#| msgid "satisfy dependency strings"
msgid "Unsatisfied dependencies:"
-msgstr "satisfà cadenes de dependència"
+msgstr "Dependències no satisfetes:"
#: apt-private/private-output.cc
msgid "The following NEW packages will be installed:"
msgstr "S'instal·laran els paquets NOUS següents:"
+# No es fa servir "S'està instal·lant:" perquè és un títol i després ve una pregunta per veure si s'instal·larà o no. E.g. fent "apt install PAQUET" l'apt ensenya "Instal·lant" (llistat de paquets) i "Instal·lant les dependències:" (llistat de paquets). I a continuació "Voleu continuar?"
+# Amb "S'està instal·lant" ens sembla que l'acció està passant ara, i encara no passa.
+# Una alternativa a considerar és "S'instal·laran" però potser és massa diferent de l'origen.
#: apt-private/private-output.cc
-#, fuzzy
-#| msgid "Installing %s"
msgid "Installing:"
-msgstr "S'està instal·lant %s"
-
+msgstr "Instal·lant:"
+
+# No es fa servir "S'està instal·lant:" perquè és un títol i després ve
+# una pregunta per veure si s'instal·larà o no. E.g. fent "apt install
+# PAQUET" l'apt ensenya "Instal·lant" (llistat de paquets) i "Instal·lant
+# les dependències:" (llistat de paquets). I a continuació "Voleu
+# continuar?"
+# Amb "S'està instal·lant" ens sembla que l'acció està passant ara, i
+# encara no passa.
+# Una alternativa a considerar és "S'instal·laran" però potser és massa
+# diferent de l'origen.
#: apt-private/private-output.cc
-#, fuzzy
-#| msgid "Total dependencies: "
msgid "Installing dependencies:"
-msgstr "Nombre total de dependències: "
+msgstr "Instal·lant les dependències:"
#: apt-private/private-output.cc
msgid "REMOVING:"
-msgstr ""
+msgstr "S'ESTÀ SUPRIMINT:"
#: apt-private/private-output.cc
msgid "The following packages will be REMOVED:"
msgstr "Se SUPRIMIRAN els paquets següents:"
#: apt-private/private-output.cc
-#, fuzzy
-#| msgid "The following packages have been kept back:"
msgid "The following upgrades have been deferred due to phasing:"
-msgstr "S'han mantingut els paquets següents:"
+msgstr "S'han ajornat les actualitzacions següents degut a escalonament:"
#: apt-private/private-output.cc
-#, fuzzy
-#| msgid "The following packages have been kept back:"
msgid "Not upgrading yet due to phasing:"
-msgstr "S'han mantingut els paquets següents:"
+msgstr "No s'està actualitzant encara degut a escalonament:"
#: apt-private/private-output.cc
msgid "Not upgrading:"
-msgstr ""
+msgstr "No s'està actualitzant:"
#: apt-private/private-output.cc
msgid "The following packages have been kept back:"
@@ -2410,21 +2419,19 @@ msgstr "S'actualitzaran els paquets següents:"
#: apt-private/private-output.cc
msgid "Upgrading:"
-msgstr ""
+msgstr "S'està actualitzant:"
#: apt-private/private-output.cc
msgid "DOWNGRADING:"
-msgstr ""
+msgstr "S'ESTÀ DESACTUALITZANT:"
#: apt-private/private-output.cc
msgid "The following packages will be DOWNGRADED:"
msgstr "Es DESACTUALITZARAN els paquets següents:"
#: apt-private/private-output.cc
-#, fuzzy
-#| msgid "Pinned packages:"
msgid "Changing held packages:"
-msgstr "Paquets fixats:"
+msgstr "S'està canviant els paquets retinguts:"
#: apt-private/private-output.cc
msgid "The following held packages will be changed:"
@@ -2445,7 +2452,7 @@ msgstr ""
#: apt-private/private-output.cc
msgid "Summary:"
-msgstr ""
+msgstr "Resum:"
#: apt-private/private-output.cc
#, c-format
@@ -2453,10 +2460,10 @@ msgid "%lu upgraded, %lu newly installed, "
msgstr "%lu actualitzats, %lu nous a instal·lar, "
#: apt-private/private-output.cc
-#, fuzzy, c-format
+#, c-format
#| msgid "Installing %s"
msgid "Upgrading: %lu, Installing: %lu, "
-msgstr "S'està instal·lant %s"
+msgstr "S'està actualitzant: %lu, s'està instal·lant: %lu, "
#: apt-private/private-output.cc
#, c-format
@@ -2464,10 +2471,9 @@ msgid "%lu reinstalled, "
msgstr "%lu reinstal·lats, "
#: apt-private/private-output.cc
-#, fuzzy, c-format
-#| msgid "Installing %s"
+#, c-format
msgid "Reinstalling: %lu, "
-msgstr "S'està instal·lant %s"
+msgstr "S'està reinstal·lant: %lu, "
#: apt-private/private-output.cc
#, c-format
@@ -2477,7 +2483,7 @@ msgstr "%lu desactualitzats, "
#: apt-private/private-output.cc
#, c-format
msgid "Downgrading: %lu, "
-msgstr ""
+msgstr "S'està desactualitzant: %lu, "
#: apt-private/private-output.cc
#, c-format
@@ -2487,7 +2493,7 @@ msgstr "%lu a suprimir i %lu no actualitzats.\n"
#: apt-private/private-output.cc
#, c-format
msgid "Removing: %lu, Not Upgrading: %lu\n"
-msgstr ""
+msgstr "S'està suprimint: %lu, no s'està actualitzant: %lu\n"
#: apt-private/private-output.cc
#, c-format
@@ -2580,7 +2586,7 @@ msgstr " Taula de versions:"
#: apt-private/private-show.cc
msgid "phased"
-msgstr ""
+msgstr "escalonada"
#: apt-private/private-source.cc
#, c-format
@@ -2770,7 +2776,7 @@ msgstr ""
#: apt-private/private-update.cc
#, c-format
msgid "Missing Signed-By in the %s entry for '%s'"
-msgstr ""
+msgstr "No hi ha «Signed-By» a l'entrada %s de «%s»"
#: apt-private/private-update.cc
#, c-format
@@ -3397,10 +3403,8 @@ msgid "remove packages"
msgstr "elimina paquets"
#: cmdline/apt.cc
-#, fuzzy
-#| msgid "Remove automatically all unused packages"
msgid "automatically remove all unused packages"
-msgstr "Suprimeix automàticament tots els paquets no utilitzats"
+msgstr "suprimeix automàticament tots els paquets no utilitzats"
#. system wide stuff
#: cmdline/apt.cc
@@ -4078,7 +4082,7 @@ msgstr "No es pot invocar "
#: methods/gpgv.cc
#, c-format
msgid "untrusted public key algorithm: %s"
-msgstr ""
+msgstr "no es confia en l'algoritme de clau pública: %s"
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
@@ -4110,20 +4114,21 @@ msgstr ""
msgid "Unknown error executing apt-key"
msgstr "S'ha produït un error desconegut en executar apt-key"
+# Si mai es tradueix el «apt-key»(8) canviar de DEPRECATION a la paraula feta servir al manual.
#: methods/gpgv.cc
#, c-format
msgid ""
"Key is stored in legacy trusted.gpg keyring (%s), see the DEPRECATION "
"section in apt-key(8) for details."
msgstr ""
+"La clau està desada en un antic anell de claus «trusted.gpg» (%s); per més "
+"detalls, consulteu la secció DEPRECATION d'«apt-key»(8)."
#. TRANSLATORS: The second %s is the reason and is untranslated for repository owners.
#: methods/gpgv.cc
-#, fuzzy, c-format
-#| msgid "Signature by key %s uses weak digest algorithm (%s)"
+#, c-format
msgid "Signature by key %s uses weak algorithm (%s)"
-msgstr ""
-"La signatura per la clau %s usa un algoritme de resum «hash» dèbil (%s)"
+msgstr "La signatura amb la clau %s usa un algoritme dèbil (%s)"
#: methods/gpgv.cc
msgid "The following signatures were invalid:\n"
diff --git a/po/cs.po b/po/cs.po
index ea342db24..87ca399c7 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 2.9.0\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2024-04-13 22:12+0200\n"
"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
@@ -3958,6 +3958,11 @@ msgstr "Nelze vyvolat "
msgid "untrusted public key algorithm: %s"
msgstr "nedůvěryhodný algoritmus veřejného klíče: %s"
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/cy.po b/po/cy.po
index f84178e1d..7da60722d 100644
--- a/po/cy.po
+++ b/po/cy.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2005-06-06 13:46+0100\n"
"Last-Translator: Dafydd Harries <daf@muse.19inch.net>\n"
"Language-Team: Welsh <cy@pengwyn.linux.org.uk>\n"
@@ -3960,6 +3960,11 @@ msgstr "Methwyd gweithredu "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/da.po b/po/da.po
index 4afc09a06..e12362274 100644
--- a/po/da.po
+++ b/po/da.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.4~rc2\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2017-03-02 23:51+0200\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n"
@@ -4028,6 +4028,11 @@ msgstr "Kunne ikke udføre "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/de.po b/po/de.po
index 92c68071a..25f40d212 100644
--- a/po/de.po
+++ b/po/de.po
@@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 2.7.2\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2023-07-17 19:13+0200\n"
"Last-Translator: Helge Kreutzmann <debian@helgefjell.de>\n"
"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
@@ -4160,6 +4160,11 @@ msgstr "Aufruf nicht möglich: "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/dz.po b/po/dz.po
index 46936263d..b5f3f1893 100644
--- a/po/dz.po
+++ b/po/dz.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2006-09-19 09:49+0530\n"
"Last-Translator: Kinley Tshering <gasepkuenden2k3@hotmail.com>\n"
"Language-Team: Dzongkha <pgeyleg@dit.gov.bt>\n"
@@ -3908,6 +3908,11 @@ msgstr "ལས་བཀོལ་འབད་མ་ཚུགས།"
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/el.po b/po/el.po
index 25c990dca..efa239880 100644
--- a/po/el.po
+++ b/po/el.po
@@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2020-12-30 12:20+0200\n"
"Last-Translator: Vangelis Skarmoutsos <skarmoutsosv@gmail.com>\n"
"Language-Team: Greek <debian-l10n-greek@lists.debian.org>\n"
@@ -3899,6 +3899,11 @@ msgstr "Αδύνατη η επίκληση "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/es.po b/po/es.po
index 0c6aa642c..42e547489 100644
--- a/po/es.po
+++ b/po/es.po
@@ -37,7 +37,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 0.8.10\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2016-01-26 01:51+0100\n"
"Last-Translator: Manuel \"Venturi\" Porras Peralta <venturi@openmailbox."
"org>\n"
@@ -4151,6 +4151,11 @@ msgstr "No se pudo invocar "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, fuzzy, c-format
diff --git a/po/eu.po b/po/eu.po
index f6ac284c6..9f2cb2ce5 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2009-05-17 00:41+0200\n"
"Last-Translator: Piarres Beobide <pi@beobide.net>\n"
"Language-Team: Euskara <debian-l10n-basque@lists.debian.org>\n"
@@ -3909,6 +3909,11 @@ msgstr "Ezin da deitu "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/fi.po b/po/fi.po
index 5b4b8c0bd..8d9e39d36 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 0.5.26\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2008-12-11 14:52+0200\n"
"Last-Translator: Tapio Lehtonen <tale@debian.org>\n"
"Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n"
@@ -3901,6 +3901,11 @@ msgstr "Käynnistys ei onnistu"
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/fr.po b/po/fr.po
index 68b9a7dfa..2fd8fa603 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2019-01-21 09:19+0100\n"
"Last-Translator: Julien Patriarca <leatherface@debian.org>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
@@ -4170,6 +4170,11 @@ msgstr "Impossible d'invoquer "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/gl.po b/po/gl.po
index ff8a3163a..d90d6180f 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2011-05-12 15:28+0100\n"
"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
"Language-Team: galician <proxecto@trasno.net>\n"
@@ -3983,6 +3983,11 @@ msgstr "Non é posíbel chamar a "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/hu.po b/po/hu.po
index 7dcb90407..1d95a99b5 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2016-04-10 19:46+0200\n"
"Last-Translator: Gabor Kelemen <kelemeng@ubuntu.com>\n"
"Language-Team: Hungarian <gnome-hu-list@gnome.org>\n"
@@ -4052,6 +4052,11 @@ msgstr "Nem lehet meghívni "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, fuzzy, c-format
diff --git a/po/it.po b/po/it.po
index 581e4709c..f75afe31f 100644
--- a/po/it.po
+++ b/po/it.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2019-03-04 11:05+0100\n"
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
@@ -4117,6 +4117,11 @@ msgstr "Impossibile invocare "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/ja.po b/po/ja.po
index ce523c8ab..425a92617 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 2.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2022-08-14 14:30+0900\n"
"Last-Translator: Hideki Yamane <henrich@debian.org>\n"
"Language-Team: Japanese <debian-japanese@lists.debian.org>\n"
@@ -4038,6 +4038,11 @@ msgstr "呼び出せません"
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/km.po b/po/km.po
index fb54834ec..12d2a0f44 100644
--- a/po/km.po
+++ b/po/km.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2006-10-10 09:48+0700\n"
"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
"Language-Team: Khmer <support@khmeros.info>\n"
@@ -3884,6 +3884,11 @@ msgstr "មិន​អាច​ហៅ​ "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/ko.po b/po/ko.po
index eea8df712..0f388d15a 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2010-08-30 02:31+0900\n"
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
"Language-Team: Korean <debian-l10n-korean@lists.debian.org>\n"
@@ -3905,6 +3905,11 @@ msgstr "다음을 실행할 수 없습니다: "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/ku.po b/po/ku.po
index 1c4593d4f..4ab5d1514 100644
--- a/po/ku.po
+++ b/po/ku.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2008-05-08 12:48+0200\n"
"Last-Translator: Erdal Ronahi <erdal.ronahi@gmail.com>\n"
"Language-Team: ku <ubuntu-l10n-kur@lists.ubuntu.com>\n"
@@ -3766,6 +3766,11 @@ msgstr "%s venebû"
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/lt.po b/po/lt.po
index d0c474b00..8ee1642b4 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2008-08-02 01:47-0400\n"
"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
@@ -3873,6 +3873,11 @@ msgstr ""
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/mr.po b/po/mr.po
index 506d16ff3..40dab029f 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2008-11-20 23:27+0530\n"
"Last-Translator: Sampada <sampadanakhare@gmail.com>\n"
"Language-Team: Marathi, janabhaaratii, C-DAC, Mumbai, India "
@@ -3886,6 +3886,11 @@ msgstr "जारी करण्यास करण्यास असमर्
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/nb.po b/po/nb.po
index 74d7b34ba..c6514daf4 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -17,7 +17,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2018-10-30 20:53+0100\n"
"Last-Translator: Petter Reinholdtsen <pere@hungry.com>\n"
"Language-Team: Norwegian Bokmål <i18n-no@lister.ping.uio.no>\n"
@@ -3976,6 +3976,11 @@ msgstr "Klarte ikke å starte"
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/ne.po b/po/ne.po
index 5a153a8b7..a573e542e 100644
--- a/po/ne.po
+++ b/po/ne.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2006-06-12 14:35+0545\n"
"Last-Translator: Shiva Pokharel <pokharelshiva@hotmail.com>\n"
"Language-Team: Nepali <info@mpp.org.np>\n"
@@ -3882,6 +3882,11 @@ msgstr "आह्वान गर्न असक्षम भयो"
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/nl.po b/po/nl.po
index 9b47f1618..f968e8206 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 2.9.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-06-11 12:57+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2024-06-22 20:05+0200\n"
"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n"
"Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n"
@@ -4083,6 +4083,11 @@ msgstr "Mislukking bij aanroepen van "
msgid "untrusted public key algorithm: %s"
msgstr "niet-vertrouwd openbaar sleutelalgoritme: %s"
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/nn.po b/po/nn.po
index f4b6134e1..42488cf73 100644
--- a/po/nn.po
+++ b/po/nn.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2005-02-14 23:30+0100\n"
"Last-Translator: Havard Korsvoll <korsvoll@skulelinux.no>\n"
"Language-Team: Norwegian nynorsk <i18n-nn@lister.ping.uio.no>\n"
@@ -3897,6 +3897,11 @@ msgstr "Klarte ikkje starta "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/pl.po b/po/pl.po
index 330a8f808..6c0a30b5f 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 0.9.7.3\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-07-08 20:03+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2024-07-08 17:53+0200\n"
"Last-Translator: Michał Kułach <michal.kulach@gmail.com>\n"
"Language-Team: Polish <debian-l10n-polish@lists.debian.org>\n"
@@ -4090,6 +4090,11 @@ msgstr "Nie można wywołać "
msgid "untrusted public key algorithm: %s"
msgstr "niezaufany algorytm klucza publicznego: %s"
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/pt.po b/po/pt.po
index 93deeaecf..5bcc24f28 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2012-06-29 15:45+0100\n"
"Last-Translator: Miguel Figueiredo <elmig@debianpt.org>\n"
"Language-Team: Portuguese <traduz@debianpt.org>\n"
@@ -4005,6 +4005,11 @@ msgstr "Não foi possível invocar "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 2ce315b35..359767b5c 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2008-11-17 02:33-0200\n"
"Last-Translator: Felipe Augusto van de Wiel (faw) <faw@debian.org>\n"
"Language-Team: Brazilian Portuguese <debian-l10n-portuguese@lists.debian."
@@ -3924,6 +3924,11 @@ msgstr "Impossível invocar "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/ro.po b/po/ro.po
index e07ddd4e3..5f96226b5 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -26,7 +26,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 2.7.2\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2023-07-13 19:58+0200\n"
"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
"Language-Team: Romanian <debian-l10n-romanian@lists.debian.org>\n"
@@ -4187,6 +4187,11 @@ msgstr "Nu s-a putut invoca "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/ru.po b/po/ru.po
index b98d6e986..7d7222087 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -18,7 +18,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 2.2.0\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2021-02-22 20:02+0300\n"
"Last-Translator: Алексей Шилин <rootlexx@mail.ru>\n"
"Language-Team: русский <debian-l10n-russian@lists.debian.org>\n"
@@ -4088,6 +4088,11 @@ msgstr "Невозможно вызвать "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/sk.po b/po/sk.po
index fd9cba84f..b0b01dd2a 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2012-06-28 20:49+0100\n"
"Last-Translator: Ivan Masár <helix84@centrum.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -3967,6 +3967,11 @@ msgstr "Nedá sa vyvolať "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/sl.po b/po/sl.po
index ed597a0d7..316e5848c 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 0.5.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2012-06-27 21:29+0000\n"
"Last-Translator: Andrej Znidarsic <andrej.znidarsic@gmail.com>\n"
"Language-Team: Slovenian <sl@li.org>\n"
@@ -3973,6 +3973,11 @@ msgstr "Ni mogoče klicati "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/sv.po b/po/sv.po
index 037ff9216..203eb64f2 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2015-08-19 21:33+0200\n"
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"Language-Team: Swedish <debian-l10n-swedish@debian.org>\n"
@@ -4005,6 +4005,11 @@ msgstr "Kunde inte starta "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, fuzzy, c-format
diff --git a/po/th.po b/po/th.po
index 5ef490b59..d16cd1dbf 100644
--- a/po/th.po
+++ b/po/th.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2014-12-12 13:00+0700\n"
"Last-Translator: Theppitak Karoonboonyanan <thep@debian.org>\n"
"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
@@ -3892,6 +3892,11 @@ msgstr "ไม่สามารถเรียก "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, fuzzy, c-format
diff --git a/po/tl.po b/po/tl.po
index 1352c84e2..61ac0473d 100644
--- a/po/tl.po
+++ b/po/tl.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2007-03-29 21:36+0800\n"
"Last-Translator: Eric Pareja <xenos@upm.edu.ph>\n"
"Language-Team: Tagalog <debian-tl@banwa.upm.edu.ph>\n"
@@ -3913,6 +3913,11 @@ msgstr "Hindi ma-invoke "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/tr.po b/po/tr.po
index 02695127e..ffcfaadfd 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 2.6.0\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2023-04-19 15:15+0300\n"
"Last-Translator: Mert Dirik <mertdirik@gmail.com>\n"
"Language-Team: Debian l10n Turkish <debian-l10n-turkish@lists.debian.org>\n"
@@ -4034,6 +4034,11 @@ msgstr "Çağrılamıyor "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/uk.po b/po/uk.po
index 1f0b02c1f..c29754881 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -17,7 +17,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2012-09-25 20:19+0300\n"
"Last-Translator: A. Bondarenko <artem.brz@gmail.com>\n"
"Language-Team: Українська <uk@li.org>\n"
@@ -4028,6 +4028,11 @@ msgstr "Неможливо викликати "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/vi.po b/po/vi.po
index f64a29d8e..cceca8550 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.8\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2014-09-12 13:48+0700\n"
"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
@@ -4001,6 +4001,11 @@ msgstr "Không thể gọi "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, fuzzy, c-format
diff --git a/po/zh_CN.po b/po/zh_CN.po
index d3fedb455..f7cd0aadf 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 2.9.1\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2024-04-16 13:15-0400\n"
"Last-Translator: Boyuan Yang <073plan@gmail.com>\n"
"Language-Team: Chinese (simplified) <debian-l10n-chinese@lists.debian.org>\n"
@@ -3859,6 +3859,11 @@ msgstr "无法调用 "
msgid "untrusted public key algorithm: %s"
msgstr "不受信任的公钥算法:%s"
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 943f86fec..42c659cde 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: apt 1.2.X\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2024-05-25 09:01+0000\n"
+"POT-Creation-Date: 2024-07-30 04:29+0000\n"
"PO-Revision-Date: 2009-01-28 10:41+0800\n"
"Last-Translator: Tetralet <tetralet@gmail.com>\n"
"Language-Team: Debian-user in Chinese [Big5] <debian-chinese-big5@lists."
@@ -3865,6 +3865,11 @@ msgstr "無法 invoke "
msgid "untrusted public key algorithm: %s"
msgstr ""
+#: methods/gpgv.cc
+#, c-format
+msgid "%s will be deprecated in a future release"
+msgstr ""
+
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
#, c-format
diff --git a/test/integration/test-method-gpgv b/test/integration/test-method-gpgv
index 0f014e3d1..ffaa72c8f 100755
--- a/test/integration/test-method-gpgv
+++ b/test/integration/test-method-gpgv
@@ -48,6 +48,14 @@ testrun() {
[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE
[GNUPG:] ASSERT_PUBKEY_ALGO 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 1 rsa1024'
+ testgpgv 'Not asserted in the next level' 'SoonWorthless: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, ' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE
+[GNUPG:] ASSERT_PUBKEY_ALGO 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 1 brainpoolP256r1'
+
+ testgpgv 'Not asserted in the future level' 'LaterWorthless: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, ' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE
+[GNUPG:] ASSERT_PUBKEY_ALGO 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 1 nistp256'
+
testgpgv 'Good subkey signed with long keyid' 'Good: GOODSIG 5B6896415D44C43E' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, 4281DEDBD466EAE8C1F4157E5B6896415D44C43E!' '[GNUPG:] GOODSIG 5B6896415D44C43E Sebastian Subkey <subkey@example.org>
[GNUPG:] VALIDSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E 2018-08-16 1534459673 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE'
testgpgv 'Good subkey signed with fingerprint' 'Good: GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, 4281DEDBD466EAE8C1F4157E5B6896415D44C43E!' '[GNUPG:] GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E Sebastian Subkey <subkey@example.org>
@@ -108,6 +116,9 @@ gpgvmethod() {
Config-Item: Debug::Acquire::gpgv=1
Config-Item: Dir::Bin::apt-key=./faked-apt-key
Config-Item: APT::Hashes::SHA1::Weak=true
+Config-Item: APT::Key::Assert-Pubkey-Algo=>=rsa2048,nistp256,brainpoolP256r1
+Config-Item: APT::Key::Assert-Pubkey-Algo::Next=>=rsa2048,nistp256
+Config-Item: APT::Key::Assert-Pubkey-Algo::Future=>=rsa2048
600 URI Acquire
URI: file://${TMPWORKINGDIRECTORY}/message.sig
@@ -121,6 +132,9 @@ gpgvmethod() {
Config-Item: Debug::Acquire::gpgv=1
Config-Item: Dir::Bin::apt-key=./faked-apt-key
Config-Item: APT::Hashes::SHA1::Weak=true
+Config-Item: APT::Key::Assert-Pubkey-Algo=>=rsa2048,nistp256,brainpoolP256r1
+Config-Item: APT::Key::Assert-Pubkey-Algo::Next=>=rsa2048,nistp256
+Config-Item: APT::Key::Assert-Pubkey-Algo::Future=>=rsa2048
600 URI Acquire
URI: file://${TMPWORKINGDIRECTORY}/message.sig
@@ -135,6 +149,9 @@ gpgvmethod() {
Config-Item: Debug::Acquire::gpgv=1
Config-Item: Dir::Bin::apt-key=./faked-apt-key
Config-Item: APT::Hashes::SHA1::Weak=true
+Config-Item: APT::Key::Assert-Pubkey-Algo=>=rsa2048,nistp256,brainpoolP256r1
+Config-Item: APT::Key::Assert-Pubkey-Algo::Next=>=rsa2048,nistp256
+Config-Item: APT::Key::Assert-Pubkey-Algo::Future=>=rsa2048
600 URI Acquire
URI: file://${TMPWORKINGDIRECTORY}/message.sig
@@ -158,6 +175,9 @@ gpgvmethod() {
Config-Item: Debug::Acquire::gpgv=1
Config-Item: Dir::Bin::apt-key=./faked-apt-key
Config-Item: APT::Hashes::SHA1::Weak=true
+Config-Item: APT::Key::Assert-Pubkey-Algo=>=rsa2048,nistp256,brainpoolP256r1
+Config-Item: APT::Key::Assert-Pubkey-Algo::Next=>=rsa2048,nistp256
+Config-Item: APT::Key::Assert-Pubkey-Algo::Future=>=rsa2048
600 URI Acquire
URI: file://${TMPWORKINGDIRECTORY}/message.sig
@@ -199,3 +219,26 @@ echo '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Sebastian Subkey <subkey@example.org>
[GNUPG:] VALIDSIG 0000000000000000000000000000000000000000 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' > gpgv.output
testfailure apt update -o Dir::Bin::apt-key="./faked-apt-key" -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1
rm -rf rootdir/var/lib/apt/lists
+
+gpgvmethod() {
+ echo "601 Configuration
+Config-Item: Debug::Acquire::gpgv=1
+Config-Item: Dir::Bin::apt-key=./faked-apt-key
+Config-Item: APT::Hashes::SHA1::Weak=true
+Config-Item: APT::Key::Assert-Pubkey-Algo::Next=>=invalid
+
+600 URI Acquire
+URI: file://${TMPWORKINGDIRECTORY}/message.sig
+Filename: ${TMPWORKINGDIRECTORY}/message.data
+Signed-By: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!
+" | runapt "${METHODSDIR}/gpgv"
+}
+
+
+echo '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE
+[GNUPG:] ASSERT_PUBKEY_ALGO 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 1 brainpoolP256r1' > gpgv.output
+
+msgtest "Warns about invalid specification" ">=invalid"
+gpgvmethod >method.output 2>&1 || true
+testsuccess --nomsg grep "Message: Unrecognized public key specification '>=invalid' in option APT::Key::Assert-Pubkey-Algo::Next" method.output
diff --git a/test/integration/test-solver3-obsoleted-by b/test/integration/test-solver3-obsoleted-by
new file mode 100755
index 000000000..031589bb4
--- /dev/null
+++ b/test/integration/test-solver3-obsoleted-by
@@ -0,0 +1,87 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+setupenvironment
+configarchitecture 'amd64'
+allowremovemanual
+
+# We need a canary to make it trigger obsolete detection
+insertpackage 'installed' 'canary' 'amd64' '1' 'Depends: good | not-yet-built | obsolete | obsolete-in-experimental | obsolete-reason | obsolete-in-experimental-reason | local-only | current-version | obsolete-in-downgrade | obsolete-in-downgrade-reason'
+
+# This package is good, it still exists in the candidate
+insertpackage 'installed' 'good' 'amd64' '1' 'Source: good (= 1)'
+insertpackage 'unstable' 'good' 'amd64' '2' 'Source: good (= 2)'
+
+# not-yet-built is not yet obsolete, because it has only been built on i386
+insertpackage 'installed,unstable' 'not-yet-built' 'amd64' '1' 'Source: not-yet-built (= 1)'
+insertpackage 'unstable' 'not-yet-built' 'i386' '2' 'Source: not-yet-built (= 2)'
+
+# obsolete is obsolete because obsolete-reason has been built on the same arch and is the source candidate
+insertpackage 'installed,unstable' 'obsolete' 'amd64' '1' 'Source: obsolete (= 1)'
+insertpackage 'unstable' 'obsolete-reason' 'amd64' '2' 'Source: obsolete (= 2)'
+
+# obsolete-in-experimental is only obsoleted in experimental, so it is not yet considered obsolete
+insertpackage 'installed,unstable' 'obsolete-in-experimental' 'amd64' '1' 'Source: obsolete-in-experimental (= 1)'
+insertpackage 'experimental' 'obsolete-in-experimental-reason' 'amd64' '2' 'Source: obsolete-in-experimental (= 2)'
+
+# local-only only exists in the local install
+insertpackage 'installed' 'local-only' 'amd64' '1' 'Source: local-only (= 1)'
+
+# current-version
+insertpackage 'installed,unstable' 'current-version' 'amd64' '1' 'Source: current-version (= 1)'
+
+# obsolete-in-downgrade is only obsoleted in experimental, so it is not yet considered obsolete
+insertpackage 'installed,experimental' 'obsolete-in-downgrade' 'amd64' '2' 'Source: obsolete-in-downgrade (= 2)'
+insertpackage 'unstable' 'obsolete-in-downgrade-reason' 'amd64' '1' 'Source: obsolete-in-downgrade (= 1)'
+
+setupaptarchive
+
+testobsolete() {
+ out="$1"
+ shift
+ testsuccess $@ -o Debug::APT::Solver=4 -o APT::Solver=3.0 -s
+ cp rootdir/tmp/testsuccess.output upgrade.output
+ testsuccessequal "$out" grep "Obsolete:" upgrade.output
+}
+
+testobsolete "Obsolete: obsolete:amd64=1 due to obsolete-reason:amd64=2
+Obsolete: local-only:amd64=1 - not installable" aptget dist-upgrade
+testobsolete "Obsolete: obsolete:amd64=1 due to obsolete-reason:amd64=2
+Obsolete: local-only:amd64=1 - not installable" aptget dist-upgrade --no-strict-pinning
+
+msgmsg "Pinning the installed version down to experimental level means experimental wins"
+printf 'Package: obsolete-in-experimental\nPin: release *\nPin-Priority: 1\n' > rootdir/etc/apt/preferences
+testobsolete "Obsolete: obsolete:amd64=1 due to obsolete-reason:amd64=2
+Obsolete: obsolete-in-experimental:amd64=1 due to obsolete-in-experimental-reason:amd64=2
+Obsolete: local-only:amd64=1 - not installable" aptget dist-upgrade
+testobsolete "Obsolete: obsolete:amd64=1 due to obsolete-reason:amd64=2
+Obsolete: obsolete-in-experimental:amd64=1 due to obsolete-in-experimental-reason:amd64=2
+Obsolete: local-only:amd64=1 - not installable" aptget dist-upgrade --no-strict-pinning
+
+msgmsg "Testing no-strict-pinning with negative pins on all packages"
+printf 'Package: *\nPin: release *\nPin-Priority: -1\n' > rootdir/etc/apt/preferences
+testobsolete "Obsolete: not-yet-built:amd64 - not installable
+Obsolete: good:amd64 - not installable
+Obsolete: obsolete:amd64 - not installable
+Obsolete: obsolete-in-experimental:amd64 - not installable
+Obsolete: current-version:amd64 - not installable
+Obsolete: local-only:amd64 - not installable
+Obsolete: obsolete-in-downgrade:amd64 - not installable" aptget dist-upgrade
+
+testobsolete "Obsolete: obsolete:amd64=1 due to obsolete-reason:amd64=2
+Obsolete: obsolete-in-experimental:amd64=1 due to obsolete-in-experimental-reason:amd64=2
+Obsolete: local-only:amd64=1 - not installable
+Obsolete: obsolete-in-downgrade-reason:amd64=1 due to obsolete-in-downgrade:amd64=2" aptget dist-upgrade --no-strict-pinning
+
+
+msgmsg "Testing that pinning a downgrade does not trigger obsoletes handling"
+printf 'Package: downgrade-reason\nPin: release *\nPin-Priority: 1000\n' > rootdir/etc/apt/preferences
+
+testobsolete "Obsolete: obsolete:amd64=1 due to obsolete-reason:amd64=2
+Obsolete: local-only:amd64=1 - not installable" aptget dist-upgrade
+testobsolete "Obsolete: obsolete:amd64=1 due to obsolete-reason:amd64=2
+Obsolete: local-only:amd64=1 - not installable" aptget dist-upgrade --no-strict-pinning
+
+
diff --git a/test/libapt/assert_pubkeyalgo_test.cc b/test/libapt/assert_pubkeyalgo_test.cc
new file mode 100644
index 000000000..88a070bbe
--- /dev/null
+++ b/test/libapt/assert_pubkeyalgo_test.cc
@@ -0,0 +1,56 @@
+#include <config.h>
+
+#include <apt-pkg/error.h>
+#include <apt-pkg/gpgv.h>
+
+#include "common.h"
+
+TEST(AssertPubKeyAlgo_Test, test)
+{
+ EXPECT_TRUE(IsAssertedPubKeyAlgo("rsa2048", ">=rsa2048"));
+ _error->DumpErrors();
+ EXPECT_TRUE(_error->empty());
+
+ EXPECT_TRUE(IsAssertedPubKeyAlgo("rsa2048", "another,>=rsa2048"));
+ EXPECT_TRUE(_error->empty());
+
+ EXPECT_FALSE(IsAssertedPubKeyAlgo("rsa2048", ">=rsa2049"));
+ EXPECT_TRUE(_error->empty());
+
+ EXPECT_TRUE(IsAssertedPubKeyAlgo("ed25519", ">=rsa2048,ed25519"));
+ EXPECT_TRUE(_error->empty());
+}
+
+TEST(AssertPubKeyAlgo_Test, CanOnlyCompareRSA)
+{
+ std::string msg;
+ EXPECT_FALSE(IsAssertedPubKeyAlgo("ed25519", ">=ed25519"));
+ EXPECT_TRUE(_error->PopMessage(msg));
+ EXPECT_EQ("Unrecognized public key specification '>=ed25519' in option >=ed25519", msg);
+ EXPECT_TRUE(_error->empty());
+}
+
+TEST(AssertPubKeyAlgo_Test, EmptyOption)
+{
+ std::string msg;
+ EXPECT_FALSE(IsAssertedPubKeyAlgo("ed25519", ""));
+ EXPECT_TRUE(_error->empty());
+
+ EXPECT_FALSE(IsAssertedPubKeyAlgo("ed25519", ","));
+ EXPECT_TRUE(_error->PopMessage(msg));
+ EXPECT_EQ("Empty item in public key assertion string option ,", msg);
+ EXPECT_TRUE(_error->empty());
+
+ EXPECT_FALSE(IsAssertedPubKeyAlgo("ed25519", "moo,"));
+ EXPECT_TRUE(_error->empty());
+
+ EXPECT_FALSE(IsAssertedPubKeyAlgo("ed25519", "moo,,"));
+ EXPECT_TRUE(_error->PopMessage(msg));
+ EXPECT_EQ("Empty item in public key assertion string option moo,,", msg);
+ EXPECT_TRUE(_error->empty());
+
+ EXPECT_FALSE(IsAssertedPubKeyAlgo("ed25519", ",moo"));
+ EXPECT_TRUE(_error->PopMessage(msg));
+ EXPECT_EQ("Empty item in public key assertion string option ,moo", msg);
+ EXPECT_TRUE(_error->empty());
+}