From f76c325306e03f7bbdb1d5b2c7ab70b643284082 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 9 Nov 2021 04:55:22 -0500 Subject: [PATCH] import libdnf-0.63.0-3.el8 --- .gitignore | 2 +- .libdnf.metadata | 2 +- ...oxy-password-isn-t-set-RhBug-1888946.patch | 87 - ...Improve-performance-for-module-query.patch | 32 + ...nce-description-of-modular-solvables.patch | 26 + ...ling-for-src-artifacts-RhBug-1809314.patch | 73 - ...e-conflict-in-config.h-RhBug-1918818.patch | 101 - .../0003-Revert-Fix-typo-lates-latest.patch | 26 + ...vert-Remove-unused-code-bump-version.patch | 39 + ...-retrieving-repository-configuration.patch | 1136 ---- ...-ext-solv-files-without-its-repodata.patch | 134 - ...new-type-of-the-module-resolve-error.patch | 89 + ...-Add-new-option-module-stream-switch.patch | 53 - ...ditional-fallback-for-module-resolve.patch | 62 + ...uring-modular-enable-in-context-part.patch | 23 - ...w-to-handle-context-according-to-sta.patch | 27 + ...0008-Revert-Fix-load-update-FailSafe.patch | 76 + SOURCES/0008-Update-translations.patch | 3698 ------------- ...Change-mechanism-of-module-conflicts.patch | 78 + ...dVersion2Modules-as-late-as-possible.patch | 214 + ...-modular-queries-with-the-new-solver.patch | 108 + ...-compatible-layer-for-MdDocuments-v2.patch | 171 + ...ternative-constructor-for-ModulePack.patch | 77 + ...t-modular-solver-to-new-context-type.patch | 113 + ...age-of-context-and-version-in-modula.patch | 65 + ...test-caused-by-the-revert-of-new-mod.patch | 34 + ...-after-change-of-handling-advisories.patch | 274 + ...ror-formatting-function-for-original.patch | 34 + SOURCES/0019-Remove-redundant-test.patch | 57 + ..._context_module_install-memory-leaks.patch | 28 + ...rk-private-func-static-return-values.patch | 91 + ...to-decode-UTF-8-strings-RhBug1893176.patch | 32 + SOURCES/0023-Update-translations.patch | 4555 +++++++++++++++++ SPECS/libdnf.spec | 94 +- 34 files changed, 6378 insertions(+), 5333 deletions(-) delete mode 100644 SOURCES/0001-Better-msgs-if-basecachedir-or-proxy-password-isn-t-set-RhBug-1888946.patch create mode 100644 SOURCES/0001-Revert-Improve-performance-for-module-query.patch create mode 100644 SOURCES/0002-Revert-Enhance-description-of-modular-solvables.patch delete mode 100644 SOURCES/0002-modules-Add-special-handling-for-src-artifacts-RhBug-1809314.patch delete mode 100644 SOURCES/0003-Avoid-multilib-file-conflict-in-config.h-RhBug-1918818.patch create mode 100644 SOURCES/0003-Revert-Fix-typo-lates-latest.patch create mode 100644 SOURCES/0004-Revert-Remove-unused-code-bump-version.patch delete mode 100644 SOURCES/0004-context-improve-retrieving-repository-configuration.patch delete mode 100644 SOURCES/0005-Allow-loading-incomplete-cache-and-loading-ext-solv-files-without-its-repodata.patch create mode 100644 SOURCES/0005-Revert-Report-a-new-type-of-the-module-resolve-error.patch delete mode 100644 SOURCES/0006-Add-new-option-module-stream-switch.patch create mode 100644 SOURCES/0006-Revert-Add-additional-fallback-for-module-resolve.patch delete mode 100644 SOURCES/0007-Fix-removal-step-during-modular-enable-in-context-part.patch create mode 100644 SOURCES/0007-Revert-Decide-how-to-handle-context-according-to-sta.patch create mode 100644 SOURCES/0008-Revert-Fix-load-update-FailSafe.patch delete mode 100644 SOURCES/0008-Update-translations.patch create mode 100644 SOURCES/0009-Revert-Change-mechanism-of-module-conflicts.patch create mode 100644 SOURCES/0010-Revert-Call-addVersion2Modules-as-late-as-possible.patch create mode 100644 SOURCES/0011-Revert-Fix-modular-queries-with-the-new-solver.patch create mode 100644 SOURCES/0012-Revert-Add-compatible-layer-for-MdDocuments-v2.patch create mode 100644 SOURCES/0013-Revert-Add-an-alternative-constructor-for-ModulePack.patch create mode 100644 SOURCES/0014-Revert-Adjust-modular-solver-to-new-context-type.patch create mode 100644 SOURCES/0015-Revert-Change-usage-of-context-and-version-in-modula.patch create mode 100644 SOURCES/0016-Fix-failing-unittest-caused-by-the-revert-of-new-mod.patch create mode 100644 SOURCES/0017-Modify-unit-test-after-change-of-handling-advisories.patch create mode 100644 SOURCES/0018-Adjust-module-error-formatting-function-for-original.patch create mode 100644 SOURCES/0019-Remove-redundant-test.patch create mode 100644 SOURCES/0020-Fix-dnf_context_module_install-memory-leaks.patch create mode 100644 SOURCES/0021-covscan-remove-unused-vars-mark-private-func-static-return-values.patch create mode 100644 SOURCES/0022-hawkey-surrogateescape-error-handler-to-decode-UTF-8-strings-RhBug1893176.patch create mode 100644 SOURCES/0023-Update-translations.patch diff --git a/.gitignore b/.gitignore index ce72cd2..84049ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/libdnf-0.55.0.tar.gz +SOURCES/libdnf-0.63.0.tar.gz diff --git a/.libdnf.metadata b/.libdnf.metadata index 85f3501..c25c067 100644 --- a/.libdnf.metadata +++ b/.libdnf.metadata @@ -1 +1 @@ -5d997c2c7113cd50af986ada5ff10a62853f1943 SOURCES/libdnf-0.55.0.tar.gz +5bb88aae1c1b8c104e34916c7509b04fcf7b4de9 SOURCES/libdnf-0.63.0.tar.gz diff --git a/SOURCES/0001-Better-msgs-if-basecachedir-or-proxy-password-isn-t-set-RhBug-1888946.patch b/SOURCES/0001-Better-msgs-if-basecachedir-or-proxy-password-isn-t-set-RhBug-1888946.patch deleted file mode 100644 index 7666421..0000000 --- a/SOURCES/0001-Better-msgs-if-basecachedir-or-proxy-password-isn-t-set-RhBug-1888946.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 2353dfbcb49a16bd37115915517417678fe49b19 Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Fri, 13 Nov 2020 09:55:23 +0100 -Subject: [PATCH] Better msgs if "basecachedir" or "proxy_password" isn't set - (RhBug:1888946) - -Generates more specific error messages: -- repo '%s': 'basecachedir' is not set -- repo '%s': 'proxy_username' is set but not 'proxy_password' -- 'proxy_username' is set but not 'proxy_password' -instead of generic "GetValue(): Value not set" ---- - libdnf/repo/Repo.cpp | 24 ++++++++++++++++++++++-- - 1 file changed, 22 insertions(+), 2 deletions(-) - -diff --git a/libdnf/repo/Repo.cpp b/libdnf/repo/Repo.cpp -index d7c137d75..34539e1ee 100644 ---- a/libdnf/repo/Repo.cpp -+++ b/libdnf/repo/Repo.cpp -@@ -484,8 +484,12 @@ std::unique_ptr Repo::Impl::lrHandleInitLocal() - handleSetOpt(h.get(), LRO_LOCAL, 1L); - #ifdef LRO_SUPPORTS_CACHEDIR - /* If zchunk is enabled, set librepo cache dir */ -- if (conf->getMasterConfig().zchunk().getValue()) -+ if (conf->getMasterConfig().zchunk().getValue()) { -+ if (conf->basecachedir().empty()) { -+ throw Exception(tfm::format(_("repo '%s': 'basecachedir' is not set"), id)); -+ } - handleSetOpt(h.get(), LRO_CACHEDIR, conf->basecachedir().getValue().c_str()); -+ } - #endif - return h; - } -@@ -526,6 +530,9 @@ std::unique_ptr Repo::Impl::lrHandleInitRemote(const char *destdir) - handleSetOpt(h.get(), LRO_METALINKURL, tmp.c_str()); - } - handleSetOpt(h.get(), LRO_FASTESTMIRROR, conf->fastestmirror().getValue() ? 1L : 0L); -+ if (conf->basecachedir().empty()) { -+ throw Exception(tfm::format(_("repo '%s': 'basecachedir' is not set"), id)); -+ } - auto fastestMirrorCacheDir = conf->basecachedir().getValue(); - if (fastestMirrorCacheDir.back() != '/') - fastestMirrorCacheDir.push_back('/'); -@@ -569,8 +576,12 @@ std::unique_ptr Repo::Impl::lrHandleInitRemote(const char *destdir) - - #ifdef LRO_SUPPORTS_CACHEDIR - /* If zchunk is enabled, set librepo cache dir */ -- if (conf->getMasterConfig().zchunk().getValue()) -+ if (conf->getMasterConfig().zchunk().getValue()) { -+ if (conf->basecachedir().empty()) { -+ throw Exception(tfm::format(_("repo '%s': 'basecachedir' is not set"), id)); -+ } - handleSetOpt(h.get(), LRO_CACHEDIR, conf->basecachedir().getValue().c_str()); -+ } - #endif - - auto minrate = conf->minrate().getValue(); -@@ -610,6 +621,9 @@ std::unique_ptr Repo::Impl::lrHandleInitRemote(const char *destdir) - if (!conf->proxy_username().empty()) { - userpwd = conf->proxy_username().getValue(); - if (!userpwd.empty()) { -+ if (conf->proxy_password().empty()) { -+ throw RepoError(tfm::format(_("repo '%s': 'proxy_username' is set but not 'proxy_password'"), id)); -+ } - userpwd = formatUserPassString(userpwd, conf->proxy_password().getValue(), true); - handleSetOpt(h.get(), LRO_PROXYUSERPWD, userpwd.c_str()); - } -@@ -1346,6 +1360,9 @@ std::string Repo::Impl::getHash() const - - std::string Repo::Impl::getCachedir() const - { -+ if (conf->basecachedir().empty()) { -+ throw Exception(tfm::format(_("repo '%s': 'basecachedir' is not set"), id)); -+ } - auto repodir(conf->basecachedir().getValue()); - if (repodir.back() != '/') - repodir.push_back('/'); -@@ -1690,6 +1707,9 @@ static LrHandle * newHandle(ConfigMain * conf) - if (!conf->proxy_username().empty()) { - auto userpwd = conf->proxy_username().getValue(); - if (!userpwd.empty()) { -+ if (conf->proxy_password().empty()) { -+ throw RepoError(_("'proxy_username' is set but not 'proxy_password'")); -+ } - userpwd = formatUserPassString(userpwd, conf->proxy_password().getValue(), true); - handleSetOpt(h, LRO_PROXYUSERPWD, userpwd.c_str()); - } diff --git a/SOURCES/0001-Revert-Improve-performance-for-module-query.patch b/SOURCES/0001-Revert-Improve-performance-for-module-query.patch new file mode 100644 index 0000000..87252e8 --- /dev/null +++ b/SOURCES/0001-Revert-Improve-performance-for-module-query.patch @@ -0,0 +1,32 @@ +From 293e10c58dadc023070f959b08999b6bc2efb1b2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:51 +0200 +Subject: [PATCH 01/19] Revert "Improve performance for module query" + +This reverts commit 38942d42b6980216e5d5e2e5798664cd08deb3ba. +--- + libdnf/module/ModulePackageContainer.cpp | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index 1d5070ca..edb7e9ec 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -775,11 +775,9 @@ ModulePackageContainer::query(std::string name, std::string stream, std::string + Query query(pImpl->moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); + // platform modules are installed and not in modules std::Map. + query.available(); +- if (!name.empty() || !stream.empty()) { +- std::ostringstream ss; +- ss << stringFormater(name) << ":" << stringFormater(stream); +- query.addFilter(HY_PKG_DESCRIPTION, HY_GLOB, ss.str().c_str()); +- } ++ std::ostringstream ss; ++ ss << stringFormater(name) << ":" << stringFormater(stream); ++ query.addFilter(HY_PKG_DESCRIPTION, HY_GLOB, ss.str().c_str()); + if (!context.empty()) { + query.addFilter(HY_PKG_SUMMARY, HY_GLOB, context.c_str()); + } +-- +2.31.1 + diff --git a/SOURCES/0002-Revert-Enhance-description-of-modular-solvables.patch b/SOURCES/0002-Revert-Enhance-description-of-modular-solvables.patch new file mode 100644 index 0000000..905ca45 --- /dev/null +++ b/SOURCES/0002-Revert-Enhance-description-of-modular-solvables.patch @@ -0,0 +1,26 @@ +From fe466856f54ed2cd261a863b2c929a064ae5e945 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:51 +0200 +Subject: [PATCH 02/19] Revert "Enhance description of modular solvables" + +This reverts commit 943d9a1ba905f2e10975b16edff0684964c135b6. +--- + libdnf/module/ModulePackage.cpp | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/libdnf/module/ModulePackage.cpp b/libdnf/module/ModulePackage.cpp +index 3757f6ad..d0017877 100644 +--- a/libdnf/module/ModulePackage.cpp ++++ b/libdnf/module/ModulePackage.cpp +@@ -50,8 +50,6 @@ namespace libdnf { + * Arch: $arch (If arch is not defined, set "noarch") + * Provides: module($name) + * Provides: module($name:$stream) +- * Summary: original_context +- * Description: name:stream + */ + static void setSovable(Pool * pool, Solvable * solvable, const std::string & name, + const std::string & stream, const std::string & version, const std::string & context, const char * arch, const std::string & original_context) +-- +2.31.1 + diff --git a/SOURCES/0002-modules-Add-special-handling-for-src-artifacts-RhBug-1809314.patch b/SOURCES/0002-modules-Add-special-handling-for-src-artifacts-RhBug-1809314.patch deleted file mode 100644 index a16d544..0000000 --- a/SOURCES/0002-modules-Add-special-handling-for-src-artifacts-RhBug-1809314.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 71db968178e5d8cd4c01ed36fa940c2a95f3e494 Mon Sep 17 00:00:00 2001 -From: Jaroslav Mracek -Date: Mon, 9 Nov 2020 18:10:37 +0100 -Subject: [PATCH] [modules] Add special handling for src artifacts - (RhBug:1809314) - -Source packages are special because they cannot be installed and provide -nothing, therefore they should be handled by a different way than binary -packages. Source rpm should not trigger a removal of binary packages. ---- - libdnf/dnf-sack.cpp | 22 +++++++++++++++++++--- - 1 file changed, 19 insertions(+), 3 deletions(-) - -diff --git a/libdnf/dnf-sack.cpp b/libdnf/dnf-sack.cpp -index 9fd2c72d1..d44e1d86d 100644 ---- a/libdnf/dnf-sack.cpp -+++ b/libdnf/dnf-sack.cpp -@@ -2335,20 +2335,29 @@ setModuleExcludes(DnfSack *sack, const char ** hotfixRepos, - { - dnf_sack_set_module_excludes(sack, nullptr); - std::vector names; -+ std::vector srcNames; - libdnf::DependencyContainer nameDependencies{sack}; - libdnf::Nevra nevra; - for (const auto &rpm : includeNEVRAs) { - if (nevra.parse(rpm.c_str(), HY_FORM_NEVRA)) { -- names.push_back(nevra.getName()); -- nameDependencies.addReldep(nevra.getName().c_str()); -+ auto arch = nevra.getArch(); -+ // source packages do not provide anything and must not cause excluding binary packages -+ if (arch == "src" || arch == "nosrc") { -+ srcNames.push_back(nevra.getName()); -+ } else { -+ names.push_back(nevra.getName()); -+ nameDependencies.addReldep(nevra.getName().c_str()); -+ } - } - } - - std::vector namesCString(names.size() + 1); -+ std::vector srcNamesCString(srcNames.size() + 1); - std::vector excludeNEVRAsCString(excludeNEVRAs.size() + 1); - std::vector includeNEVRAsCString(includeNEVRAs.size() + 1); - - transform(names.begin(), names.end(), namesCString.begin(), std::mem_fn(&std::string::c_str)); -+ transform(srcNames.begin(), srcNames.end(), srcNamesCString.begin(), std::mem_fn(&std::string::c_str)); - transform(excludeNEVRAs.begin(), excludeNEVRAs.end(), excludeNEVRAsCString.begin(), - std::mem_fn(&std::string::c_str)); - transform(includeNEVRAs.begin(), includeNEVRAs.end(), includeNEVRAsCString.begin(), -@@ -2363,6 +2372,7 @@ setModuleExcludes(DnfSack *sack, const char ** hotfixRepos, - libdnf::Query excludeQuery{keepPackages}; - libdnf::Query excludeProvidesQuery{keepPackages}; - libdnf::Query excludeNamesQuery(keepPackages); -+ libdnf::Query excludeSrcNamesQuery(keepPackages); - includeQuery.addFilter(HY_PKG_NEVRA_STRICT, HY_EQ, includeNEVRAsCString.data()); - - excludeQuery.addFilter(HY_PKG_NEVRA_STRICT, HY_EQ, excludeNEVRAsCString.data()); -@@ -2372,8 +2382,14 @@ setModuleExcludes(DnfSack *sack, const char ** hotfixRepos, - excludeProvidesQuery.addFilter(HY_PKG_PROVIDES, &nameDependencies); - excludeProvidesQuery.queryDifference(includeQuery); - -- // Requred to filtrate out source packages and packages with incompatible architectures -+ // Search for source packages with same names as included source artifacts -+ excludeSrcNamesQuery.addFilter(HY_PKG_NAME, HY_EQ, srcNamesCString.data()); -+ const char * srcArchs[] = {"src", "nosrc", nullptr}; -+ excludeSrcNamesQuery.addFilter(HY_PKG_ARCH, HY_EQ, srcArchs); -+ -+ // Required to filtrate out source packages and packages with incompatible architectures - excludeNamesQuery.addFilter(HY_PKG_NAME, HY_EQ, namesCString.data()); -+ excludeNamesQuery.queryUnion(excludeSrcNamesQuery); - excludeNamesQuery.queryDifference(includeQuery); - - dnf_sack_set_module_excludes(sack, excludeQuery.getResultPset()); diff --git a/SOURCES/0003-Avoid-multilib-file-conflict-in-config.h-RhBug-1918818.patch b/SOURCES/0003-Avoid-multilib-file-conflict-in-config.h-RhBug-1918818.patch deleted file mode 100644 index ae93fb0..0000000 --- a/SOURCES/0003-Avoid-multilib-file-conflict-in-config.h-RhBug-1918818.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 3f6adc99506f065d0858e4d9d46055be9d070634 Mon Sep 17 00:00:00 2001 -From: Nicola Sella -Date: Fri, 22 Jan 2021 16:07:37 +0100 -Subject: [PATCH] Avoid multilib file conflict in config.h (RhBug:1918818) - -=changelog= -msg: Avoid multilib file conflicts in config.h -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1918818 ---- - .gitignore | 2 +- - libdnf/CMakeLists.txt | 8 ++++++- - libdnf/{config.h.in => config-64.h.in} | 6 +++--- - libdnf/config.h | 29 ++++++++++++++++++++++++++ - 4 files changed, 40 insertions(+), 5 deletions(-) - rename libdnf/{config.h.in => config-64.h.in} (87%) - create mode 100644 libdnf/config.h - -diff --git a/.gitignore b/.gitignore -index e17a9b9bb..0a63bdae7 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -5,4 +5,4 @@ - build - *.pyc - data/tests/modules/yum.repos.d/test.repo --libdnf/config.h -+libdnf/config-64.h -diff --git a/libdnf/CMakeLists.txt b/libdnf/CMakeLists.txt -index e82aac11e..25f33d7b0 100644 ---- a/libdnf/CMakeLists.txt -+++ b/libdnf/CMakeLists.txt -@@ -35,7 +35,13 @@ set(LIBDNF_SRCS - include_directories(transaction) - add_subdirectory("transaction") - --configure_file("config.h.in" ${CMAKE_CURRENT_SOURCE_DIR}/config.h) -+if(CMAKE_SIZEOF_VOID_P EQUAL 8) -+ set(MULTILIB_ARCH "64") -+ configure_file("config-64.h.in" ${CMAKE_CURRENT_SOURCE_DIR}/config-64.h) -+elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) -+ set(MULTILIB_ARCH "32") -+ configure_file("config-64.h.in" ${CMAKE_CURRENT_SOURCE_DIR}/config-32.h) -+endif() - configure_file("dnf-version.h.in" ${CMAKE_CURRENT_SOURCE_DIR}/dnf-version.h) - configure_file("libdnf.pc.in" ${CMAKE_CURRENT_BINARY_DIR}/libdnf.pc @ONLY) - -diff --git a/libdnf/config.h.in b/libdnf/config-64.h.in -similarity index 87% -rename from libdnf/config.h.in -rename to libdnf/config-64.h.in -index 77974f757..e2329fe71 100644 ---- a/libdnf/config.h.in -+++ b/libdnf/config-64.h.in -@@ -18,9 +18,9 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - --#ifndef _LIBDNF_CONFIG_H_ --#define _LIBDNF_CONFIG_H_ -+#ifndef _LIBDNF_CONFIG_@MULTILIB_ARCH@_H_ -+#define _LIBDNF_CONFIG_@MULTILIB_ARCH@_H_ - - #define DEFAULT_PLUGINS_DIRECTORY "@CMAKE_INSTALL_FULL_LIBDIR@/libdnf/plugins/" - --#endif // _LIBDNF_CONFIG_H_ -+#endif // _LIBDNF_CONFIG_@MULTILIB_ARCH@_H_ -diff --git a/libdnf/config.h b/libdnf/config.h -new file mode 100644 -index 000000000..16121f6f5 ---- /dev/null -+++ b/libdnf/config.h -@@ -0,0 +1,29 @@ -+/* -+ * Copyright (C) 2018 Red Hat, Inc. -+ * -+ * Licensed under the GNU Lesser General Public License Version 2.1 -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#include -+ -+#if __WORDSIZE == 32 -+#include "config-32.h" -+#elif __WORDSIZE == 64 -+#include "config-64.h" -+#else -+#error "Unknown word size" -+#endif diff --git a/SOURCES/0003-Revert-Fix-typo-lates-latest.patch b/SOURCES/0003-Revert-Fix-typo-lates-latest.patch new file mode 100644 index 0000000..6ec9672 --- /dev/null +++ b/SOURCES/0003-Revert-Fix-typo-lates-latest.patch @@ -0,0 +1,26 @@ +From adf159cce65fa5b15f81dd3ee319e551f01def1a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:51 +0200 +Subject: [PATCH 03/19] Revert "Fix typo: lates -> latest" + +This reverts commit 2a7a315cda61355d60fc0dd0fae9ccd48079a9c5. +--- + libdnf/dnf-context.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libdnf/dnf-context.cpp b/libdnf/dnf-context.cpp +index 926681c2..ccb6fe83 100644 +--- a/libdnf/dnf-context.cpp ++++ b/libdnf/dnf-context.cpp +@@ -3253,7 +3253,7 @@ report_problems(const std::vectorwarning(tfm::format(_("Modular dependency problem with Defaults: %s"), report.c_str())); + break; + case libdnf::ModulePackageContainer::ModuleErrorType::ERROR_IN_LATEST: +- logger->warning(tfm::format(_("Modular dependency problem with the latest modules: %s"), ++ logger->warning(tfm::format(_("Modular dependency problem with the lates modules: %s"), + report.c_str())); + break; + case libdnf::ModulePackageContainer::ModuleErrorType::ERROR: +-- +2.31.1 + diff --git a/SOURCES/0004-Revert-Remove-unused-code-bump-version.patch b/SOURCES/0004-Revert-Remove-unused-code-bump-version.patch new file mode 100644 index 0000000..a662d3d --- /dev/null +++ b/SOURCES/0004-Revert-Remove-unused-code-bump-version.patch @@ -0,0 +1,39 @@ +From 291f0393b54b31228c7a4c8c112003b64632967b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:52 +0200 +Subject: [PATCH 04/19] Revert "Remove unused code bump version" + +This reverts commit f0fde46c42f2424135617b29fdfbcbf9e17fc79a. +--- + libdnf/module/ModulePackageContainer.cpp | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index edb7e9ec..1bfdd8c1 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -1014,6 +1014,21 @@ modulePackageLatestPerRepoSorter(DnfSack * sack, const ModulePackage * first, co + return first->getVersionNum() > second->getVersionNum(); + } + ++static bool ++modulePackageLatestSorter(DnfSack * sack, const ModulePackage * first, const ModulePackage * second) ++{ ++ int cmp = g_strcmp0(first->getNameCStr(), second->getNameCStr()); ++ if (cmp != 0) ++ return cmp < 0; ++ cmp = dnf_sack_evr_cmp(sack, first->getStreamCStr(), second->getStreamCStr()); ++ if (cmp != 0) ++ return cmp < 0; ++ cmp = g_strcmp0(first->getArchCStr(), second->getArchCStr()); ++ if (cmp != 0) ++ return cmp < 0; ++ return first->getVersionNum() > second->getVersionNum(); ++} ++ + std::vector>> + ModulePackageContainer::getLatestModulesPerRepo(ModuleState moduleFilter, + std::vector modulePackages) +-- +2.31.1 + diff --git a/SOURCES/0004-context-improve-retrieving-repository-configuration.patch b/SOURCES/0004-context-improve-retrieving-repository-configuration.patch deleted file mode 100644 index 79bdeff..0000000 --- a/SOURCES/0004-context-improve-retrieving-repository-configuration.patch +++ /dev/null @@ -1,1136 +0,0 @@ -From be8449aa177473a834a5b2c401a8a3fcc61522b4 Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Wed, 2 Dec 2020 08:00:07 +0100 -Subject: [PATCH 1/9] Option: Add reset() method - -The method resets the option to its initial state. -Can be used, for example, before reloading the configuration in daemon -mode (PackageKit). ---- - libdnf/conf/Option.hpp | 2 ++ - libdnf/conf/OptionBool.hpp | 9 ++++++++- - libdnf/conf/OptionChild.hpp | 14 ++++++++++++++ - libdnf/conf/OptionEnum.hpp | 15 +++++++++++++++ - libdnf/conf/OptionNumber.hpp | 10 +++++++++- - libdnf/conf/OptionString.cpp | 11 ++++++++--- - libdnf/conf/OptionString.hpp | 8 ++++++++ - libdnf/conf/OptionStringList.hpp | 9 ++++++++- - 8 files changed, 72 insertions(+), 6 deletions(-) - -diff --git a/libdnf/conf/Option.hpp b/libdnf/conf/Option.hpp -index e9a9dfc84..849871fe7 100644 ---- a/libdnf/conf/Option.hpp -+++ b/libdnf/conf/Option.hpp -@@ -62,6 +62,8 @@ class Option { - virtual void set(Priority priority, const std::string & value) = 0; - virtual std::string getValueString() const = 0; - virtual bool empty() const noexcept; -+ /// Resets the option to its initial state. -+ virtual void reset() = 0; - virtual ~Option() = default; - - protected: -diff --git a/libdnf/conf/OptionBool.hpp b/libdnf/conf/OptionBool.hpp -index c27ab0b79..a5e647807 100644 ---- a/libdnf/conf/OptionBool.hpp -+++ b/libdnf/conf/OptionBool.hpp -@@ -47,6 +47,7 @@ class OptionBool : public Option { - std::string getValueString() const override; - const char * const * getTrueValues() const noexcept; - const char * const * getFalseValues() const noexcept; -+ void reset() override; - - protected: - const char * const * const trueValues; -@@ -84,7 +85,13 @@ inline const char * const * OptionBool::getTrueValues() const noexcept - - inline const char * const * OptionBool::getFalseValues() const noexcept - { -- return falseValues ? falseValues : defFalseValues; -+ return falseValues ? falseValues : defFalseValues; -+} -+ -+inline void OptionBool::reset() -+{ -+ value = defaultValue; -+ priority = Priority::DEFAULT; - } - - } -diff --git a/libdnf/conf/OptionChild.hpp b/libdnf/conf/OptionChild.hpp -index 5d1503cb6..3056345f9 100644 ---- a/libdnf/conf/OptionChild.hpp -+++ b/libdnf/conf/OptionChild.hpp -@@ -39,6 +39,7 @@ class OptionChild : public Option { - const typename ParentOptionType::ValueType getDefaultValue() const; - std::string getValueString() const override; - bool empty() const noexcept override; -+ void reset() override; - - private: - const ParentOptionType * parent; -@@ -56,6 +57,7 @@ class OptionChild::empty() const noexcept - return priority == Priority::EMPTY && parent->empty(); - } - -+template -+inline void OptionChild::reset() -+{ -+ priority = Priority::EMPTY; -+} -+ - template - inline OptionChild::value>::type>::OptionChild(const ParentOptionType & parent) - : parent(&parent) {} -@@ -171,6 +179,12 @@ inline bool OptionChildempty(); - } - -+template -+inline void OptionChild::value>::type>::reset() -+{ -+ priority = Priority::EMPTY; -+} -+ - } - - #endif -diff --git a/libdnf/conf/OptionEnum.hpp b/libdnf/conf/OptionEnum.hpp -index c63156cb3..d2f710f20 100644 ---- a/libdnf/conf/OptionEnum.hpp -+++ b/libdnf/conf/OptionEnum.hpp -@@ -49,6 +49,7 @@ class OptionEnum : public Option { - T getDefaultValue() const; - std::string toString(ValueType value) const; - std::string getValueString() const override; -+ void reset() override; - - protected: - FromStringFunc fromStringUser; -@@ -74,6 +75,7 @@ class OptionEnum : public Option { - const std::string & getValue() const; - const std::string & getDefaultValue() const; - std::string getValueString() const override; -+ void reset() override; - - protected: - FromStringFunc fromStringUser; -@@ -88,6 +90,13 @@ inline OptionEnum * OptionEnum::clone() const - return new OptionEnum(*this); - } - -+template -+inline void OptionEnum::reset() -+{ -+ value = defaultValue; -+ priority = Priority::DEFAULT; -+} -+ - inline OptionEnum * OptionEnum::clone() const - { - return new OptionEnum(*this); -@@ -108,6 +117,12 @@ inline std::string OptionEnum::getValueString() const - return value; - } - -+inline void OptionEnum::reset() -+{ -+ value = defaultValue; -+ priority = Priority::DEFAULT; -+} -+ - } - - #endif -diff --git a/libdnf/conf/OptionNumber.hpp b/libdnf/conf/OptionNumber.hpp -index 98988fd50..f7a7b3d6e 100644 ---- a/libdnf/conf/OptionNumber.hpp -+++ b/libdnf/conf/OptionNumber.hpp -@@ -50,6 +50,7 @@ class OptionNumber : public Option { - T getDefaultValue() const; - std::string toString(ValueType value) const; - std::string getValueString() const override; -+ void reset() override; - - protected: - FromStringFunc fromStringUser; -@@ -80,7 +81,14 @@ inline T OptionNumber::getDefaultValue() const - template - inline std::string OptionNumber::getValueString() const - { -- return toString(value); -+ return toString(value); -+} -+ -+template -+inline void OptionNumber::reset() -+{ -+ value = defaultValue; -+ priority = Priority::DEFAULT; - } - - extern template class OptionNumber; -diff --git a/libdnf/conf/OptionString.cpp b/libdnf/conf/OptionString.cpp -index d27194f7a..b42e6c633 100644 ---- a/libdnf/conf/OptionString.cpp -+++ b/libdnf/conf/OptionString.cpp -@@ -27,18 +27,21 @@ - namespace libdnf { - - OptionString::OptionString(const std::string & defaultValue) --: Option(Priority::DEFAULT), defaultValue(defaultValue), value(defaultValue) {} -+: Option(Priority::DEFAULT), initPriority(Priority::DEFAULT), defaultValue(defaultValue), value(defaultValue) {} - - OptionString::OptionString(const char * defaultValue) - { - if (defaultValue) { - this->value = this->defaultValue = defaultValue; -- this->priority = Priority::DEFAULT; -+ this->initPriority = this->priority = Priority::DEFAULT; -+ } else { -+ this->initPriority = Priority::EMPTY; - } - } - - OptionString::OptionString(const std::string & defaultValue, const std::string & regex, bool icase) --: Option(Priority::DEFAULT), regex(regex), icase(icase), defaultValue(defaultValue), value(defaultValue) { test(defaultValue); } -+: Option(Priority::DEFAULT), initPriority(Priority::DEFAULT), regex(regex), icase(icase) -+, defaultValue(defaultValue), value(defaultValue) { test(defaultValue); } - - OptionString::OptionString(const char * defaultValue, const std::string & regex, bool icase) - : regex(regex), icase(icase) -@@ -48,6 +51,8 @@ OptionString::OptionString(const char * defaultValue, const std::string & regex, - test(this->defaultValue); - this->value = this->defaultValue; - this->priority = Priority::DEFAULT; -+ } else { -+ this->initPriority = Priority::EMPTY; - } - } - -diff --git a/libdnf/conf/OptionString.hpp b/libdnf/conf/OptionString.hpp -index 2e26305c4..03fef8bcf 100644 ---- a/libdnf/conf/OptionString.hpp -+++ b/libdnf/conf/OptionString.hpp -@@ -42,8 +42,10 @@ class OptionString : public Option { - const std::string & getValue() const; - const std::string & getDefaultValue() const noexcept; - std::string getValueString() const override; -+ void reset() override; - - protected: -+ Priority initPriority; - std::string regex; - bool icase; - std::string defaultValue; -@@ -70,6 +72,12 @@ inline std::string OptionString::fromString(const std::string & value) const - return value; - } - -+inline void OptionString::reset() -+{ -+ value = defaultValue; -+ priority = initPriority; -+} -+ - } - - #endif -diff --git a/libdnf/conf/OptionStringList.hpp b/libdnf/conf/OptionStringList.hpp -index 942e56b16..20debaa8c 100644 ---- a/libdnf/conf/OptionStringList.hpp -+++ b/libdnf/conf/OptionStringList.hpp -@@ -45,6 +45,7 @@ class OptionStringList : public Option { - const ValueType & getDefaultValue() const; - std::string toString(const ValueType & value) const; - std::string getValueString() const override; -+ void reset() override; - - protected: - std::string regex; -@@ -70,7 +71,13 @@ inline const OptionStringList::ValueType & OptionStringList::getDefaultValue() c - - inline std::string OptionStringList::getValueString() const - { -- return toString(value); -+ return toString(value); -+} -+ -+inline void OptionStringList::reset() -+{ -+ value = defaultValue; -+ priority = Priority::DEFAULT; - } - - } - -From 372a000414875f323147cd342dd8b4c8c7ebe260 Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Tue, 1 Dec 2020 08:29:53 +0100 -Subject: [PATCH 2/9] Add OptionBinds::getOption() method - -Sometime we want direct access to the underlying Option. -E.g. we want to get its original value (not just a string representation) -or find out the Option type. ---- - libdnf/conf/OptionBinds.cpp | 9 +++++++++ - libdnf/conf/OptionBinds.hpp | 2 ++ - 2 files changed, 11 insertions(+) - -diff --git a/libdnf/conf/OptionBinds.cpp b/libdnf/conf/OptionBinds.cpp -index f7c67540b..ab53518a3 100644 ---- a/libdnf/conf/OptionBinds.cpp -+++ b/libdnf/conf/OptionBinds.cpp -@@ -66,6 +66,15 @@ bool OptionBinds::Item::getAddValue() const - return addValue; - } - -+const Option & OptionBinds::Item::getOption() const -+{ -+ return *option; -+} -+ -+Option & OptionBinds::Item::getOption() -+{ -+ return *option; -+} - - // =========== OptionBinds class =============== - -diff --git a/libdnf/conf/OptionBinds.hpp b/libdnf/conf/OptionBinds.hpp -index 715c37e26..515120b93 100644 ---- a/libdnf/conf/OptionBinds.hpp -+++ b/libdnf/conf/OptionBinds.hpp -@@ -55,6 +55,8 @@ class OptionBinds { - void newString(Option::Priority priority, const std::string & value); - std::string getValueString() const; - bool getAddValue() const; -+ const Option & getOption() const; -+ Option & getOption(); - - private: - friend class OptionBinds; - -From 3a686c378978c90538a6ac5d9826d52ce7c8daf6 Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Tue, 1 Dec 2020 08:37:14 +0100 -Subject: [PATCH 3/9] [context] Add dnf_repo_conf_from_gkeyfile() and - dnf_repo_conf_reset() - -dnf_repo_conf_from_gkeyfile(): -The function reloads repository configuration from GKeyFile. - -dnf_repo_conf_reset(): -Resets repository configuration options previously readed from repository -configuration file to initial state. ---- - libdnf/dnf-repo.cpp | 64 +++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 64 insertions(+) - -diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp -index 00f4bbf7b..9f283df55 100644 ---- a/libdnf/dnf-repo.cpp -+++ b/libdnf/dnf-repo.cpp -@@ -936,6 +936,70 @@ dnf_repo_get_boolean(GKeyFile *keyfile, - return false; - } - -+/* Resets repository configuration options previously readed from repository -+ * configuration file to initial state. */ -+static void -+dnf_repo_conf_reset(libdnf::ConfigRepo &config) -+{ -+ for (auto & item : config.optBinds()) { -+ auto & itemOption = item.second; -+ if (itemOption.getPriority() == libdnf::Option::Priority::REPOCONFIG) { -+ itemOption.getOption().reset(); -+ } -+ } -+} -+ -+/* Loads repository configuration from GKeyFile */ -+static void -+dnf_repo_conf_from_gkeyfile(libdnf::ConfigRepo &config, const char *repoId, GKeyFile *gkeyFile) -+{ -+ // Reset to the initial state before reloading the configuration. -+ dnf_repo_conf_reset(config); -+ -+ g_auto(GStrv) keys = g_key_file_get_keys(gkeyFile, repoId, NULL, NULL); -+ for (auto it = keys; *it != NULL; ++it) { -+ auto key = *it; -+ g_autofree gchar *str = g_key_file_get_value(gkeyFile, repoId, key, NULL); -+ if (str) { -+ try { -+ auto & optionItem = config.optBinds().at(key); -+ -+ if (dynamic_cast(&optionItem.getOption()) || -+ dynamic_cast*>(&optionItem.getOption()) -+ ) { -+ -+ // reload list option from gKeyFile using g_key_file_get_string_list() -+ // g_key_file_get_value () is problematic for multiline lists -+ g_auto(GStrv) list = g_key_file_get_string_list(gkeyFile, repoId, key, NULL, NULL); -+ if (list) { -+ // list can be ['value1', 'value2, value3'] therefore we first join -+ // to have 'value1, value2, value3' -+ g_autofree gchar * tmp_strval = g_strjoinv(",", list); -+ try { -+ optionItem.newString(libdnf::Option::Priority::REPOCONFIG, tmp_strval); -+ } catch (const std::exception & ex) { -+ g_debug("Invalid configuration value: %s = %s in %s; %s", key, str, repoId, ex.what()); -+ } -+ } -+ -+ } else { -+ -+ // process other (non list) options -+ try { -+ optionItem.newString(libdnf::Option::Priority::REPOCONFIG, str); -+ } catch (const std::exception & ex) { -+ g_debug("Invalid configuration value: %s = %s in %s; %s", key, str, repoId, ex.what()); -+ } -+ -+ } -+ -+ } catch (const std::exception &) { -+ g_debug("Unknown configuration option: %s = %s in %s", key, str, repoId); -+ } -+ } -+ } -+} -+ - /* Initialize (or potentially reset) repo & LrHandle from keyfile values. */ - static gboolean - dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - -From 5f1c06a66fcdb2c2340c11c07c5ba0ea3abf4b77 Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Wed, 2 Dec 2020 11:37:26 +0100 -Subject: [PATCH 4/9] [context] Use dnf_repo_conf_from_gkeyfile() for repo - configuration reload - -The dnf_repo_set_key_file_data() uses dnf_repo_conf_from_gkeyfile() now. -All occurrences of the direct use 'repo->getConfig()->.*set' and -newString() were removed. ---- - libdnf/dnf-repo.cpp | 121 +++++++++----------------------------------- - 1 file changed, 25 insertions(+), 96 deletions(-) - -diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp -index 9f283df55..2837580f7 100644 ---- a/libdnf/dnf-repo.cpp -+++ b/libdnf/dnf-repo.cpp -@@ -1006,7 +1006,6 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - { - DnfRepoPrivate *priv = GET_PRIVATE(repo); - guint cost; -- gboolean module_hotfixes = false; - g_autofree gchar *metadata_expire_str = NULL; - g_autofree gchar *mirrorlist = NULL; - g_autofree gchar *mirrorlisturl = NULL; -@@ -1016,48 +1015,28 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - g_autofree gchar *usr = NULL; - g_autofree gchar *usr_pwd = NULL; - g_autofree gchar *usr_pwd_proxy = NULL; -- g_auto(GStrv) baseurls; - - auto repoId = priv->repo->getId().c_str(); - g_debug("setting keyfile data for %s", repoId); - -- /* skip_if_unavailable is optional */ -- if (g_key_file_has_key(priv->keyfile, repoId, "skip_if_unavailable", NULL)) { -- bool skip = dnf_repo_get_boolean(priv->keyfile, repoId, "skip_if_unavailable"); -- priv->repo->getConfig()->skip_if_unavailable().set(libdnf::Option::Priority::REPOCONFIG, skip); -- } -+ auto conf = priv->repo->getConfig(); - -- /* priority is optional */ -- g_autofree gchar * priority_str = g_key_file_get_string(priv->keyfile, repoId, "priority", NULL); -- if (priority_str) { -- priv->repo->getConfig()->priority().set(libdnf::Option::Priority::REPOCONFIG, priority_str); -- } -+ // Reload repository configuration from keyfile. -+ dnf_repo_conf_from_gkeyfile(*conf, repoId, priv->keyfile); - - /* cost is optional */ - cost = g_key_file_get_integer(priv->keyfile, repoId, "cost", NULL); - if (cost != 0) - dnf_repo_set_cost(repo, cost); - -- module_hotfixes = g_key_file_get_boolean(priv->keyfile, repoId, "module_hotfixes", NULL); -- priv->repo->getConfig()->module_hotfixes().set(libdnf::Option::Priority::REPOCONFIG, module_hotfixes); -- - /* baseurl is optional; if missing, unset it */ -- baseurls = g_key_file_get_string_list(priv->keyfile, repoId, "baseurl", NULL, NULL); -- if (baseurls) { -- // baseruls can be ['value1', 'value2, value3'] therefore we first join to have 'value1, value2, value3' -- g_autofree gchar * tmp_strval = g_strjoinv(",", baseurls); -- -- auto & bindBaseurls = priv->repo->getConfig()->optBinds().at("baseurl"); -- bindBaseurls.newString(libdnf::Option::Priority::REPOCONFIG, tmp_strval); -- -- auto & repoBaseurls = priv->repo->getConfig()->baseurl(); -- if (!repoBaseurls.getValue().empty()){ -- auto len = repoBaseurls.getValue().size(); -- g_strfreev(baseurls); -- baseurls = g_new0(char *, len + 1); -- for (size_t i = 0; i < len; ++i) { -- baseurls[i] = g_strdup(repoBaseurls.getValue()[i].c_str()); -- } -+ g_auto(GStrv) baseurls = NULL; -+ auto & repoBaseurls = conf->baseurl().getValue(); -+ if (!repoBaseurls.empty()){ -+ auto len = repoBaseurls.size(); -+ baseurls = g_new0(char *, len + 1); -+ for (size_t i = 0; i < len; ++i) { -+ baseurls[i] = g_strdup(repoBaseurls[i].c_str()); - } - } - if (!lr_handle_setopt(priv->repo_handle, error, LRO_URLS, baseurls)) -@@ -1093,18 +1072,6 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - if (!lr_handle_setopt(priv->repo_handle, error, LRO_METALINKURL, metalinkurl)) - return FALSE; - -- /* needed in order for addCountmeFlag() to use the same persistdir as DNF -- * would */ -- if (metalinkurl) -- priv->repo->getConfig()->metalink().set(libdnf::Option::Priority::REPOCONFIG, metalinkurl); -- if (mirrorlisturl) -- priv->repo->getConfig()->mirrorlist().set(libdnf::Option::Priority::REPOCONFIG, mirrorlisturl); -- -- if (g_key_file_has_key(priv->keyfile, repoId, "countme", NULL)) { -- bool countme = dnf_repo_get_boolean(priv->keyfile, repoId, "countme"); -- priv->repo->getConfig()->countme().set(libdnf::Option::Priority::REPOCONFIG, countme); -- } -- - /* file:// */ - if (baseurls != NULL && baseurls[0] != NULL && - mirrorlisturl == NULL && metalinkurl == NULL) { -@@ -1150,42 +1117,20 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - dnf_repo_set_location_tmp(repo, tmp->str); - } - -- /* gpgkey is optional for gpgcheck=1, but required for repo_gpgcheck=1 */ -+ // Sync priv->gpgkeys - g_strfreev(priv->gpgkeys); -- priv->gpgkeys = NULL; -- -- g_auto(GStrv) gpgkeys; -- gpgkeys = g_key_file_get_string_list(priv->keyfile, repoId, "gpgkey", NULL, NULL); -- -- if (gpgkeys) { -- // gpgkeys can be ['value1', 'value2, value3'] therefore we first join to have 'value1, value2, value3' -- g_autofree gchar * tmp_strval = g_strjoinv(",", gpgkeys); -- -- auto & bindGpgkeys = priv->repo->getConfig()->optBinds().at("gpgkey"); -- bindGpgkeys.newString(libdnf::Option::Priority::REPOCONFIG, tmp_strval); -- -- auto & repoGpgkeys = priv->repo->getConfig()->gpgkey(); -- if (!repoGpgkeys.getValue().empty()){ -- auto len = repoGpgkeys.getValue().size(); -- priv->gpgkeys = g_new0(char *, len + 1); -- for (size_t i = 0; i < len; ++i) { -- priv->gpgkeys[i] = g_strdup(repoGpgkeys.getValue()[i].c_str()); -- } -- } else { -- /* Canonicalize the empty list to NULL for ease of checking elsewhere */ -- g_strfreev(static_cast(g_steal_pointer(&priv->gpgkeys))); -+ auto & repoGpgkeys = conf->gpgkey().getValue(); -+ if (!repoGpgkeys.empty()){ -+ auto len = repoGpgkeys.size(); -+ priv->gpgkeys = g_new0(char *, len + 1); -+ for (size_t i = 0; i < len; ++i) { -+ priv->gpgkeys[i] = g_strdup(repoGpgkeys[i].c_str()); - } -+ } else { -+ priv->gpgkeys = NULL; - } - -- if (g_key_file_has_key(priv->keyfile, repoId, "gpgcheck", NULL)) { -- auto gpgcheck_pkgs = dnf_repo_get_boolean(priv->keyfile, repoId, "gpgcheck"); -- priv->repo->getConfig()->gpgcheck().set(libdnf::Option::Priority::REPOCONFIG, gpgcheck_pkgs); -- } -- -- if (g_key_file_has_key(priv->keyfile, repoId, "repo_gpgcheck", NULL)) { -- auto gpgcheck_md = dnf_repo_get_boolean(priv->keyfile, repoId, "repo_gpgcheck"); -- priv->repo->getConfig()->repo_gpgcheck().set(libdnf::Option::Priority::REPOCONFIG, gpgcheck_md); -- } -+ /* gpgkey is optional for gpgcheck=1, but required for repo_gpgcheck=1 */ - auto gpgcheck_md = priv->repo->getConfig()->repo_gpgcheck().getValue(); - if (gpgcheck_md && priv->gpgkeys == NULL) { - g_set_error_literal(error, -@@ -1199,35 +1144,19 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - if (!lr_handle_setopt(priv->repo_handle, error, LRO_GPGCHECK, (long)gpgcheck_md)) - return FALSE; - -- auto & repoExcludepkgs = priv->repo->getConfig()->excludepkgs(); -- repoExcludepkgs.set(libdnf::Option::Priority::REPOCONFIG, ""); -- -- auto & bindExcludepkgs = priv->repo->getConfig()->optBinds().at("excludepkgs"); -- if (auto excludepkgs = g_key_file_get_string(priv->keyfile, repoId, "exclude", NULL)) { -- bindExcludepkgs.newString(libdnf::Option::Priority::REPOCONFIG, excludepkgs); -- g_free(excludepkgs); -- } -- if (auto excludepkgs = g_key_file_get_string(priv->keyfile, repoId, "excludepkgs", NULL)) { -- bindExcludepkgs.newString(libdnf::Option::Priority::REPOCONFIG, excludepkgs); -- g_free(excludepkgs); -- } -- -+ // Sync priv->exclude_packages - g_strfreev(priv->exclude_packages); -- if (!repoExcludepkgs.getValue().empty()) { -- auto len = repoExcludepkgs.getValue().size(); -+ auto & repoExcludepkgs = conf->excludepkgs().getValue(); -+ if (!repoExcludepkgs.empty()) { -+ auto len = repoExcludepkgs.size(); - priv->exclude_packages = g_new0(char *, len + 1); - for (size_t i = 0; i < len; ++i) { -- priv->exclude_packages[i] = g_strdup(repoExcludepkgs.getValue()[i].c_str()); -+ priv->exclude_packages[i] = g_strdup(repoExcludepkgs[i].c_str()); - } - } else { - priv->exclude_packages = NULL; - } - -- if (auto includepkgs = g_key_file_get_string(priv->keyfile, repoId, "includepkgs", NULL)) { -- priv->repo->getConfig()->includepkgs().set(libdnf::Option::Priority::REPOCONFIG, includepkgs); -- g_free(includepkgs); -- } -- - /* proxy is optional */ - proxy = g_key_file_get_string(priv->keyfile, repoId, "proxy", NULL); - auto repoProxy = proxy ? (strcasecmp(proxy, "_none_") == 0 ? NULL : proxy) - -From c6afbb4f93eee480c68201297e9c5c7afdf05dd3 Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Wed, 2 Dec 2020 13:26:51 +0100 -Subject: [PATCH 5/9] [context] Fix: "cost" and "metadata_expire" repository - options - -Changes in dnf_repo_set_keyfile_data(): -Removed the dnf_repo_set_cost() call. -Removed the "metadata_expire" parsing and dnf_repo_set_metadata_expire() call. - -The options were set earlier. The function calls were redundant and -set the priority to the wrong RUNTIME value. ---- - libdnf/dnf-repo.cpp | 103 -------------------------------------------- - 1 file changed, 103 deletions(-) - -diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp -index 2837580f7..61d496750 100644 ---- a/libdnf/dnf-repo.cpp -+++ b/libdnf/dnf-repo.cpp -@@ -816,93 +816,6 @@ dnf_repo_set_metadata_expire(DnfRepo *repo, guint metadata_expire) - priv->repo->getConfig()->metadata_expire().set(libdnf::Option::Priority::RUNTIME, metadata_expire); - } - --/** -- * dnf_repo_parse_time_from_str -- * @expression: a expression to be parsed -- * @out_parsed_time: (out): return location for parsed time -- * @error: error item -- * -- * Parse String into an integer value of seconds, or a human -- * readable variation specifying days, hours, minutes or seconds -- * until something happens. Note that due to historical president -- * -1 means "never", so this accepts that and allows -- * the word never, too. -- * -- * Valid inputs: 100, 1.5m, 90s, 1.2d, 1d, 0xF, 0.1, -1, never. -- * Invalid inputs: -10, -0.1, 45.6Z, 1d6h, 1day, 1y. -- -- * Returns: integer value in seconds -- **/ -- --static gboolean --dnf_repo_parse_time_from_str(const gchar *expression, guint *out_parsed_time, GError **error) --{ -- gint multiplier; -- gdouble parsed_time; -- gchar *endptr = NULL; -- -- if (!g_strcmp0(expression, "")) { -- g_set_error_literal(error, -- DNF_ERROR, -- DNF_ERROR_FILE_INVALID, -- "no metadata value specified"); -- return FALSE; -- } -- -- if (g_strcmp0(expression, "-1") == 0 || -- g_strcmp0(expression,"never") == 0) { -- *out_parsed_time = G_MAXUINT; -- return TRUE; /* Note early return */ -- } -- -- gchar last_char = expression[ strlen(expression) - 1 ]; -- -- /* check if the input ends with h, m ,d ,s as units */ -- if (g_ascii_isalpha(last_char)) { -- if (last_char == 'h') -- multiplier = 60 * 60; -- else if (last_char == 's') -- multiplier = 1; -- else if (last_char == 'm') -- multiplier = 60; -- else if (last_char == 'd') -- multiplier = 60 * 60 * 24; -- else { -- g_set_error(error, DNF_ERROR, DNF_ERROR_FILE_INVALID, -- "unknown unit %c", last_char); -- return FALSE; -- } -- } -- else -- multiplier = 1; -- -- /* convert expression into a double*/ -- parsed_time = g_ascii_strtod(expression, &endptr); -- -- /* failed to parse */ -- if (expression == endptr) { -- g_set_error(error, DNF_ERROR, DNF_ERROR_INTERNAL_ERROR, -- "failed to parse time: %s", expression); -- return FALSE; -- } -- -- /* time can not be below zero */ -- if (parsed_time < 0) { -- g_set_error(error, DNF_ERROR, DNF_ERROR_INTERNAL_ERROR, -- "seconds value must not be negative %s",expression ); -- return FALSE; -- } -- -- /* time too large */ -- if (parsed_time > G_MAXDOUBLE || (parsed_time * multiplier) > G_MAXUINT){ -- g_set_error(error, DNF_ERROR, DNF_ERROR_INTERNAL_ERROR, -- "time too large"); -- return FALSE; -- } -- -- *out_parsed_time = (guint) (parsed_time * multiplier); -- return TRUE; --} - /** - * dnf_repo_get_username_password_string: - */ -@@ -1005,8 +918,6 @@ static gboolean - dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - { - DnfRepoPrivate *priv = GET_PRIVATE(repo); -- guint cost; -- g_autofree gchar *metadata_expire_str = NULL; - g_autofree gchar *mirrorlist = NULL; - g_autofree gchar *mirrorlisturl = NULL; - g_autofree gchar *metalinkurl = NULL; -@@ -1024,11 +935,6 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - // Reload repository configuration from keyfile. - dnf_repo_conf_from_gkeyfile(*conf, repoId, priv->keyfile); - -- /* cost is optional */ -- cost = g_key_file_get_integer(priv->keyfile, repoId, "cost", NULL); -- if (cost != 0) -- dnf_repo_set_cost(repo, cost); -- - /* baseurl is optional; if missing, unset it */ - g_auto(GStrv) baseurls = NULL; - auto & repoBaseurls = conf->baseurl().getValue(); -@@ -1042,15 +948,6 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - if (!lr_handle_setopt(priv->repo_handle, error, LRO_URLS, baseurls)) - return FALSE; - -- /* metadata_expire is optional, if shown, we parse the string to add the time */ -- metadata_expire_str = g_key_file_get_string(priv->keyfile, repoId, "metadata_expire", NULL); -- if (metadata_expire_str) { -- guint metadata_expire; -- if (!dnf_repo_parse_time_from_str(metadata_expire_str, &metadata_expire, error)) -- return FALSE; -- dnf_repo_set_metadata_expire(repo, metadata_expire); -- } -- - /* the "mirrorlist" entry could be either a real mirrorlist, or a metalink entry */ - mirrorlist = g_key_file_get_string(priv->keyfile, repoId, "mirrorlist", NULL); - if (mirrorlist) { - -From b11ac5204dc4c7048a7b6880813f2f9b1d8eb242 Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Wed, 2 Dec 2020 13:21:35 +0100 -Subject: [PATCH 6/9] [context] Fix: username, password, proxy, proxy_username, - proxy_password - -- Uses global configuration options when they are not defined - in the repository configuration. -- proxy_username and proxy_password is urlEncoded before passing to librepo. ---- - libdnf/dnf-repo.cpp | 78 ++++++++++++++++++++++++++------------------- - 1 file changed, 46 insertions(+), 32 deletions(-) - -diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp -index 61d496750..005721ef6 100644 ---- a/libdnf/dnf-repo.cpp -+++ b/libdnf/dnf-repo.cpp -@@ -817,18 +817,22 @@ dnf_repo_set_metadata_expire(DnfRepo *repo, guint metadata_expire) - } - - /** -- * dnf_repo_get_username_password_string: -- */ --static gchar * --dnf_repo_get_username_password_string(const gchar *user, const gchar *pass) --{ -- if (user == NULL && pass == NULL) -- return NULL; -- if (user != NULL && pass == NULL) -- return g_strdup(user); -- if (user == NULL && pass != NULL) -- return g_strdup_printf(":%s", pass); -- return g_strdup_printf("%s:%s", user, pass); -+* @brief Format user password string -+* -+* Returns user and password in user:password form. If encode is True, -+* special characters in user and password are URL encoded. -+* -+* @param user Username -+* @param passwd Password -+* @param encode If quote is True, special characters in user and password are URL encoded. -+* @return User and password in user:password form -+*/ -+static std::string formatUserPassString(const std::string & user, const std::string & passwd, bool encode) -+{ -+ if (encode) -+ return libdnf::urlEncode(user) + ":" + libdnf::urlEncode(passwd); -+ else -+ return user + ":" + passwd; - } - - static gboolean -@@ -921,11 +925,8 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - g_autofree gchar *mirrorlist = NULL; - g_autofree gchar *mirrorlisturl = NULL; - g_autofree gchar *metalinkurl = NULL; -- g_autofree gchar *proxy = NULL; -- g_autofree gchar *pwd = NULL; -- g_autofree gchar *usr = NULL; -- g_autofree gchar *usr_pwd = NULL; -- g_autofree gchar *usr_pwd_proxy = NULL; -+ std::string tmp_str; -+ const char *tmp_cstr; - - auto repoId = priv->repo->getId().c_str(); - g_debug("setting keyfile data for %s", repoId); -@@ -1054,26 +1055,39 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - priv->exclude_packages = NULL; - } - -- /* proxy is optional */ -- proxy = g_key_file_get_string(priv->keyfile, repoId, "proxy", NULL); -- auto repoProxy = proxy ? (strcasecmp(proxy, "_none_") == 0 ? NULL : proxy) -- : dnf_context_get_http_proxy(priv->context); -- if (!lr_handle_setopt(priv->repo_handle, error, LRO_PROXY, repoProxy)) -+ tmp_str = conf->proxy().getValue(); -+ tmp_cstr = tmp_str.empty() ? dnf_context_get_http_proxy(priv->context) : tmp_str.c_str(); -+ if (!lr_handle_setopt(priv->repo_handle, error, LRO_PROXY, tmp_cstr)) - return FALSE; - -- /* both parts of the proxy auth are optional */ -- usr = g_key_file_get_string(priv->keyfile, repoId, "proxy_username", NULL); -- pwd = g_key_file_get_string(priv->keyfile, repoId, "proxy_password", NULL); -- usr_pwd_proxy = dnf_repo_get_username_password_string(usr, pwd); -- if (!lr_handle_setopt(priv->repo_handle, error, LRO_PROXYUSERPWD, usr_pwd_proxy)) -+ // setup proxy username and password -+ tmp_cstr = NULL; -+ if (!conf->proxy_username().empty()) { -+ tmp_str = conf->proxy_username().getValue(); -+ if (!tmp_str.empty()) { -+ if (conf->proxy_password().empty()) { -+ g_set_error(error, DNF_ERROR, DNF_ERROR_FILE_INVALID, -+ "repo '%s': 'proxy_username' is set but not 'proxy_password'", repoId); -+ return FALSE; -+ } -+ tmp_str = formatUserPassString(tmp_str, conf->proxy_password().getValue(), true); -+ tmp_cstr = tmp_str.c_str(); -+ } -+ } -+ if (!lr_handle_setopt(priv->repo_handle, error, LRO_PROXYUSERPWD, tmp_cstr)) - return FALSE; - -- /* both parts of the HTTP auth are optional */ -- usr = g_key_file_get_string(priv->keyfile, repoId, "username", NULL); -- pwd = g_key_file_get_string(priv->keyfile, repoId, "password", NULL); -- usr_pwd = dnf_repo_get_username_password_string(usr, pwd); -- if (!lr_handle_setopt(priv->repo_handle, error, LRO_USERPWD, usr_pwd)) -+ // setup username and password -+ tmp_cstr = NULL; -+ tmp_str = conf->username().getValue(); -+ if (!tmp_str.empty()) { -+ // TODO Use URL encoded form, needs support in librepo -+ tmp_str = formatUserPassString(tmp_str, conf->password().getValue(), false); -+ tmp_cstr = tmp_str.c_str(); -+ } -+ if (!lr_handle_setopt(priv->repo_handle, error, LRO_USERPWD, tmp_cstr)) - return FALSE; -+ - return TRUE; - } - - -From fd07b29ccaec2648cfc050122e16e4846d7ac4be Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Wed, 2 Dec 2020 13:53:45 +0100 -Subject: [PATCH 7/9] [context] Add support for options: minrate, throttle, - bandwidth, timeout - ---- - libdnf/dnf-repo.cpp | 29 +++++++++++++++++++++++++++++ - 1 file changed, 29 insertions(+) - -diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp -index 005721ef6..c6dd027be 100644 ---- a/libdnf/dnf-repo.cpp -+++ b/libdnf/dnf-repo.cpp -@@ -1055,6 +1055,35 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - priv->exclude_packages = NULL; - } - -+ auto minrate = conf->minrate().getValue(); -+ if (!lr_handle_setopt(priv->repo_handle, error, LRO_LOWSPEEDLIMIT, static_cast(minrate))) -+ return FALSE; -+ -+ auto maxspeed = conf->throttle().getValue(); -+ if (maxspeed > 0 && maxspeed <= 1) -+ maxspeed *= conf->bandwidth().getValue(); -+ if (maxspeed != 0 && maxspeed < minrate) { -+ g_set_error_literal(error, DNF_ERROR, DNF_ERROR_FILE_INVALID, -+ "Maximum download speed is lower than minimum. " -+ "Please change configuration of minrate or throttle"); -+ return FALSE; -+ } -+ if (!lr_handle_setopt(priv->repo_handle, error, LRO_MAXSPEED, static_cast(maxspeed))) -+ return FALSE; -+ -+ long timeout = conf->timeout().getValue(); -+ if (timeout > 0) { -+ if (!lr_handle_setopt(priv->repo_handle, error, LRO_CONNECTTIMEOUT, timeout)) -+ return FALSE; -+ if (!lr_handle_setopt(priv->repo_handle, error, LRO_LOWSPEEDTIME, timeout)) -+ return FALSE; -+ } else { -+ if (!lr_handle_setopt(priv->repo_handle, error, LRO_CONNECTTIMEOUT, LRO_CONNECTTIMEOUT_DEFAULT)) -+ return FALSE; -+ if (!lr_handle_setopt(priv->repo_handle, error, LRO_LOWSPEEDTIME, LRO_LOWSPEEDTIME_DEFAULT)) -+ return FALSE; -+ } -+ - tmp_str = conf->proxy().getValue(); - tmp_cstr = tmp_str.empty() ? dnf_context_get_http_proxy(priv->context) : tmp_str.c_str(); - if (!lr_handle_setopt(priv->repo_handle, error, LRO_PROXY, tmp_cstr)) - -From c484de218699dff834fb32133cf502b2d0c64162 Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Thu, 3 Dec 2020 10:55:02 +0100 -Subject: [PATCH 8/9] [context] Remove g_key_file_get_string() from - dnf_repo_set_keyfile_data() - -Removes the remaining usage of g_key_file_get_string() from -dnf_repo_set_keyfile_data(). Use the values from ConfigRepo instead. ---- - libdnf/dnf-repo.cpp | 23 +++++++++++------------ - 1 file changed, 11 insertions(+), 12 deletions(-) - -diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp -index c6dd027be..c5c50d55c 100644 ---- a/libdnf/dnf-repo.cpp -+++ b/libdnf/dnf-repo.cpp -@@ -922,9 +922,6 @@ static gboolean - dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - { - DnfRepoPrivate *priv = GET_PRIVATE(repo); -- g_autofree gchar *mirrorlist = NULL; -- g_autofree gchar *mirrorlisturl = NULL; -- g_autofree gchar *metalinkurl = NULL; - std::string tmp_str; - const char *tmp_cstr; - -@@ -949,20 +946,22 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - if (!lr_handle_setopt(priv->repo_handle, error, LRO_URLS, baseurls)) - return FALSE; - -+ const char *mirrorlisturl = NULL; -+ const char *metalinkurl = NULL; -+ - /* the "mirrorlist" entry could be either a real mirrorlist, or a metalink entry */ -- mirrorlist = g_key_file_get_string(priv->keyfile, repoId, "mirrorlist", NULL); -- if (mirrorlist) { -- if (strstr(mirrorlist, "metalink")) -- metalinkurl = static_cast(g_steal_pointer(&mirrorlist)); -+ tmp_cstr = conf->mirrorlist().empty() ? NULL : conf->mirrorlist().getValue().c_str(); -+ if (tmp_cstr) { -+ if (strstr(tmp_cstr, "metalink")) -+ metalinkurl = tmp_cstr; - else /* it really is a mirrorlist */ -- mirrorlisturl = static_cast(g_steal_pointer(&mirrorlist)); -+ mirrorlisturl = tmp_cstr; - } - - /* let "metalink" entry override metalink-as-mirrorlist entry */ -- if (g_key_file_has_key(priv->keyfile, repoId, "metalink", NULL)) { -- g_free(metalinkurl); -- metalinkurl = g_key_file_get_string(priv->keyfile, repoId, "metalink", NULL); -- } -+ tmp_cstr = conf->metalink().empty() ? NULL : conf->metalink().getValue().c_str(); -+ if (tmp_cstr) -+ metalinkurl = tmp_cstr; - - /* now set the final values (or unset them) */ - if (!lr_handle_setopt(priv->repo_handle, error, LRO_MIRRORLISTURL, mirrorlisturl)) - -From ce44d3dced4b800e3b7f80556fac1daf7e7fa49d Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Thu, 3 Dec 2020 11:43:18 +0100 -Subject: [PATCH 9/9] [context] Remove the extra gpgkey member from - DnfRepoPrivate - -The value stored in ConfigRepo can be used directly. ---- - libdnf/dnf-repo.cpp | 81 ++++++++++++++++++--------------------------- - 1 file changed, 33 insertions(+), 48 deletions(-) - -diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp -index c5c50d55c..193999902 100644 ---- a/libdnf/dnf-repo.cpp -+++ b/libdnf/dnf-repo.cpp -@@ -63,7 +63,6 @@ - typedef struct - { - DnfRepoEnabled enabled; -- gchar **gpgkeys; - gchar **exclude_packages; - gchar *filename; /* /etc/yum.repos.d/updates.repo */ - gchar *location; /* /var/cache/PackageKit/metadata/fedora */ -@@ -97,7 +96,6 @@ dnf_repo_finalize(GObject *object) - DnfRepoPrivate *priv = GET_PRIVATE(repo); - - g_free(priv->filename); -- g_strfreev(priv->gpgkeys); - g_strfreev(priv->exclude_packages); - g_free(priv->location_tmp); - g_free(priv->location); -@@ -225,16 +223,13 @@ gchar ** - dnf_repo_get_public_keys(DnfRepo *repo) - { - DnfRepoPrivate *priv = GET_PRIVATE(repo); -- g_autoptr(GPtrArray) ret = g_ptr_array_new(); -- for (char **iter = priv->gpgkeys; iter && *iter; iter++) { -- const char *key = *iter; -- g_autofree gchar *key_bn = g_path_get_basename(key); -- /* transfer ownership to ptrarray */ -- g_ptr_array_add(ret, g_build_filename(priv->location, key_bn, NULL)); -+ const auto & keys = priv->repo->getConfig()->gpgkey().getValue(); -+ gchar **ret = g_new0(gchar *, keys.size() + 1); -+ for (size_t i = 0; i < keys.size(); ++i) { -+ g_autofree gchar *key_bn = g_path_get_basename(keys[i].c_str()); -+ ret[i] = g_build_filename(priv->location, key_bn, NULL); - } -- g_ptr_array_add(ret, NULL); -- /* transfer ownership of container and elements to caller */ -- return (gchar**)g_ptr_array_free(static_cast(g_steal_pointer(&ret)), FALSE); -+ return ret; - } - - /** -@@ -1014,22 +1009,9 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - dnf_repo_set_location_tmp(repo, tmp->str); - } - -- // Sync priv->gpgkeys -- g_strfreev(priv->gpgkeys); -- auto & repoGpgkeys = conf->gpgkey().getValue(); -- if (!repoGpgkeys.empty()){ -- auto len = repoGpgkeys.size(); -- priv->gpgkeys = g_new0(char *, len + 1); -- for (size_t i = 0; i < len; ++i) { -- priv->gpgkeys[i] = g_strdup(repoGpgkeys[i].c_str()); -- } -- } else { -- priv->gpgkeys = NULL; -- } -- - /* gpgkey is optional for gpgcheck=1, but required for repo_gpgcheck=1 */ -- auto gpgcheck_md = priv->repo->getConfig()->repo_gpgcheck().getValue(); -- if (gpgcheck_md && priv->gpgkeys == NULL) { -+ auto repo_gpgcheck = conf->repo_gpgcheck().getValue(); -+ if (repo_gpgcheck && conf->gpgkey().getValue().empty()) { - g_set_error_literal(error, - DNF_ERROR, - DNF_ERROR_FILE_INVALID, -@@ -1038,7 +1020,7 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, GError **error) - } - - /* XXX: setopt() expects a long, so we need a long on the stack */ -- if (!lr_handle_setopt(priv->repo_handle, error, LRO_GPGCHECK, (long)gpgcheck_md)) -+ if (!lr_handle_setopt(priv->repo_handle, error, LRO_GPGCHECK, (long)repo_gpgcheck)) - return FALSE; - - // Sync priv->exclude_packages -@@ -1750,28 +1732,31 @@ dnf_repo_update(DnfRepo *repo, - goto out; - } - -- if (priv->gpgkeys && -- (priv->repo->getConfig()->repo_gpgcheck().getValue() || priv->repo->getConfig()->gpgcheck().getValue())) { -- for (char **iter = priv->gpgkeys; iter && *iter; iter++) { -- const char *gpgkey = *iter; -- g_autofree char *gpgkey_name = g_path_get_basename(gpgkey); -- g_autofree char *key_tmp = g_build_filename(priv->location_tmp, gpgkey_name, NULL); -- -- /* download and import public key */ -- if ((g_str_has_prefix(gpgkey, "https://") || -- g_str_has_prefix(gpgkey, "file://"))) { -- g_debug("importing public key %s", gpgkey); -- -- ret = dnf_repo_download_import_public_key(repo, gpgkey, key_tmp, error); -- if (!ret) -- goto out; -- } -+ { -+ const auto & gpgkeys = priv->repo->getConfig()->gpgkey().getValue(); -+ if (!gpgkeys.empty() && -+ (priv->repo->getConfig()->repo_gpgcheck().getValue() || priv->repo->getConfig()->gpgcheck().getValue())) { -+ for (const auto & key : gpgkeys) { -+ const char *gpgkey = key.c_str(); -+ g_autofree char *gpgkey_name = g_path_get_basename(gpgkey); -+ g_autofree char *key_tmp = g_build_filename(priv->location_tmp, gpgkey_name, NULL); -+ -+ /* download and import public key */ -+ if ((g_str_has_prefix(gpgkey, "https://") || -+ g_str_has_prefix(gpgkey, "file://"))) { -+ g_debug("importing public key %s", gpgkey); -+ -+ ret = dnf_repo_download_import_public_key(repo, gpgkey, key_tmp, error); -+ if (!ret) -+ goto out; -+ } - -- /* do we autoimport this into librpm? */ -- if ((flags & DNF_REPO_UPDATE_FLAG_IMPORT_PUBKEY) > 0) { -- ret = dnf_repo_add_public_key(repo, key_tmp, error); -- if (!ret) -- goto out; -+ /* do we autoimport this into librpm? */ -+ if ((flags & DNF_REPO_UPDATE_FLAG_IMPORT_PUBKEY) > 0) { -+ ret = dnf_repo_add_public_key(repo, key_tmp, error); -+ if (!ret) -+ goto out; -+ } - } - } - } diff --git a/SOURCES/0005-Allow-loading-incomplete-cache-and-loading-ext-solv-files-without-its-repodata.patch b/SOURCES/0005-Allow-loading-incomplete-cache-and-loading-ext-solv-files-without-its-repodata.patch deleted file mode 100644 index 30421d4..0000000 --- a/SOURCES/0005-Allow-loading-incomplete-cache-and-loading-ext-solv-files-without-its-repodata.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 816d18d826dc7134e553eae28f4aaca9a27e2307 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= -Date: Mon, 2 Nov 2020 11:43:19 +0100 -Subject: [PATCH 1/2] Allow loading ext metadata even if only cache (solv) is - present - -If we have a valid (checksum matches with repomd) solv file for -requested type of metadata allow using it even if we no longer have the -original xml metadata. ---- - libdnf/dnf-sack.cpp | 22 +++++++++++----------- - 1 file changed, 11 insertions(+), 11 deletions(-) - -diff --git a/libdnf/dnf-sack.cpp b/libdnf/dnf-sack.cpp -index 6a43f01e3..608103d18 100644 ---- a/libdnf/dnf-sack.cpp -+++ b/libdnf/dnf-sack.cpp -@@ -371,20 +371,9 @@ load_ext(DnfSack *sack, HyRepo hrepo, _hy_repo_repodata which_repodata, - auto repoImpl = libdnf::repoGetImpl(hrepo); - Repo *repo = repoImpl->libsolvRepo; - const char *name = repo->name; -- auto fn = hrepo->getMetadataPath(which_filename); - FILE *fp; - gboolean done = FALSE; - -- /* nothing set */ -- if (fn.empty()) { -- g_set_error (error, -- DNF_ERROR, -- DNF_ERROR_NO_CAPABILITY, -- _("no %1$s string for %2$s"), -- which_filename, name); -- return FALSE; -- } -- - char *fn_cache = dnf_sack_give_cache_fn(sack, name, suffix); - fp = fopen(fn_cache, "r"); - assert(libdnf::repoGetImpl(hrepo)->checksum); -@@ -416,6 +405,17 @@ load_ext(DnfSack *sack, HyRepo hrepo, _hy_repo_repodata which_repodata, - if (done) - return TRUE; - -+ auto fn = hrepo->getMetadataPath(which_filename); -+ /* nothing set */ -+ if (fn.empty()) { -+ g_set_error (error, -+ DNF_ERROR, -+ DNF_ERROR_NO_CAPABILITY, -+ _("no %1$s string for %2$s"), -+ which_filename, name); -+ return FALSE; -+ } -+ - fp = solv_xfopen(fn.c_str(), "r"); - if (fp == NULL) { - g_set_error (error, - -From aa2a372158f1b264708f960f387218deea17ef2a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= -Date: Thu, 10 Dec 2020 14:21:03 +0100 -Subject: [PATCH 2/2] Extend repo loadCache method with ignoreMissing parameter - -This allows loading even incomplete cache of xml files, only repomd.xml -is requried. - -= changelog = -msg: Extend repo loadCache method with ignoreMissing parameter to allow -loading incomplete xml cache (repomd.xml is required). -type: enhancement -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1865803 ---- - VERSION.cmake | 2 +- - libdnf.spec | 2 +- - libdnf/repo/Repo-private.hpp | 2 +- - libdnf/repo/Repo.cpp | 8 ++++++-- - libdnf/repo/Repo.hpp | 2 +- - 5 files changed, 10 insertions(+), 6 deletions(-) - -diff --git a/libdnf/repo/Repo-private.hpp b/libdnf/repo/Repo-private.hpp -index 1e4ea4d20..c2ce369dc 100644 ---- a/libdnf/repo/Repo-private.hpp -+++ b/libdnf/repo/Repo-private.hpp -@@ -111,7 +111,7 @@ class Repo::Impl { - ~Impl(); - - bool load(); -- bool loadCache(bool throwExcept); -+ bool loadCache(bool throwExcept, bool ignoreMissing=false); - void downloadMetadata(const std::string & destdir); - bool isInSync(); - void fetch(const std::string & destdir, std::unique_ptr && h); -diff --git a/libdnf/repo/Repo.cpp b/libdnf/repo/Repo.cpp -index 34539e1ee..84702c294 100644 ---- a/libdnf/repo/Repo.cpp -+++ b/libdnf/repo/Repo.cpp -@@ -379,7 +379,7 @@ std::string Repo::getLocalBaseurl() const - } - - bool Repo::load() { return pImpl->load(); } --bool Repo::loadCache(bool throwExcept) { return pImpl->loadCache(throwExcept); } -+bool Repo::loadCache(bool throwExcept, bool ignoreMissing) { return pImpl->loadCache(throwExcept, ignoreMissing); } - void Repo::downloadMetadata(const std::string & destdir) { pImpl->downloadMetadata(destdir); } - bool Repo::getUseIncludes() const { return pImpl->useIncludes; } - void Repo::setUseIncludes(bool enabled) { pImpl->useIncludes = enabled; } -@@ -963,11 +963,15 @@ std::unique_ptr Repo::Impl::lrHandlePerform(LrHandle * handle, const s - return result; - } - --bool Repo::Impl::loadCache(bool throwExcept) -+bool Repo::Impl::loadCache(bool throwExcept, bool ignoreMissing) - { - std::unique_ptr h(lrHandleInitLocal()); - std::unique_ptr r; - -+ if (ignoreMissing) { -+ handleSetOpt(h.get(), LRO_IGNOREMISSING, 1L); -+ } -+ - // Fetch data - try { - r = lrHandlePerform(h.get(), getCachedir(), conf->repo_gpgcheck().getValue()); -diff --git a/libdnf/repo/Repo.hpp b/libdnf/repo/Repo.hpp -index eeec651c3..be376f60c 100644 ---- a/libdnf/repo/Repo.hpp -+++ b/libdnf/repo/Repo.hpp -@@ -167,7 +167,7 @@ struct Repo { - * @return true if fresh metadata were downloaded, false otherwise. - */ - bool load(); -- bool loadCache(bool throwExcept); -+ bool loadCache(bool throwExcept, bool ignoreMissing=false); - void downloadMetadata(const std::string & destdir); - bool getUseIncludes() const; - void setUseIncludes(bool enabled); diff --git a/SOURCES/0005-Revert-Report-a-new-type-of-the-module-resolve-error.patch b/SOURCES/0005-Revert-Report-a-new-type-of-the-module-resolve-error.patch new file mode 100644 index 0000000..664ef01 --- /dev/null +++ b/SOURCES/0005-Revert-Report-a-new-type-of-the-module-resolve-error.patch @@ -0,0 +1,89 @@ +From ce301450c39ebbd9fc5ec0897af2df766015e1bd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:53 +0200 +Subject: [PATCH 05/19] Revert "Report a new type of the module resolve error" + +This reverts commit 9235436672fa413d5ac94f52a534b5abe90b5c7f. +--- + libdnf/dnf-context.cpp | 4 ---- + libdnf/module/ModulePackageContainer.cpp | 17 ++++++++++++----- + libdnf/module/ModulePackageContainer.hpp | 10 ++++------ + 3 files changed, 16 insertions(+), 15 deletions(-) + +diff --git a/libdnf/dnf-context.cpp b/libdnf/dnf-context.cpp +index ccb6fe83..55af2b26 100644 +--- a/libdnf/dnf-context.cpp ++++ b/libdnf/dnf-context.cpp +@@ -3252,10 +3252,6 @@ report_problems(const std::vectorwarning(tfm::format(_("Modular dependency problem with Defaults: %s"), report.c_str())); + break; +- case libdnf::ModulePackageContainer::ModuleErrorType::ERROR_IN_LATEST: +- logger->warning(tfm::format(_("Modular dependency problem with the lates modules: %s"), +- report.c_str())); +- break; + case libdnf::ModulePackageContainer::ModuleErrorType::ERROR: + logger->error(tfm::format(_("Modular dependency problem: %s"), report.c_str())); + return_error = true; +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index 1bfdd8c1..ee90056c 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -725,16 +725,23 @@ ModulePackageContainer::Impl::moduleSolve(const std::vector & m + goal2name_query(goalWeak, query); + activatedModules.reset(new PackageSet(*query.runSet())); + } +- return make_pair(problems, problemType); ++ } else { ++ problemType = ModulePackageContainer::ModuleErrorType::ERROR_IN_DEFAULTS; ++ Query query(moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); ++ goal2name_query(goal, query); ++ activatedModules.reset(new PackageSet(*query.runSet())); + } +- problemType = ModulePackageContainer::ModuleErrorType::ERROR_IN_LATEST; + } else { + problemType = ModulePackageContainer::ModuleErrorType::ERROR_IN_DEFAULTS; ++ Query query(moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); ++ goal2name_query(goal, query); ++ activatedModules.reset(new PackageSet(*query.runSet())); + } ++ } else { ++ Query query(moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); ++ goal2name_query(goal, query); ++ activatedModules.reset(new PackageSet(*query.runSet())); + } +- Query query(moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); +- goal2name_query(goal, query); +- activatedModules.reset(new PackageSet(*query.runSet())); + return make_pair(problems, problemType); + } + +diff --git a/libdnf/module/ModulePackageContainer.hpp b/libdnf/module/ModulePackageContainer.hpp +index f19c60fd..99fc0677 100644 +--- a/libdnf/module/ModulePackageContainer.hpp ++++ b/libdnf/module/ModulePackageContainer.hpp +@@ -48,17 +48,15 @@ public: + enum class ModuleErrorType { + NO_ERROR = 0, + INFO, +- /// Error in module defaults detected during resolvement of module dependencies ++ /// Error in module defaults detected during resovement of module dependencies + ERROR_IN_DEFAULTS, +- /// Error detected during resolvement of module dependencies ++ /// Error detected during resovement of module dependencies + ERROR, +- /// Error detected during resolvement of module dependencies - Unexpected error!!! ++ /// Error detected during resovement of module dependencies - Unexpected error!!! + CANNOT_RESOLVE_MODULES, + CANNOT_RESOLVE_MODULE_SPEC, + CANNOT_ENABLE_MULTIPLE_STREAMS, +- CANNOT_MODIFY_MULTIPLE_TIMES_MODULE_STATE, +- /// Problem with latest modules during resolvement of module dependencies +- ERROR_IN_LATEST ++ CANNOT_MODIFY_MULTIPLE_TIMES_MODULE_STATE + }; + + struct Exception : public std::runtime_error +-- +2.31.1 + diff --git a/SOURCES/0006-Add-new-option-module-stream-switch.patch b/SOURCES/0006-Add-new-option-module-stream-switch.patch deleted file mode 100644 index 1a9cfd9..0000000 --- a/SOURCES/0006-Add-new-option-module-stream-switch.patch +++ /dev/null @@ -1,53 +0,0 @@ -From a1c96ecae6f2052407345a66293710109323de3a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= -Date: Tue, 21 Jul 2020 15:37:05 +0200 -Subject: [PATCH] Add new option module_stream_switch - -= changelog = -msg: Add new options module_stream_switch -type: enhancement ---- - libdnf/conf/ConfigMain.cpp | 3 +++ - libdnf/conf/ConfigMain.hpp | 1 + - 2 files changed, 4 insertions(+) - -diff --git a/libdnf/conf/ConfigMain.cpp b/libdnf/conf/ConfigMain.cpp -index 1ffd3b336..abfc2082b 100644 ---- a/libdnf/conf/ConfigMain.cpp -+++ b/libdnf/conf/ConfigMain.cpp -@@ -278,6 +278,7 @@ class ConfigMain::Impl { - OptionBool downloadonly{false}; // runtime only option - OptionBool ignorearch{false}; - OptionString module_platform_id{nullptr}; -+ OptionBool module_stream_switch{false}; - - OptionString user_agent{getUserAgent()}; - OptionBool countme{false}; -@@ -434,6 +435,7 @@ ConfigMain::Impl::Impl(Config & owner) - owner.optBinds().add("comment", comment); - owner.optBinds().add("ignorearch", ignorearch); - owner.optBinds().add("module_platform_id", module_platform_id); -+ owner.optBinds().add("module_stream_switch", module_stream_switch); - owner.optBinds().add("user_agent", user_agent); - owner.optBinds().add("countme", countme); - owner.optBinds().add("protect_running_kernel", protect_running_kernel); -@@ -569,6 +571,7 @@ OptionBool & ConfigMain::downloadonly() { return pImpl->downloadonly; } - OptionBool & ConfigMain::ignorearch() { return pImpl->ignorearch; } - - OptionString & ConfigMain::module_platform_id() { return pImpl->module_platform_id; } -+OptionBool & ConfigMain::module_stream_switch() { return pImpl->module_stream_switch; } - OptionString & ConfigMain::user_agent() { return pImpl->user_agent; } - OptionBool & ConfigMain::countme() { return pImpl->countme; } - OptionBool & ConfigMain::protect_running_kernel() {return pImpl->protect_running_kernel; } -diff --git a/libdnf/conf/ConfigMain.hpp b/libdnf/conf/ConfigMain.hpp -index 226c74d50..835e1fc65 100644 ---- a/libdnf/conf/ConfigMain.hpp -+++ b/libdnf/conf/ConfigMain.hpp -@@ -125,6 +125,7 @@ class ConfigMain : public Config { - OptionBool & ignorearch(); - - OptionString & module_platform_id(); -+ OptionBool & module_stream_switch(); - OptionString & user_agent(); - OptionBool & countme(); - OptionBool & protect_running_kernel(); diff --git a/SOURCES/0006-Revert-Add-additional-fallback-for-module-resolve.patch b/SOURCES/0006-Revert-Add-additional-fallback-for-module-resolve.patch new file mode 100644 index 0000000..cecce8c --- /dev/null +++ b/SOURCES/0006-Revert-Add-additional-fallback-for-module-resolve.patch @@ -0,0 +1,62 @@ +From 15a06ef27466f42a8dc39823385f0ca655e80b12 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:53 +0200 +Subject: [PATCH 06/19] Revert "Add additional fallback for module resolve" + +This reverts commit fc98ce725181a77bbe0ab157d40443467612c0c0. +--- + libdnf/module/ModulePackageContainer.cpp | 32 ++++++++---------------- + 1 file changed, 11 insertions(+), 21 deletions(-) + +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index ee90056c..e19db08b 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -702,33 +702,23 @@ ModulePackageContainer::Impl::moduleSolve(const std::vector & m + std::vector> problems; + auto problemType = ModulePackageContainer::ModuleErrorType::NO_ERROR; + if (ret) { +- // Goal run ignor problem in defaults + problems = goal.describeAllProblemRules(false); + ret = goal.run(DNF_FORCE_BEST); + if (ret) { +- // Goal run ignor problem in defaults and in latest +- ret = goal.run(DNF_NONE); ++ // Conflicting modules has to be removed otherwice it could result than one of them will ++ // be active ++ auto conflictingPkgs = goal.listConflictPkgs(DNF_PACKAGE_STATE_AVAILABLE); ++ dnf_sack_add_excludes(moduleSack, conflictingPkgs.get()); ++ ret = goalWeak.run(DNF_NONE); + if (ret) { +- // Conflicting modules has to be removed otherwice it could result than one of them will +- // be active +- auto conflictingPkgs = goal.listConflictPkgs(DNF_PACKAGE_STATE_AVAILABLE); +- dnf_sack_add_excludes(moduleSack, conflictingPkgs.get()); +- ret = goalWeak.run(DNF_NONE); +- if (ret) { +- auto logger(Log::getLogger()); +- logger->critical("Modularity filtering totally broken\n"); +- problemType = ModulePackageContainer::ModuleErrorType::CANNOT_RESOLVE_MODULES; +- activatedModules.reset(); +- } else { +- problemType = ModulePackageContainer::ModuleErrorType::ERROR; +- Query query(moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); +- goal2name_query(goalWeak, query); +- activatedModules.reset(new PackageSet(*query.runSet())); +- } ++ auto logger(Log::getLogger()); ++ logger->critical("Modularity filtering totally broken\n"); ++ problemType = ModulePackageContainer::ModuleErrorType::CANNOT_RESOLVE_MODULES; ++ activatedModules.reset(); + } else { +- problemType = ModulePackageContainer::ModuleErrorType::ERROR_IN_DEFAULTS; ++ problemType = ModulePackageContainer::ModuleErrorType::ERROR; + Query query(moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); +- goal2name_query(goal, query); ++ goal2name_query(goalWeak, query); + activatedModules.reset(new PackageSet(*query.runSet())); + } + } else { +-- +2.31.1 + diff --git a/SOURCES/0007-Fix-removal-step-during-modular-enable-in-context-part.patch b/SOURCES/0007-Fix-removal-step-during-modular-enable-in-context-part.patch deleted file mode 100644 index d43bfcc..0000000 --- a/SOURCES/0007-Fix-removal-step-during-modular-enable-in-context-part.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 831d023c3c6fb4a28903cb3170efdd9f85645e1a Mon Sep 17 00:00:00 2001 -From: Jaroslav Mracek -Date: Fri, 20 Nov 2020 16:30:17 +0100 -Subject: [PATCH] Fix removal step during modular enable in context part - -It resolves `free(): double free detected in tcache 2` ---- - libdnf/dnf-context.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libdnf/dnf-context.cpp b/libdnf/dnf-context.cpp -index 069267119..bc4a15b68 100644 ---- a/libdnf/dnf-context.cpp -+++ b/libdnf/dnf-context.cpp -@@ -3087,7 +3087,7 @@ static std::vectorfirst != enabledOrDefaultStream) { -- stream_dict.erase(iter); -+ stream_dict.erase(iter++); - } else { - ++iter; - } diff --git a/SOURCES/0007-Revert-Decide-how-to-handle-context-according-to-sta.patch b/SOURCES/0007-Revert-Decide-how-to-handle-context-according-to-sta.patch new file mode 100644 index 0000000..3b596fa --- /dev/null +++ b/SOURCES/0007-Revert-Decide-how-to-handle-context-according-to-sta.patch @@ -0,0 +1,27 @@ +From 0a92554dc2df3d2241b289bb796bc997c2959aaa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:53 +0200 +Subject: [PATCH 07/19] Revert "Decide how to handle context according to + static_context value" + +This reverts commit 66439ed5a57373dfd106379637a9400b107e160c. +--- + libdnf/module/modulemd/ModuleMetadata.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libdnf/module/modulemd/ModuleMetadata.cpp b/libdnf/module/modulemd/ModuleMetadata.cpp +index ee6834c6..07817ce1 100644 +--- a/libdnf/module/modulemd/ModuleMetadata.cpp ++++ b/libdnf/module/modulemd/ModuleMetadata.cpp +@@ -142,7 +142,7 @@ std::vector ModuleMetadata::getAllModulePackages(DnfSack * modu + //GPtrArray * streams = modulemd_module_index_search_streams_by_nsvca_glob(resultingModuleIndex, NULL); + for (unsigned int i = 0; i < streams->len; i++){ + ModulemdModuleStream * moduleMdStream = static_cast(g_ptr_array_index(streams, i)); +- if (modulemd_module_stream_v2_is_static_context((ModulemdModuleStreamV2 *) moduleMdStream)) { ++ if (modulemd_module_stream_get_mdversion(moduleMdStream) > 2) { + result.push_back(new ModulePackage(moduleSack, repo, moduleMdStream, repoID)); + } else { + g_object_ref(moduleMdStream); +-- +2.31.1 + diff --git a/SOURCES/0008-Revert-Fix-load-update-FailSafe.patch b/SOURCES/0008-Revert-Fix-load-update-FailSafe.patch new file mode 100644 index 0000000..f700d85 --- /dev/null +++ b/SOURCES/0008-Revert-Fix-load-update-FailSafe.patch @@ -0,0 +1,76 @@ +From 140168ce29d2425ebf2b4b5b25926611a189cd84 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:53 +0200 +Subject: [PATCH 08/19] Revert "Fix load/update FailSafe" + +This reverts commit 244a37d772fcd5a5969085edab544fb1e7b68aad. +--- + libdnf/module/ModulePackageContainer.cpp | 38 ++++++++++++++++++------ + 1 file changed, 29 insertions(+), 9 deletions(-) + +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index e19db08b..97c84c01 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -1641,7 +1641,6 @@ ModulePackageContainer::Impl::ModulePersistor::getRemovedProfiles() + + void ModulePackageContainer::loadFailSafeData() + { +- pImpl->addVersion2Modules(); + auto persistor = pImpl->persistor->configs; + + std::map> enabledStreams; +@@ -1696,21 +1695,42 @@ void ModulePackageContainer::loadFailSafeData() + + std::vector ModulePackageContainer::Impl::getLatestActiveEnabledModules() + { +- Query query(moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); +- query.addFilter(HY_PKG, HY_EQ, activatedModules.get()); +- query.addFilter(HY_PKG_REPONAME, HY_NEQ, HY_SYSTEM_REPO_NAME); +- query.addFilter(HY_PKG_LATEST_PER_ARCH, HY_EQ, 1); +- auto set = query.runSet(); +- + std::vector activeModules; + Id moduleId = -1; +- while ((moduleId = set->next(moduleId)) != -1) { ++ while ((moduleId = activatedModules->next(moduleId)) != -1) { + auto modulePackage = modules.at(moduleId).get(); + if (isEnabled(modulePackage->getName(), modulePackage->getStream())) { + activeModules.push_back(modulePackage); + } + } +- return activeModules; ++ if (activeModules.empty()) { ++ return {}; ++ } ++ auto sack = moduleSack; ++ std::sort(activeModules.begin(), activeModules.end(), ++ [sack](const ModulePackage * first, const ModulePackage * second) ++ {return modulePackageLatestSorter(sack, first, second);}); ++ ++ auto packageFirst = activeModules[0]; ++ std::vector latest; ++ auto vectorSize = activeModules.size(); ++ latest.push_back(packageFirst); ++ auto name = packageFirst->getNameCStr(); ++ auto stream = packageFirst->getStreamCStr(); ++ auto arch = packageFirst->getArchCStr(); ++ ++ for (unsigned int index = 1; index < vectorSize; ++index) { ++ auto & package = activeModules[index]; ++ if (g_strcmp0(package->getNameCStr(), name) != 0 || ++ g_strcmp0(package->getStreamCStr(), stream) != 0 || ++ g_strcmp0(package->getArchCStr(), arch) != 0) { ++ name = package->getNameCStr(); ++ stream = package->getStreamCStr(); ++ arch = package->getArchCStr(); ++ latest.push_back(package); ++ } ++ } ++ return latest; + } + + void ModulePackageContainer::Impl::addVersion2Modules() +-- +2.31.1 + diff --git a/SOURCES/0008-Update-translations.patch b/SOURCES/0008-Update-translations.patch deleted file mode 100644 index 7568440..0000000 --- a/SOURCES/0008-Update-translations.patch +++ /dev/null @@ -1,3698 +0,0 @@ -From 552eaed4597f161784d508ff20bc31c8f42c9d2e Mon Sep 17 00:00:00 2001 -From: Marek Blaha -Date: Mon, 8 Mar 2021 16:11:10 +0100 -Subject: [PATCH] Update translations - ---- - po/CMakeLists.txt | 1 + - po/fr.po | 289 +++++++++++++++++++++------- - po/ja.po | 291 ++++++++++++++++++++-------- - po/ko.po | 469 ++++++++++++++++++++++++++++++---------------- - po/libdnf.pot | 261 +++++++++++++++++++------- - po/zh_CN.po | 436 +++++++++++++++++++++++++++--------------- - 6 files changed, 1221 insertions(+), 526 deletions(-) - -diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt -index 4f106fc3..1ef50556 100644 ---- a/po/CMakeLists.txt -+++ b/po/CMakeLists.txt -@@ -15,6 +15,7 @@ if (GIT_FOUND) - OUTPUT_VARIABLE CURRENT_BRANCH - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - ) -+ set(CURRENT_BRANCH "rhel-8") - - # output _weblate-clone is never created so the clonning of weblate repo is always processed - # and fresh *.po files are used -diff --git a/po/fr.po b/po/fr.po -index 055cdaff..7fa62f14 100644 ---- a/po/fr.po -+++ b/po/fr.po -@@ -5,20 +5,21 @@ - # Ludek Janda , 2018. #zanata - # Jean-Baptiste Holcroft , 2019. #zanata - # Julien Humbert , 2020. -+# Sundeep Anand , 2021. - msgid "" - msgstr "" - "Project-Id-Version: PACKAGE VERSION\n" - "Report-Msgid-Bugs-To: \n" --"POT-Creation-Date: 2020-10-05 09:18-0400\n" --"PO-Revision-Date: 2020-06-29 02:40+0000\n" --"Last-Translator: Julien Humbert \n" --"Language-Team: French \n" -+"POT-Creation-Date: 2021-02-22 09:52+0100\n" -+"PO-Revision-Date: 2021-03-08 11:09+0000\n" -+"Last-Translator: Sundeep Anand \n" -+"Language-Team: French \n" - "Language: fr\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: Weblate 4.1.1\n" -+"X-Generator: Weblate 4.5.1\n" - - #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40 - msgid "no value specified" -@@ -39,17 +40,17 @@ msgstr "n’a pu convertir « %s » en octets" - msgid "unknown unit '%s'" - msgstr "unité « %s » inconnue" - --#: libdnf/conf/ConfigMain.cpp:332 -+#: libdnf/conf/ConfigMain.cpp:334 - #, c-format - msgid "percentage '%s' is out of range" - msgstr "le pourcentage « %s » est en dehors des limites" - --#: libdnf/conf/OptionBinds.cpp:76 -+#: libdnf/conf/OptionBinds.cpp:85 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" does not exist" - msgstr "Configuration : OptionBinding ayant pour id « %s » n’existe pas" - --#: libdnf/conf/OptionBinds.cpp:88 -+#: libdnf/conf/OptionBinds.cpp:97 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" already exists" - msgstr "Configuration : OptionBinding ayant pour « %s » n’existe pas" -@@ -60,7 +61,7 @@ msgid "invalid boolean value '%s'" - msgstr "valeur booléenne invalide : « %s »" - - #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 --#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 -+#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 - #, c-format - msgid "'%s' is not an allowed value" - msgstr "la valeur « %s » n’est pas autorisée" -@@ -94,10 +95,111 @@ msgstr "le chemin fourni « %s » n’existe pas." - msgid "could not convert '%s' to seconds" - msgstr "n’a pu convertir « %s » en secondes" - --#: libdnf/conf/OptionString.cpp:74 -+#: libdnf/conf/OptionString.cpp:79 - msgid "GetValue(): Value not set" - msgstr "GetValue() : valeur non définie" - -+#: libdnf/dnf-context.cpp:3033 libdnf/dnf-context.cpp:3042 -+#, c-format -+msgid "Cannot enable more streams from module '%s' at the same time" -+msgstr "Ne peut pas activer plus de flux du module '%s' en même temps" -+ -+#: libdnf/dnf-context.cpp:3051 libdnf/dnf-context.cpp:3069 -+#, c-format -+msgid "" -+"Cannot enable module '%1$s' stream '%2$s': State of module already modified" -+msgstr "" -+"Impossible d'activer le flux de module '%1$s' stream '%2$s' : état du module" -+" déjà modifié" -+ -+#: libdnf/dnf-context.cpp:3116 -+#, c-format -+msgid "Modular dependency problem with Defaults: %s" -+msgstr "Problème de dépendance modulaire avec les valeurs par défaut : %s" -+ -+#: libdnf/dnf-context.cpp:3119 -+#, c-format -+msgid "Modular dependency problem: %s" -+msgstr "Problème de dépendance modulaire : %s" -+ -+#: libdnf/dnf-context.cpp:3153 libdnf/dnf-context.cpp:3177 -+#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3227 -+#: libdnf/dnf-context.cpp:3243 libdnf/dnf-context.cpp:3275 -+#, c-format -+msgid "Unable to resolve argument '%s'" -+msgstr "Impossible de résoudre le paramètre ’%s’" -+ -+#: libdnf/dnf-context.cpp:3160 -+#, c-format -+msgid "" -+"Only module name is required. Ignoring unneeded information in argument: " -+"'%s'" -+msgstr "" -+"Seul le nom du module est nécessaire. Les paramètres inutiles ont été " -+"ignorés : ’%s’" -+ -+#: libdnf/dnf-context.cpp:3174 -+#, c-format -+msgid "Cannot reset module '%s': State of module already modified" -+msgstr "" -+"Impossible de réinitialiser le module '%s' : État du module déjà modifié" -+ -+#: libdnf/dnf-context.cpp:3185 -+#, c-format -+msgid "Cannot disable module '%s': State of module already modified" -+msgstr "Impossible de désactiver le module '%s' : État du module déjà modifié" -+ -+#: libdnf/dnf-context.cpp:3216 libdnf/dnf-context.cpp:3307 -+msgid "No modular data available" -+msgstr "Aucune donnée modulaire disponible" -+ -+#: libdnf/dnf-context.cpp:3233 -+#, c-format -+msgid "Ignoring unneeded information in argument: '%s'" -+msgstr "Ignorer les informations inutiles dans l'argumentation : '%s'" -+ -+#: libdnf/dnf-context.cpp:3271 -+#, c-format -+msgid "" -+"Problem during enablement of dependency tree for moduele '%1$s' stream " -+"'%2$s': %3$s" -+msgstr "" -+"Problème lors de l'activation de l'arbre des dépendances pour le flux de " -+"module '%1$s' stream '%2$s' : %3$s" -+ -+#: libdnf/dnf-context.cpp:3283 -+msgid "Problems appeared for module enable request" -+msgstr "Des problèmes sont apparus pour la demande d'activation du module" -+ -+#: libdnf/dnf-context.cpp:3338 -+msgid "Problems appeared for module reset request" -+msgstr "" -+"Des problèmes sont apparus pour la demande de réinitialisation des modules" -+ -+#: libdnf/dnf-context.cpp:3340 -+msgid "Problems appeared for module disable request" -+msgstr "Des problèmes sont apparus pour la demande de désactivation du module" -+ -+#: libdnf/dnf-context.cpp:3376 -+#, c-format -+msgid "" -+"The operation would result in switching of module '%s' stream '%s' to stream" -+" '%s'" -+msgstr "" -+"Le résultat de l’opération sera le basculement du flux « %s » du module « %s" -+" » vers le flux « %s »" -+ -+#: libdnf/dnf-context.cpp:3380 -+msgid "" -+"It is not possible to switch enabled streams of a module.\n" -+"It is recommended to remove all installed content from the module, and reset the module using 'microdnf module reset ' command. After you reset the module, you can install the other stream." -+msgstr "" -+"Il n’est pas possible de basculer les flux actifs d’un module. Il est " -+"recommandé de retirer tout contenu installé par le module, et de " -+"réinitialiser le mode en utilisant la commande 'microdnf module reset " -+"’. Après la réinitialisation du module, vous pouvez installer " -+"les autres flux." -+ - #: libdnf/dnf-goal.cpp:68 - msgid "Could not depsolve transaction; " - msgstr "Impossible de depsolve la transaction ; " -@@ -181,84 +283,84 @@ msgstr "n’a pas pu trouver le package %s" - msgid "could not add erase element %1$s(%2$i)" - msgstr "n’a pas pu ajouter d’élément pour effacer %1$s(%2$i)" - --#: libdnf/dnf-sack.cpp:381 -+#: libdnf/dnf-sack.cpp:395 -+msgid "failed to add solv" -+msgstr "n’a pu ajouter solv" -+ -+#: libdnf/dnf-sack.cpp:414 - #, c-format - msgid "no %1$s string for %2$s" - msgstr "aucune chaine %1$s pour %2$s" - --#: libdnf/dnf-sack.cpp:404 --msgid "failed to add solv" --msgstr "n’a pu ajouter solv" -- --#: libdnf/dnf-sack.cpp:422 -+#: libdnf/dnf-sack.cpp:424 - #, c-format - msgid "failed to open: %s" - msgstr "n’a pas pu ouvrir : %s" - --#: libdnf/dnf-sack.cpp:501 -+#: libdnf/dnf-sack.cpp:503 - #, c-format - msgid "cannot create temporary file: %s" - msgstr "n’a pas pu créer le fichier temporaire : %s" - --#: libdnf/dnf-sack.cpp:511 -+#: libdnf/dnf-sack.cpp:513 - #, c-format - msgid "failed opening tmp file: %s" - msgstr "n’a pas pu ouvrir le fichier tmp : %s" - --#: libdnf/dnf-sack.cpp:523 -+#: libdnf/dnf-sack.cpp:525 - #, c-format - msgid "write_main() failed writing data: %i" - msgstr "write_main() n’a pu écrire les données : %i" - --#: libdnf/dnf-sack.cpp:540 -+#: libdnf/dnf-sack.cpp:542 - msgid "write_main() failed to re-load written solv file" - msgstr "write_main() n’a pas pu charger à nouveau le fichier solv" - --#: libdnf/dnf-sack.cpp:605 -+#: libdnf/dnf-sack.cpp:607 - #, c-format - msgid "can not create temporary file %s" - msgstr "n’a pas pu créer le fichier temporaire %s" - --#: libdnf/dnf-sack.cpp:623 -+#: libdnf/dnf-sack.cpp:625 - #, c-format - msgid "write_ext(%1$d) has failed: %2$d" - msgstr "write_ext(%1$d) a échoué : %2$d" - --#: libdnf/dnf-sack.cpp:678 -+#: libdnf/dnf-sack.cpp:680 - msgid "null repo md file" - msgstr "null repo md file" - --#: libdnf/dnf-sack.cpp:687 -+#: libdnf/dnf-sack.cpp:689 - #, c-format - msgid "can not read file %1$s: %2$s" - msgstr "n’a pu lire le fichier %1$s : %2$s" - --#: libdnf/dnf-sack.cpp:701 -+#: libdnf/dnf-sack.cpp:703 - msgid "repo_add_solv() has failed." - msgstr "repo_add_solv() a échoué." - --#: libdnf/dnf-sack.cpp:714 -+#: libdnf/dnf-sack.cpp:716 - msgid "loading of MD_TYPE_PRIMARY has failed." - msgstr "échec du chargement du MD_TYPE_PRIMARY." - --#: libdnf/dnf-sack.cpp:727 -+#: libdnf/dnf-sack.cpp:729 - msgid "repo_add_repomdxml/rpmmd() has failed." - msgstr "repo_add_repomdxml/rpmmd() a échoué." - --#: libdnf/dnf-sack.cpp:794 -+#: libdnf/dnf-sack.cpp:796 - msgid "failed to auto-detect architecture" - msgstr "n’a pu auto-détecter l’architecture" - --#: libdnf/dnf-sack.cpp:919 -+#: libdnf/dnf-sack.cpp:961 - #, c-format - msgid "failed creating cachedir %s" - msgstr "n’a pu créer le cachedir %s" - --#: libdnf/dnf-sack.cpp:1696 -+#: libdnf/dnf-sack.cpp:1738 - msgid "failed loading RPMDB" - msgstr "n’a pu télécharger RPMDB" - --#: libdnf/dnf-sack.cpp:2403 -+#: libdnf/dnf-sack.cpp:2461 - #, c-format - msgid "No module defaults found: %s" - msgstr "Aucun module par défaut n’a été trouvé : %s" -@@ -348,7 +450,7 @@ msgstr "Erreur %i lors du test transactionnel" - msgid "Error %i running transaction" - msgstr "Erreur %i pendant la transaction" - --#: libdnf/dnf-transaction.cpp:1473 -+#: libdnf/dnf-transaction.cpp:1474 - #, c-format - msgid "Transaction did not go to writing phase, but returned no error(%i)" - msgstr "" -@@ -589,7 +691,16 @@ msgstr "aucune solution, n’a pas pu supprimer le package protégé" - msgid "no solution possible" - msgstr "aucune solution n’est possible" - --#: libdnf/goal/Goal.cpp:1479 -+#: libdnf/goal/Goal.cpp:1193 -+msgid "Problem: " -+msgstr "Problème : " -+ -+#: libdnf/goal/Goal.cpp:1198 -+#, c-format -+msgid "Problem %d: " -+msgstr "Probléme %d : " -+ -+#: libdnf/goal/Goal.cpp:1525 - msgid "" - "The operation would result in removing the following protected packages: " - msgstr "" -@@ -655,32 +766,56 @@ msgstr "Impossible d’activer les flux pour le module « %s »" - msgid "Conflicting defaults with repo '%s': %s" - msgstr "Valeurs par défaut en conflit avec le dépôt « %s » : %s" - --#: libdnf/module/ModulePackageContainer.cpp:1569 -+#: libdnf/module/ModulePackageContainer.cpp:829 -+msgid "Installing module profiles:\n" -+msgstr "Installation des profils de module :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:844 -+msgid "Disabling module profiles:\n" -+msgstr "Désactivation des profils de module :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:859 -+msgid "Enabling module streams:\n" -+msgstr "Activation des flux de modules :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:873 -+msgid "Switching module streams:\n" -+msgstr "Basculement des flux de modules :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:891 -+msgid "Disabling modules:\n" -+msgstr "Désactivation des modules :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:902 -+msgid "Resetting modules:\n" -+msgstr "Réinitialisation des modules :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1586 - #, c-format - msgid "Unable to load modular Fail-Safe data at '%s'" - msgstr "Impossible de charger les données de sécurité à « %s »" - --#: libdnf/module/ModulePackageContainer.cpp:1575 -+#: libdnf/module/ModulePackageContainer.cpp:1592 - #, c-format - msgid "Unable to load modular Fail-Safe data for module '%s:%s'" - msgstr "" - "Impossible de charger les données de sécurité modulaires pour le module " - "« %s : %s »" - --#: libdnf/module/ModulePackageContainer.cpp:1639 -+#: libdnf/module/ModulePackageContainer.cpp:1656 - #, c-format - msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" - msgstr "" - "Impossible de créer le dossier « %s » pour les données de sécurité " - "modulaires : %s" - --#: libdnf/module/ModulePackageContainer.cpp:1661 -+#: libdnf/module/ModulePackageContainer.cpp:1678 - #, c-format - msgid "Unable to save a modular Fail Safe data to '%s'" - msgstr "" - "Impossible d’enregistrer les données de sécurité modulaires vers « %s »" - --#: libdnf/module/ModulePackageContainer.cpp:1686 -+#: libdnf/module/ModulePackageContainer.cpp:1703 - #, c-format - msgid "Unable to remove a modular Fail Safe data in '%s'" - msgstr "" -@@ -769,12 +904,18 @@ msgid "Repository '%s' has unsupported type: 'type=%s', skipping." - msgstr "" - "Le dépôt « %s » n’a pas de type pris en charge : « type=%s », passer outre." - --#: libdnf/repo/Repo.cpp:546 -+#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:534 libdnf/repo/Repo.cpp:581 -+#: libdnf/repo/Repo.cpp:1368 -+#, c-format -+msgid "repo '%s': 'basecachedir' is not set" -+msgstr "repo '%s' : 'basecachedir' n'est pas fixé" -+ -+#: libdnf/repo/Repo.cpp:553 - #, c-format - msgid "Cannot find a valid baseurl for repo: %s" - msgstr "Impossible de trouver une adresse de base pour le dépôt : %s" - --#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 -+#: libdnf/repo/Repo.cpp:594 libdnf/repo/Repo.cpp:1693 - msgid "" - "Maximum download speed is lower than minimum. Please change configuration of" - " minrate or throttle" -@@ -782,139 +923,150 @@ msgstr "" - "La vitesse de téléchargement maximale est plus basse que le minimum. " - "Veuillez modifier les paramètres minrate ou throttle" - --#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 -+#: libdnf/repo/Repo.cpp:625 -+#, c-format -+msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" -+msgstr "repo '%s' : 'proxy_username' est défini mais pas 'proxy_password'." -+ -+#: libdnf/repo/Repo.cpp:647 libdnf/repo/Repo.cpp:669 - #, c-format - msgid "%s: gpgme_data_new_from_fd(): %s" - msgstr "%s : gpgme_data_new_from_fd() : %s" - --#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 -+#: libdnf/repo/Repo.cpp:655 libdnf/repo/Repo.cpp:677 - #, c-format - msgid "%s: gpgme_op_import(): %s" - msgstr "%s : gpgme_op_import() : %s" - --#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 -+#: libdnf/repo/Repo.cpp:700 libdnf/repo/Repo.cpp:766 libdnf/repo/Repo.cpp:894 - #, c-format - msgid "%s: gpgme_ctx_set_engine_info(): %s" - msgstr "%s : gpgme_ctx_set_engine_info() : %s" - --#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 -+#: libdnf/repo/Repo.cpp:727 libdnf/repo/Repo.cpp:791 - #, c-format - msgid "can not list keys: %s" - msgstr "n’a pas pu lister les clés : %s" - --#: libdnf/repo/Repo.cpp:806 -+#: libdnf/repo/Repo.cpp:820 - #, c-format - msgid "Failed to retrieve GPG key for repo '%s': %s" - msgstr "Impossible de récupérer la clé GPG pour le dépôt « %s » : %s" - --#: libdnf/repo/Repo.cpp:859 -+#: libdnf/repo/Repo.cpp:873 - #, c-format - msgid "repo %s: 0x%s already imported" - msgstr "dépôt %s : 0x%s déjà importé" - --#: libdnf/repo/Repo.cpp:887 -+#: libdnf/repo/Repo.cpp:901 - #, c-format - msgid "repo %s: imported key 0x%s." - msgstr "dépôt %s : clé importée 0x%s." - --#: libdnf/repo/Repo.cpp:1131 -+#: libdnf/repo/Repo.cpp:1149 - #, c-format - msgid "reviving: repo '%s' skipped, no metalink." - msgstr "relance : dépôt « %s » ignoré, pas de méta-lien." - --#: libdnf/repo/Repo.cpp:1150 -+#: libdnf/repo/Repo.cpp:1168 - #, c-format - msgid "reviving: repo '%s' skipped, no usable hash." - msgstr "relance : dépôt « %s » ignoré, pas de hachage utilisable." - --#: libdnf/repo/Repo.cpp:1173 -+#: libdnf/repo/Repo.cpp:1191 - #, c-format - msgid "reviving: failed for '%s', mismatched %s sum." - msgstr "relance : échec pour « %s », la somme de %s ne correspond pas." - --#: libdnf/repo/Repo.cpp:1179 -+#: libdnf/repo/Repo.cpp:1197 - #, c-format - msgid "reviving: '%s' can be revived - metalink checksums match." - msgstr "" - "relance : « %s » peut être relancé - la somme de contrôle du méta-lien " - "correspond." - --#: libdnf/repo/Repo.cpp:1204 -+#: libdnf/repo/Repo.cpp:1222 - #, c-format - msgid "reviving: '%s' can be revived - repomd matches." - msgstr "relance : « %s » peut être relancé - le repomd correspond." - --#: libdnf/repo/Repo.cpp:1206 -+#: libdnf/repo/Repo.cpp:1224 - #, c-format - msgid "reviving: failed for '%s', mismatched repomd." - msgstr "relance : échec pour « %s », le repomd ne correspond pas." - --#: libdnf/repo/Repo.cpp:1224 -+#: libdnf/repo/Repo.cpp:1242 - #, c-format - msgid "Cannot create repo destination directory \"%s\": %s" - msgstr "Impossible de créer le répertoire de destination du dépôt « %s » : %s" - --#: libdnf/repo/Repo.cpp:1230 -+#: libdnf/repo/Repo.cpp:1248 - #, c-format - msgid "Cannot create repo temporary directory \"%s\": %s" - msgstr "Impossible de créer le répertoire temporaire du dépôt « %s » : %s" - --#: libdnf/repo/Repo.cpp:1244 -+#: libdnf/repo/Repo.cpp:1262 - #, c-format - msgid "Cannot create directory \"%s\": %s" - msgstr "Impossible de créer le répertoire « %s » : %s" - --#: libdnf/repo/Repo.cpp:1267 -+#: libdnf/repo/Repo.cpp:1285 - #, c-format - msgid "Cannot rename directory \"%s\" to \"%s\": %s" - msgstr "Impossible de renommer le répertoire « %s » en « %s » : %s" - --#: libdnf/repo/Repo.cpp:1290 -+#: libdnf/repo/Repo.cpp:1308 - #, c-format - msgid "repo: using cache for: %s" - msgstr "dépôt : utilisation du cache pour : %s" - --#: libdnf/repo/Repo.cpp:1302 -+#: libdnf/repo/Repo.cpp:1320 - #, c-format - msgid "Cache-only enabled but no cache for '%s'" - msgstr "« cache uniquement » activé, mais pas de cache pour « %s »" - --#: libdnf/repo/Repo.cpp:1306 -+#: libdnf/repo/Repo.cpp:1324 - #, c-format - msgid "repo: downloading from remote: %s" - msgstr "dépôt : téléchargement à distance en provenance de : %s" - --#: libdnf/repo/Repo.cpp:1312 -+#: libdnf/repo/Repo.cpp:1330 - #, c-format - msgid "Failed to download metadata for repo '%s': %s" - msgstr "Échec du téléchargement des métadonnées pour le dépôt « %s » : %s" - --#: libdnf/repo/Repo.cpp:1338 -+#: libdnf/repo/Repo.cpp:1356 - msgid "getCachedir(): Computation of SHA256 failed" - msgstr "getCachedir() : échec du calcul de SHA256" - --#: libdnf/repo/Repo.cpp:1363 -+#: libdnf/repo/Repo.cpp:1384 - #, c-format - msgid "Cannot create persistdir \"%s\": %s" - msgstr "Impossible de créer le dossier persistant « %s » : %s" - --#: libdnf/repo/Repo.cpp:1763 -+#: libdnf/repo/Repo.cpp:1715 -+msgid "'proxy_username' is set but not 'proxy_password'" -+msgstr "" -+"Le nom d'utilisateur \"proxy_username\" est défini mais pas le mot de passe " -+"\"proxy_password\"" -+ -+#: libdnf/repo/Repo.cpp:1787 - msgid "resume cannot be used simultaneously with the byterangestart param" - msgstr "" - "« resume » (reprise) ne peut pas être utilisé avec le paramètre " - "byterangestart" - --#: libdnf/repo/Repo.cpp:1780 -+#: libdnf/repo/Repo.cpp:1804 - #, c-format - msgid "PackageTarget initialization failed: %s" - msgstr "L’initialisation de Package Target a échoué : %s" - --#: libdnf/repo/Repo.cpp:1886 -+#: libdnf/repo/Repo.cpp:1910 - #, c-format - msgid "Cannot open %s: %s" - msgstr "impossible d’ouvrir %s : %s" - --#: libdnf/repo/Repo.cpp:1930 -+#: libdnf/repo/Repo.cpp:1954 - #, c-format - msgid "Log handler with id %ld doesn't exist" - msgstr "Log handler ayant pour id %ld n’existe pas" -@@ -975,6 +1127,3 @@ msgstr "" - - #~ msgid "Bad id for repo: %s, byte = %s %d" - #~ msgstr "ID erroné pour le dépôt : %s, byte = %s %d" -- --#~ msgid "failed calculating RPMDB checksum" --#~ msgstr "n’a pu calculer la somme de contrôle RPMDB" -diff --git a/po/ja.po b/po/ja.po -index b9064ee6..923b190c 100644 ---- a/po/ja.po -+++ b/po/ja.po -@@ -1,20 +1,21 @@ - # Casey Jones , 2018. #zanata - # Ludek Janda , 2018. #zanata - # Casey Jones , 2020. -+# Sundeep Anand , 2021. - msgid "" - msgstr "" - "Project-Id-Version: PACKAGE VERSION\n" - "Report-Msgid-Bugs-To: \n" --"POT-Creation-Date: 2020-10-05 09:18-0400\n" --"PO-Revision-Date: 2020-05-05 09:40+0000\n" --"Last-Translator: Casey Jones \n" --"Language-Team: Japanese \n" -+"POT-Creation-Date: 2021-02-22 09:52+0100\n" -+"PO-Revision-Date: 2021-03-08 11:09+0000\n" -+"Last-Translator: Sundeep Anand \n" -+"Language-Team: Japanese \n" - "Language: ja\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=1; plural=0;\n" --"X-Generator: Weblate 4.0.3\n" -+"X-Generator: Weblate 4.5.1\n" - - #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40 - msgid "no value specified" -@@ -35,17 +36,17 @@ msgstr "'%s' を バイトへ変換できませんでした" - msgid "unknown unit '%s'" - msgstr "不明な単位 '%s'" - --#: libdnf/conf/ConfigMain.cpp:332 -+#: libdnf/conf/ConfigMain.cpp:334 - #, c-format - msgid "percentage '%s' is out of range" - msgstr "パーセンテージ '%s' が範囲外にあります" - --#: libdnf/conf/OptionBinds.cpp:76 -+#: libdnf/conf/OptionBinds.cpp:85 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" does not exist" - msgstr "設定: id \"%s\" を伴う OptionBinding は存在しません" - --#: libdnf/conf/OptionBinds.cpp:88 -+#: libdnf/conf/OptionBinds.cpp:97 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" already exists" - msgstr "設定: id \"%s\" を伴う OptionBinding はすでに存在します" -@@ -56,7 +57,7 @@ msgid "invalid boolean value '%s'" - msgstr "無効な boolean 値 '%s'" - - #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 --#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 -+#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 - #, c-format - msgid "'%s' is not an allowed value" - msgstr "'%s' 値は許可されていない値です" -@@ -68,12 +69,12 @@ msgstr "無効な値" - #: libdnf/conf/OptionNumber.cpp:73 - #, c-format - msgid "given value [%d] should be less than allowed value [%d]." --msgstr "指定された値 [%d] は許可された値 [%d]より小さくしてください" -+msgstr "指定された値 [%d] は許可された値 [%d]より小さくしてください。" - - #: libdnf/conf/OptionNumber.cpp:76 - #, c-format - msgid "given value [%d] should be greater than allowed value [%d]." --msgstr "指定された値 [%d] は許可された値 [%d]より大きくしてください" -+msgstr "指定された値 [%d] は許可された値 [%d]より大きくしてください。" - - #: libdnf/conf/OptionPath.cpp:78 - #, c-format -@@ -90,10 +91,98 @@ msgstr "指定されたパス '%s' が存在しません。" - msgid "could not convert '%s' to seconds" - msgstr "'%s' を 秒に変換できません" - --#: libdnf/conf/OptionString.cpp:74 -+#: libdnf/conf/OptionString.cpp:79 - msgid "GetValue(): Value not set" - msgstr "GetValue(): 値は設定されていません" - -+#: libdnf/dnf-context.cpp:3033 libdnf/dnf-context.cpp:3042 -+#, c-format -+msgid "Cannot enable more streams from module '%s' at the same time" -+msgstr "モジュール '%s' から、さらにストリームを同時に有効にできません" -+ -+#: libdnf/dnf-context.cpp:3051 libdnf/dnf-context.cpp:3069 -+#, c-format -+msgid "" -+"Cannot enable module '%1$s' stream '%2$s': State of module already modified" -+msgstr "モジュール '%1$s' ストリーム '%2$s' を有効にできません。モジュールの状態はすでに変更されています" -+ -+#: libdnf/dnf-context.cpp:3116 -+#, c-format -+msgid "Modular dependency problem with Defaults: %s" -+msgstr "デフォルトのモジュラー依存問題: %s" -+ -+#: libdnf/dnf-context.cpp:3119 -+#, c-format -+msgid "Modular dependency problem: %s" -+msgstr "モジュラーの依存に関する問題: %s" -+ -+#: libdnf/dnf-context.cpp:3153 libdnf/dnf-context.cpp:3177 -+#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3227 -+#: libdnf/dnf-context.cpp:3243 libdnf/dnf-context.cpp:3275 -+#, c-format -+msgid "Unable to resolve argument '%s'" -+msgstr "引数 '%s' を解決できません" -+ -+#: libdnf/dnf-context.cpp:3160 -+#, c-format -+msgid "" -+"Only module name is required. Ignoring unneeded information in argument: " -+"'%s'" -+msgstr "モジュール名のみが必要です。引数の不必要な情報は無視します: '%s'" -+ -+#: libdnf/dnf-context.cpp:3174 -+#, c-format -+msgid "Cannot reset module '%s': State of module already modified" -+msgstr "モジュール '%s' をリセットできません。モジュールの状態はすでに変更されています" -+ -+#: libdnf/dnf-context.cpp:3185 -+#, c-format -+msgid "Cannot disable module '%s': State of module already modified" -+msgstr "モジュール '%s' を無効にできません。モジュールの状態はすでに変更されています" -+ -+#: libdnf/dnf-context.cpp:3216 libdnf/dnf-context.cpp:3307 -+msgid "No modular data available" -+msgstr "モジュールデータは利用できません" -+ -+#: libdnf/dnf-context.cpp:3233 -+#, c-format -+msgid "Ignoring unneeded information in argument: '%s'" -+msgstr "引数の不要な情報は無視します: '%s'" -+ -+#: libdnf/dnf-context.cpp:3271 -+#, c-format -+msgid "" -+"Problem during enablement of dependency tree for moduele '%1$s' stream " -+"'%2$s': %3$s" -+msgstr "モジュール '%1$s' ストリーム '%2$s' の依存関係ツリーの有効化中に問題: %3$s" -+ -+#: libdnf/dnf-context.cpp:3283 -+msgid "Problems appeared for module enable request" -+msgstr "モジュール有効リクエストに発生する問題" -+ -+#: libdnf/dnf-context.cpp:3338 -+msgid "Problems appeared for module reset request" -+msgstr "モジュールリセットリクエストに発生する問題" -+ -+#: libdnf/dnf-context.cpp:3340 -+msgid "Problems appeared for module disable request" -+msgstr "モジュール無効化リクエストに発生する問題" -+ -+#: libdnf/dnf-context.cpp:3376 -+#, c-format -+msgid "" -+"The operation would result in switching of module '%s' stream '%s' to stream" -+" '%s'" -+msgstr "オペレーションは、モジュール '%s' ストリーム '%s' を ストリーム '%s' へと切り替える結果となります" -+ -+#: libdnf/dnf-context.cpp:3380 -+msgid "" -+"It is not possible to switch enabled streams of a module.\n" -+"It is recommended to remove all installed content from the module, and reset the module using 'microdnf module reset ' command. After you reset the module, you can install the other stream." -+msgstr "" -+"有効化されたモジュールのストリームの切り替えはできません。\n" -+"モジュールからすべてのインストールされたコンテンツを削除し、'microdnf module reset ' コマンドを使用してモジュールをリセットすることを推奨します。モジュールのリセット後に、別のストリームをインストールできます。" -+ - #: libdnf/dnf-goal.cpp:68 - msgid "Could not depsolve transaction; " - msgstr "トランザクションを depsolve できませんでした; " -@@ -174,87 +263,87 @@ msgstr "パッケージ %s を見つけることができませんでした" - msgid "could not add erase element %1$s(%2$i)" - msgstr "erase 要素 %1$s(%2$i) を追加することができません" - --#: libdnf/dnf-sack.cpp:381 -+#: libdnf/dnf-sack.cpp:395 -+msgid "failed to add solv" -+msgstr "solv の追加に失敗しました" -+ -+#: libdnf/dnf-sack.cpp:414 - #, c-format - msgid "no %1$s string for %2$s" - msgstr "%2$s の %1$s 文字列はありません" - --#: libdnf/dnf-sack.cpp:404 --msgid "failed to add solv" --msgstr "solv の追加に失敗しました" -- --#: libdnf/dnf-sack.cpp:422 -+#: libdnf/dnf-sack.cpp:424 - #, c-format - msgid "failed to open: %s" - msgstr "開くことに失敗しました: %s" - --#: libdnf/dnf-sack.cpp:501 -+#: libdnf/dnf-sack.cpp:503 - #, c-format - msgid "cannot create temporary file: %s" - msgstr "一時ファイルを作成できません: %s" - --#: libdnf/dnf-sack.cpp:511 -+#: libdnf/dnf-sack.cpp:513 - #, c-format - msgid "failed opening tmp file: %s" - msgstr "tmp ファイルを開くことに失敗しました: %s" - --#: libdnf/dnf-sack.cpp:523 -+#: libdnf/dnf-sack.cpp:525 - #, c-format - msgid "write_main() failed writing data: %i" - msgstr "write_main() はデータの書き込みに失敗しました: %i" - --#: libdnf/dnf-sack.cpp:540 -+#: libdnf/dnf-sack.cpp:542 - msgid "write_main() failed to re-load written solv file" - msgstr "write_main() は、書き込みされた solv ファイルの再ロードに失敗しました" - --#: libdnf/dnf-sack.cpp:605 -+#: libdnf/dnf-sack.cpp:607 - #, c-format - msgid "can not create temporary file %s" - msgstr "一時ファイル %s を作成できません" - --#: libdnf/dnf-sack.cpp:623 -+#: libdnf/dnf-sack.cpp:625 - #, c-format - msgid "write_ext(%1$d) has failed: %2$d" - msgstr "write_ext(%1$d) は失敗しました: %2$d" - --#: libdnf/dnf-sack.cpp:678 -+#: libdnf/dnf-sack.cpp:680 - msgid "null repo md file" - msgstr "null repo md ファイル" - --#: libdnf/dnf-sack.cpp:687 -+#: libdnf/dnf-sack.cpp:689 - #, c-format - msgid "can not read file %1$s: %2$s" - msgstr "ファイル %1$s を読み込みできません: %2$s" - --#: libdnf/dnf-sack.cpp:701 -+#: libdnf/dnf-sack.cpp:703 - msgid "repo_add_solv() has failed." - msgstr "repo_add_solv() は失敗しました。" - --#: libdnf/dnf-sack.cpp:714 -+#: libdnf/dnf-sack.cpp:716 - msgid "loading of MD_TYPE_PRIMARY has failed." - msgstr "MD_TYPE_PRIMARY のロードに失敗しました。" - --#: libdnf/dnf-sack.cpp:727 -+#: libdnf/dnf-sack.cpp:729 - msgid "repo_add_repomdxml/rpmmd() has failed." - msgstr "repo_add_repomdxml/rpmmd() は失敗しました。" - --#: libdnf/dnf-sack.cpp:794 -+#: libdnf/dnf-sack.cpp:796 - msgid "failed to auto-detect architecture" - msgstr "アーキテクチャーの自動検出に失敗しました" - --#: libdnf/dnf-sack.cpp:919 -+#: libdnf/dnf-sack.cpp:961 - #, c-format - msgid "failed creating cachedir %s" - msgstr "cachedir %s の作成に失敗しました" - --#: libdnf/dnf-sack.cpp:1696 -+#: libdnf/dnf-sack.cpp:1738 - msgid "failed loading RPMDB" - msgstr "RPMDB のロードに失敗しました" - --#: libdnf/dnf-sack.cpp:2403 -+#: libdnf/dnf-sack.cpp:2461 - #, c-format - msgid "No module defaults found: %s" --msgstr "" -+msgstr "モジュールのデフォルトは見つかりませんでした: %s" - - #: libdnf/dnf-state.cpp:1184 - #, c-format -@@ -337,7 +426,7 @@ msgstr "トランザクションテストの実行中にエラー %i" - msgid "Error %i running transaction" - msgstr "トランザクションの実行中にエラー %i" - --#: libdnf/dnf-transaction.cpp:1473 -+#: libdnf/dnf-transaction.cpp:1474 - #, c-format - msgid "Transaction did not go to writing phase, but returned no error(%i)" - msgstr "トランザクションは書き込みフェーズまで行きませんでしたが、エラー(%i) は返しませんでした" -@@ -569,7 +658,16 @@ msgstr "ソリューションがなく、保護されたパッケージを削除 - msgid "no solution possible" - msgstr "可能なソリューションがありません" - --#: libdnf/goal/Goal.cpp:1479 -+#: libdnf/goal/Goal.cpp:1193 -+msgid "Problem: " -+msgstr "問題: " -+ -+#: libdnf/goal/Goal.cpp:1198 -+#, c-format -+msgid "Problem %d: " -+msgstr "問題 %d: " -+ -+#: libdnf/goal/Goal.cpp:1525 - msgid "" - "The operation would result in removing the following protected packages: " - msgstr "操作は結果的に以下の保護されたパッケージを削除します: " -@@ -631,27 +729,51 @@ msgstr "モジュール '%s' の複数ストリームを有効化できません - msgid "Conflicting defaults with repo '%s': %s" - msgstr "repo '%s' のデフォルトが競合: %s" - --#: libdnf/module/ModulePackageContainer.cpp:1569 -+#: libdnf/module/ModulePackageContainer.cpp:829 -+msgid "Installing module profiles:\n" -+msgstr "モジュールプロファイルのインストール中:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:844 -+msgid "Disabling module profiles:\n" -+msgstr "モジュールプロファイルの無効化中:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:859 -+msgid "Enabling module streams:\n" -+msgstr "モジュールストリームの有効化中:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:873 -+msgid "Switching module streams:\n" -+msgstr "モジュールストリームの切り替え中:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:891 -+msgid "Disabling modules:\n" -+msgstr "モジュールの無効化:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:902 -+msgid "Resetting modules:\n" -+msgstr "モジュールの再設定中:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1586 - #, c-format - msgid "Unable to load modular Fail-Safe data at '%s'" - msgstr "'%s' のモジュラーフェイルセーフデータをロードできません" - --#: libdnf/module/ModulePackageContainer.cpp:1575 -+#: libdnf/module/ModulePackageContainer.cpp:1592 - #, c-format - msgid "Unable to load modular Fail-Safe data for module '%s:%s'" - msgstr "モジュール '%s:%s' のモジュラーフェイルセーフデータをロードできません" - --#: libdnf/module/ModulePackageContainer.cpp:1639 -+#: libdnf/module/ModulePackageContainer.cpp:1656 - #, c-format - msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" - msgstr "ディレクトリー \"%s\" を作成できません。対象モジュラーフェイルセーフデータ: %s" - --#: libdnf/module/ModulePackageContainer.cpp:1661 -+#: libdnf/module/ModulePackageContainer.cpp:1678 - #, c-format - msgid "Unable to save a modular Fail Safe data to '%s'" - msgstr "'%s' のモジュラーフェイルセーフデータを保存できません" - --#: libdnf/module/ModulePackageContainer.cpp:1686 -+#: libdnf/module/ModulePackageContainer.cpp:1703 - #, c-format - msgid "Unable to remove a modular Fail Safe data in '%s'" - msgstr "'%s' のモジュラーフェイルセーフデータを削除できません" -@@ -669,7 +791,7 @@ msgstr "名前解決に失敗しました: %s" - #: libdnf/module/modulemd/ModuleMetadata.cpp:115 - #, c-format - msgid "There were errors while resolving modular defaults: %s" --msgstr "" -+msgstr "モジュラーデフォルトの解決中にエラーが発生しました: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:120 - #, c-format -@@ -722,6 +844,9 @@ msgid "" - "deprecated and the support will be dropped in future versions. Use '=' " - "operator instead." - msgstr "" -+"reldeps で '==' " -+"演算子を使用すると、未定義の動作が発生する可能性があります。これは非推奨で、将来のバージョンではサポートされなくなります。代わりに '=' " -+"演算子を使用してください。" - - #: libdnf/repo/Repo.cpp:321 - #, c-format -@@ -733,146 +858,161 @@ msgstr "リポジトリー %s にはミラーまたは baseurl セットがあ - msgid "Repository '%s' has unsupported type: 'type=%s', skipping." - msgstr "リポジトリー '%s' にはサポートされていないタイプがあります: 'type=%s'、スキッピング。" - --#: libdnf/repo/Repo.cpp:546 -+#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:534 libdnf/repo/Repo.cpp:581 -+#: libdnf/repo/Repo.cpp:1368 -+#, c-format -+msgid "repo '%s': 'basecachedir' is not set" -+msgstr "repo '%s': 'basecachedir' が設定されていません" -+ -+#: libdnf/repo/Repo.cpp:553 - #, c-format - msgid "Cannot find a valid baseurl for repo: %s" - msgstr "repo に対して有効な baseurl を見つけられません: %s" - --#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 -+#: libdnf/repo/Repo.cpp:594 libdnf/repo/Repo.cpp:1693 - msgid "" - "Maximum download speed is lower than minimum. Please change configuration of" - " minrate or throttle" --msgstr "ダウンロードの最高速度は、最低速度よりも低いです。minrate またはスロットルの設定を変更してください。" -+msgstr "ダウンロードの最高速度は、最低速度よりも低いです。minrate またはスロットルの設定を変更してください" - --#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 -+#: libdnf/repo/Repo.cpp:625 -+#, c-format -+msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" -+msgstr "repo '%s': 'proxy_username' は設定済みですが、'proxy_password' は設定されていません" -+ -+#: libdnf/repo/Repo.cpp:647 libdnf/repo/Repo.cpp:669 - #, c-format - msgid "%s: gpgme_data_new_from_fd(): %s" - msgstr "%s: gpgme_data_new_from_fd(): %s" - --#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 -+#: libdnf/repo/Repo.cpp:655 libdnf/repo/Repo.cpp:677 - #, c-format - msgid "%s: gpgme_op_import(): %s" - msgstr "%s: gpgme_op_import(): %s" - --#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 -+#: libdnf/repo/Repo.cpp:700 libdnf/repo/Repo.cpp:766 libdnf/repo/Repo.cpp:894 - #, c-format - msgid "%s: gpgme_ctx_set_engine_info(): %s" - msgstr "%s: gpgme_ctx_set_engine_info(): %s" - --#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 -+#: libdnf/repo/Repo.cpp:727 libdnf/repo/Repo.cpp:791 - #, c-format - msgid "can not list keys: %s" - msgstr "キーを一覧表示できません: %s" - --#: libdnf/repo/Repo.cpp:806 -+#: libdnf/repo/Repo.cpp:820 - #, c-format - msgid "Failed to retrieve GPG key for repo '%s': %s" - msgstr "repo '%s' のGPG鍵の回収に失敗しました : %s" - --#: libdnf/repo/Repo.cpp:859 -+#: libdnf/repo/Repo.cpp:873 - #, c-format - msgid "repo %s: 0x%s already imported" - msgstr "repo %s: 0x%s はインポート済みです" - --#: libdnf/repo/Repo.cpp:887 -+#: libdnf/repo/Repo.cpp:901 - #, c-format - msgid "repo %s: imported key 0x%s." - msgstr "repo %s: インポート済みのキー 0x%s。" - --#: libdnf/repo/Repo.cpp:1131 -+#: libdnf/repo/Repo.cpp:1149 - #, c-format - msgid "reviving: repo '%s' skipped, no metalink." - msgstr "復元中: repo '%s' はスキップされました、metalink はありません。" - --#: libdnf/repo/Repo.cpp:1150 -+#: libdnf/repo/Repo.cpp:1168 - #, c-format - msgid "reviving: repo '%s' skipped, no usable hash." - msgstr "復元中: repo '%s' はスキップされました、使用可能なハッシュはありません。" - --#: libdnf/repo/Repo.cpp:1173 -+#: libdnf/repo/Repo.cpp:1191 - #, c-format - msgid "reviving: failed for '%s', mismatched %s sum." - msgstr "復元中: '%s' は失敗しました、%s の合計は一致しません。" - --#: libdnf/repo/Repo.cpp:1179 -+#: libdnf/repo/Repo.cpp:1197 - #, c-format - msgid "reviving: '%s' can be revived - metalink checksums match." - msgstr "復元中: '%s' は復元できます - metalink チェックサムが一致します。" - --#: libdnf/repo/Repo.cpp:1204 -+#: libdnf/repo/Repo.cpp:1222 - #, c-format - msgid "reviving: '%s' can be revived - repomd matches." - msgstr "復元中: '%s' は復元できます - repomd が一致します。" - --#: libdnf/repo/Repo.cpp:1206 -+#: libdnf/repo/Repo.cpp:1224 - #, c-format - msgid "reviving: failed for '%s', mismatched repomd." --msgstr "復元中: '%s' に失敗しました、repomd が一致しません。" -+msgstr "復元中: '%s' に失敗しました、repomd が一致しません。" - --#: libdnf/repo/Repo.cpp:1224 -+#: libdnf/repo/Repo.cpp:1242 - #, c-format - msgid "Cannot create repo destination directory \"%s\": %s" - msgstr "repo 送信先ディレクトリ \"%s\" を作成できません : %s" - --#: libdnf/repo/Repo.cpp:1230 -+#: libdnf/repo/Repo.cpp:1248 - #, c-format - msgid "Cannot create repo temporary directory \"%s\": %s" - msgstr "repo 一時ディレクトリー \"%s\" を作成できません: %s" - --#: libdnf/repo/Repo.cpp:1244 -+#: libdnf/repo/Repo.cpp:1262 - #, c-format - msgid "Cannot create directory \"%s\": %s" - msgstr "ディレクトリー \"%s\" を作成できません: %s" - --#: libdnf/repo/Repo.cpp:1267 -+#: libdnf/repo/Repo.cpp:1285 - #, c-format - msgid "Cannot rename directory \"%s\" to \"%s\": %s" - msgstr "ディレクトリー名を \"%s\" から \"%s\" へと変更できません: %s" - --#: libdnf/repo/Repo.cpp:1290 -+#: libdnf/repo/Repo.cpp:1308 - #, c-format - msgid "repo: using cache for: %s" - msgstr "repo: キャッシュを使用: %s" - --#: libdnf/repo/Repo.cpp:1302 -+#: libdnf/repo/Repo.cpp:1320 - #, c-format - msgid "Cache-only enabled but no cache for '%s'" - msgstr "キャッシュオンリーが有効になっていますが、'%s' に対するキャッシュはありません" - --#: libdnf/repo/Repo.cpp:1306 -+#: libdnf/repo/Repo.cpp:1324 - #, c-format - msgid "repo: downloading from remote: %s" - msgstr "repo: リモートからダウンロード中: %s" - --#: libdnf/repo/Repo.cpp:1312 -+#: libdnf/repo/Repo.cpp:1330 - #, c-format - msgid "Failed to download metadata for repo '%s': %s" - msgstr "repo '%s' のメタデータのダウンロードに失敗しました : %s" - --#: libdnf/repo/Repo.cpp:1338 -+#: libdnf/repo/Repo.cpp:1356 - msgid "getCachedir(): Computation of SHA256 failed" - msgstr "getCachedir(): SHA256 のコンピュテーションに失敗しました" - --#: libdnf/repo/Repo.cpp:1363 -+#: libdnf/repo/Repo.cpp:1384 - #, c-format - msgid "Cannot create persistdir \"%s\": %s" - msgstr "persistdir \"%s\" を作成できません : %s" - --#: libdnf/repo/Repo.cpp:1763 -+#: libdnf/repo/Repo.cpp:1715 -+msgid "'proxy_username' is set but not 'proxy_password'" -+msgstr "'proxy_username' は設定済みですが、'proxy_password' は設定されていません" -+ -+#: libdnf/repo/Repo.cpp:1787 - msgid "resume cannot be used simultaneously with the byterangestart param" - msgstr "resume は byterangestart param と同時に使用できません" - --#: libdnf/repo/Repo.cpp:1780 -+#: libdnf/repo/Repo.cpp:1804 - #, c-format - msgid "PackageTarget initialization failed: %s" - msgstr "PackageTarget の初期化に失敗しました: %s" - --#: libdnf/repo/Repo.cpp:1886 -+#: libdnf/repo/Repo.cpp:1910 - #, c-format - msgid "Cannot open %s: %s" - msgstr "%s を開くことができません: %s" - --#: libdnf/repo/Repo.cpp:1930 -+#: libdnf/repo/Repo.cpp:1954 - #, c-format - msgid "Log handler with id %ld doesn't exist" - msgstr "id %ld を伴うログハンドラーは存在しません" -@@ -901,7 +1041,7 @@ msgstr "完了したトランザクションにトランザクションアイテ - - #: libdnf/transaction/Transformer.cpp:76 - msgid "Database Corrupted: no row 'version' in table 'config'" --msgstr "" -+msgstr "データベースが破損しています。テーブル 'config' の行 'version' がありません" - - #: libdnf/transaction/Transformer.cpp:681 - msgid "Transformer: can't open history persist dir" -@@ -926,6 +1066,3 @@ msgstr "未保存のトランザクションにコンソールの出力を追加 - - #~ msgid "Bad id for repo: %s, byte = %s %d" - #~ msgstr "repo に対する不正な id: %s, byte = %s %d" -- --#~ msgid "failed calculating RPMDB checksum" --#~ msgstr "RPMDB チェックサムの計算に失敗しました" -diff --git a/po/ko.po b/po/ko.po -index 48094831..60e9f735 100644 ---- a/po/ko.po -+++ b/po/ko.po -@@ -7,7 +7,7 @@ msgid "" - msgstr "" - "Project-Id-Version: PACKAGE VERSION\n" - "Report-Msgid-Bugs-To: \n" --"POT-Creation-Date: 2020-10-05 09:18-0400\n" -+"POT-Creation-Date: 2021-02-22 09:52+0100\n" - "PO-Revision-Date: 2018-11-02 05:26+0000\n" - "Last-Translator: Copied by Zanata \n" - "Language-Team: Korean\n" -@@ -37,17 +37,17 @@ msgstr "변환 할 수 없습니다 '%s'~ 바이트" - msgid "unknown unit '%s'" - msgstr "알 수없는 단위 '%s'" - --#: libdnf/conf/ConfigMain.cpp:332 -+#: libdnf/conf/ConfigMain.cpp:334 - #, c-format - msgid "percentage '%s' is out of range" - msgstr "백분율 '%s'범위를 벗어났습니다." - --#: libdnf/conf/OptionBinds.cpp:76 -+#: libdnf/conf/OptionBinds.cpp:85 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" does not exist" - msgstr "구성 : ID가 \"%s\" 존재하지 않는다" - --#: libdnf/conf/OptionBinds.cpp:88 -+#: libdnf/conf/OptionBinds.cpp:97 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" already exists" - msgstr "구성 : ID가 \"%s\" 이미 존재 함" -@@ -58,7 +58,7 @@ msgid "invalid boolean value '%s'" - msgstr "유효하지 않은 부울 값 '%s'" - - #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 --#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 -+#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 - #, c-format - msgid "'%s' is not an allowed value" - msgstr "'%s'은 (는) 허용 된 값이 아닙니다." -@@ -92,36 +92,125 @@ msgstr "주어진 경로 '%s' 존재하지 않는다." - msgid "could not convert '%s' to seconds" - msgstr "변환 할 수 없습니다 '%s'초까지" - --#: libdnf/conf/OptionString.cpp:74 -+#: libdnf/conf/OptionString.cpp:79 - msgid "GetValue(): Value not set" - msgstr "GetValue () : 값이 설정되지 않았습니다." - -+#: libdnf/dnf-context.cpp:3033 libdnf/dnf-context.cpp:3042 -+#, fuzzy, c-format -+#| msgid "Cannot enable multiple streams for module '%s'" -+msgid "Cannot enable more streams from module '%s' at the same time" -+msgstr "모듈 '%s’에 여러 스트림을 활성화할 수 없습니다" -+ -+#: libdnf/dnf-context.cpp:3051 libdnf/dnf-context.cpp:3069 -+#, c-format -+msgid "" -+"Cannot enable module '%1$s' stream '%2$s': State of module already modified" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3116 -+#, c-format -+msgid "Modular dependency problem with Defaults: %s" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3119 -+#, fuzzy, c-format -+#| msgid "some dependency problem" -+msgid "Modular dependency problem: %s" -+msgstr "일부 의존성 문제" -+ -+#: libdnf/dnf-context.cpp:3153 libdnf/dnf-context.cpp:3177 -+#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3227 -+#: libdnf/dnf-context.cpp:3243 libdnf/dnf-context.cpp:3275 -+#, fuzzy, c-format -+#| msgid "Failed to resolve: %s" -+msgid "Unable to resolve argument '%s'" -+msgstr "분석하지 못했습니다: %s" -+ -+#: libdnf/dnf-context.cpp:3160 -+#, c-format -+msgid "" -+"Only module name is required. Ignoring unneeded information in argument: " -+"'%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3174 -+#, c-format -+msgid "Cannot reset module '%s': State of module already modified" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3185 -+#, c-format -+msgid "Cannot disable module '%s': State of module already modified" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3216 libdnf/dnf-context.cpp:3307 -+msgid "No modular data available" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3233 -+#, c-format -+msgid "Ignoring unneeded information in argument: '%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3271 -+#, c-format -+msgid "" -+"Problem during enablement of dependency tree for moduele '%1$s' stream " -+"'%2$s': %3$s" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3283 -+msgid "Problems appeared for module enable request" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3338 -+msgid "Problems appeared for module reset request" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3340 -+msgid "Problems appeared for module disable request" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3376 -+#, c-format -+msgid "" -+"The operation would result in switching of module '%s' stream '%s' to stream" -+" '%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3380 -+msgid "" -+"It is not possible to switch enabled streams of a module.\n" -+"It is recommended to remove all installed content from the module, and reset the module using 'microdnf module reset ' command. After you reset the module, you can install the other stream." -+msgstr "" -+ - #: libdnf/dnf-goal.cpp:68 - msgid "Could not depsolve transaction; " --msgstr "" -+msgstr "트랜잭션을 해석 할 수 없습니다. " - - #: libdnf/dnf-goal.cpp:70 --#, c-format -+#, fuzzy, c-format - msgid "%i problem detected:\n" - msgid_plural "%i problems detected:\n" --msgstr[0] "" -+msgstr[0] "%i 발견 된 문제 :\n" - - #: libdnf/dnf-goal.cpp:78 --#, c-format -+#, fuzzy, c-format - msgid " Problem %1$i: %2$s\n" --msgstr "" -+msgstr " 문제\n" - - #: libdnf/dnf-goal.cpp:80 --#, c-format -+#, fuzzy, c-format - msgid " Problem: %s\n" --msgstr "" -+msgstr " 문제\n" - - #: libdnf/dnf-rpmts.cpp:79 - #, c-format - msgid "" - "No available modular metadata for modular package '%s'; cannot be installed " - "on the system" --msgstr "" -+msgstr "모듈 패키지 '%s'에 사용 가능한 모듈식 메타 데이터가 없으므로 시스템에 설치할 수 없습니다" - - #: libdnf/dnf-rpmts.cpp:121 libdnf/dnf-rpmts.cpp:166 - #, c-format -@@ -176,87 +265,87 @@ msgstr "꾸러미를 찾지 못했습니다. %s" - msgid "could not add erase element %1$s(%2$i)" - msgstr "요소 지우기를 추가 할 수 없습니다. %1$s(%2$i)" - --#: libdnf/dnf-sack.cpp:381 --#, c-format --msgid "no %1$s string for %2$s" --msgstr "" -- --#: libdnf/dnf-sack.cpp:404 -+#: libdnf/dnf-sack.cpp:395 - msgid "failed to add solv" - msgstr "solv를 추가하지 못했습니다." - --#: libdnf/dnf-sack.cpp:422 -+#: libdnf/dnf-sack.cpp:414 -+#, c-format -+msgid "no %1$s string for %2$s" -+msgstr "%2$s에 %1$s 문자열이 없습니다" -+ -+#: libdnf/dnf-sack.cpp:424 - #, c-format - msgid "failed to open: %s" - msgstr "열지 못했습니다 : %s" - --#: libdnf/dnf-sack.cpp:501 -+#: libdnf/dnf-sack.cpp:503 - #, c-format - msgid "cannot create temporary file: %s" - msgstr "임시 파일을 만들 수 없습니다. %s" - --#: libdnf/dnf-sack.cpp:511 -+#: libdnf/dnf-sack.cpp:513 - #, c-format - msgid "failed opening tmp file: %s" - msgstr "여는 tmp 파일을 열지 못했습니다. %s" - --#: libdnf/dnf-sack.cpp:523 -+#: libdnf/dnf-sack.cpp:525 - #, c-format - msgid "write_main() failed writing data: %i" - msgstr "write_main() failed writing data: %i" - --#: libdnf/dnf-sack.cpp:540 -+#: libdnf/dnf-sack.cpp:542 - msgid "write_main() failed to re-load written solv file" - msgstr "write_main ()이 작성된 solv 파일을 다시로드하지 못했습니다." - --#: libdnf/dnf-sack.cpp:605 -+#: libdnf/dnf-sack.cpp:607 - #, c-format - msgid "can not create temporary file %s" - msgstr "임시 파일을 만들 수 없습니다. %s" - --#: libdnf/dnf-sack.cpp:623 -+#: libdnf/dnf-sack.cpp:625 - #, c-format - msgid "write_ext(%1$d) has failed: %2$d" - msgstr "write_ext(%1$d) has failed: %2$d" - --#: libdnf/dnf-sack.cpp:678 -+#: libdnf/dnf-sack.cpp:680 - msgid "null repo md file" - msgstr "null repo md 파일" - --#: libdnf/dnf-sack.cpp:687 -+#: libdnf/dnf-sack.cpp:689 - #, c-format - msgid "can not read file %1$s: %2$s" - msgstr "파일을 읽을 수 없습니다. %1$s: %2$s" - --#: libdnf/dnf-sack.cpp:701 -+#: libdnf/dnf-sack.cpp:703 - msgid "repo_add_solv() has failed." - msgstr "repo_add_solv() has failed." - --#: libdnf/dnf-sack.cpp:714 -+#: libdnf/dnf-sack.cpp:716 - msgid "loading of MD_TYPE_PRIMARY has failed." --msgstr "" -+msgstr "MD_TYPE_PRIMARY를 로드하지 못했습니다." - --#: libdnf/dnf-sack.cpp:727 -+#: libdnf/dnf-sack.cpp:729 - msgid "repo_add_repomdxml/rpmmd() has failed." - msgstr "repo_add_repomdxml/rpmmd() has failed." - --#: libdnf/dnf-sack.cpp:794 -+#: libdnf/dnf-sack.cpp:796 - msgid "failed to auto-detect architecture" - msgstr "아키텍처 자동 검색에 실패했습니다." - --#: libdnf/dnf-sack.cpp:919 -+#: libdnf/dnf-sack.cpp:961 - #, c-format - msgid "failed creating cachedir %s" - msgstr "캐시 된 생성 실패 %s" - --#: libdnf/dnf-sack.cpp:1696 -+#: libdnf/dnf-sack.cpp:1738 - msgid "failed loading RPMDB" - msgstr "RPMDB로드 실패" - --#: libdnf/dnf-sack.cpp:2403 -+#: libdnf/dnf-sack.cpp:2461 - #, c-format - msgid "No module defaults found: %s" --msgstr "" -+msgstr "모듈 기본 설정을 찾을 수 없습니다. %s" - - #: libdnf/dnf-state.cpp:1184 - #, c-format -@@ -339,7 +428,7 @@ msgstr "오류 %i 실행중인 트랜잭션 테스트" - msgid "Error %i running transaction" - msgstr "오류 %i 실행중인 거래" - --#: libdnf/dnf-transaction.cpp:1473 -+#: libdnf/dnf-transaction.cpp:1474 - #, c-format - msgid "Transaction did not go to writing phase, but returned no error(%i)" - msgstr "트랜잭션이 쓰기 단계로 이동하지 않았지만 오류를 반환하지 않았습니다 (%i)" -@@ -356,367 +445,401 @@ msgstr "제거하지 못했습니다. %s" - - #: libdnf/goal/Goal.cpp:55 - msgid "Ill-formed Selector, presence of multiple match objects in the filter" --msgstr "" -+msgstr "잘못된 형식의 선택기, 필터에 일치하는 개체가 여러 개 있음" - - #: libdnf/goal/Goal.cpp:56 - msgid "Ill-formed Selector used for the operation, incorrect comparison type" --msgstr "" -+msgstr "조작에 잘못 형성된 선택자, 잘못된 비교 유형" - - #: libdnf/goal/Goal.cpp:67 libdnf/goal/Goal.cpp:94 - msgid " does not belong to a distupgrade repository" --msgstr "" -+msgstr " distupgrade 리포지토리에 속하지 않습니다" - - #: libdnf/goal/Goal.cpp:68 libdnf/goal/Goal.cpp:95 - msgid " has inferior architecture" --msgstr "" -+msgstr " 열등한 아키텍처" - - #: libdnf/goal/Goal.cpp:69 - msgid "problem with installed package " --msgstr "" -+msgstr "설치된 패키지 문제 " - - #: libdnf/goal/Goal.cpp:70 libdnf/goal/Goal.cpp:97 - msgid "conflicting requests" --msgstr "" -+msgstr "충돌하는 요청" - - #: libdnf/goal/Goal.cpp:71 libdnf/goal/Goal.cpp:98 - msgid "unsupported request" --msgstr "" -+msgstr "지원되지 않는 요청" - - #: libdnf/goal/Goal.cpp:72 libdnf/goal/Goal.cpp:99 - msgid "nothing provides requested " --msgstr "" -+msgstr "요청이 없습니다 " - - #: libdnf/goal/Goal.cpp:73 - #, c-format - msgid "package %s does not exist" --msgstr "" -+msgstr "패키지 %s이/가 존재하지 않습니다" - - #: libdnf/goal/Goal.cpp:74 libdnf/goal/Goal.cpp:101 - msgid " is provided by the system" --msgstr "" -+msgstr " 시스템에서 제공" - - #: libdnf/goal/Goal.cpp:75 libdnf/goal/Goal.cpp:102 - msgid "some dependency problem" --msgstr "" -+msgstr "일부 의존성 문제" - - #: libdnf/goal/Goal.cpp:76 - msgid "cannot install the best update candidate for package " --msgstr "" -+msgstr "패키지에 가장 적합한 업데이트 옵션을 설치할 수 없습니다 " - - #: libdnf/goal/Goal.cpp:77 libdnf/goal/Goal.cpp:104 - msgid "cannot install the best candidate for the job" --msgstr "" -+msgstr "작업에 가장 적합한 옵션을 설치할 수 없습니다" - - #: libdnf/goal/Goal.cpp:78 - #, c-format - msgid "package %s is filtered out by modular filtering" --msgstr "" -+msgstr "패키지 %s이/가 모듈식 필터링으로 필터링됩니다" - - #: libdnf/goal/Goal.cpp:79 - #, c-format - msgid "package %s does not have a compatible architecture" --msgstr "" -+msgstr "패키지 %s에 호환되는 아키텍처가 없습니다" - - #: libdnf/goal/Goal.cpp:80 - #, c-format - msgid "package %s is not installable" --msgstr "" -+msgstr "패키지 %s을/를 설치할 수 없습니다" - - #: libdnf/goal/Goal.cpp:81 - #, c-format - msgid "package %s is filtered out by exclude filtering" --msgstr "" -+msgstr "패키지 %s이/가 필터링에서 제외되었습니다" - - #: libdnf/goal/Goal.cpp:82 - #, c-format - msgid "nothing provides %s needed by %s" --msgstr "" -+msgstr "%s에 필요한 %s이/가 제공되지 않았습니다" - - #: libdnf/goal/Goal.cpp:83 - #, c-format - msgid "cannot install both %s and %s" --msgstr "" -+msgstr "%s 및 %s 모두 설치할 수 없습니다" - - #: libdnf/goal/Goal.cpp:84 - #, c-format - msgid "package %s conflicts with %s provided by %s" --msgstr "" -+msgstr "패키지 %s이/가 %s와 충돌합니다 (%s에 의해 제공)" - - #: libdnf/goal/Goal.cpp:85 - #, c-format - msgid "package %s obsoletes %s provided by %s" --msgstr "" -+msgstr "패키지 %s이/가 %s에서 폐지되었습니다 (%s에 의해 제공)" - - #: libdnf/goal/Goal.cpp:86 - #, c-format - msgid "installed package %s obsoletes %s provided by %s" --msgstr "" -+msgstr "설치된 패키지 %s이/가 %s에서 폐지되었습니다 (%s에 의해 제공)" - - #: libdnf/goal/Goal.cpp:87 - #, c-format - msgid "package %s implicitly obsoletes %s provided by %s" --msgstr "" -+msgstr "패키지 %s이/가 %s 에서 암시적으로 폐지되었습니다 (%s에 의해 제공)" - - #: libdnf/goal/Goal.cpp:88 - #, c-format - msgid "package %s requires %s, but none of the providers can be installed" --msgstr "" -+msgstr "패키지 %s에 %s이/가 필요하지만 공급 업체가 설치할 수 없습니다" - - #: libdnf/goal/Goal.cpp:89 - #, c-format - msgid "package %s conflicts with %s provided by itself" --msgstr "" -+msgstr "패키지 %s이/가 %s와 충돌합니다 (자체적으로 제공)" - - #: libdnf/goal/Goal.cpp:90 - #, c-format - msgid "both package %s and %s obsolete %s" --msgstr "" -+msgstr "패키지 %s 및 %s 모두 %s에서 폐지되었습니다" - - #: libdnf/goal/Goal.cpp:96 - msgid "problem with installed module " --msgstr "" -+msgstr "설치된 모듈 문제 " - - #: libdnf/goal/Goal.cpp:100 - #, c-format - msgid "module %s does not exist" --msgstr "" -+msgstr "모듈 %s이/가 존재하지 않습니다" - - #: libdnf/goal/Goal.cpp:103 - msgid "cannot install the best update candidate for module " --msgstr "" -+msgstr "모듈에 가장 적합한 업데이트 옵션을 설치할 수 없습니다 " - - #: libdnf/goal/Goal.cpp:105 libdnf/goal/Goal.cpp:108 - #, c-format - msgid "module %s is disabled" --msgstr "" -+msgstr "모듈 %s을/를 사용할 수 없습니다" - - #: libdnf/goal/Goal.cpp:106 - #, c-format - msgid "module %s does not have a compatible architecture" --msgstr "" -+msgstr "모듈 %s에 호환되는 아키텍처가 없습니다" - - #: libdnf/goal/Goal.cpp:107 - #, c-format - msgid "module %s is not installable" --msgstr "" -+msgstr "모듈 %s을/를 설치할 수 없습니다" - - #: libdnf/goal/Goal.cpp:109 - #, c-format - msgid "nothing provides %s needed by module %s" --msgstr "" -+msgstr "%s이/가 제공되지 않았습니다 (모듈 %s에 필요)" - - #: libdnf/goal/Goal.cpp:110 - #, c-format - msgid "cannot install both modules %s and %s" --msgstr "" -+msgstr "%s 및 %s 모듈을 모두 설치할 수 없습니다" - - #: libdnf/goal/Goal.cpp:111 - #, c-format - msgid "module %s conflicts with %s provided by %s" --msgstr "" -+msgstr "모듈 %s이/가 %s와 충돌합니다 (%s에 의해 제공)" - - #: libdnf/goal/Goal.cpp:112 - #, c-format - msgid "module %s obsoletes %s provided by %s" --msgstr "" -+msgstr "모듈 %s이/가 %s에서 폐지되었습니다 (%s에 의해 제공)" - - #: libdnf/goal/Goal.cpp:113 - #, c-format - msgid "installed module %s obsoletes %s provided by %s" --msgstr "" -+msgstr "설치된 모듈 %s이/가 %s에서 폐지되었습니다 (%s에 의해 제공)" - - #: libdnf/goal/Goal.cpp:114 - #, c-format - msgid "module %s implicitly obsoletes %s provided by %s" --msgstr "" -+msgstr "모듈 %s이/가 %s 에서 암시적으로 폐지되었습니다 (%s에 의해 제공)" - - #: libdnf/goal/Goal.cpp:115 - #, c-format - msgid "module %s requires %s, but none of the providers can be installed" --msgstr "" -+msgstr "모듈 %s에 %s이/가 필요하지만 공급 업체가 설치할 수 없습니다" - - #: libdnf/goal/Goal.cpp:116 - #, c-format - msgid "module %s conflicts with %s provided by itself" --msgstr "" -+msgstr "모듈 %s이/가 %s와 충돌합니다 (자체적으로 제공)" - - #: libdnf/goal/Goal.cpp:117 - #, c-format - msgid "both module %s and %s obsolete %s" --msgstr "" -+msgstr "모듈 %s및 %s이/가 %s에서 폐지되었습니다" - - #: libdnf/goal/Goal.cpp:1038 - msgid "no solver set" --msgstr "" -+msgstr "solver 설정 없음" - - #: libdnf/goal/Goal.cpp:1043 --#, c-format -+#, fuzzy, c-format - msgid "failed to make %s absolute" --msgstr "" -+msgstr "실패한 %s 순수한" - - #: libdnf/goal/Goal.cpp:1050 --#, c-format -+#, fuzzy, c-format - msgid "failed writing debugdata to %1$s: %2$s" --msgstr "" -+msgstr "디버그 데이터를 쓰지 못했습니다. %1$s: %2$s" - - #: libdnf/goal/Goal.cpp:1062 - msgid "no solv in the goal" --msgstr "" -+msgstr "목표에 솔로가 없다." - - #: libdnf/goal/Goal.cpp:1064 - msgid "no solution, cannot remove protected package" --msgstr "" -+msgstr "해결책 없음, 보호 된 패키지를 제거 할 수 없음" - - #: libdnf/goal/Goal.cpp:1067 - msgid "no solution possible" --msgstr "" -+msgstr "해결책 없음" -+ -+#: libdnf/goal/Goal.cpp:1193 -+#, fuzzy -+msgid "Problem: " -+msgstr "문제 " - --#: libdnf/goal/Goal.cpp:1479 -+#: libdnf/goal/Goal.cpp:1198 -+#, fuzzy, c-format -+msgid "Problem %d: " -+msgstr "문제 " -+ -+#: libdnf/goal/Goal.cpp:1525 - msgid "" - "The operation would result in removing the following protected packages: " --msgstr "" -+msgstr "이 작업으로 인해 다음과 같은 보호 패키지가 제거됩니다. " - - #: libdnf/hy-iutil.cpp:322 --#, c-format -+#, fuzzy, c-format - msgid "Failed renaming %1$s to %2$s: %3$s" --msgstr "" -+msgstr "이름 바꾸기 실패 %1$s 에 %2$s: %3$s" - - #: libdnf/hy-iutil.cpp:330 --#, c-format -+#, fuzzy, c-format - msgid "Failed setting perms on %1$s: %2$s" --msgstr "" -+msgstr "perms 설정 실패 %1$s: %2$s" - - #: libdnf/hy-iutil.cpp:376 - #, c-format - msgid "cannot create directory %1$s: %2$s" --msgstr "" -+msgstr "%1$s디렉토리를 만들 수 없습니다: %2$s" - - #: libdnf/hy-iutil.cpp:411 - #, c-format - msgid "cannot stat path %1$s: %2$s" --msgstr "" -+msgstr "%1$s 경로를 stat 할 수 없습니다: %2$s" - - #: libdnf/module/ModulePackage.cpp:499 - #, c-format - msgid "Invalid format of Platform module: %s" --msgstr "" -+msgstr "유효하지 않은 형식의 플랫폼 모듈: %s" - - #: libdnf/module/ModulePackage.cpp:514 - msgid "Multiple module platforms provided by available packages\n" --msgstr "" -+msgstr "사용 가능한 패키지로 제공되는 다중 모듈 플랫폼\n" - - #: libdnf/module/ModulePackage.cpp:527 - msgid "Multiple module platforms provided by installed packages\n" --msgstr "" -+msgstr "설치된 패키지로 제공되는 다중 모듈 플랫폼\n" - - #: libdnf/module/ModulePackage.cpp:554 - #, c-format - msgid "Detection of Platform Module in %s failed: %s" --msgstr "" -+msgstr "%s에서 플랫폼 모듈을 감지하지 못했습니다: %s" - - #: libdnf/module/ModulePackage.cpp:563 - #, c-format - msgid "Missing PLATFORM_ID in %s" --msgstr "" -+msgstr "PLATFORM_ID가 %s에 누락되어 있습니다" - - #: libdnf/module/ModulePackage.cpp:568 - msgid "No valid Platform ID detected" --msgstr "" -+msgstr "유효한 플랫폼 ID가 없습니다" - - #: libdnf/module/ModulePackageContainer.cpp:68 - #, c-format - msgid "Cannot enable multiple streams for module '%s'" --msgstr "" -+msgstr "모듈 '%s’에 여러 스트림을 활성화할 수 없습니다" - - #: libdnf/module/ModulePackageContainer.cpp:294 - #, c-format - msgid "Conflicting defaults with repo '%s': %s" -+msgstr "repo '%s'와 기본 설정이 충돌합니다: %s" -+ -+#: libdnf/module/ModulePackageContainer.cpp:829 -+msgid "Installing module profiles:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:844 -+msgid "Disabling module profiles:\n" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:1569 -+#: libdnf/module/ModulePackageContainer.cpp:859 -+msgid "Enabling module streams:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:873 -+msgid "Switching module streams:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:891 -+msgid "Disabling modules:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:902 -+msgid "Resetting modules:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1586 - #, c-format - msgid "Unable to load modular Fail-Safe data at '%s'" --msgstr "" -+msgstr "'%s'에서 모듈식 Fail-Safe 데이터를 로드할 수 없습니다" - --#: libdnf/module/ModulePackageContainer.cpp:1575 -+#: libdnf/module/ModulePackageContainer.cpp:1592 - #, c-format - msgid "Unable to load modular Fail-Safe data for module '%s:%s'" --msgstr "" -+msgstr "모듈 '%s:%s'에 대해 모듈식 Fail-Safe 데이터를 로드할 수 없습니다" - --#: libdnf/module/ModulePackageContainer.cpp:1639 -+#: libdnf/module/ModulePackageContainer.cpp:1656 - #, c-format - msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" --msgstr "" -+msgstr "모듈식 Fail-Safe 데이터에 대한 “%s\" 디렉토리를 만들 수 없습니다: %s" - --#: libdnf/module/ModulePackageContainer.cpp:1661 -+#: libdnf/module/ModulePackageContainer.cpp:1678 - #, c-format - msgid "Unable to save a modular Fail Safe data to '%s'" --msgstr "" -+msgstr "모듈식 Fail Safe 데이터를 '%s'에 저장할 수 없습니다" - --#: libdnf/module/ModulePackageContainer.cpp:1686 -+#: libdnf/module/ModulePackageContainer.cpp:1703 - #, c-format - msgid "Unable to remove a modular Fail Safe data in '%s'" --msgstr "" -+msgstr "'%s'에서 모듈식 Fail Safe 데이터를 제거할 수 없습니다" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:86 - #, c-format - msgid "Failed to update from string: %s" --msgstr "" -+msgstr "문자열에서 업데이트하지 못했습니다: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:110 - #, c-format - msgid "Failed to resolve: %s" --msgstr "" -+msgstr "분석하지 못했습니다: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:115 - #, c-format - msgid "There were errors while resolving modular defaults: %s" --msgstr "" -+msgstr "모듈식 기본값을 분석하는 동안 오류가 발생했습니다: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:120 - #, c-format - msgid "Failed to upgrade defaults: %s" --msgstr "" -+msgstr "기본값을 업그레이드하지 못했습니다: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:123 - #, c-format - msgid "Failed to upgrade streams: %s" --msgstr "" -+msgstr "스트림을 업그레이드하지 못했습니다: %s" - - #: libdnf/plugin/plugin.cpp:46 - #, c-format - msgid "Can't load shared library \"%s\": %s" --msgstr "" -+msgstr "공유 라이브러리 \"%s\"을/를 로드할 수 없습니다: %s" - - #: libdnf/plugin/plugin.cpp:61 libdnf/plugin/plugin.cpp:67 - #: libdnf/plugin/plugin.cpp:73 libdnf/plugin/plugin.cpp:79 - #, c-format - msgid "Can't obtain address of symbol \"%s\": %s" --msgstr "" -+msgstr "기호 \"%s\"의 주소를 가져올 수 없습니다: %s" - - #: libdnf/plugin/plugin.cpp:86 - #, c-format - msgid "Loading plugin file=\"%s\"" --msgstr "" -+msgstr "플러그인 파일 로드 중=\"%s\"" - - #: libdnf/plugin/plugin.cpp:89 - #, c-format - msgid "Loaded plugin name=\"%s\", version=\"%s\"" --msgstr "" -+msgstr "로드된 플러그인 이름=\"%s\", 버전=\"%s\"" - - #: libdnf/plugin/plugin.cpp:96 - msgid "Plugins::loadPlugins() dirPath cannot be empty" --msgstr "" -+msgstr "Plugins::loadPlugins() dirPath는 비워둘 수 없습니다" - - #: libdnf/plugin/plugin.cpp:105 - #, c-format - msgid "Can't read plugin directory \"%s\": %s" --msgstr "" -+msgstr "플러그인 디렉토리 \"%s\"을/를 읽을 수 없습니다: %s" - - #: libdnf/plugin/plugin.cpp:114 - #, c-format - msgid "Can't load plugin \"%s\": %s" --msgstr "" -+msgstr "플러그인 \"%s\"을/를 로드할 수 없습니다: %s" - - #: libdnf/repo/DependencySplitter.cpp:50 - msgid "" -@@ -724,157 +847,174 @@ msgid "" - "deprecated and the support will be dropped in future versions. Use '=' " - "operator instead." - msgstr "" -+"reldeps에 '=='연산자를 사용하면 정의되지 않은 동작이 발생할 수 있습니다. 이 연산자는 더 이상 사용되지 않으며 향후 버전에서는" -+" 지원이 중단됩니다. 대신 '=' 연산자를 사용하십시오." - - #: libdnf/repo/Repo.cpp:321 --#, c-format -+#, fuzzy, c-format - msgid "Repository %s has no mirror or baseurl set." --msgstr "" -+msgstr "저장소 %s 거울이나 기둥이 없습니다." - - #: libdnf/repo/Repo.cpp:330 --#, c-format -+#, fuzzy, c-format - msgid "Repository '%s' has unsupported type: 'type=%s', skipping." --msgstr "" -+msgstr "저장소 '%s'에 지원되지 않는 유형이 있습니다 :'type =%s', 건너 뛰기." - --#: libdnf/repo/Repo.cpp:546 -+#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:534 libdnf/repo/Repo.cpp:581 -+#: libdnf/repo/Repo.cpp:1368 - #, c-format --msgid "Cannot find a valid baseurl for repo: %s" -+msgid "repo '%s': 'basecachedir' is not set" - msgstr "" - --#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 -+#: libdnf/repo/Repo.cpp:553 -+#, fuzzy, c-format -+msgid "Cannot find a valid baseurl for repo: %s" -+msgstr "repo에 유효한 baseurl을 찾을 수 없습니다. %s" -+ -+#: libdnf/repo/Repo.cpp:594 libdnf/repo/Repo.cpp:1693 - msgid "" - "Maximum download speed is lower than minimum. Please change configuration of" - " minrate or throttle" -+msgstr "최대 다운로드 속도가 최소값보다 낮습니다. 최소 속도 또는 스로틀의 구성을 변경하십시오." -+ -+#: libdnf/repo/Repo.cpp:625 -+#, c-format -+msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" - msgstr "" - --#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 -+#: libdnf/repo/Repo.cpp:647 libdnf/repo/Repo.cpp:669 - #, c-format - msgid "%s: gpgme_data_new_from_fd(): %s" - msgstr "%s: gpgme_data_new_from_fd(): %s" - --#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 -+#: libdnf/repo/Repo.cpp:655 libdnf/repo/Repo.cpp:677 - #, c-format - msgid "%s: gpgme_op_import(): %s" - msgstr "%s: gpgme_op_import(): %s" - --#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 -+#: libdnf/repo/Repo.cpp:700 libdnf/repo/Repo.cpp:766 libdnf/repo/Repo.cpp:894 - #, c-format - msgid "%s: gpgme_ctx_set_engine_info(): %s" - msgstr "%s: gpgme_ctx_set_engine_info(): %s" - --#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 -+#: libdnf/repo/Repo.cpp:727 libdnf/repo/Repo.cpp:791 - #, c-format - msgid "can not list keys: %s" - msgstr "열쇠를 나열 할 수 없습니다 : %s" - --#: libdnf/repo/Repo.cpp:806 -+#: libdnf/repo/Repo.cpp:820 - #, c-format - msgid "Failed to retrieve GPG key for repo '%s': %s" --msgstr "" -+msgstr "repo '%s'에 대한 GPG 키를 검색하지 못했습니다: %s" - --#: libdnf/repo/Repo.cpp:859 -+#: libdnf/repo/Repo.cpp:873 - #, c-format - msgid "repo %s: 0x%s already imported" - msgstr "레포 %s: 0x%s 이미 수입" - --#: libdnf/repo/Repo.cpp:887 -+#: libdnf/repo/Repo.cpp:901 - #, c-format - msgid "repo %s: imported key 0x%s." - msgstr "레포 %s: 가져온 키 0x%s." - --#: libdnf/repo/Repo.cpp:1131 -+#: libdnf/repo/Repo.cpp:1149 - #, c-format - msgid "reviving: repo '%s' skipped, no metalink." - msgstr "부활 : repo '%s'건너 뛰었습니다." - --#: libdnf/repo/Repo.cpp:1150 -+#: libdnf/repo/Repo.cpp:1168 - #, c-format - msgid "reviving: repo '%s' skipped, no usable hash." - msgstr "부활 : repo '%s'건너 뛰었습니다. 사용 가능한 해시가 없습니다." - --#: libdnf/repo/Repo.cpp:1173 -+#: libdnf/repo/Repo.cpp:1191 - #, c-format - msgid "reviving: failed for '%s', mismatched %s sum." - msgstr "되살리기 : 실패한 '%s', 불일치 %s 합집합." - --#: libdnf/repo/Repo.cpp:1179 -+#: libdnf/repo/Repo.cpp:1197 - #, c-format - msgid "reviving: '%s' can be revived - metalink checksums match." - msgstr "되살아 난다 : '%s'부활 할 수 있습니다 - metalink 체크섬이 일치합니다." - --#: libdnf/repo/Repo.cpp:1204 -+#: libdnf/repo/Repo.cpp:1222 - #, c-format - msgid "reviving: '%s' can be revived - repomd matches." - msgstr "되살아 난다 : '%s'부활 할 수 있습니다 - repomd가 일치합니다." - --#: libdnf/repo/Repo.cpp:1206 -+#: libdnf/repo/Repo.cpp:1224 - #, c-format - msgid "reviving: failed for '%s', mismatched repomd." - msgstr "되살리기 : 실패한 '%s', 일치하지 않는 repomd." - --#: libdnf/repo/Repo.cpp:1224 -+#: libdnf/repo/Repo.cpp:1242 - #, c-format - msgid "Cannot create repo destination directory \"%s\": %s" --msgstr "" -+msgstr "repo 대상 디렉토리 “%s\"를 작성할 수 없습니다: %s" - --#: libdnf/repo/Repo.cpp:1230 -+#: libdnf/repo/Repo.cpp:1248 - #, c-format - msgid "Cannot create repo temporary directory \"%s\": %s" - msgstr "임시 저장소 디렉토리를 만들 수 없습니다 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1244 -+#: libdnf/repo/Repo.cpp:1262 - #, c-format - msgid "Cannot create directory \"%s\": %s" - msgstr "디렉토리를 만들 수 없습니다 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1267 -+#: libdnf/repo/Repo.cpp:1285 - #, c-format - msgid "Cannot rename directory \"%s\" to \"%s\": %s" - msgstr "디렉터리 이름을 바꿀 수 없습니다 \"%s\"~\"%s\": %s" - --#: libdnf/repo/Repo.cpp:1290 -+#: libdnf/repo/Repo.cpp:1308 - #, c-format - msgid "repo: using cache for: %s" - msgstr "repo : 캐시 사용 : %s" - --#: libdnf/repo/Repo.cpp:1302 -+#: libdnf/repo/Repo.cpp:1320 - #, c-format - msgid "Cache-only enabled but no cache for '%s'" - msgstr "캐시 만 사용 가능하지만 '%s'" - --#: libdnf/repo/Repo.cpp:1306 -+#: libdnf/repo/Repo.cpp:1324 - #, c-format - msgid "repo: downloading from remote: %s" - msgstr "repo : 원격에서 다운로드 중 : %s" - --#: libdnf/repo/Repo.cpp:1312 -+#: libdnf/repo/Repo.cpp:1330 - #, c-format - msgid "Failed to download metadata for repo '%s': %s" --msgstr "" -+msgstr "repo '%s'의 메타 데이터를 다운로드하지 못했습니다: %s" - --#: libdnf/repo/Repo.cpp:1338 -+#: libdnf/repo/Repo.cpp:1356 - msgid "getCachedir(): Computation of SHA256 failed" - msgstr "getCachedir () : SHA256 계산에 실패했습니다." - --#: libdnf/repo/Repo.cpp:1363 -+#: libdnf/repo/Repo.cpp:1384 - #, c-format - msgid "Cannot create persistdir \"%s\": %s" -+msgstr "persistdir “%s\"을/를 작성할 수 없습니다: %s" -+ -+#: libdnf/repo/Repo.cpp:1715 -+msgid "'proxy_username' is set but not 'proxy_password'" - msgstr "" - --#: libdnf/repo/Repo.cpp:1763 -+#: libdnf/repo/Repo.cpp:1787 - msgid "resume cannot be used simultaneously with the byterangestart param" - msgstr "이력서는 byterangestart 매개 변수와 동시에 사용할 수 없습니다." - --#: libdnf/repo/Repo.cpp:1780 -+#: libdnf/repo/Repo.cpp:1804 - #, c-format - msgid "PackageTarget initialization failed: %s" - msgstr "PackageTarget 초기화에 실패했습니다 : %s" - --#: libdnf/repo/Repo.cpp:1886 -+#: libdnf/repo/Repo.cpp:1910 - #, c-format - msgid "Cannot open %s: %s" - msgstr "열 수 없다 %s: %s" - --#: libdnf/repo/Repo.cpp:1930 -+#: libdnf/repo/Repo.cpp:1954 - #, c-format - msgid "Log handler with id %ld doesn't exist" - msgstr "ID가있는 로그 처리기 %ld 존재하지 않는다." -@@ -903,7 +1043,7 @@ msgstr "완료된 트랜잭션에서 트랜잭션 항목 업데이트를 시도 - - #: libdnf/transaction/Transformer.cpp:76 - msgid "Database Corrupted: no row 'version' in table 'config'" --msgstr "" -+msgstr "데이터베이스 손상: 'config' 테이블에 'version' 행이 없습니다." - - #: libdnf/transaction/Transformer.cpp:681 - msgid "Transformer: can't open history persist dir" -@@ -925,6 +1065,3 @@ msgstr "TransactionItem 상태가 설정되지 않았습니다. %s" - #: libdnf/transaction/private/Transaction.cpp:243 - msgid "Can't add console output to unsaved transaction" - msgstr "저장되지 않은 트랜잭션에 콘솔 출력을 추가 할 수 없습니다." -- --#~ msgid "failed calculating RPMDB checksum" --#~ msgstr "RPMDB 체크섬 계산 실패" -diff --git a/po/libdnf.pot b/po/libdnf.pot -index e7c0edfc..96a9634e 100644 ---- a/po/libdnf.pot -+++ b/po/libdnf.pot -@@ -8,7 +8,7 @@ msgid "" - msgstr "" - "Project-Id-Version: PACKAGE VERSION\n" - "Report-Msgid-Bugs-To: \n" --"POT-Creation-Date: 2020-10-05 09:18-0400\n" -+"POT-Creation-Date: 2021-02-22 09:52+0100\n" - "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" - "Last-Translator: FULL NAME \n" - "Language-Team: LANGUAGE \n" -@@ -37,17 +37,17 @@ msgstr "" - msgid "unknown unit '%s'" - msgstr "" - --#: libdnf/conf/ConfigMain.cpp:332 -+#: libdnf/conf/ConfigMain.cpp:334 - #, c-format - msgid "percentage '%s' is out of range" - msgstr "" - --#: libdnf/conf/OptionBinds.cpp:76 -+#: libdnf/conf/OptionBinds.cpp:85 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" does not exist" - msgstr "" - --#: libdnf/conf/OptionBinds.cpp:88 -+#: libdnf/conf/OptionBinds.cpp:97 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" already exists" - msgstr "" -@@ -58,7 +58,7 @@ msgid "invalid boolean value '%s'" - msgstr "" - - #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 --#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 -+#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 - #, c-format - msgid "'%s' is not an allowed value" - msgstr "" -@@ -92,10 +92,97 @@ msgstr "" - msgid "could not convert '%s' to seconds" - msgstr "" - --#: libdnf/conf/OptionString.cpp:74 -+#: libdnf/conf/OptionString.cpp:79 - msgid "GetValue(): Value not set" - msgstr "" - -+#: libdnf/dnf-context.cpp:3033 libdnf/dnf-context.cpp:3042 -+#, c-format -+msgid "Cannot enable more streams from module '%s' at the same time" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3051 libdnf/dnf-context.cpp:3069 -+#, c-format -+msgid "" -+"Cannot enable module '%1$s' stream '%2$s': State of module already modified" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3116 -+#, c-format -+msgid "Modular dependency problem with Defaults: %s" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3119 -+#, c-format -+msgid "Modular dependency problem: %s" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3153 libdnf/dnf-context.cpp:3177 -+#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3227 -+#: libdnf/dnf-context.cpp:3243 libdnf/dnf-context.cpp:3275 -+#, c-format -+msgid "Unable to resolve argument '%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3160 -+#, c-format -+msgid "" -+"Only module name is required. Ignoring unneeded information in argument: '%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3174 -+#, c-format -+msgid "Cannot reset module '%s': State of module already modified" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3185 -+#, c-format -+msgid "Cannot disable module '%s': State of module already modified" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3216 libdnf/dnf-context.cpp:3307 -+msgid "No modular data available" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3233 -+#, c-format -+msgid "Ignoring unneeded information in argument: '%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3271 -+#, c-format -+msgid "" -+"Problem during enablement of dependency tree for moduele '%1$s' stream " -+"'%2$s': %3$s" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3283 -+msgid "Problems appeared for module enable request" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3338 -+msgid "Problems appeared for module reset request" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3340 -+msgid "Problems appeared for module disable request" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3376 -+#, c-format -+msgid "" -+"The operation would result in switching of module '%s' stream '%s' to stream " -+"'%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3380 -+msgid "" -+"It is not possible to switch enabled streams of a module.\n" -+"It is recommended to remove all installed content from the module, and reset " -+"the module using 'microdnf module reset ' command. After you " -+"reset the module, you can install the other stream." -+msgstr "" -+ - #: libdnf/dnf-goal.cpp:68 - msgid "Could not depsolve transaction; " - msgstr "" -@@ -177,84 +264,84 @@ msgstr "" - msgid "could not add erase element %1$s(%2$i)" - msgstr "" - --#: libdnf/dnf-sack.cpp:381 --#, c-format --msgid "no %1$s string for %2$s" -+#: libdnf/dnf-sack.cpp:395 -+msgid "failed to add solv" - msgstr "" - --#: libdnf/dnf-sack.cpp:404 --msgid "failed to add solv" -+#: libdnf/dnf-sack.cpp:414 -+#, c-format -+msgid "no %1$s string for %2$s" - msgstr "" - --#: libdnf/dnf-sack.cpp:422 -+#: libdnf/dnf-sack.cpp:424 - #, c-format - msgid "failed to open: %s" - msgstr "" - --#: libdnf/dnf-sack.cpp:501 -+#: libdnf/dnf-sack.cpp:503 - #, c-format - msgid "cannot create temporary file: %s" - msgstr "" - --#: libdnf/dnf-sack.cpp:511 -+#: libdnf/dnf-sack.cpp:513 - #, c-format - msgid "failed opening tmp file: %s" - msgstr "" - --#: libdnf/dnf-sack.cpp:523 -+#: libdnf/dnf-sack.cpp:525 - #, c-format - msgid "write_main() failed writing data: %i" - msgstr "" - --#: libdnf/dnf-sack.cpp:540 -+#: libdnf/dnf-sack.cpp:542 - msgid "write_main() failed to re-load written solv file" - msgstr "" - --#: libdnf/dnf-sack.cpp:605 -+#: libdnf/dnf-sack.cpp:607 - #, c-format - msgid "can not create temporary file %s" - msgstr "" - --#: libdnf/dnf-sack.cpp:623 -+#: libdnf/dnf-sack.cpp:625 - #, c-format - msgid "write_ext(%1$d) has failed: %2$d" - msgstr "" - --#: libdnf/dnf-sack.cpp:678 -+#: libdnf/dnf-sack.cpp:680 - msgid "null repo md file" - msgstr "" - --#: libdnf/dnf-sack.cpp:687 -+#: libdnf/dnf-sack.cpp:689 - #, c-format - msgid "can not read file %1$s: %2$s" - msgstr "" - --#: libdnf/dnf-sack.cpp:701 -+#: libdnf/dnf-sack.cpp:703 - msgid "repo_add_solv() has failed." - msgstr "" - --#: libdnf/dnf-sack.cpp:714 -+#: libdnf/dnf-sack.cpp:716 - msgid "loading of MD_TYPE_PRIMARY has failed." - msgstr "" - --#: libdnf/dnf-sack.cpp:727 -+#: libdnf/dnf-sack.cpp:729 - msgid "repo_add_repomdxml/rpmmd() has failed." - msgstr "" - --#: libdnf/dnf-sack.cpp:794 -+#: libdnf/dnf-sack.cpp:796 - msgid "failed to auto-detect architecture" - msgstr "" - --#: libdnf/dnf-sack.cpp:919 -+#: libdnf/dnf-sack.cpp:961 - #, c-format - msgid "failed creating cachedir %s" - msgstr "" - --#: libdnf/dnf-sack.cpp:1696 -+#: libdnf/dnf-sack.cpp:1738 - msgid "failed loading RPMDB" - msgstr "" - --#: libdnf/dnf-sack.cpp:2403 -+#: libdnf/dnf-sack.cpp:2461 - #, c-format - msgid "No module defaults found: %s" - msgstr "" -@@ -340,7 +427,7 @@ msgstr "" - msgid "Error %i running transaction" - msgstr "" - --#: libdnf/dnf-transaction.cpp:1473 -+#: libdnf/dnf-transaction.cpp:1474 - #, c-format - msgid "Transaction did not go to writing phase, but returned no error(%i)" - msgstr "" -@@ -572,7 +659,16 @@ msgstr "" - msgid "no solution possible" - msgstr "" - --#: libdnf/goal/Goal.cpp:1479 -+#: libdnf/goal/Goal.cpp:1193 -+msgid "Problem: " -+msgstr "" -+ -+#: libdnf/goal/Goal.cpp:1198 -+#, c-format -+msgid "Problem %d: " -+msgstr "" -+ -+#: libdnf/goal/Goal.cpp:1525 - msgid "" - "The operation would result in removing the following protected packages: " - msgstr "" -@@ -634,27 +730,51 @@ msgstr "" - msgid "Conflicting defaults with repo '%s': %s" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:1569 -+#: libdnf/module/ModulePackageContainer.cpp:829 -+msgid "Installing module profiles:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:844 -+msgid "Disabling module profiles:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:859 -+msgid "Enabling module streams:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:873 -+msgid "Switching module streams:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:891 -+msgid "Disabling modules:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:902 -+msgid "Resetting modules:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1586 - #, c-format - msgid "Unable to load modular Fail-Safe data at '%s'" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:1575 -+#: libdnf/module/ModulePackageContainer.cpp:1592 - #, c-format - msgid "Unable to load modular Fail-Safe data for module '%s:%s'" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:1639 -+#: libdnf/module/ModulePackageContainer.cpp:1656 - #, c-format - msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:1661 -+#: libdnf/module/ModulePackageContainer.cpp:1678 - #, c-format - msgid "Unable to save a modular Fail Safe data to '%s'" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:1686 -+#: libdnf/module/ModulePackageContainer.cpp:1703 - #, c-format - msgid "Unable to remove a modular Fail Safe data in '%s'" - msgstr "" -@@ -736,146 +856,161 @@ msgstr "" - msgid "Repository '%s' has unsupported type: 'type=%s', skipping." - msgstr "" - --#: libdnf/repo/Repo.cpp:546 -+#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:534 libdnf/repo/Repo.cpp:581 -+#: libdnf/repo/Repo.cpp:1368 -+#, c-format -+msgid "repo '%s': 'basecachedir' is not set" -+msgstr "" -+ -+#: libdnf/repo/Repo.cpp:553 - #, c-format - msgid "Cannot find a valid baseurl for repo: %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 -+#: libdnf/repo/Repo.cpp:594 libdnf/repo/Repo.cpp:1693 - msgid "" - "Maximum download speed is lower than minimum. Please change configuration of " - "minrate or throttle" - msgstr "" - --#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 -+#: libdnf/repo/Repo.cpp:625 -+#, c-format -+msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" -+msgstr "" -+ -+#: libdnf/repo/Repo.cpp:647 libdnf/repo/Repo.cpp:669 - #, c-format - msgid "%s: gpgme_data_new_from_fd(): %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 -+#: libdnf/repo/Repo.cpp:655 libdnf/repo/Repo.cpp:677 - #, c-format - msgid "%s: gpgme_op_import(): %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 -+#: libdnf/repo/Repo.cpp:700 libdnf/repo/Repo.cpp:766 libdnf/repo/Repo.cpp:894 - #, c-format - msgid "%s: gpgme_ctx_set_engine_info(): %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 -+#: libdnf/repo/Repo.cpp:727 libdnf/repo/Repo.cpp:791 - #, c-format - msgid "can not list keys: %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:806 -+#: libdnf/repo/Repo.cpp:820 - #, c-format - msgid "Failed to retrieve GPG key for repo '%s': %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:859 -+#: libdnf/repo/Repo.cpp:873 - #, c-format - msgid "repo %s: 0x%s already imported" - msgstr "" - --#: libdnf/repo/Repo.cpp:887 -+#: libdnf/repo/Repo.cpp:901 - #, c-format - msgid "repo %s: imported key 0x%s." - msgstr "" - --#: libdnf/repo/Repo.cpp:1131 -+#: libdnf/repo/Repo.cpp:1149 - #, c-format - msgid "reviving: repo '%s' skipped, no metalink." - msgstr "" - --#: libdnf/repo/Repo.cpp:1150 -+#: libdnf/repo/Repo.cpp:1168 - #, c-format - msgid "reviving: repo '%s' skipped, no usable hash." - msgstr "" - --#: libdnf/repo/Repo.cpp:1173 -+#: libdnf/repo/Repo.cpp:1191 - #, c-format - msgid "reviving: failed for '%s', mismatched %s sum." - msgstr "" - --#: libdnf/repo/Repo.cpp:1179 -+#: libdnf/repo/Repo.cpp:1197 - #, c-format - msgid "reviving: '%s' can be revived - metalink checksums match." - msgstr "" - --#: libdnf/repo/Repo.cpp:1204 -+#: libdnf/repo/Repo.cpp:1222 - #, c-format - msgid "reviving: '%s' can be revived - repomd matches." - msgstr "" - --#: libdnf/repo/Repo.cpp:1206 -+#: libdnf/repo/Repo.cpp:1224 - #, c-format - msgid "reviving: failed for '%s', mismatched repomd." - msgstr "" - --#: libdnf/repo/Repo.cpp:1224 -+#: libdnf/repo/Repo.cpp:1242 - #, c-format - msgid "Cannot create repo destination directory \"%s\": %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1230 -+#: libdnf/repo/Repo.cpp:1248 - #, c-format - msgid "Cannot create repo temporary directory \"%s\": %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1244 -+#: libdnf/repo/Repo.cpp:1262 - #, c-format - msgid "Cannot create directory \"%s\": %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1267 -+#: libdnf/repo/Repo.cpp:1285 - #, c-format - msgid "Cannot rename directory \"%s\" to \"%s\": %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1290 -+#: libdnf/repo/Repo.cpp:1308 - #, c-format - msgid "repo: using cache for: %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1302 -+#: libdnf/repo/Repo.cpp:1320 - #, c-format - msgid "Cache-only enabled but no cache for '%s'" - msgstr "" - --#: libdnf/repo/Repo.cpp:1306 -+#: libdnf/repo/Repo.cpp:1324 - #, c-format - msgid "repo: downloading from remote: %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1312 -+#: libdnf/repo/Repo.cpp:1330 - #, c-format - msgid "Failed to download metadata for repo '%s': %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1338 -+#: libdnf/repo/Repo.cpp:1356 - msgid "getCachedir(): Computation of SHA256 failed" - msgstr "" - --#: libdnf/repo/Repo.cpp:1363 -+#: libdnf/repo/Repo.cpp:1384 - #, c-format - msgid "Cannot create persistdir \"%s\": %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1763 -+#: libdnf/repo/Repo.cpp:1715 -+msgid "'proxy_username' is set but not 'proxy_password'" -+msgstr "" -+ -+#: libdnf/repo/Repo.cpp:1787 - msgid "resume cannot be used simultaneously with the byterangestart param" - msgstr "" - --#: libdnf/repo/Repo.cpp:1780 -+#: libdnf/repo/Repo.cpp:1804 - #, c-format - msgid "PackageTarget initialization failed: %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1886 -+#: libdnf/repo/Repo.cpp:1910 - #, c-format - msgid "Cannot open %s: %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1930 -+#: libdnf/repo/Repo.cpp:1954 - #, c-format - msgid "Log handler with id %ld doesn't exist" - msgstr "" -diff --git a/po/zh_CN.po b/po/zh_CN.po -index 9583b075..31c972fe 100644 ---- a/po/zh_CN.po -+++ b/po/zh_CN.po -@@ -1,19 +1,20 @@ - # Charles Lee , 2017. #zanata, 2020. - # Ludek Janda , 2018. #zanata -+# Sundeep Anand , 2021. - msgid "" - msgstr "" - "Project-Id-Version: PACKAGE VERSION\n" - "Report-Msgid-Bugs-To: \n" --"POT-Creation-Date: 2020-10-05 09:18-0400\n" --"PO-Revision-Date: 2020-07-09 13:27+0000\n" --"Last-Translator: Charles Lee \n" --"Language-Team: Chinese (Simplified) \n" -+"POT-Creation-Date: 2021-02-22 09:52+0100\n" -+"PO-Revision-Date: 2021-03-08 11:09+0000\n" -+"Last-Translator: Sundeep Anand \n" -+"Language-Team: Chinese (Simplified) \n" - "Language: zh_CN\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=1; plural=0;\n" --"X-Generator: Weblate 4.1.1\n" -+"X-Generator: Weblate 4.5.1\n" - - #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40 - msgid "no value specified" -@@ -32,33 +33,33 @@ msgstr "无法把 '%s' 转换为字节" - #: libdnf/conf/ConfigMain.cpp:83 libdnf/conf/OptionSeconds.cpp:66 - #, c-format - msgid "unknown unit '%s'" --msgstr "未知单元 “%s”" -+msgstr "未知单元 '%s'" - --#: libdnf/conf/ConfigMain.cpp:332 -+#: libdnf/conf/ConfigMain.cpp:334 - #, c-format - msgid "percentage '%s' is out of range" - msgstr "百分数 '%s' 超出范围" - --#: libdnf/conf/OptionBinds.cpp:76 -+#: libdnf/conf/OptionBinds.cpp:85 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" does not exist" --msgstr "配置:ID 为 \"%s\" 的 OptionBinding 不存在" -+msgstr "配置:ID 为 '%s' 的 OptionBinding 不存在" - --#: libdnf/conf/OptionBinds.cpp:88 -+#: libdnf/conf/OptionBinds.cpp:97 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" already exists" --msgstr "配置:ID 为 \"%s\" 的 OptionBinding 已存在" -+msgstr "配置:ID 为 '%s' 的 OptionBinding 已存在" - - #: libdnf/conf/OptionBool.cpp:47 - #, c-format - msgid "invalid boolean value '%s'" --msgstr "无效的布尔值“%s”" -+msgstr "无效的布尔值'%s'" - - #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 --#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 -+#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 - #, c-format - msgid "'%s' is not an allowed value" --msgstr "'%s' 不是一个允许的值" -+msgstr "'%s' 不是一个允许的值" - - #: libdnf/conf/OptionEnum.cpp:83 libdnf/conf/OptionNumber.cpp:88 - msgid "invalid value" -@@ -89,10 +90,98 @@ msgstr "给定的路径 “%s” 不存在。" - msgid "could not convert '%s' to seconds" - msgstr "无法把 '%s' 转换为秒" - --#: libdnf/conf/OptionString.cpp:74 -+#: libdnf/conf/OptionString.cpp:79 - msgid "GetValue(): Value not set" - msgstr "GetValue(): 值没有设置" - -+#: libdnf/dnf-context.cpp:3033 libdnf/dnf-context.cpp:3042 -+#, c-format -+msgid "Cannot enable more streams from module '%s' at the same time" -+msgstr "无法同时从模块 '%s' 中启用更多流" -+ -+#: libdnf/dnf-context.cpp:3051 libdnf/dnf-context.cpp:3069 -+#, c-format -+msgid "" -+"Cannot enable module '%1$s' stream '%2$s': State of module already modified" -+msgstr "无法启用模块 '%1$s' 流 '%2$s':已经修改的模块状态" -+ -+#: libdnf/dnf-context.cpp:3116 -+#, c-format -+msgid "Modular dependency problem with Defaults: %s" -+msgstr "默认设置的模块依赖性问题:%s" -+ -+#: libdnf/dnf-context.cpp:3119 -+#, c-format -+msgid "Modular dependency problem: %s" -+msgstr "模块依赖问题:%s" -+ -+#: libdnf/dnf-context.cpp:3153 libdnf/dnf-context.cpp:3177 -+#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3227 -+#: libdnf/dnf-context.cpp:3243 libdnf/dnf-context.cpp:3275 -+#, c-format -+msgid "Unable to resolve argument '%s'" -+msgstr "无法解析参数 '%s'" -+ -+#: libdnf/dnf-context.cpp:3160 -+#, c-format -+msgid "" -+"Only module name is required. Ignoring unneeded information in argument: " -+"'%s'" -+msgstr "只需要模块名。忽略参数 '%s' 中的无用信息" -+ -+#: libdnf/dnf-context.cpp:3174 -+#, c-format -+msgid "Cannot reset module '%s': State of module already modified" -+msgstr "无法重置模块 '%s':已修改的模块状态" -+ -+#: libdnf/dnf-context.cpp:3185 -+#, c-format -+msgid "Cannot disable module '%s': State of module already modified" -+msgstr "无法禁用模块 '%s':已经修改的模块状态" -+ -+#: libdnf/dnf-context.cpp:3216 libdnf/dnf-context.cpp:3307 -+msgid "No modular data available" -+msgstr "没有可用的模块数据" -+ -+#: libdnf/dnf-context.cpp:3233 -+#, c-format -+msgid "Ignoring unneeded information in argument: '%s'" -+msgstr "忽略参数:\"%s\" 中不需要的信息" -+ -+#: libdnf/dnf-context.cpp:3271 -+#, c-format -+msgid "" -+"Problem during enablement of dependency tree for moduele '%1$s' stream " -+"'%2$s': %3$s" -+msgstr "为模块 '%1$s' 流 '%2$s' 启用依赖树时出现问题: %3$s" -+ -+#: libdnf/dnf-context.cpp:3283 -+msgid "Problems appeared for module enable request" -+msgstr "模块启用请求时出现问题" -+ -+#: libdnf/dnf-context.cpp:3338 -+msgid "Problems appeared for module reset request" -+msgstr "模块重置请求时出现问题" -+ -+#: libdnf/dnf-context.cpp:3340 -+msgid "Problems appeared for module disable request" -+msgstr "模块禁用请求时出现问题" -+ -+#: libdnf/dnf-context.cpp:3376 -+#, c-format -+msgid "" -+"The operation would result in switching of module '%s' stream '%s' to stream" -+" '%s'" -+msgstr "这个操作会把模块 '%s' 从流 '%s' 切换到流 '%s'" -+ -+#: libdnf/dnf-context.cpp:3380 -+msgid "" -+"It is not possible to switch enabled streams of a module.\n" -+"It is recommended to remove all installed content from the module, and reset the module using 'microdnf module reset ' command. After you reset the module, you can install the other stream." -+msgstr "" -+"无法切换一个模块已启用的流。 推荐从模块中删除所有已安装的内容,使用 'microdnf module reset ' " -+"命令重置模块。在重置模块后就可以安装其他流。" -+ - #: libdnf/dnf-goal.cpp:68 - msgid "Could not depsolve transaction; " - msgstr "无法 depsolve 事务: " -@@ -118,7 +207,7 @@ msgstr " 问题: %s\n" - msgid "" - "No available modular metadata for modular package '%s'; cannot be installed " - "on the system" --msgstr "" -+msgstr "模块软件包 '%s' 没有可用的元数据,它不能在系统上安装" - - #: libdnf/dnf-rpmts.cpp:121 libdnf/dnf-rpmts.cpp:166 - #, c-format -@@ -173,87 +262,87 @@ msgstr "无法找到软件包 %s" - msgid "could not add erase element %1$s(%2$i)" - msgstr "无法添加删除元素 %1$s(%2$i)" - --#: libdnf/dnf-sack.cpp:381 --#, c-format --msgid "no %1$s string for %2$s" --msgstr "" -- --#: libdnf/dnf-sack.cpp:404 -+#: libdnf/dnf-sack.cpp:395 - msgid "failed to add solv" - msgstr "添加 solv 失败" - --#: libdnf/dnf-sack.cpp:422 -+#: libdnf/dnf-sack.cpp:414 -+#, c-format -+msgid "no %1$s string for %2$s" -+msgstr "没有为 %2$s 的 %1$s 字符串" -+ -+#: libdnf/dnf-sack.cpp:424 - #, c-format - msgid "failed to open: %s" - msgstr "打开失败:%s" - --#: libdnf/dnf-sack.cpp:501 -+#: libdnf/dnf-sack.cpp:503 - #, c-format - msgid "cannot create temporary file: %s" - msgstr "不能创建临时文件: %s" - --#: libdnf/dnf-sack.cpp:511 -+#: libdnf/dnf-sack.cpp:513 - #, c-format - msgid "failed opening tmp file: %s" - msgstr "打开 tmp 文件失败: %s" - --#: libdnf/dnf-sack.cpp:523 -+#: libdnf/dnf-sack.cpp:525 - #, c-format - msgid "write_main() failed writing data: %i" - msgstr "write_main() 写数据失败: %i" - --#: libdnf/dnf-sack.cpp:540 -+#: libdnf/dnf-sack.cpp:542 - msgid "write_main() failed to re-load written solv file" - msgstr "write_main() 重新加载写的 solv 文件失败" - --#: libdnf/dnf-sack.cpp:605 -+#: libdnf/dnf-sack.cpp:607 - #, c-format - msgid "can not create temporary file %s" - msgstr "不能创建临时文件 %s" - --#: libdnf/dnf-sack.cpp:623 -+#: libdnf/dnf-sack.cpp:625 - #, c-format - msgid "write_ext(%1$d) has failed: %2$d" - msgstr "write_ext(%1$d) 已失败: %2$d" - --#: libdnf/dnf-sack.cpp:678 -+#: libdnf/dnf-sack.cpp:680 - msgid "null repo md file" - msgstr "null repo md 文件" - --#: libdnf/dnf-sack.cpp:687 -+#: libdnf/dnf-sack.cpp:689 - #, c-format - msgid "can not read file %1$s: %2$s" - msgstr "不能读文件 %1$s: %2$s" - --#: libdnf/dnf-sack.cpp:701 -+#: libdnf/dnf-sack.cpp:703 - msgid "repo_add_solv() has failed." - msgstr "repo_add_solv() 已失败。" - --#: libdnf/dnf-sack.cpp:714 -+#: libdnf/dnf-sack.cpp:716 - msgid "loading of MD_TYPE_PRIMARY has failed." --msgstr "" -+msgstr "加载 MD_TYPE_PRIMARY 失败。" - --#: libdnf/dnf-sack.cpp:727 -+#: libdnf/dnf-sack.cpp:729 - msgid "repo_add_repomdxml/rpmmd() has failed." - msgstr "repo_add_repomdxml/rpmmd() 已失败。" - --#: libdnf/dnf-sack.cpp:794 -+#: libdnf/dnf-sack.cpp:796 - msgid "failed to auto-detect architecture" - msgstr "自动检测架构失败" - --#: libdnf/dnf-sack.cpp:919 -+#: libdnf/dnf-sack.cpp:961 - #, c-format - msgid "failed creating cachedir %s" - msgstr "无法创建 cachedir %s" - --#: libdnf/dnf-sack.cpp:1696 -+#: libdnf/dnf-sack.cpp:1738 - msgid "failed loading RPMDB" - msgstr "无法加载 RPMDB" - --#: libdnf/dnf-sack.cpp:2403 -+#: libdnf/dnf-sack.cpp:2461 - #, c-format - msgid "No module defaults found: %s" --msgstr "" -+msgstr "没有找到模块默认设置:%s" - - #: libdnf/dnf-state.cpp:1184 - #, c-format -@@ -336,7 +425,7 @@ msgstr "错误 %i 运行事务测试" - msgid "Error %i running transaction" - msgstr "错误 %i 运行事务" - --#: libdnf/dnf-transaction.cpp:1473 -+#: libdnf/dnf-transaction.cpp:1474 - #, c-format - msgid "Transaction did not go to writing phase, but returned no error(%i)" - msgstr "事务没有进入写阶段,但没有返回错误(%i)" -@@ -361,186 +450,186 @@ msgstr "这个操作使用了 Ill-formed Selector,不正确的比较类型" - - #: libdnf/goal/Goal.cpp:67 libdnf/goal/Goal.cpp:94 - msgid " does not belong to a distupgrade repository" --msgstr "" -+msgstr " 不属于 distupgrade 仓库" - - #: libdnf/goal/Goal.cpp:68 libdnf/goal/Goal.cpp:95 - msgid " has inferior architecture" --msgstr "" -+msgstr " 有 inferior 架构" - - #: libdnf/goal/Goal.cpp:69 - msgid "problem with installed package " --msgstr "" -+msgstr "安装的软件包的问题 " - - #: libdnf/goal/Goal.cpp:70 libdnf/goal/Goal.cpp:97 - msgid "conflicting requests" --msgstr "" -+msgstr "冲突的请求" - - #: libdnf/goal/Goal.cpp:71 libdnf/goal/Goal.cpp:98 - msgid "unsupported request" --msgstr "" -+msgstr "不支持的请求" - - #: libdnf/goal/Goal.cpp:72 libdnf/goal/Goal.cpp:99 - msgid "nothing provides requested " --msgstr "" -+msgstr "没有提供请求的 " - - #: libdnf/goal/Goal.cpp:73 - #, c-format - msgid "package %s does not exist" --msgstr "" -+msgstr "软件包 %s 不存在" - - #: libdnf/goal/Goal.cpp:74 libdnf/goal/Goal.cpp:101 - msgid " is provided by the system" --msgstr "" -+msgstr " 由系统提供" - - #: libdnf/goal/Goal.cpp:75 libdnf/goal/Goal.cpp:102 - msgid "some dependency problem" --msgstr "" -+msgstr "一些依赖性问题" - - #: libdnf/goal/Goal.cpp:76 - msgid "cannot install the best update candidate for package " --msgstr "" -+msgstr "无法为软件包安装最佳更新选择 " - - #: libdnf/goal/Goal.cpp:77 libdnf/goal/Goal.cpp:104 - msgid "cannot install the best candidate for the job" --msgstr "" -+msgstr "无法为任务安装最佳选择" - - #: libdnf/goal/Goal.cpp:78 - #, c-format - msgid "package %s is filtered out by modular filtering" --msgstr "" -+msgstr "软件包 %s 被模块化过滤过滤掉" - - #: libdnf/goal/Goal.cpp:79 - #, c-format - msgid "package %s does not have a compatible architecture" --msgstr "" -+msgstr "软件包 %s 没有兼容的架构" - - #: libdnf/goal/Goal.cpp:80 - #, c-format - msgid "package %s is not installable" --msgstr "" -+msgstr "软件包 %s 是不可安装的" - - #: libdnf/goal/Goal.cpp:81 - #, c-format - msgid "package %s is filtered out by exclude filtering" --msgstr "" -+msgstr "软件包 %s 被排除过滤过滤掉" - - #: libdnf/goal/Goal.cpp:82 - #, c-format - msgid "nothing provides %s needed by %s" --msgstr "" -+msgstr "没有提供 %s(%s 需要)" - - #: libdnf/goal/Goal.cpp:83 - #, c-format - msgid "cannot install both %s and %s" --msgstr "" -+msgstr "无法同时安装 %s 和 %s" - - #: libdnf/goal/Goal.cpp:84 - #, c-format - msgid "package %s conflicts with %s provided by %s" --msgstr "" -+msgstr "软件包 %s 与 %s(由 %s 提供)冲突" - - #: libdnf/goal/Goal.cpp:85 - #, c-format - msgid "package %s obsoletes %s provided by %s" --msgstr "" -+msgstr "软件包 %s 过时了 %s(由 %s 提供)" - - #: libdnf/goal/Goal.cpp:86 - #, c-format - msgid "installed package %s obsoletes %s provided by %s" --msgstr "" -+msgstr "安装的软件包 %s 过时了 %s(由 %s 提供)" - - #: libdnf/goal/Goal.cpp:87 - #, c-format - msgid "package %s implicitly obsoletes %s provided by %s" --msgstr "" -+msgstr "软件包 %s 隐式过期了 %s(由 %s 提供)" - - #: libdnf/goal/Goal.cpp:88 - #, c-format - msgid "package %s requires %s, but none of the providers can be installed" --msgstr "" -+msgstr "软件包 %s 需要 %s,但没有供应商可以安装" - - #: libdnf/goal/Goal.cpp:89 - #, c-format - msgid "package %s conflicts with %s provided by itself" --msgstr "" -+msgstr "软件包 %s 与自己提供的 %s 冲突" - - #: libdnf/goal/Goal.cpp:90 - #, c-format - msgid "both package %s and %s obsolete %s" --msgstr "" -+msgstr "软件包 %s 和 %s 都过期了 %s" - - #: libdnf/goal/Goal.cpp:96 - msgid "problem with installed module " --msgstr "" -+msgstr "安装的模块的问题 " - - #: libdnf/goal/Goal.cpp:100 - #, c-format - msgid "module %s does not exist" --msgstr "" -+msgstr "模块 %s 不存在" - - #: libdnf/goal/Goal.cpp:103 - msgid "cannot install the best update candidate for module " --msgstr "" -+msgstr "无法为模块安装最佳更新选择 " - - #: libdnf/goal/Goal.cpp:105 libdnf/goal/Goal.cpp:108 - #, c-format - msgid "module %s is disabled" --msgstr "" -+msgstr "模块 %s 被禁用" - - #: libdnf/goal/Goal.cpp:106 - #, c-format - msgid "module %s does not have a compatible architecture" --msgstr "" -+msgstr "模块 %s 没有兼容的架构" - - #: libdnf/goal/Goal.cpp:107 - #, c-format - msgid "module %s is not installable" --msgstr "" -+msgstr "模块 %s 不可安装" - - #: libdnf/goal/Goal.cpp:109 - #, c-format - msgid "nothing provides %s needed by module %s" --msgstr "" -+msgstr "没有提供 %s(模块 %s 需要它)" - - #: libdnf/goal/Goal.cpp:110 - #, c-format - msgid "cannot install both modules %s and %s" --msgstr "" -+msgstr "无法同时安装模块 %s 和 %s" - - #: libdnf/goal/Goal.cpp:111 - #, c-format - msgid "module %s conflicts with %s provided by %s" --msgstr "" -+msgstr "模块 %s 与 %s (由 %s 提供)冲突" - - #: libdnf/goal/Goal.cpp:112 - #, c-format - msgid "module %s obsoletes %s provided by %s" --msgstr "" -+msgstr "模块 %s 过时了 %s(由 %s 提供)" - - #: libdnf/goal/Goal.cpp:113 - #, c-format - msgid "installed module %s obsoletes %s provided by %s" --msgstr "" -+msgstr "安装的模块 %s 过时了 %s(由 %s 提供)" - - #: libdnf/goal/Goal.cpp:114 - #, c-format - msgid "module %s implicitly obsoletes %s provided by %s" --msgstr "" -+msgstr "模块 %s 隐式过时了 %s(由 %s 提供)" - - #: libdnf/goal/Goal.cpp:115 - #, c-format - msgid "module %s requires %s, but none of the providers can be installed" --msgstr "" -+msgstr "模块 %s 需要 %s,但没有供应商可以安装" - - #: libdnf/goal/Goal.cpp:116 - #, c-format - msgid "module %s conflicts with %s provided by itself" --msgstr "" -+msgstr "模块 %s 与自己提供的 %s 冲突" - - #: libdnf/goal/Goal.cpp:117 - #, c-format - msgid "both module %s and %s obsolete %s" --msgstr "" -+msgstr "模块 %s 和 %s 都过期了 %s" - - #: libdnf/goal/Goal.cpp:1038 - msgid "no solver set" -@@ -568,7 +657,16 @@ msgstr "没有解决方案,不能删除保护的软件包" - msgid "no solution possible" - msgstr "没有可能的解决方案" - --#: libdnf/goal/Goal.cpp:1479 -+#: libdnf/goal/Goal.cpp:1193 -+msgid "Problem: " -+msgstr "问题: " -+ -+#: libdnf/goal/Goal.cpp:1198 -+#, c-format -+msgid "Problem %d: " -+msgstr "问题 %d: " -+ -+#: libdnf/goal/Goal.cpp:1525 - msgid "" - "The operation would result in removing the following protected packages: " - msgstr "这个操作可能会导致删除以下受保护的软件包: " -@@ -586,134 +684,158 @@ msgstr "在 %1$s 中设置 perms 失败: %2$s" - #: libdnf/hy-iutil.cpp:376 - #, c-format - msgid "cannot create directory %1$s: %2$s" --msgstr "" -+msgstr "无法创建目录 %1$s: %2$s" - - #: libdnf/hy-iutil.cpp:411 - #, c-format - msgid "cannot stat path %1$s: %2$s" --msgstr "" -+msgstr "无法 stat 路径 %1$s: %2$s" - - #: libdnf/module/ModulePackage.cpp:499 - #, c-format - msgid "Invalid format of Platform module: %s" --msgstr "" -+msgstr "Platform 模块无效的格式 : %s" - - #: libdnf/module/ModulePackage.cpp:514 - msgid "Multiple module platforms provided by available packages\n" --msgstr "" -+msgstr "由可用软件包提供的多个模块平台\n" - - #: libdnf/module/ModulePackage.cpp:527 - msgid "Multiple module platforms provided by installed packages\n" --msgstr "" -+msgstr "由安装的软件包提供的多个模块平台\n" - - #: libdnf/module/ModulePackage.cpp:554 - #, c-format - msgid "Detection of Platform Module in %s failed: %s" --msgstr "" -+msgstr "删除 %s 中的 Platform 模块失败 : %s" - - #: libdnf/module/ModulePackage.cpp:563 - #, c-format - msgid "Missing PLATFORM_ID in %s" --msgstr "" -+msgstr "在 %s 中缺少 PLATFORM_ID" - - #: libdnf/module/ModulePackage.cpp:568 - msgid "No valid Platform ID detected" --msgstr "" -+msgstr "没有检测到有效的 Platform ID" - - #: libdnf/module/ModulePackageContainer.cpp:68 - #, c-format - msgid "Cannot enable multiple streams for module '%s'" --msgstr "" -+msgstr "无法为模块 '%s' 启用多个流" - - #: libdnf/module/ModulePackageContainer.cpp:294 - #, c-format - msgid "Conflicting defaults with repo '%s': %s" --msgstr "" -+msgstr "默认设置与 repo '%s' 冲突 : %s" -+ -+#: libdnf/module/ModulePackageContainer.cpp:829 -+msgid "Installing module profiles:\n" -+msgstr "安装模块配置档案:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:844 -+msgid "Disabling module profiles:\n" -+msgstr "禁用模块配置档案:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:859 -+msgid "Enabling module streams:\n" -+msgstr "启用模块流:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:873 -+msgid "Switching module streams:\n" -+msgstr "切换模块流:\n" - --#: libdnf/module/ModulePackageContainer.cpp:1569 -+#: libdnf/module/ModulePackageContainer.cpp:891 -+msgid "Disabling modules:\n" -+msgstr "禁用模块:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:902 -+msgid "Resetting modules:\n" -+msgstr "重置模块:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1586 - #, c-format - msgid "Unable to load modular Fail-Safe data at '%s'" --msgstr "" -+msgstr "无法在 '%s' 加载模块 Fail-Safe 数据" - --#: libdnf/module/ModulePackageContainer.cpp:1575 -+#: libdnf/module/ModulePackageContainer.cpp:1592 - #, c-format - msgid "Unable to load modular Fail-Safe data for module '%s:%s'" --msgstr "" -+msgstr "无法为模块 '%s:%s' 加载模块 Fail-Safe 数据" - --#: libdnf/module/ModulePackageContainer.cpp:1639 -+#: libdnf/module/ModulePackageContainer.cpp:1656 - #, c-format - msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" --msgstr "" -+msgstr "无法为模块化 Fail Safe 数据创建目录 \"%s\" : %s" - --#: libdnf/module/ModulePackageContainer.cpp:1661 -+#: libdnf/module/ModulePackageContainer.cpp:1678 - #, c-format - msgid "Unable to save a modular Fail Safe data to '%s'" --msgstr "" -+msgstr "无法把模块 Fail Safe 数据 safe 为 '%s'" - --#: libdnf/module/ModulePackageContainer.cpp:1686 -+#: libdnf/module/ModulePackageContainer.cpp:1703 - #, c-format - msgid "Unable to remove a modular Fail Safe data in '%s'" --msgstr "" -+msgstr "无法在 '%s' 中删除一个模块的 Fail Safe 数据" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:86 - #, c-format - msgid "Failed to update from string: %s" --msgstr "" -+msgstr "从字符串更新失败: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:110 - #, c-format - msgid "Failed to resolve: %s" --msgstr "" -+msgstr "解析失败:%s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:115 - #, c-format - msgid "There were errors while resolving modular defaults: %s" --msgstr "" -+msgstr "在解析模块默认值时出现了错误:%s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:120 - #, c-format - msgid "Failed to upgrade defaults: %s" --msgstr "" -+msgstr "升级默认值失败:%s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:123 - #, c-format - msgid "Failed to upgrade streams: %s" --msgstr "" -+msgstr "升级流失败:%s" - - #: libdnf/plugin/plugin.cpp:46 - #, c-format - msgid "Can't load shared library \"%s\": %s" --msgstr "" -+msgstr "无法加载共享库 \"%s\": %s" - - #: libdnf/plugin/plugin.cpp:61 libdnf/plugin/plugin.cpp:67 - #: libdnf/plugin/plugin.cpp:73 libdnf/plugin/plugin.cpp:79 - #, c-format - msgid "Can't obtain address of symbol \"%s\": %s" --msgstr "" -+msgstr "无法获取符号 \"%s\" 的地址 : %s" - - #: libdnf/plugin/plugin.cpp:86 - #, c-format - msgid "Loading plugin file=\"%s\"" --msgstr "" -+msgstr "加载插件文件=\"%s\"" - - #: libdnf/plugin/plugin.cpp:89 - #, c-format - msgid "Loaded plugin name=\"%s\", version=\"%s\"" --msgstr "" -+msgstr "加载插件名=\"%s\", 版本=\"%s\"" - - #: libdnf/plugin/plugin.cpp:96 - msgid "Plugins::loadPlugins() dirPath cannot be empty" --msgstr "" -+msgstr "Plugins::loadPlugins() dirPath 不能为空" - - #: libdnf/plugin/plugin.cpp:105 - #, c-format - msgid "Can't read plugin directory \"%s\": %s" --msgstr "" -+msgstr "无法读插件目录 \"%s\": %s" - - #: libdnf/plugin/plugin.cpp:114 - #, c-format - msgid "Can't load plugin \"%s\": %s" --msgstr "" -+msgstr "无法加载插件 \"%s\": %s" - - #: libdnf/repo/DependencySplitter.cpp:50 - msgid "" -@@ -721,6 +843,8 @@ msgid "" - "deprecated and the support will be dropped in future versions. Use '=' " - "operator instead." - msgstr "" -+"在 reldeps 中使用 '==' 操作符可能导致一个未定义的行为。这个操作符已被废弃,并且在未来的版本中会取消对它的支持。请使用 '=' " -+"操作符代替。" - - #: libdnf/repo/Repo.cpp:321 - #, c-format -@@ -732,146 +856,161 @@ msgstr "软件仓库 %s 没有设置镜像或者 baseurl。" - msgid "Repository '%s' has unsupported type: 'type=%s', skipping." - msgstr "仓库 '%s' 有不被支持的类型: 'type=%s', 忽略。" - --#: libdnf/repo/Repo.cpp:546 -+#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:534 libdnf/repo/Repo.cpp:581 -+#: libdnf/repo/Repo.cpp:1368 -+#, c-format -+msgid "repo '%s': 'basecachedir' is not set" -+msgstr "Repo '%s': 'basecachedir' 没有设置" -+ -+#: libdnf/repo/Repo.cpp:553 - #, c-format - msgid "Cannot find a valid baseurl for repo: %s" - msgstr "无法为仓库 %s 找到一个有效的 baseurl" - --#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 -+#: libdnf/repo/Repo.cpp:594 libdnf/repo/Repo.cpp:1693 - msgid "" - "Maximum download speed is lower than minimum. Please change configuration of" - " minrate or throttle" - msgstr "最大下载速度低于最小值。请修改 minrate 或 throttle 的配置" - --#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 -+#: libdnf/repo/Repo.cpp:625 -+#, c-format -+msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" -+msgstr "Repo '%s': 'proxy_username' 已被设置,但没有设置 'proxy_password'" -+ -+#: libdnf/repo/Repo.cpp:647 libdnf/repo/Repo.cpp:669 - #, c-format - msgid "%s: gpgme_data_new_from_fd(): %s" - msgstr "%s: gpgme_data_new_from_fd(): %s" - --#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 -+#: libdnf/repo/Repo.cpp:655 libdnf/repo/Repo.cpp:677 - #, c-format - msgid "%s: gpgme_op_import(): %s" - msgstr "%s: gpgme_op_import(): %s" - --#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 -+#: libdnf/repo/Repo.cpp:700 libdnf/repo/Repo.cpp:766 libdnf/repo/Repo.cpp:894 - #, c-format - msgid "%s: gpgme_ctx_set_engine_info(): %s" - msgstr "%s: gpgme_ctx_set_engine_info(): %s" - --#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 -+#: libdnf/repo/Repo.cpp:727 libdnf/repo/Repo.cpp:791 - #, c-format - msgid "can not list keys: %s" - msgstr "不能列出 key: %s" - --#: libdnf/repo/Repo.cpp:806 -+#: libdnf/repo/Repo.cpp:820 - #, c-format - msgid "Failed to retrieve GPG key for repo '%s': %s" --msgstr "" -+msgstr "为 repo '%s' 获取 GPG 密钥失败 : %s" - --#: libdnf/repo/Repo.cpp:859 -+#: libdnf/repo/Repo.cpp:873 - #, c-format - msgid "repo %s: 0x%s already imported" - msgstr "repo %s: 0x%s 已被导入" - --#: libdnf/repo/Repo.cpp:887 -+#: libdnf/repo/Repo.cpp:901 - #, c-format - msgid "repo %s: imported key 0x%s." - msgstr "repo %s: 已导入密钥 0x%s。" - --#: libdnf/repo/Repo.cpp:1131 -+#: libdnf/repo/Repo.cpp:1149 - #, c-format - msgid "reviving: repo '%s' skipped, no metalink." - msgstr "恢复中: 仓库 '%s' 已被跳过,无 metalink。" - --#: libdnf/repo/Repo.cpp:1150 -+#: libdnf/repo/Repo.cpp:1168 - #, c-format - msgid "reviving: repo '%s' skipped, no usable hash." - msgstr "恢复中: 仓库 '%s' 已被跳过,无可用 hash。" - --#: libdnf/repo/Repo.cpp:1173 -+#: libdnf/repo/Repo.cpp:1191 - #, c-format - msgid "reviving: failed for '%s', mismatched %s sum." - msgstr "恢复: '%s' 失败,不匹配的 %s sum。" - --#: libdnf/repo/Repo.cpp:1179 -+#: libdnf/repo/Repo.cpp:1197 - #, c-format - msgid "reviving: '%s' can be revived - metalink checksums match." - msgstr "恢复中: '%s' 可以被恢复 - metalink 校验和匹配。" - --#: libdnf/repo/Repo.cpp:1204 -+#: libdnf/repo/Repo.cpp:1222 - #, c-format - msgid "reviving: '%s' can be revived - repomd matches." - msgstr "恢复: '%s' 可用被恢复 - repomd 匹配。" - --#: libdnf/repo/Repo.cpp:1206 -+#: libdnf/repo/Repo.cpp:1224 - #, c-format - msgid "reviving: failed for '%s', mismatched repomd." - msgstr "恢复: '%s' 失败,不匹配的 repomd。" - --#: libdnf/repo/Repo.cpp:1224 -+#: libdnf/repo/Repo.cpp:1242 - #, c-format - msgid "Cannot create repo destination directory \"%s\": %s" --msgstr "" -+msgstr "无法创建 repo 目标目录 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1230 -+#: libdnf/repo/Repo.cpp:1248 - #, c-format - msgid "Cannot create repo temporary directory \"%s\": %s" - msgstr "无法创建 repo 临时目录 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1244 -+#: libdnf/repo/Repo.cpp:1262 - #, c-format - msgid "Cannot create directory \"%s\": %s" - msgstr "无法创建目录 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1267 -+#: libdnf/repo/Repo.cpp:1285 - #, c-format - msgid "Cannot rename directory \"%s\" to \"%s\": %s" - msgstr "无法把目录 \"%s\" 重命名为 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1290 -+#: libdnf/repo/Repo.cpp:1308 - #, c-format - msgid "repo: using cache for: %s" - msgstr "仓库: 正在为 %s 使用缓存" - --#: libdnf/repo/Repo.cpp:1302 -+#: libdnf/repo/Repo.cpp:1320 - #, c-format - msgid "Cache-only enabled but no cache for '%s'" - msgstr "仅使用缓存已开启但没有 '%s' 的缓存" - --#: libdnf/repo/Repo.cpp:1306 -+#: libdnf/repo/Repo.cpp:1324 - #, c-format - msgid "repo: downloading from remote: %s" - msgstr "repo: 从远程下载: %s" - --#: libdnf/repo/Repo.cpp:1312 -+#: libdnf/repo/Repo.cpp:1330 - #, c-format - msgid "Failed to download metadata for repo '%s': %s" --msgstr "" -+msgstr "为 repo '%s' 下载元数据失败 : %s" - --#: libdnf/repo/Repo.cpp:1338 -+#: libdnf/repo/Repo.cpp:1356 - msgid "getCachedir(): Computation of SHA256 failed" - msgstr "getCachedir(): 计算 SHA256 失败" - --#: libdnf/repo/Repo.cpp:1363 -+#: libdnf/repo/Repo.cpp:1384 - #, c-format - msgid "Cannot create persistdir \"%s\": %s" --msgstr "" -+msgstr "无法创建 persistdir \"%s\": %s" -+ -+#: libdnf/repo/Repo.cpp:1715 -+msgid "'proxy_username' is set but not 'proxy_password'" -+msgstr "'proxy_username' 已被设置,但没有设置 'proxy_password'" - --#: libdnf/repo/Repo.cpp:1763 -+#: libdnf/repo/Repo.cpp:1787 - msgid "resume cannot be used simultaneously with the byterangestart param" - msgstr "resume 不能和 the byterangestart 参数同时使用" - --#: libdnf/repo/Repo.cpp:1780 -+#: libdnf/repo/Repo.cpp:1804 - #, c-format - msgid "PackageTarget initialization failed: %s" - msgstr "PackageTarget 初始失败: %s" - --#: libdnf/repo/Repo.cpp:1886 -+#: libdnf/repo/Repo.cpp:1910 - #, c-format - msgid "Cannot open %s: %s" - msgstr "无法打开 %s: %s" - --#: libdnf/repo/Repo.cpp:1930 -+#: libdnf/repo/Repo.cpp:1954 - #, c-format - msgid "Log handler with id %ld doesn't exist" - msgstr "id 为 %ld 的日志处理器不存在" -@@ -900,7 +1039,7 @@ msgstr "试图在已完成的事务中更新事务" - - #: libdnf/transaction/Transformer.cpp:76 - msgid "Database Corrupted: no row 'version' in table 'config'" --msgstr "" -+msgstr "数据库损坏:表 'config' 中没有 'version' 行" - - #: libdnf/transaction/Transformer.cpp:681 - msgid "Transformer: can't open history persist dir" -@@ -925,6 +1064,3 @@ msgstr "无法向未保存的事务中添加控制台输出" - - #~ msgid "Bad id for repo: %s, byte = %s %d" - #~ msgstr "repo 的 id 无效: %s, byte = %s %d" -- --#~ msgid "failed calculating RPMDB checksum" --#~ msgstr "无法计算 RPMDB checksum" --- -2.29.2 - diff --git a/SOURCES/0009-Revert-Change-mechanism-of-module-conflicts.patch b/SOURCES/0009-Revert-Change-mechanism-of-module-conflicts.patch new file mode 100644 index 0000000..7b583b3 --- /dev/null +++ b/SOURCES/0009-Revert-Change-mechanism-of-module-conflicts.patch @@ -0,0 +1,78 @@ +From e43ef244e78d8563eb3cb7ff6a6074946f60c877 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:53 +0200 +Subject: [PATCH 09/19] Revert "Change mechanism of module conflicts" + +This reverts commit 49600ba05b474bc29651aa122a9116b5ada69f4d. +--- + libdnf/dnf-sack.cpp | 1 + + libdnf/module/ModulePackage.cpp | 2 -- + libdnf/module/ModulePackage.hpp | 1 - + libdnf/module/ModulePackageContainer.cpp | 1 - + libdnf/module/ModulePackageContainer.hpp | 1 - + 5 files changed, 1 insertion(+), 5 deletions(-) + +diff --git a/libdnf/dnf-sack.cpp b/libdnf/dnf-sack.cpp +index b5c7edc0..b9baeaef 100644 +--- a/libdnf/dnf-sack.cpp ++++ b/libdnf/dnf-sack.cpp +@@ -2297,6 +2297,7 @@ void readModuleMetadataFromRepo(DnfSack * sack, libdnf::ModulePackageContainer * + modulePackages->add(sack); + modulePackages->loadFailSafeData(); + if (!modulePackages->empty()) { ++ modulePackages->createConflictsBetweenStreams(); + // TODO remove hard-coded path + try { + std::vector paths{"/etc/os-release", "/usr/lib/os-release"}; +diff --git a/libdnf/module/ModulePackage.cpp b/libdnf/module/ModulePackage.cpp +index d0017877..d644eca6 100644 +--- a/libdnf/module/ModulePackage.cpp ++++ b/libdnf/module/ModulePackage.cpp +@@ -75,8 +75,6 @@ static void setSovable(Pool * pool, Solvable * solvable, const std::string & nam + ss << "module(" << name << ")"; + auto depId = pool_str2id(pool, ss.str().c_str(), 1); + solvable_add_deparray(solvable, SOLVABLE_PROVIDES, depId, -1); +- // create Conflicts: module($name) +- solvable_add_deparray(solvable, SOLVABLE_CONFLICTS, depId, 0); + + // create Provide: module($name:$stream) + ss.str(std::string()); +diff --git a/libdnf/module/ModulePackage.hpp b/libdnf/module/ModulePackage.hpp +index b618df58..145c6d63 100644 +--- a/libdnf/module/ModulePackage.hpp ++++ b/libdnf/module/ModulePackage.hpp +@@ -71,7 +71,6 @@ public: + + std::vector getModuleDependencies() const; + +- ///DEPRECATED + void addStreamConflict(const ModulePackage * package); + + Id getId() const { return id; }; +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index 97c84c01..893b839a 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -204,7 +204,6 @@ private: + /// solvable.arch = + /// solvable.summary = + /// solvable.description = : +- /// solvable.conflicts = module() + DnfSack * moduleSack; + std::unique_ptr activatedModules; + std::string installRoot; +diff --git a/libdnf/module/ModulePackageContainer.hpp b/libdnf/module/ModulePackageContainer.hpp +index 99fc0677..c1001fce 100644 +--- a/libdnf/module/ModulePackageContainer.hpp ++++ b/libdnf/module/ModulePackageContainer.hpp +@@ -115,7 +115,6 @@ public: + Id addPlatformPackage(const std::string &osReleasePath, const char * platformModule); + Id addPlatformPackage(DnfSack * sack, + const std::vector & osReleasePath, const char * platformModule); +- /// DEPRECATED + void createConflictsBetweenStreams(); + + /** +-- +2.31.1 + diff --git a/SOURCES/0010-Revert-Call-addVersion2Modules-as-late-as-possible.patch b/SOURCES/0010-Revert-Call-addVersion2Modules-as-late-as-possible.patch new file mode 100644 index 0000000..67c720e --- /dev/null +++ b/SOURCES/0010-Revert-Call-addVersion2Modules-as-late-as-possible.patch @@ -0,0 +1,214 @@ +From 058b6112374f5feb5ee57488ac3fdbc7666a2016 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:53 +0200 +Subject: [PATCH 10/19] Revert "Call addVersion2Modules(); as late as possible" + +This reverts commit fe27dba67384e549a3be2a91c4a6cf1151113157. +--- + libdnf/module/ModulePackageContainer.cpp | 28 +++--------------------- + 1 file changed, 3 insertions(+), 25 deletions(-) + +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index 893b839a..6ee2b68f 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -346,6 +346,7 @@ ModulePackageContainer::add(DnfSack * sack) + exception.what())); + } + } ++ pImpl->addVersion2Modules(); + } + + void ModulePackageContainer::addDefaultsFromDisk() +@@ -427,7 +428,6 @@ void ModulePackageContainer::createConflictsBetweenStreams() + + bool ModulePackageContainer::empty() const noexcept + { +- pImpl->addVersion2Modules(); + return pImpl->modules.empty(); + } + +@@ -521,13 +521,11 @@ bool ModulePackageContainer::isDisabled(const ModulePackage * module) + std::vector ModulePackageContainer::getDefaultProfiles(std::string moduleName, + std::string moduleStream) + { +- pImpl->addVersion2Modules(); + return pImpl->moduleMetadata.getDefaultProfiles(moduleName, moduleStream); + } + + const std::string & ModulePackageContainer::getDefaultStream(const std::string &name) const + { +- pImpl->addVersion2Modules(); + auto it = pImpl->moduleDefaults.find(name); + if (it == pImpl->moduleDefaults.end()) { + return EMPTY_RESULT; +@@ -537,7 +535,6 @@ const std::string & ModulePackageContainer::getDefaultStream(const std::string & + + const std::string & ModulePackageContainer::getEnabledStream(const std::string &name) + { +- pImpl->addVersion2Modules(); + return pImpl->persistor->getStream(name); + } + +@@ -547,7 +544,6 @@ const std::string & ModulePackageContainer::getEnabledStream(const std::string & + bool + ModulePackageContainer::enable(const std::string &name, const std::string & stream, const bool count) + { +- pImpl->addVersion2Modules(); + if (count) { + pImpl->persistor->getEntry(name).second.streamChangesNum++; + } +@@ -573,7 +569,6 @@ ModulePackageContainer::enable(const ModulePackage * module, const bool count) + */ + void ModulePackageContainer::disable(const std::string & name, const bool count) + { +- pImpl->addVersion2Modules(); + if (count) { + pImpl->persistor->getEntry(name).second.streamChangesNum++; + } +@@ -594,11 +589,11 @@ void ModulePackageContainer::disable(const ModulePackage * module, const bool co + */ + void ModulePackageContainer::reset(const std::string & name, const bool count) + { +- pImpl->addVersion2Modules(); + if (count) { + pImpl->persistor->getEntry(name).second.streamChangesNum++; + } + pImpl->persistor->changeState(name, ModuleState::UNKNOWN); ++ + pImpl->persistor->changeStream(name, ""); + auto & profiles = pImpl->persistor->getEntry(name).second.profiles; + profiles.clear(); +@@ -638,7 +633,6 @@ bool ModulePackageContainer::isChanged() + void ModulePackageContainer::install(const std::string &name, const std::string &stream, + const std::string &profile) + { +- pImpl->addVersion2Modules(); + for (const auto &iter : pImpl->modules) { + auto modulePackage = iter.second.get(); + if (modulePackage->getName() == name && modulePackage->getStream() == stream) { +@@ -656,7 +650,6 @@ void ModulePackageContainer::install(const ModulePackage * module, const std::st + void ModulePackageContainer::uninstall(const std::string &name, const std::string &stream, + const std::string &profile) + { +- pImpl->addVersion2Modules(); + for (const auto &iter : pImpl->modules) { + auto modulePackage = iter.second.get(); + if (modulePackage->getName() == name && modulePackage->getStream() == stream) { +@@ -744,7 +737,6 @@ ModulePackageContainer::query(Nsvcap& moduleNevra) + std::vector + ModulePackageContainer::query(std::string subject) + { +- pImpl->addVersion2Modules(); + // Alternatively a search using module provides could be performed + std::vector result; + Query query(pImpl->moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); +@@ -765,7 +757,6 @@ std::vector + ModulePackageContainer::query(std::string name, std::string stream, std::string version, + std::string context, std::string arch) + { +- pImpl->addVersion2Modules(); + // Alternatively a search using module provides could be performed + std::vector result; + Query query(pImpl->moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); +@@ -847,7 +838,6 @@ ModulePackageContainer::getModuleState(const std::string& name) + + std::set ModulePackageContainer::getInstalledPkgNames() + { +- pImpl->addVersion2Modules(); + auto moduleNames = pImpl->persistor->getAllModuleNames(); + std::set pkgNames; + for (auto & moduleName: moduleNames) { +@@ -1029,7 +1019,6 @@ std::vector>> + ModulePackageContainer::getLatestModulesPerRepo(ModuleState moduleFilter, + std::vector modulePackages) + { +- pImpl->addVersion2Modules(); + if (modulePackages.empty()) { + return {}; + } +@@ -1113,7 +1102,6 @@ ModulePackageContainer::getLatestModulesPerRepo(ModuleState moduleFilter, + std::pair>, ModulePackageContainer::ModuleErrorType> + ModulePackageContainer::resolveActiveModulePackages(bool debugSolver) + { +- pImpl->addVersion2Modules(); + dnf_sack_reset_excludes(pImpl->moduleSack); + std::vector packages; + +@@ -1164,7 +1152,6 @@ bool ModulePackageContainer::isModuleActive(const ModulePackage * modulePackage) + + std::vector ModulePackageContainer::getModulePackages() + { +- pImpl->addVersion2Modules(); + std::vector values; + const auto & modules = pImpl->modules; + std::transform( +@@ -1186,56 +1173,47 @@ void ModulePackageContainer::rollback() + + std::map ModulePackageContainer::getEnabledStreams() + { +- pImpl->addVersion2Modules(); + return pImpl->persistor->getEnabledStreams(); + } + + std::vector ModulePackageContainer::getDisabledModules() + { +- pImpl->addVersion2Modules(); + return pImpl->persistor->getDisabledModules(); + } + + std::map ModulePackageContainer::getDisabledStreams() + { +- pImpl->addVersion2Modules(); + return pImpl->persistor->getDisabledStreams(); + } + + std::vector ModulePackageContainer::getResetModules() + { +- pImpl->addVersion2Modules(); + return pImpl->persistor->getResetModules(); + } + + std::map ModulePackageContainer::getResetStreams() + { +- pImpl->addVersion2Modules(); + return pImpl->persistor->getResetStreams(); + } + + std::map> + ModulePackageContainer::getSwitchedStreams() + { +- pImpl->addVersion2Modules(); + return pImpl->persistor->getSwitchedStreams(); + } + + std::map> ModulePackageContainer::getInstalledProfiles() + { +- pImpl->addVersion2Modules(); + return pImpl->persistor->getInstalledProfiles(); + } + + std::vector ModulePackageContainer::getInstalledProfiles(std::string moduleName) + { +- pImpl->addVersion2Modules(); + return pImpl->persistor->getProfiles(moduleName); + } + + std::map> ModulePackageContainer::getRemovedProfiles() + { +- pImpl->addVersion2Modules(); + return pImpl->persistor->getRemovedProfiles(); + } + const std::string & +@@ -1641,7 +1619,7 @@ ModulePackageContainer::Impl::ModulePersistor::getRemovedProfiles() + void ModulePackageContainer::loadFailSafeData() + { + auto persistor = pImpl->persistor->configs; +- ++ + std::map> enabledStreams; + for (auto & nameConfig: persistor) { + if (nameConfig.second.second.state == ModuleState::ENABLED) { +-- +2.31.1 + diff --git a/SOURCES/0011-Revert-Fix-modular-queries-with-the-new-solver.patch b/SOURCES/0011-Revert-Fix-modular-queries-with-the-new-solver.patch new file mode 100644 index 0000000..261dbed --- /dev/null +++ b/SOURCES/0011-Revert-Fix-modular-queries-with-the-new-solver.patch @@ -0,0 +1,108 @@ +From 83703689de978cbb5e38f04fb1d9f554026de5ba Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:53 +0200 +Subject: [PATCH 11/19] Revert "Fix modular queries with the new solver" + +This reverts commit a9f99a4969831f5d0e21d0f2b2b088ff6546604b. +--- + libdnf/module/ModulePackage.cpp | 17 ++++------------- + libdnf/module/ModulePackageContainer.cpp | 13 ++----------- + libdnf/module/ModulePackageContainer.hpp | 2 +- + 3 files changed, 7 insertions(+), 25 deletions(-) + +diff --git a/libdnf/module/ModulePackage.cpp b/libdnf/module/ModulePackage.cpp +index d644eca6..63ee1656 100644 +--- a/libdnf/module/ModulePackage.cpp ++++ b/libdnf/module/ModulePackage.cpp +@@ -52,7 +52,7 @@ namespace libdnf { + * Provides: module($name:$stream) + */ + static void setSovable(Pool * pool, Solvable * solvable, const std::string & name, +- const std::string & stream, const std::string & version, const std::string & context, const char * arch, const std::string & original_context) ++ const std::string & stream, const std::string & version, const std::string & context, const char * arch) + { + std::ostringstream ss; + // Name: $name:$stream:$context +@@ -62,14 +62,6 @@ static void setSovable(Pool * pool, Solvable * solvable, const std::string & nam + // TODO Test can be remove when modules will be always with arch + solvable_set_str(solvable, SOLVABLE_ARCH, arch ? arch : "noarch"); + +- // store original context in summary +- solvable_set_str(solvable, SOLVABLE_SUMMARY, original_context.c_str()); +- +- // store original name:stream in description +- ss.str(std::string()); +- ss << name << ":" << stream; +- solvable_set_str(solvable, SOLVABLE_DESCRIPTION, ss.str().c_str()); +- + // create Provide: module($name) + ss.str(std::string()); + ss << "module(" << name << ")"; +@@ -105,9 +97,8 @@ ModulePackage::ModulePackage(DnfSack * moduleSack, LibsolvRepo * repo, + Pool * pool = dnf_sack_get_pool(moduleSack); + id = repo_add_solvable(repo); + Solvable *solvable = pool_id2solvable(pool, id); +- std::string original_context = getContext(); +- setSovable(pool, solvable, getName(), getStream(), getVersion(), context.empty() ? original_context : context, +- getArchCStr(), original_context); ++ ++ setSovable(pool, solvable, getName(), getStream(), getVersion(), context.empty() ? getContext() : context, getArchCStr()); + createDependencies(solvable); + HyRepo hyRepo = static_cast(repo->appdata); + libdnf::repoGetImpl(hyRepo)->needs_internalizing = 1; +@@ -649,7 +640,7 @@ ModulePackage::createPlatformSolvable(DnfSack * sack, DnfSack * moduleSack, + repoImpl->needs_internalizing = 1; + Id id = repo_add_solvable(repo); + Solvable *solvable = pool_id2solvable(pool, id); +- setSovable(pool, solvable, name, stream, version, context, "noarch", context); ++ setSovable(pool, solvable, name, stream, version, context, "noarch"); + repoImpl->needs_internalizing = 1; + dnf_sack_set_provides_not_ready(moduleSack); + dnf_sack_set_considered_to_update(moduleSack); +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index 6ee2b68f..3f30037e 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -197,13 +197,6 @@ private: + class ModulePersistor; + std::unique_ptr persistor; + std::map> modules; +- /// Internal sack with module solvables +- /// resolveContext = if moduleMdVersion > 2, else generated from requires +- /// solvable.name = :: +- /// solvable.evr = +- /// solvable.arch = +- /// solvable.summary = +- /// solvable.description = : + DnfSack * moduleSack; + std::unique_ptr activatedModules; + std::string installRoot; +@@ -764,10 +757,8 @@ ModulePackageContainer::query(std::string name, std::string stream, std::string + query.available(); + std::ostringstream ss; + ss << stringFormater(name) << ":" << stringFormater(stream); +- query.addFilter(HY_PKG_DESCRIPTION, HY_GLOB, ss.str().c_str()); +- if (!context.empty()) { +- query.addFilter(HY_PKG_SUMMARY, HY_GLOB, context.c_str()); +- } ++ ss << ":" << stringFormater(context); ++ query.addFilter(HY_PKG_NAME, HY_GLOB, ss.str().c_str()); + if (!arch.empty()) { + query.addFilter(HY_PKG_ARCH, HY_GLOB, arch.c_str()); + } +diff --git a/libdnf/module/ModulePackageContainer.hpp b/libdnf/module/ModulePackageContainer.hpp +index c1001fce..7e5071b2 100644 +--- a/libdnf/module/ModulePackageContainer.hpp ++++ b/libdnf/module/ModulePackageContainer.hpp +@@ -270,7 +270,7 @@ public: + */ + std::vector query(libdnf::Nsvcap & moduleNevra); + /** +- * @brief Requiers subject in format , :, or :: ++ * @brief Requiers subject in format , :, or :: + * + * @param subject p_subject:... + * @return std::vector +-- +2.31.1 + diff --git a/SOURCES/0012-Revert-Add-compatible-layer-for-MdDocuments-v2.patch b/SOURCES/0012-Revert-Add-compatible-layer-for-MdDocuments-v2.patch new file mode 100644 index 0000000..a214d34 --- /dev/null +++ b/SOURCES/0012-Revert-Add-compatible-layer-for-MdDocuments-v2.patch @@ -0,0 +1,171 @@ +From 833966d8a8a6c87a3d51447f2adf2aa76190ecd8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:53 +0200 +Subject: [PATCH 12/19] Revert "Add compatible layer for MdDocuments v2" + +This reverts commit 32ccf6743cb9ce1579ff88804855a94f30876860. +--- + libdnf/module/ModulePackageContainer.cpp | 68 +---------------------- + libdnf/module/modulemd/ModuleMetadata.cpp | 11 +--- + libdnf/module/modulemd/ModuleMetadata.hpp | 2 +- + 3 files changed, 4 insertions(+), 77 deletions(-) + +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index 3f30037e..6e6134d2 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -69,23 +69,6 @@ void goal2name_query(libdnf::Goal & goal, libdnf::Query & query) + query.addFilter(HY_PKG_NAME, HY_EQ, module_names.data()); + } + +-/** +- * @brief In python => ";".join(list.sort()) +- */ +-std::string concentrateVectorString(std::vector & list) +-{ +- if (list.empty()) { +- return {}; +- } +- std::sort(list.begin(), list.end()); +- std::ostringstream ss; +- ss << *list.begin(); +- for (auto require = std::next(list.begin()); require != list.end(); ++require) { +- ss << ";" << *require; +- } +- return ss.str(); +-} +- + } + + namespace std { +@@ -189,8 +172,6 @@ public: + const std::vector & modules, bool debugSolver); + bool insert(const std::string &moduleName, const char *path); + std::vector getLatestActiveEnabledModules(); +- /// Required to call after all modules v3 are in metadata +- void addVersion2Modules(); + + private: + friend struct ModulePackageContainer; +@@ -204,8 +185,6 @@ private: + ModuleMetadata moduleMetadata; + + std::map moduleDefaults; +- std::vector> modulesV2; +- + bool isEnabled(const std::string &name, const std::string &stream); + }; + +@@ -339,7 +318,6 @@ ModulePackageContainer::add(DnfSack * sack) + exception.what())); + } + } +- pImpl->addVersion2Modules(); + } + + void ModulePackageContainer::addDefaultsFromDisk() +@@ -375,7 +353,7 @@ ModulePackageContainer::add(const std::string &fileContent, const std::string & + if (strcmp(r->name, "available") == 0) { + g_autofree gchar * path = g_build_filename(pImpl->installRoot.c_str(), + "/etc/dnf/modules.d", NULL); +- auto packages = md.getAllModulePackages(pImpl->moduleSack, r, repoID, pImpl->modulesV2); ++ std::vector packages = md.getAllModulePackages(pImpl->moduleSack, r, repoID); + for(auto const& modulePackagePtr: packages) { + std::unique_ptr modulePackage(modulePackagePtr); + pImpl->modules.insert(std::make_pair(modulePackage->getId(), std::move(modulePackage))); +@@ -1701,50 +1679,6 @@ std::vector ModulePackageContainer::Impl::getLatestActiveEnable + return latest; + } + +-void ModulePackageContainer::Impl::addVersion2Modules() +-{ +- if (modulesV2.empty()) { +- return; +- } +- std::map>> v3_context_map; +- for (auto const & module_pair : modules) { +- auto * module = module_pair.second.get(); +- auto requires = module->getRequires(true); +- auto concentratedRequires = concentrateVectorString(requires); +- v3_context_map[module->getNameStream()][concentratedRequires].push_back(module); +- } +- libdnf::LibsolvRepo * repo; +- ModulemdModuleStream * mdStream; +- std::string repoID; +- g_autofree gchar * path = g_build_filename(installRoot.c_str(), "/etc/dnf/modules.d", NULL); +- for (auto & module_tuple : modulesV2) { +- std::tie(repo, mdStream, repoID) = module_tuple; +- auto nameStream = ModulePackage::getNameStream(mdStream); +- auto requires = ModulePackage::getRequires(mdStream, true); +- auto concentratedRequires = concentrateVectorString(requires); +- auto streamIterator = v3_context_map.find(nameStream); +- if (streamIterator != v3_context_map.end()) { +- auto contextIterator = streamIterator->second.find(concentratedRequires); +- if (contextIterator != streamIterator->second.end()) { +- auto v3_context = contextIterator->second[0]->getContext(); +- std::unique_ptr modulePackage(new ModulePackage(moduleSack, repo, mdStream, repoID, v3_context)); +- persistor->insert(modulePackage->getName(), path); +- modules.insert(std::make_pair(modulePackage->getId(), std::move(modulePackage))); +- g_object_unref(mdStream); +- continue; +- } +- } +- if (concentratedRequires.empty()) { +- concentratedRequires.append("NoRequires"); +- } +- std::unique_ptr modulePackage(new ModulePackage(moduleSack, repo, mdStream, repoID, concentratedRequires)); +- persistor->insert(modulePackage->getName(), path); +- modules.insert(std::make_pair(modulePackage->getId(), std::move(modulePackage))); +- g_object_unref(mdStream); +- } +- modulesV2.clear(); +-} +- + void ModulePackageContainer::updateFailSafeData() + { + auto fileNames = getYamlFilenames(pImpl->persistDir.c_str()); +diff --git a/libdnf/module/modulemd/ModuleMetadata.cpp b/libdnf/module/modulemd/ModuleMetadata.cpp +index 07817ce1..fbdd8a13 100644 +--- a/libdnf/module/modulemd/ModuleMetadata.cpp ++++ b/libdnf/module/modulemd/ModuleMetadata.cpp +@@ -126,8 +126,7 @@ void ModuleMetadata::resolveAddedMetadata() + + std::vector ModuleMetadata::getAllModulePackages(DnfSack * moduleSack, + LibsolvRepo * repo, +- const std::string & repoID, +- std::vector> & modulesV2) ++ const std::string & repoID) + { + std::vector result; + if (!resultingModuleIndex) +@@ -141,13 +140,7 @@ std::vector ModuleMetadata::getAllModulePackages(DnfSack * modu + //TODO(amatej): replace with + //GPtrArray * streams = modulemd_module_index_search_streams_by_nsvca_glob(resultingModuleIndex, NULL); + for (unsigned int i = 0; i < streams->len; i++){ +- ModulemdModuleStream * moduleMdStream = static_cast(g_ptr_array_index(streams, i)); +- if (modulemd_module_stream_get_mdversion(moduleMdStream) > 2) { +- result.push_back(new ModulePackage(moduleSack, repo, moduleMdStream, repoID)); +- } else { +- g_object_ref(moduleMdStream); +- modulesV2.push_back(std::make_tuple(repo, moduleMdStream, repoID)); +- } ++ result.push_back(new ModulePackage(moduleSack, repo, (ModulemdModuleStream *) g_ptr_array_index(streams, i), repoID)); + } + } + +diff --git a/libdnf/module/modulemd/ModuleMetadata.hpp b/libdnf/module/modulemd/ModuleMetadata.hpp +index 901d7402..df753b11 100644 +--- a/libdnf/module/modulemd/ModuleMetadata.hpp ++++ b/libdnf/module/modulemd/ModuleMetadata.hpp +@@ -36,7 +36,7 @@ public: + ~ModuleMetadata(); + void addMetadataFromString(const std::string & yaml, int priority); + void resolveAddedMetadata(); +- std::vector getAllModulePackages(DnfSack * moduleSack, LibsolvRepo * repo, const std::string & repoID, std::vector> & modulesV2); ++ std::vector getAllModulePackages(DnfSack * moduleSack, LibsolvRepo * repo, const std::string & repoID); + std::map getDefaultStreams(); + std::vector getDefaultProfiles(std::string moduleName, std::string moduleStream); + ModulemdObsoletes * getNewestActiveObsolete(ModulePackage *p); +-- +2.31.1 + diff --git a/SOURCES/0013-Revert-Add-an-alternative-constructor-for-ModulePack.patch b/SOURCES/0013-Revert-Add-an-alternative-constructor-for-ModulePack.patch new file mode 100644 index 0000000..ce0d347 --- /dev/null +++ b/SOURCES/0013-Revert-Add-an-alternative-constructor-for-ModulePack.patch @@ -0,0 +1,77 @@ +From b1ed6e111ce05f8f1fe7b35afc1a3ef6f0731f7c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:53 +0200 +Subject: [PATCH 13/19] Revert "Add an alternative constructor for + ModulePackage" + +This reverts commit d05bb263de6822c13ac4bd5cca3628318f5c7ce7. +--- + libdnf/module/ModulePackage.cpp | 24 ++++++++++++------------ + libdnf/module/ModulePackage.hpp | 2 +- + 2 files changed, 13 insertions(+), 13 deletions(-) + +diff --git a/libdnf/module/ModulePackage.cpp b/libdnf/module/ModulePackage.cpp +index 63ee1656..8126bcaa 100644 +--- a/libdnf/module/ModulePackage.cpp ++++ b/libdnf/module/ModulePackage.cpp +@@ -43,16 +43,16 @@ extern "C" { + + namespace libdnf { + +-/** +- * @brief create solvable with: +- * Name: $name:$stream:$context +- * Version: $version +- * Arch: $arch (If arch is not defined, set "noarch") +- * Provides: module($name) +- * Provides: module($name:$stream) +- */ +-static void setSovable(Pool * pool, Solvable * solvable, const std::string & name, +- const std::string & stream, const std::string & version, const std::string & context, const char * arch) ++ /** ++ * @brief create solvable with: ++ * Name: $name:$stream:$context ++ * Version: $version ++ * Arch: $arch (If arch is not defined, set "noarch") ++ * Provides: module($name) ++ * Provides: module($name:$stream) ++ */ ++ static void setSovable(Pool * pool, Solvable *solvable, std::string & name, ++ std::string & stream, std::string & version, std::string & context, const char * arch) + { + std::ostringstream ss; + // Name: $name:$stream:$context +@@ -86,7 +86,7 @@ static std::pair parsePlatform(const std::string & pla + } + + ModulePackage::ModulePackage(DnfSack * moduleSack, LibsolvRepo * repo, +- ModulemdModuleStream * mdStream, const std::string & repoID, const std::string & context) ++ ModulemdModuleStream * mdStream, const std::string & repoID) + : mdStream(mdStream) + , moduleSack(moduleSack) + , repoID(repoID) +@@ -98,7 +98,7 @@ ModulePackage::ModulePackage(DnfSack * moduleSack, LibsolvRepo * repo, + id = repo_add_solvable(repo); + Solvable *solvable = pool_id2solvable(pool, id); + +- setSovable(pool, solvable, getName(), getStream(), getVersion(), context.empty() ? getContext() : context, getArchCStr()); ++ setSovable(pool, solvable, getName(), getStream(), getVersion(), getContext(), getArchCStr()); + createDependencies(solvable); + HyRepo hyRepo = static_cast(repo->appdata); + libdnf::repoGetImpl(hyRepo)->needs_internalizing = 1; +diff --git a/libdnf/module/ModulePackage.hpp b/libdnf/module/ModulePackage.hpp +index 145c6d63..47cc995c 100644 +--- a/libdnf/module/ModulePackage.hpp ++++ b/libdnf/module/ModulePackage.hpp +@@ -95,7 +95,7 @@ private: + friend struct ModuleMetadata; + + ModulePackage(DnfSack * moduleSack, LibsolvRepo * repo, +- ModulemdModuleStream * mdStream, const std::string & repoID, const std::string & context = {}); ++ ModulemdModuleStream * mdStream, const std::string & repoID); + + ModulePackage(const ModulePackage & mpkg); + ModulePackage & operator=(const ModulePackage & mpkg); +-- +2.31.1 + diff --git a/SOURCES/0014-Revert-Adjust-modular-solver-to-new-context-type.patch b/SOURCES/0014-Revert-Adjust-modular-solver-to-new-context-type.patch new file mode 100644 index 0000000..99bed9d --- /dev/null +++ b/SOURCES/0014-Revert-Adjust-modular-solver-to-new-context-type.patch @@ -0,0 +1,113 @@ +From 6c9540be5ac3e3bc3f9a60133b402945705b934f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:53 +0200 +Subject: [PATCH 14/19] Revert "Adjust modular solver to new context type" + +This reverts commit 921d4db62cda41f7999aff67882ad0c01c766916. +--- + libdnf/module/ModulePackageContainer.cpp | 46 +++++------------------- + 1 file changed, 8 insertions(+), 38 deletions(-) + +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index 6e6134d2..c0ad1260 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -49,28 +49,6 @@ extern "C" { + #include "modulemd/ModuleMetadata.hpp" + #include "modulemd/ModuleProfile.hpp" + +- +-namespace { +- +-/// Requires resolved goal +-/// Takes listInstalls() from goal and keep solvables with the solvable-name (::) in query +-void goal2name_query(libdnf::Goal & goal, libdnf::Query & query) +-{ +- auto pool = dnf_sack_get_pool(goal.getSack()); +- auto installList = goal.listInstalls(); +- std::vector module_names; +- Id id = -1; +- while ((id = installList.next(id)) != -1) { +- Solvable * s = pool_id2solvable(pool, id); +- const char * name = pool_id2str(pool, s->name); +- module_names.push_back(name); +- } +- module_names.push_back(nullptr); +- query.addFilter(HY_PKG_NAME, HY_EQ, module_names.data()); +-} +- +-} +- + namespace std { + + template<> +@@ -651,14 +629,14 @@ ModulePackageContainer::Impl::moduleSolve(const std::vector & m + for (const auto &module : modules) { + std::ostringstream ss; + auto name = module->getName(); +- ss << "module(" << name << ":" << module->getStream() << ")"; ++ ss << "module(" << name << ":" << module->getStream() << ":" << module->getVersion() << ")"; + Selector selector(moduleSack); + bool optional = persistor->getState(name) == ModuleState::DEFAULT; + selector.set(HY_PKG_PROVIDES, HY_EQ, ss.str().c_str()); + goal.install(&selector, optional); + goalWeak.install(&selector, true); + } +- auto ret = goal.run(static_cast(DNF_IGNORE_WEAK | DNF_FORCE_BEST)); ++ auto ret = goal.run(DNF_IGNORE_WEAK); + if (debugSolver) { + goal.writeDebugdata("debugdata/modules"); + } +@@ -666,7 +644,7 @@ ModulePackageContainer::Impl::moduleSolve(const std::vector & m + auto problemType = ModulePackageContainer::ModuleErrorType::NO_ERROR; + if (ret) { + problems = goal.describeAllProblemRules(false); +- ret = goal.run(DNF_FORCE_BEST); ++ ret = goal.run(DNF_NONE); + if (ret) { + // Conflicting modules has to be removed otherwice it could result than one of them will + // be active +@@ -680,20 +658,14 @@ ModulePackageContainer::Impl::moduleSolve(const std::vector & m + activatedModules.reset(); + } else { + problemType = ModulePackageContainer::ModuleErrorType::ERROR; +- Query query(moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); +- goal2name_query(goalWeak, query); +- activatedModules.reset(new PackageSet(*query.runSet())); ++ activatedModules.reset(new PackageSet(std::move(goalWeak.listInstalls()))); + } + } else { + problemType = ModulePackageContainer::ModuleErrorType::ERROR_IN_DEFAULTS; +- Query query(moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); +- goal2name_query(goal, query); +- activatedModules.reset(new PackageSet(*query.runSet())); ++ activatedModules.reset(new PackageSet(std::move(goal.listInstalls()))); + } + } else { +- Query query(moduleSack, Query::ExcludeFlags::IGNORE_EXCLUDES); +- goal2name_query(goal, query); +- activatedModules.reset(new PackageSet(*query.runSet())); ++ activatedModules.reset(new PackageSet(std::move(goal.listInstalls()))); + } + return make_pair(problems, problemType); + } +@@ -735,14 +707,12 @@ ModulePackageContainer::query(std::string name, std::string stream, std::string + query.available(); + std::ostringstream ss; + ss << stringFormater(name) << ":" << stringFormater(stream); +- ss << ":" << stringFormater(context); ++ ss << ":" << stringFormater(version) << ":"; ++ ss << stringFormater(context); + query.addFilter(HY_PKG_NAME, HY_GLOB, ss.str().c_str()); + if (!arch.empty()) { + query.addFilter(HY_PKG_ARCH, HY_GLOB, arch.c_str()); + } +- if (!version.empty()) { +- query.addFilter(HY_PKG_VERSION, HY_GLOB, version.c_str()); +- } + auto pset = query.runSet(); + Id moduleId = -1; + while ((moduleId = pset->next(moduleId)) != -1) { +-- +2.31.1 + diff --git a/SOURCES/0015-Revert-Change-usage-of-context-and-version-in-modula.patch b/SOURCES/0015-Revert-Change-usage-of-context-and-version-in-modula.patch new file mode 100644 index 0000000..6cfd63c --- /dev/null +++ b/SOURCES/0015-Revert-Change-usage-of-context-and-version-in-modula.patch @@ -0,0 +1,65 @@ +From 50aa9f29dbfc1523a3b6aea41c6caa37f30c1bf0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Sun, 25 Apr 2021 19:47:53 +0200 +Subject: [PATCH 15/19] Revert "Change usage of context and version in modular + solver" + +This reverts commit 1f4c5b2a37ec333b23a12b882b046fac858155aa. +--- + libdnf/module/ModulePackage.cpp | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +diff --git a/libdnf/module/ModulePackage.cpp b/libdnf/module/ModulePackage.cpp +index 8126bcaa..eea4a8b5 100644 +--- a/libdnf/module/ModulePackage.cpp ++++ b/libdnf/module/ModulePackage.cpp +@@ -43,25 +43,19 @@ extern "C" { + + namespace libdnf { + +- /** +- * @brief create solvable with: +- * Name: $name:$stream:$context +- * Version: $version +- * Arch: $arch (If arch is not defined, set "noarch") +- * Provides: module($name) +- * Provides: module($name:$stream) +- */ +- static void setSovable(Pool * pool, Solvable *solvable, std::string & name, +- std::string & stream, std::string & version, std::string & context, const char * arch) ++static void setSovable(Pool * pool, Solvable *solvable, std::string name, ++ std::string stream, std::string version, std::string context, const char * arch) + { + std::ostringstream ss; +- // Name: $name:$stream:$context +- ss << name << ":" << stream << ":" << context; ++ // create solvable with: ++ // Name: $name:$stream:$version:$context ++ // Version: 0 ++ // Arch: $arch ++ ss << name << ":" << stream << ":" << version << ":" << context; + solvable_set_str(solvable, SOLVABLE_NAME, ss.str().c_str()); +- solvable_set_str(solvable, SOLVABLE_EVR, version.c_str()); ++ solvable_set_str(solvable, SOLVABLE_EVR, "0"); + // TODO Test can be remove when modules will be always with arch + solvable_set_str(solvable, SOLVABLE_ARCH, arch ? arch : "noarch"); +- + // create Provide: module($name) + ss.str(std::string()); + ss << "module(" << name << ")"; +@@ -73,6 +67,12 @@ namespace libdnf { + ss << "module(" << name << ":" << stream << ")"; + depId = pool_str2id(pool, ss.str().c_str(), 1); + solvable_add_deparray(solvable, SOLVABLE_PROVIDES, depId, -1); ++ ++ // create Provide: module($name:$stream:$version) ++ ss.str(std::string()); ++ ss << "module(" << name << ":" << stream << ":" << version << ")"; ++ depId = pool_str2id(pool, ss.str().c_str(), 1); ++ solvable_add_deparray(solvable, SOLVABLE_PROVIDES, depId, -1); + } + + +-- +2.31.1 + diff --git a/SOURCES/0016-Fix-failing-unittest-caused-by-the-revert-of-new-mod.patch b/SOURCES/0016-Fix-failing-unittest-caused-by-the-revert-of-new-mod.patch new file mode 100644 index 0000000..6ea0adf --- /dev/null +++ b/SOURCES/0016-Fix-failing-unittest-caused-by-the-revert-of-new-mod.patch @@ -0,0 +1,34 @@ +From faaa64a51445b6edffe6f1e65c465dea63f11bf7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Tue, 27 Apr 2021 10:24:53 +0200 +Subject: [PATCH 16/19] Fix failing unittest, caused by the revert of new + modular implementation + +The problem is not caused by advisory filtering which we are testing +here, the `query` is already created with just one package. +--- + tests/libdnf/sack/QueryTest.cpp | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/tests/libdnf/sack/QueryTest.cpp b/tests/libdnf/sack/QueryTest.cpp +index ee9eeaf4..7c3a22af 100644 +--- a/tests/libdnf/sack/QueryTest.cpp ++++ b/tests/libdnf/sack/QueryTest.cpp +@@ -139,13 +139,10 @@ void QueryTest::testQueryFilterAdvisory() + dnf_sack_filter_modules_v2(sack, modules, nullptr, tmpdir, nullptr, true, false, false); + query = new libdnf::Query(sack); + query->addFilter(HY_PKG_ADVISORY_TYPE, HY_EQ, "enhancement"); +- CPPUNIT_ASSERT(query->size() == 2); ++ CPPUNIT_ASSERT(query->size() == 1); + libdnf::PackageSet pset2 = *(query->getResultPset()); + pkg = dnf_package_new(sack, pset2[0]); + CPPUNIT_ASSERT(!g_strcmp0(dnf_package_get_name(pkg), "test-perl-DBI")); + g_object_unref(pkg); +- pkg = dnf_package_new(sack, pset2[1]); +- CPPUNIT_ASSERT(!g_strcmp0(dnf_package_get_name(pkg), "test-perl-DBI")); +- g_object_unref(pkg); + delete query; + } +-- +2.31.1 + diff --git a/SOURCES/0017-Modify-unit-test-after-change-of-handling-advisories.patch b/SOURCES/0017-Modify-unit-test-after-change-of-handling-advisories.patch new file mode 100644 index 0000000..e4e2f5b --- /dev/null +++ b/SOURCES/0017-Modify-unit-test-after-change-of-handling-advisories.patch @@ -0,0 +1,274 @@ +From a61b0105aafeea8487902463f789e6ed00021eb3 Mon Sep 17 00:00:00 2001 +From: Jaroslav Mracek +Date: Wed, 5 May 2021 15:55:43 +0200 +Subject: [PATCH 17/19] Modify unit test after change of handling advisories + +The patch modifies also yaml with multicollection situation by adding +module requires. +--- + data/tests/advisories/modules.yaml | 6 +++++ + .../tests/advisories/repodata/modules.yaml.gz | Bin 300 -> 332 bytes + data/tests/advisories/repodata/primary.xml.gz | Bin 743 -> 743 bytes + data/tests/advisories/repodata/repomd.xml | 24 +++++++++--------- + tests/libdnf/sack/AdvisoryTest.cpp | 22 ++++++---------- + tests/libdnf/sack/QueryTest.cpp | 24 ++++++++---------- + 6 files changed, 37 insertions(+), 39 deletions(-) + +diff --git a/data/tests/advisories/modules.yaml b/data/tests/advisories/modules.yaml +index 6db5053a..b5f23f7d 100644 +--- a/data/tests/advisories/modules.yaml ++++ b/data/tests/advisories/modules.yaml +@@ -32,6 +32,9 @@ data: + license: + module: + - MIT ++ dependencies: ++ - requires: ++ perl: ["5.23"] + profiles: + default: + rpms: ["test-perl-DBI"] +@@ -52,6 +55,9 @@ data: + license: + module: + - MIT ++ dependencies: ++ - requires: ++ perl: ["5.25"] + profiles: + default: + rpms: ["test-perl-DBI"] +diff --git a/data/tests/advisories/repodata/modules.yaml.gz b/data/tests/advisories/repodata/modules.yaml.gz +index 7158e6c515720c87373762d722e9c438ac7fd8d3..ed39532dfcdec084a661d51d86e07bd3e4246f69 100644 +GIT binary patch +literal 332 +zcmV-S0ki%eiwFP!000001I>{=Ps1<}hWGr6Q`gE7ag#Rnz<^jfATh8ZR2}w3Sc;us +zJE;77+&V2`Kt&yZ?cV$H`F$8;nd;nM^yJzo +zd~k$Dz^uyoVipspfg%do*+9Fv4>2lq@(K?>pbTUAvvJbK +zu0;G>$%;HZyrs6DS4GX|H7^S!#q;q?d7fwN0vp-w&1Pz)K_AF{F_TZte-Oh*%LY6kAnoBX$&YcfB`K@n8=wZ +zd~k$T!lo|xb`y=ag)#~?4uMWF4>2lq>L}qPnnP2)uFlq?dzNsYqBMEs`YD{ZuUT~9 +z(lWiG!IM0D>9$lexZ6L(YI0-O8}iB3)ZuJG5&&+p{!%jtJRu<{u0~wLmrQo^XRf(i|v3#j0ij4gLBfGuXuTfg`f!qg}d<~O7egSg{{0!*Q +y{uQW8_P4;s(FnI>d`-5gMVs$LyTi`ae@<5YXR>WoC$fRIYqBpd!@UUm0{{Tgm5(X_ + +diff --git a/data/tests/advisories/repodata/primary.xml.gz b/data/tests/advisories/repodata/primary.xml.gz +index da9ffaf08328659c47be8721a9c478ff64ba0a4d..96cbaa2a5a2361b1e5cd59ddb7de937339982c5f 100644 +GIT binary patch +literal 743 +zcmV~O9B%0I`ND2@%1#&3RBI%*0fTBhg +zVQr-(BktFi)Dqj>k`zsgpnzeM!#6X0Z#V;o=XYg+wxC*BR}prWHbzj1I+fKr!XIzm +zE_{3*pM)iJJmnon8eX*#&bzKTv#df^{oOL{H?V}Xw`PawgWJfhE3Q$FaSF&H&m +zZ1@^JihbYTbG8`urbz& +zAcCeAd4x4dZP9cwQc&n@%d$@U0&b!3PhIAFr-APUJW~u?gTKf@Y}&q@uF~e5FjwDq +zvzBRuKV4qqc$Eb!8hEKs2%}j*IQ0ebAY}{^!F=%3#H9{l`Y>@gB?&m5V>{r|AoIZ2 +zx1Ey=8TD_;)o$Ra)1ddG7NIpC7*GnWP_pSXwfN*Fmo3sCj%Hbqah^pDts}Jdo(@zT +zTK7w1?^U5q=G*K#Spv#rp=moVv3)HJ)zp(-7Mi-ld=@yAIAl_)m0w^^8DZDL#=f4SUEIsm& +ZqioMV;M}JUxcmQi@mJ$x7+z@#006pgY0dxu + +literal 743 +zcmVek{?a7SKDFTPz(qXk^D&NBSj*?`CVC{EvPoHs}Pf=jS*C`PV#CU;*U3P +z7al&3PJ$9Tk%&$p4X@e|XI$0pXJfhE3Q$FaSF&H&M +zZp0dNe2R6_NkrYQfe;%+bb?S&i4vj?+HTQ+Di&`pt^#Y&8KY1#i|#z<)?tA)2u3>* +zM9|bS3$Z4tHJUC)3JRTVS=LEkz%3Nsslz?@)c0Ipq>5u}@Ru3LP1~2#RoYBY?&$k& +z)_D@*PnXv?TBZJq`EKG-%311D!8}P_NH~XBau2*Db{L^t8)G6Eje)qtCg3nXb-~lO +zos$e1^=~QEZs4iYp!Z`f0&6xHPy($~dDCfX(aBAgw@7~kn#+QW^IX)xIznsj$)KXZ +zx<49yuL`X)-$v^45>T2Knl^C=^<0m+ntI&lg{Drp$9=*mp;M*W{0qz}L+scd!zi!X +zP80JialftRZ^QW90+^sTGf3MUGLfsN_1Imb5&O*RGoDpS{Qvs$lhfrPFA;F +zWSAA^Gy?aAJ-DrVB|)E}C-82SG^EF<`w07}8HfbbLWxQbkS@RKLd>|$%y=iJG0Yw- +zHsKppZ*%=ZM%AR$EY%K~+4`m_7^Q_+>p8vrfPZ(W9?tSgcX#2i*MBD4SgT{6Lw*IH +z`&>PS`mZj+m-BO;Qys<)todQy58J<6a4zFxbvjr*e!&Uh5hqUVSOTQnr7=q=lO*+p +z4>7SNb+`^p#EPffcUCdj5`2%Qv6H$!WzLIUaJIAhYYXnMJ^#~!JL3J~7Totk^_&at +ZN7 + +- 1612879414 ++ 1620890113 + +- b69e4467719314fdb155872cf9c8e895d5b169c0506c5180c512d693c48f0f4b +- 8606d1f777859f167f7bd0bf8a1d532abedcb4db143b719e631e1040800fd1f0 ++ f2f306a22a157730d2f13f09fc36c425b9bedfc0ecaf74d8b60d98222ebb3274 ++ ef20a9175429f9f223c4bdcd634fc218bdd85799095438d349efea159cfd2bdf + +- 1612879414 ++ 1620890113 + 743 + 2665 + +@@ -13,7 +13,7 @@ + efbf7f021163a3c7698a257351e327102c60bb39a7bdceee77c421f064205e99 + ca5620e2734574d04d3c01ae5a72f865313369954698d71776076b9cbd831bbd + +- 1612879414 ++ 1620890113 + 311 + 511 + +@@ -21,23 +21,23 @@ + 6673953e1f28f55b9d4c3f38a9e3c0e0ff88ad06fb693b7f15eb241a81b80d71 + 0997c242bf1b96372d7a625a73de23dced68cae9375baff0c73215a07693b3f4 + +- 1612879414 ++ 1620890113 + 310 + 507 + + +- a815d0669b15b97dd6260713405c79045eeda10aedb6460a0f742b86cc236cca +- 0d1063b74e3a7cb4c7cdc3b2080b1901c347693140765534f8c5c3d8b964778a ++ df1abc1ab7dacc6ea2bc16c2b14abeb32d0ec9d9ed01378488cec22540f9607b ++ f088c4096bfc4acad99a20e06d0d4381872c10f0f27ff8bbfe1bada658ff7afd + +- 1612879414 +- 300 +- 1019 ++ 1620890113 ++ 332 ++ 1117 + + + 9d791d16c2adc2d7d4c85b45f2a704edac62a926b09fc20df73207f4190acd49 + 3cf7df860860ac7a4a8e64a1a2d71c1ec43225dacbfe09a0cff80f28be3825da + +- 1612879414 ++ 1620890113 + 708 + 2414 + +diff --git a/tests/libdnf/sack/AdvisoryTest.cpp b/tests/libdnf/sack/AdvisoryTest.cpp +index 805c35da..1abf1a95 100644 +--- a/tests/libdnf/sack/AdvisoryTest.cpp ++++ b/tests/libdnf/sack/AdvisoryTest.cpp +@@ -97,11 +97,9 @@ void AdvisoryTest::testGetApplicablePackagesModulesNotSetup() + + // When modules are not setup all advisory collections are applicable and we get all packages + advisory->getApplicablePackages(pkgsvector); +- CPPUNIT_ASSERT(pkgsvector.size() == 4); ++ CPPUNIT_ASSERT_EQUAL(2, static_cast(pkgsvector.size())); + CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[0].getNameString(), "test-perl-DBI")); +- CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[1].getNameString(), "test-perl-DBI-new-collection-override")); +- CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[2].getNameString(), "test-perl-DBI")); +- CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[3].getNameString(), "not-present")); ++ CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[1].getNameString(), "not-present")); + } + + void AdvisoryTest::testGetApplicablePackagesModulesSetupNoneEnabled() +@@ -122,16 +120,14 @@ void AdvisoryTest::testGetApplicablePackagesOneApplicableCollection() + { + std::vector pkgsvector; + +- // When I keep enabled only perl-DBI module I get packages from all collections that contain that module ++ // When I keep enabled only perl module I get packages from all collections that contain that module + libdnf::ModulePackageContainer * modules = dnf_sack_get_module_container(sack); +- modules->reset("perl"); ++ modules->reset("perl-DBI"); + dnf_sack_filter_modules_v2(sack, modules, nullptr, tmpdir, nullptr, true, false, false); + + advisory->getApplicablePackages(pkgsvector); +- CPPUNIT_ASSERT(pkgsvector.size() == 3); +- CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[0].getNameString(), "test-perl-DBI")); +- CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[1].getNameString(), "test-perl-DBI-new-collection-override")); +- CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[2].getNameString(), "test-perl-DBI")); ++ CPPUNIT_ASSERT(pkgsvector.size() == 1); ++ CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[0].getNameString(), "not-present")); + } + + void AdvisoryTest::testGetApplicablePackagesMultipleApplicableCollections() +@@ -141,11 +137,9 @@ void AdvisoryTest::testGetApplicablePackagesMultipleApplicableCollections() + // When I enable modules from multiple collections -> I get packages from all applicable collections + // Enabled - "perl-DBI:master", "perl:5.23" + advisory->getApplicablePackages(pkgsvector); +- CPPUNIT_ASSERT(pkgsvector.size() == 4); ++ CPPUNIT_ASSERT(pkgsvector.size() == 2); + CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[0].getNameString(), "test-perl-DBI")); +- CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[1].getNameString(), "test-perl-DBI-new-collection-override")); +- CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[2].getNameString(), "test-perl-DBI")); +- CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[3].getNameString(), "not-present")); ++ CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[1].getNameString(), "not-present")); + } + + void AdvisoryTest::testGetModules() +diff --git a/tests/libdnf/sack/QueryTest.cpp b/tests/libdnf/sack/QueryTest.cpp +index 7c3a22af..d4cc28c2 100644 +--- a/tests/libdnf/sack/QueryTest.cpp ++++ b/tests/libdnf/sack/QueryTest.cpp +@@ -59,12 +59,13 @@ void QueryTest::testQueryGetAdvisoryPkgs() + HyQuery query = new libdnf::Query(sack); + std::vector advisoryPkgs; + +- // When modules are not setup all advisory collections are applicable ++ // Apply advisory only from active context - receave advisory package only from releted collection + query->getAdvisoryPkgs(HY_EQ, advisoryPkgs); +- CPPUNIT_ASSERT(advisoryPkgs.size() == 2); +- // We get test-perl-DBI twice because its in two collections +- CPPUNIT_ASSERT(!g_strcmp0(advisoryPkgs[0].getNameString(), "test-perl-DBI")); +- CPPUNIT_ASSERT(!g_strcmp0(advisoryPkgs[1].getNameString(), "test-perl-DBI")); ++ CPPUNIT_ASSERT(advisoryPkgs.size() == 1); ++ ++ CPPUNIT_ASSERT_EQUAL(std::string("test-perl-DBI"), std::string(advisoryPkgs[0].getNameString())); ++ CPPUNIT_ASSERT_EQUAL(std::string("1-2.module_el8+6587+9879afr5"), std::string(advisoryPkgs[0].getEVRString())); ++ //CPPUNIT_ASSERT(!g_strcmp0(advisoryPkgs[1].getNameString(), "test-perl-DBI")); + + // When modules are setup but none are enabled all collections are not applicable - no enabled module + libdnf::ModulePackageContainer * modules = dnf_sack_get_module_container(sack); +@@ -84,15 +85,15 @@ void QueryTest::testQueryGetAdvisoryPkgs() + query->getAdvisoryPkgs(HY_EQ, advisoryPkgs); + CPPUNIT_ASSERT(advisoryPkgs.size() == 0); + +- // When I enable a module from multiple collections that contain a present package I get them ++ // When I enable a module with multiple collections I will receave advisory packages only for active context + CPPUNIT_ASSERT(modules->enable("perl-DBI", "master", false)); + dnf_sack_filter_modules_v2(sack, modules, nullptr, tmpdir, nullptr, true, false, false); + + advisoryPkgs.clear(); + query->getAdvisoryPkgs(HY_EQ, advisoryPkgs); +- CPPUNIT_ASSERT(advisoryPkgs.size() == 2); +- CPPUNIT_ASSERT(!g_strcmp0(advisoryPkgs[0].getNameString(), "test-perl-DBI")); +- CPPUNIT_ASSERT(!g_strcmp0(advisoryPkgs[1].getNameString(), "test-perl-DBI")); ++ CPPUNIT_ASSERT(advisoryPkgs.size() == 1); ++ CPPUNIT_ASSERT_EQUAL(std::string("test-perl-DBI"), std::string(advisoryPkgs[0].getNameString())); ++ CPPUNIT_ASSERT_EQUAL(std::string("1-2.module_el8+6587+9879afr5"), std::string(advisoryPkgs[0].getEVRString())); + + delete query; + } +@@ -102,16 +103,13 @@ void QueryTest::testQueryFilterAdvisory() + // When modules are not setup all advisory collections are applicable and there is no modular filtering + HyQuery query = new libdnf::Query(sack); + query->addFilter(HY_PKG_ADVISORY_TYPE, HY_EQ, "enhancement"); +- CPPUNIT_ASSERT(query->size() == 2); ++ CPPUNIT_ASSERT(query->size() == 1); + + // We get test-perl-DBI twice because its in two collections + libdnf::PackageSet pset = *(query->getResultPset()); + DnfPackage *pkg = dnf_package_new(sack, pset[0]); + CPPUNIT_ASSERT(!g_strcmp0(dnf_package_get_name(pkg), "test-perl-DBI")); + g_object_unref(pkg); +- pkg = dnf_package_new(sack, pset[1]); +- CPPUNIT_ASSERT(!g_strcmp0(dnf_package_get_name(pkg), "test-perl-DBI")); +- g_object_unref(pkg); + delete query; + + // When module are setup but none are enabled all collections are not applicable - no enabled module +-- +2.31.1 + diff --git a/SOURCES/0018-Adjust-module-error-formatting-function-for-original.patch b/SOURCES/0018-Adjust-module-error-formatting-function-for-original.patch new file mode 100644 index 0000000..17ad066 --- /dev/null +++ b/SOURCES/0018-Adjust-module-error-formatting-function-for-original.patch @@ -0,0 +1,34 @@ +From c7f0b13bf32cfba63a2db6257c50ae1ba5c8f9ba Mon Sep 17 00:00:00 2001 +From: Jaroslav Mracek +Date: Thu, 6 May 2021 11:18:20 +0200 +Subject: [PATCH 18/19] Adjust module error formatting function for original + modular solver + +The new solver uses libsolv solvable by another way. The revert requires +also change in formatting function. +--- + libdnf/goal/Goal.cpp | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/libdnf/goal/Goal.cpp b/libdnf/goal/Goal.cpp +index a6f11a4f..6b2f91a2 100644 +--- a/libdnf/goal/Goal.cpp ++++ b/libdnf/goal/Goal.cpp +@@ -58,12 +58,8 @@ std::string moduleSolvid2str(Pool * pool, Id source) + { + std::ostringstream ss; + auto * solvable = pool_id2solvable(pool, source); +- // Add name:stream +- ss << solvable_lookup_str(solvable, SOLVABLE_DESCRIPTION); +- //Add version +- ss << ":" << pool_id2str(pool, solvable->evr); +- // Add original context +- ss << ":" << solvable_lookup_str(solvable, SOLVABLE_SUMMARY); ++ // Add name:stream:version:context ++ ss << pool_id2str(pool, solvable->name); + ss << "." << pool_id2str(pool, solvable->arch); + return ss.str(); + } +-- +2.31.1 + diff --git a/SOURCES/0019-Remove-redundant-test.patch b/SOURCES/0019-Remove-redundant-test.patch new file mode 100644 index 0000000..0b2441c --- /dev/null +++ b/SOURCES/0019-Remove-redundant-test.patch @@ -0,0 +1,57 @@ +From eb7217d0a71b92ac0d8c3773caa1a2d3a2c20071 Mon Sep 17 00:00:00 2001 +From: Jaroslav Mracek +Date: Thu, 13 May 2021 09:10:42 +0200 +Subject: [PATCH 19/19] Remove redundant test + +The test is identical to +testGetApplicablePackagesMultipleApplicableCollections(). +--- + tests/libdnf/sack/AdvisoryTest.cpp | 11 ----------- + tests/libdnf/sack/AdvisoryTest.hpp | 2 -- + 2 files changed, 13 deletions(-) + +diff --git a/tests/libdnf/sack/AdvisoryTest.cpp b/tests/libdnf/sack/AdvisoryTest.cpp +index 1abf1a95..f5892634 100644 +--- a/tests/libdnf/sack/AdvisoryTest.cpp ++++ b/tests/libdnf/sack/AdvisoryTest.cpp +@@ -91,17 +91,6 @@ void AdvisoryTest::testGetPackages() + CPPUNIT_ASSERT(pkgsvector.size() == 4); + } + +-void AdvisoryTest::testGetApplicablePackagesModulesNotSetup() +-{ +- std::vector pkgsvector; +- +- // When modules are not setup all advisory collections are applicable and we get all packages +- advisory->getApplicablePackages(pkgsvector); +- CPPUNIT_ASSERT_EQUAL(2, static_cast(pkgsvector.size())); +- CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[0].getNameString(), "test-perl-DBI")); +- CPPUNIT_ASSERT(!g_strcmp0(pkgsvector[1].getNameString(), "not-present")); +-} +- + void AdvisoryTest::testGetApplicablePackagesModulesSetupNoneEnabled() + { + std::vector pkgsvector; +diff --git a/tests/libdnf/sack/AdvisoryTest.hpp b/tests/libdnf/sack/AdvisoryTest.hpp +index 6eb25a57..cb0d8c05 100644 +--- a/tests/libdnf/sack/AdvisoryTest.hpp ++++ b/tests/libdnf/sack/AdvisoryTest.hpp +@@ -19,7 +19,6 @@ class AdvisoryTest : public CppUnit::TestCase + CPPUNIT_TEST(testGetSeverity); + CPPUNIT_TEST(testGetTitle); + CPPUNIT_TEST(testGetPackages); +- CPPUNIT_TEST(testGetApplicablePackagesModulesNotSetup); + CPPUNIT_TEST(testGetApplicablePackagesModulesSetupNoneEnabled); + CPPUNIT_TEST(testGetApplicablePackagesOneApplicableCollection); + CPPUNIT_TEST(testGetApplicablePackagesMultipleApplicableCollections); +@@ -38,7 +37,6 @@ public: + void testGetSeverity(); + void testGetTitle(); + void testGetPackages(); +- void testGetApplicablePackagesModulesNotSetup(); + void testGetApplicablePackagesModulesSetupNoneEnabled(); + void testGetApplicablePackagesOneApplicableCollection(); + void testGetApplicablePackagesMultipleApplicableCollections(); +-- +2.31.1 + diff --git a/SOURCES/0020-Fix-dnf_context_module_install-memory-leaks.patch b/SOURCES/0020-Fix-dnf_context_module_install-memory-leaks.patch new file mode 100644 index 0000000..ea8bcf0 --- /dev/null +++ b/SOURCES/0020-Fix-dnf_context_module_install-memory-leaks.patch @@ -0,0 +1,28 @@ +From 4a8a3f410552c58dfafb384bb361c6e40bebff1d Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Wed, 21 Jul 2021 11:01:32 +0200 +Subject: [PATCH] Fix: dnf_context_module_install: memory leaks + +--- + libdnf/dnf-context.cpp | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/libdnf/dnf-context.cpp b/libdnf/dnf-context.cpp +index 55af2b2..6cb0011 100644 +--- a/libdnf/dnf-context.cpp ++++ b/libdnf/dnf-context.cpp +@@ -3486,7 +3486,10 @@ dnf_context_module_install(DnfContext * context, const char ** module_specs, GEr + } + for (const auto &nevra : modpkg->getArtifacts()) { + int epoch; +- char *name, *version, *release, *arch; ++ g_autofree char *name = nullptr; ++ g_autofree char *version = nullptr; ++ g_autofree char *release = nullptr; ++ g_autofree char *arch = nullptr; + if (hy_split_nevra(nevra.c_str(), &name, &epoch, &version, &release, &arch)) { + // this really should never happen; unless the modular repodata is corrupted + g_autofree char *errmsg = g_strdup_printf (_("Failed to parse module artifact NEVRA '%s'"), nevra.c_str()); +-- +libgit2 1.0.1 + diff --git a/SOURCES/0021-covscan-remove-unused-vars-mark-private-func-static-return-values.patch b/SOURCES/0021-covscan-remove-unused-vars-mark-private-func-static-return-values.patch new file mode 100644 index 0000000..6dca417 --- /dev/null +++ b/SOURCES/0021-covscan-remove-unused-vars-mark-private-func-static-return-values.patch @@ -0,0 +1,91 @@ +From 07416268889f95e1495fb3d7b856de1c502870ba Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Wed, 21 Jul 2021 11:15:50 +0200 +Subject: [PATCH] covscan: remove unused vars, mark private func static, return values + +The `begin` and `end` variables were not used +in `ModulePackageContainer::updateFailSafeData`. Removed. + +The `checksum` in "utils.cpp" is a private (static) function. + +Added check of return value of `dnf_copy_recursive` function in unit test. + +In the `install` in the "goal-py.cpp" file: +Explicitly ignores the return values of `hy_goal_install` and +`hy_goal_install_optional`. The functions always return zero. +Explicitly ignores the return values of `hy_goal_install_selector` and +`hy_goal_install_selector_optional`. The `error` argument is used instead. +--- + libdnf/module/ModulePackageContainer.cpp | 2 -- + libdnf/utils/utils.cpp | 2 +- + python/hawkey/goal-py.cpp | 8 ++++---- + tests/libdnf/module/ModulePackageContainerTest.cpp | 3 ++- + 4 files changed, 7 insertions(+), 8 deletions(-) + +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index c0ad126..efab497 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -1656,8 +1656,6 @@ void ModulePackageContainer::updateFailSafeData() + if (pImpl->activatedModules) { + std::vector latest = pImpl->getLatestActiveEnabledModules(); + +- auto begin = fileNames.begin(); +- auto end = fileNames.end(); + if (g_mkdir_with_parents(pImpl->persistDir.c_str(), 0755) == -1) { + const char * errTxt = strerror(errno); + auto logger(Log::getLogger()); +diff --git a/libdnf/utils/utils.cpp b/libdnf/utils/utils.cpp +index 450718d..15f5275 100644 +--- a/libdnf/utils/utils.cpp ++++ b/libdnf/utils/utils.cpp +@@ -301,7 +301,7 @@ void decompress(const char * inPath, const char * outPath, mode_t outMode, const + fclose(inFile); + } + +-void checksum(const char * type, const char * inPath, const char * checksum_valid, bool * valid_out, gchar ** calculated_out) ++static void checksum(const char * type, const char * inPath, const char * checksum_valid, bool * valid_out, gchar ** calculated_out) + { + GError * errP{nullptr}; + gboolean valid; +diff --git a/python/hawkey/goal-py.cpp b/python/hawkey/goal-py.cpp +index 2641a1d..5bbb959 100644 +--- a/python/hawkey/goal-py.cpp ++++ b/python/hawkey/goal-py.cpp +@@ -281,15 +281,15 @@ install(_GoalObject *self, PyObject *args, PyObject *kwds) try + + if (flags & HY_WEAK_SOLV) { + if (pkg) { +- hy_goal_install_optional(self->goal, pkg); ++ (void)hy_goal_install_optional(self->goal, pkg); + } else { +- hy_goal_install_selector_optional(self->goal, sltr, &error); ++ (void)hy_goal_install_selector_optional(self->goal, sltr, &error); + } + } else { + if (pkg) { +- hy_goal_install(self->goal, pkg); ++ (void)hy_goal_install(self->goal, pkg); + } else { +- hy_goal_install_selector(self->goal, sltr, &error); ++ (void)hy_goal_install_selector(self->goal, sltr, &error); + } + } + return op_error2exc(error); +diff --git a/tests/libdnf/module/ModulePackageContainerTest.cpp b/tests/libdnf/module/ModulePackageContainerTest.cpp +index b2cf170..6360a0c 100644 +--- a/tests/libdnf/module/ModulePackageContainerTest.cpp ++++ b/tests/libdnf/module/ModulePackageContainerTest.cpp +@@ -17,7 +17,8 @@ void ModulePackageContainerTest::setUp() + char *retptr = mkdtemp(tmpdir); + CPPUNIT_ASSERT(retptr); + char * etc_target = g_strjoin(NULL, tmpdir, "/etc", NULL); +- dnf_copy_recursive(TESTDATADIR "/modules/etc", etc_target, &error); ++ auto ret = dnf_copy_recursive(TESTDATADIR "/modules/etc", etc_target, &error); ++ g_assert_true(ret); + g_assert_no_error(error); + g_free(etc_target); + +-- +libgit2 1.0.1 + diff --git a/SOURCES/0022-hawkey-surrogateescape-error-handler-to-decode-UTF-8-strings-RhBug1893176.patch b/SOURCES/0022-hawkey-surrogateescape-error-handler-to-decode-UTF-8-strings-RhBug1893176.patch new file mode 100644 index 0000000..8918c27 --- /dev/null +++ b/SOURCES/0022-hawkey-surrogateescape-error-handler-to-decode-UTF-8-strings-RhBug1893176.patch @@ -0,0 +1,32 @@ +From 263eee36afc0ae5c8f342f4b61038e91ee942b21 Mon Sep 17 00:00:00 2001 +From: Marek Blaha +Date: Thu, 22 Apr 2021 15:19:26 +0200 +Subject: [PATCH] hawkey: surrogateescape error handler to decode UTF-8 strings (RhBug:1893176) + +This ensures that libdnf does not raise UnicodeDecodeError when +accessing package with non UTF-8 file names. + += changelog = +msg: DNF does not fail on non UTF-8 file names in a package +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1893176 +--- + python/hawkey/iutil-py.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/python/hawkey/iutil-py.cpp b/python/hawkey/iutil-py.cpp +index 56ccafd..57bef57 100644 +--- a/python/hawkey/iutil-py.cpp ++++ b/python/hawkey/iutil-py.cpp +@@ -285,7 +285,7 @@ strlist_to_pylist(const char **slist) + return NULL; + + for (const char **iter = slist; *iter; ++iter) { +- UniquePtrPyObject str(PyUnicode_FromString(*iter)); ++ UniquePtrPyObject str(PyUnicode_DecodeUTF8(*iter, strlen(*iter), "surrogateescape")); + if (!str) + return NULL; + int rc = PyList_Append(list.get(), str.get()); +-- +libgit2 1.0.1 + diff --git a/SOURCES/0023-Update-translations.patch b/SOURCES/0023-Update-translations.patch new file mode 100644 index 0000000..a58b2a1 --- /dev/null +++ b/SOURCES/0023-Update-translations.patch @@ -0,0 +1,4555 @@ +From 1975f89251625ed4d17d95285b22cd8e729f1dc5 Mon Sep 17 00:00:00 2001 +From: Marek Blaha +Date: Fri, 10 Sep 2021 14:28:06 +0200 +Subject: [PATCH] Update translations + +--- + po/fr.po | 478 ++++++++++++++++++++++++----------- + po/ja.po | 478 ++++++++++++++++++++++++----------- + po/ko.po | 716 ++++++++++++++++++++++++++++++++-------------------- + po/zh_CN.po | 631 ++++++++++++++++++++++++++++----------------- + 4 files changed, 1498 insertions(+), 805 deletions(-) + +diff --git a/po/fr.po b/po/fr.po +index 055cdaff..c0b930d2 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -5,20 +5,21 @@ + # Ludek Janda , 2018. #zanata + # Jean-Baptiste Holcroft , 2019. #zanata + # Julien Humbert , 2020. ++# Sundeep Anand , 2021. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2020-06-29 02:40+0000\n" +-"Last-Translator: Julien Humbert \n" +-"Language-Team: French \n" ++"POT-Creation-Date: 2021-08-11 14:28+0200\n" ++"PO-Revision-Date: 2021-09-06 17:27+0000\n" ++"Last-Translator: Sundeep Anand \n" ++"Language-Team: French \n" + "Language: fr\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: Weblate 4.1.1\n" ++"X-Generator: Weblate 4.8\n" + + #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40 + msgid "no value specified" +@@ -39,17 +40,30 @@ msgstr "n’a pu convertir « %s » en octets" + msgid "unknown unit '%s'" + msgstr "unité « %s » inconnue" + +-#: libdnf/conf/ConfigMain.cpp:332 ++#: libdnf/conf/ConfigMain.cpp:204 libdnf/conf/OptionEnum.cpp:83 ++#: libdnf/conf/OptionNumber.cpp:88 ++msgid "invalid value" ++msgstr "valeur non valide" ++ ++#: libdnf/conf/ConfigMain.cpp:207 ++msgid "value 1 is not allowed" ++msgstr "la valeur 1 n’est pas autorisée" ++ ++#: libdnf/conf/ConfigMain.cpp:209 ++msgid "negative value is not allowed" ++msgstr "la valeur négative n'est pas autorisée" ++ ++#: libdnf/conf/ConfigMain.cpp:341 + #, c-format + msgid "percentage '%s' is out of range" + msgstr "le pourcentage « %s » est en dehors des limites" + +-#: libdnf/conf/OptionBinds.cpp:76 ++#: libdnf/conf/OptionBinds.cpp:85 + #, c-format + msgid "Configuration: OptionBinding with id \"%s\" does not exist" + msgstr "Configuration : OptionBinding ayant pour id « %s » n’existe pas" + +-#: libdnf/conf/OptionBinds.cpp:88 ++#: libdnf/conf/OptionBinds.cpp:97 + #, c-format + msgid "Configuration: OptionBinding with id \"%s\" already exists" + msgstr "Configuration : OptionBinding ayant pour « %s » n’existe pas" +@@ -60,15 +74,11 @@ msgid "invalid boolean value '%s'" + msgstr "valeur booléenne invalide : « %s »" + + #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 +-#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 ++#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 + #, c-format + msgid "'%s' is not an allowed value" + msgstr "la valeur « %s » n’est pas autorisée" + +-#: libdnf/conf/OptionEnum.cpp:83 libdnf/conf/OptionNumber.cpp:88 +-msgid "invalid value" +-msgstr "valeur non valide" +- + #: libdnf/conf/OptionNumber.cpp:73 + #, c-format + msgid "given value [%d] should be less than allowed value [%d]." +@@ -94,27 +104,140 @@ msgstr "le chemin fourni « %s » n’existe pas." + msgid "could not convert '%s' to seconds" + msgstr "n’a pu convertir « %s » en secondes" + +-#: libdnf/conf/OptionString.cpp:74 ++#: libdnf/conf/OptionString.cpp:79 + msgid "GetValue(): Value not set" + msgstr "GetValue() : valeur non définie" + +-#: libdnf/dnf-goal.cpp:68 ++#: libdnf/dnf-context.cpp:3170 libdnf/dnf-context.cpp:3179 ++#, c-format ++msgid "Cannot enable more streams from module '%s' at the same time" ++msgstr "Ne peut pas activer plus de flux du module '%s' en même temps" ++ ++#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3206 ++#, c-format ++msgid "" ++"Cannot enable module '%1$s' stream '%2$s': State of module already modified" ++msgstr "" ++"Impossible d'activer le flux de module '%1$s' stream '%2$s' : état du module" ++" déjà modifié" ++ ++#: libdnf/dnf-context.cpp:3253 ++#, c-format ++msgid "Modular dependency problem with Defaults: %s" ++msgstr "Problème de dépendance modulaire avec les valeurs par défaut : %s" ++ ++#: libdnf/dnf-context.cpp:3256 ++#, c-format ++msgid "Modular dependency problem: %s" ++msgstr "Problème de dépendance modulaire : %s" ++ ++#: libdnf/dnf-context.cpp:3290 libdnf/dnf-context.cpp:3314 ++#: libdnf/dnf-context.cpp:3325 libdnf/dnf-context.cpp:3364 ++#: libdnf/dnf-context.cpp:3380 libdnf/dnf-context.cpp:3412 ++#: libdnf/dnf-context.cpp:3456 libdnf/dnf-context.cpp:3466 ++#, c-format ++msgid "Unable to resolve argument '%s'" ++msgstr "Impossible de résoudre le paramètre ’%s’" ++ ++#: libdnf/dnf-context.cpp:3297 ++#, c-format ++msgid "" ++"Only module name is required. Ignoring unneeded information in argument: " ++"'%s'" ++msgstr "" ++"Seul le nom du module est nécessaire. Les paramètres inutiles ont été " ++"ignorés : ’%s’" ++ ++#: libdnf/dnf-context.cpp:3311 ++#, c-format ++msgid "Cannot reset module '%s': State of module already modified" ++msgstr "" ++"Impossible de réinitialiser le module '%s' : État du module déjà modifié" ++ ++#: libdnf/dnf-context.cpp:3322 ++#, c-format ++msgid "Cannot disable module '%s': State of module already modified" ++msgstr "Impossible de désactiver le module '%s' : État du module déjà modifié" ++ ++#: libdnf/dnf-context.cpp:3353 libdnf/dnf-context.cpp:3445 ++#: libdnf/dnf-context.cpp:3558 ++msgid "No modular data available" ++msgstr "Aucune donnée modulaire disponible" ++ ++#: libdnf/dnf-context.cpp:3370 ++#, c-format ++msgid "Ignoring unneeded information in argument: '%s'" ++msgstr "Ignorer les informations inutiles dans l'argumentation : '%s'" ++ ++#: libdnf/dnf-context.cpp:3408 ++#, c-format ++msgid "" ++"Problem during enablement of dependency tree for module '%1$s' stream " ++"'%2$s': %3$s" ++msgstr "" ++"Problème lors de l'activation de l'arbre des dépendances pour le module " ++"'%1$s' flux '%2$s' : %3$s" ++ ++#: libdnf/dnf-context.cpp:3420 ++msgid "Problems appeared for module enable request" ++msgstr "Des problèmes sont apparus pour la demande d'activation du module" ++ ++#. this really should never happen; unless the modular repodata is corrupted ++#: libdnf/dnf-context.cpp:3495 ++#, c-format ++msgid "Failed to parse module artifact NEVRA '%s'" ++msgstr "Échec de l'analyse de l'artefact de module '%s'" ++ ++#: libdnf/dnf-context.cpp:3529 ++msgid "Problems appeared for module install request" ++msgstr "Des problèmes sont apparus pour la demande d'installation du module" ++ ++#: libdnf/dnf-context.cpp:3589 ++msgid "Problems appeared for module reset request" ++msgstr "" ++"Des problèmes sont apparus pour la demande de réinitialisation des modules" ++ ++#: libdnf/dnf-context.cpp:3591 ++msgid "Problems appeared for module disable request" ++msgstr "Des problèmes sont apparus pour la demande de désactivation du module" ++ ++#: libdnf/dnf-context.cpp:3627 ++#, c-format ++msgid "" ++"The operation would result in switching of module '%s' stream '%s' to stream" ++" '%s'" ++msgstr "" ++"Le résultat de l’opération sera le basculement du flux « %s » du module « %s" ++" » vers le flux « %s »" ++ ++#: libdnf/dnf-context.cpp:3631 ++msgid "" ++"It is not possible to switch enabled streams of a module.\n" ++"It is recommended to remove all installed content from the module, and reset the module using 'microdnf module reset ' command. After you reset the module, you can install the other stream." ++msgstr "" ++"Il n’est pas possible de basculer les flux actifs d’un module. Il est " ++"recommandé de retirer tout contenu installé par le module, et de " ++"réinitialiser le mode en utilisant la commande 'microdnf module reset " ++"’. Après la réinitialisation du module, vous pouvez installer " ++"les autres flux." ++ ++#: libdnf/dnf-goal.cpp:85 + msgid "Could not depsolve transaction; " + msgstr "Impossible de depsolve la transaction ; " + +-#: libdnf/dnf-goal.cpp:70 ++#: libdnf/dnf-goal.cpp:87 + #, c-format + msgid "%i problem detected:\n" + msgid_plural "%i problems detected:\n" + msgstr[0] "%i problème détecté :\n" + msgstr[1] "%i problèmes détectés :\n" + +-#: libdnf/dnf-goal.cpp:78 ++#: libdnf/dnf-goal.cpp:95 + #, c-format + msgid " Problem %1$i: %2$s\n" + msgstr " Problème %1$i : %2$s\n" + +-#: libdnf/dnf-goal.cpp:80 ++#: libdnf/dnf-goal.cpp:97 + #, c-format + msgid " Problem: %s\n" + msgstr " Problème : %s\n" +@@ -181,84 +304,84 @@ msgstr "n’a pas pu trouver le package %s" + msgid "could not add erase element %1$s(%2$i)" + msgstr "n’a pas pu ajouter d’élément pour effacer %1$s(%2$i)" + +-#: libdnf/dnf-sack.cpp:381 ++#: libdnf/dnf-sack.cpp:395 ++msgid "failed to add solv" ++msgstr "n’a pu ajouter solv" ++ ++#: libdnf/dnf-sack.cpp:414 + #, c-format + msgid "no %1$s string for %2$s" + msgstr "aucune chaine %1$s pour %2$s" + +-#: libdnf/dnf-sack.cpp:404 +-msgid "failed to add solv" +-msgstr "n’a pu ajouter solv" +- +-#: libdnf/dnf-sack.cpp:422 ++#: libdnf/dnf-sack.cpp:424 + #, c-format + msgid "failed to open: %s" + msgstr "n’a pas pu ouvrir : %s" + +-#: libdnf/dnf-sack.cpp:501 ++#: libdnf/dnf-sack.cpp:503 + #, c-format + msgid "cannot create temporary file: %s" + msgstr "n’a pas pu créer le fichier temporaire : %s" + +-#: libdnf/dnf-sack.cpp:511 ++#: libdnf/dnf-sack.cpp:513 + #, c-format + msgid "failed opening tmp file: %s" + msgstr "n’a pas pu ouvrir le fichier tmp : %s" + +-#: libdnf/dnf-sack.cpp:523 ++#: libdnf/dnf-sack.cpp:525 + #, c-format + msgid "write_main() failed writing data: %i" + msgstr "write_main() n’a pu écrire les données : %i" + +-#: libdnf/dnf-sack.cpp:540 ++#: libdnf/dnf-sack.cpp:542 + msgid "write_main() failed to re-load written solv file" + msgstr "write_main() n’a pas pu charger à nouveau le fichier solv" + +-#: libdnf/dnf-sack.cpp:605 ++#: libdnf/dnf-sack.cpp:607 + #, c-format + msgid "can not create temporary file %s" + msgstr "n’a pas pu créer le fichier temporaire %s" + +-#: libdnf/dnf-sack.cpp:623 ++#: libdnf/dnf-sack.cpp:625 + #, c-format + msgid "write_ext(%1$d) has failed: %2$d" + msgstr "write_ext(%1$d) a échoué : %2$d" + +-#: libdnf/dnf-sack.cpp:678 ++#: libdnf/dnf-sack.cpp:680 + msgid "null repo md file" + msgstr "null repo md file" + +-#: libdnf/dnf-sack.cpp:687 ++#: libdnf/dnf-sack.cpp:689 + #, c-format + msgid "can not read file %1$s: %2$s" + msgstr "n’a pu lire le fichier %1$s : %2$s" + +-#: libdnf/dnf-sack.cpp:701 ++#: libdnf/dnf-sack.cpp:703 + msgid "repo_add_solv() has failed." + msgstr "repo_add_solv() a échoué." + +-#: libdnf/dnf-sack.cpp:714 ++#: libdnf/dnf-sack.cpp:716 + msgid "loading of MD_TYPE_PRIMARY has failed." + msgstr "échec du chargement du MD_TYPE_PRIMARY." + +-#: libdnf/dnf-sack.cpp:727 ++#: libdnf/dnf-sack.cpp:729 + msgid "repo_add_repomdxml/rpmmd() has failed." + msgstr "repo_add_repomdxml/rpmmd() a échoué." + +-#: libdnf/dnf-sack.cpp:794 ++#: libdnf/dnf-sack.cpp:796 + msgid "failed to auto-detect architecture" + msgstr "n’a pu auto-détecter l’architecture" + +-#: libdnf/dnf-sack.cpp:919 ++#: libdnf/dnf-sack.cpp:961 + #, c-format + msgid "failed creating cachedir %s" + msgstr "n’a pu créer le cachedir %s" + +-#: libdnf/dnf-sack.cpp:1696 ++#: libdnf/dnf-sack.cpp:1738 + msgid "failed loading RPMDB" + msgstr "n’a pu télécharger RPMDB" + +-#: libdnf/dnf-sack.cpp:2403 ++#: libdnf/dnf-sack.cpp:2463 + #, c-format + msgid "No module defaults found: %s" + msgstr "Aucun module par défaut n’a été trouvé : %s" +@@ -334,28 +457,28 @@ msgstr "" + "Pas suffisamment d’espace libre dans %1$s : a besoin de %2$s, disponible " + "%3$s" + +-#: libdnf/dnf-transaction.cpp:1196 ++#: libdnf/dnf-transaction.cpp:1195 + msgid "failed to set root" + msgstr "n’a pu réussi à définir root" + +-#: libdnf/dnf-transaction.cpp:1418 ++#: libdnf/dnf-transaction.cpp:1416 + #, c-format + msgid "Error %i running transaction test" + msgstr "Erreur %i lors du test transactionnel" + +-#: libdnf/dnf-transaction.cpp:1458 ++#: libdnf/dnf-transaction.cpp:1456 + #, c-format + msgid "Error %i running transaction" + msgstr "Erreur %i pendant la transaction" + +-#: libdnf/dnf-transaction.cpp:1473 ++#: libdnf/dnf-transaction.cpp:1472 + #, c-format + msgid "Transaction did not go to writing phase, but returned no error(%i)" + msgstr "" + "La transaction n’a pas pu opérer en phase d’écriture, mais a renvoyé « no " + "error(%i) »" + +-#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:399 ++#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:403 + #, c-format + msgid "cannot open directory %1$s: %2$s" + msgstr "impossible d’ouvrir le dossier %1$s : %2$s" +@@ -365,283 +488,292 @@ msgstr "impossible d’ouvrir le dossier %1$s : %2$s" + msgid "failed to remove %s" + msgstr "n’a pas pu supprimer %s" + +-#: libdnf/goal/Goal.cpp:55 ++#: libdnf/goal/Goal.cpp:74 + msgid "Ill-formed Selector, presence of multiple match objects in the filter" + msgstr "" + "Sélecteur Ill-formed, présence de plusieurs objets correspondants dans le " + "filtre" + +-#: libdnf/goal/Goal.cpp:56 ++#: libdnf/goal/Goal.cpp:75 + msgid "Ill-formed Selector used for the operation, incorrect comparison type" + msgstr "" + "Sélecteur Ill-formed utilisé pour l’opération, type de comparaison " + "incorrecte" + +-#: libdnf/goal/Goal.cpp:67 libdnf/goal/Goal.cpp:94 ++#: libdnf/goal/Goal.cpp:86 libdnf/goal/Goal.cpp:113 + msgid " does not belong to a distupgrade repository" + msgstr " n’appartient pas à un dépôt distupgrade" + +-#: libdnf/goal/Goal.cpp:68 libdnf/goal/Goal.cpp:95 ++#: libdnf/goal/Goal.cpp:87 libdnf/goal/Goal.cpp:114 + msgid " has inferior architecture" + msgstr " a une architecture inférieure" + +-#: libdnf/goal/Goal.cpp:69 ++#: libdnf/goal/Goal.cpp:88 + msgid "problem with installed package " + msgstr "problème avec le paquet installé " + +-#: libdnf/goal/Goal.cpp:70 libdnf/goal/Goal.cpp:97 ++#: libdnf/goal/Goal.cpp:89 libdnf/goal/Goal.cpp:116 + msgid "conflicting requests" + msgstr "requêtes conflictuelles" + +-#: libdnf/goal/Goal.cpp:71 libdnf/goal/Goal.cpp:98 ++#: libdnf/goal/Goal.cpp:90 libdnf/goal/Goal.cpp:117 + msgid "unsupported request" + msgstr "requête non prise en charge" + +-#: libdnf/goal/Goal.cpp:72 libdnf/goal/Goal.cpp:99 ++#: libdnf/goal/Goal.cpp:91 libdnf/goal/Goal.cpp:118 + msgid "nothing provides requested " + msgstr "rien ne fourni ce qui a été demandé " + +-#: libdnf/goal/Goal.cpp:73 ++#: libdnf/goal/Goal.cpp:92 + #, c-format + msgid "package %s does not exist" + msgstr "le paquet %s n’existe pas" + +-#: libdnf/goal/Goal.cpp:74 libdnf/goal/Goal.cpp:101 ++#: libdnf/goal/Goal.cpp:93 libdnf/goal/Goal.cpp:120 + msgid " is provided by the system" + msgstr " est fourni par le système" + +-#: libdnf/goal/Goal.cpp:75 libdnf/goal/Goal.cpp:102 ++#: libdnf/goal/Goal.cpp:94 libdnf/goal/Goal.cpp:121 + msgid "some dependency problem" + msgstr "quelques problèmes de dépendances" + +-#: libdnf/goal/Goal.cpp:76 ++#: libdnf/goal/Goal.cpp:95 + msgid "cannot install the best update candidate for package " + msgstr "installation impossible du meilleur candidat pour le paquet " + +-#: libdnf/goal/Goal.cpp:77 libdnf/goal/Goal.cpp:104 ++#: libdnf/goal/Goal.cpp:96 libdnf/goal/Goal.cpp:123 + msgid "cannot install the best candidate for the job" + msgstr "installation impossible du meilleur candidat pour la tâche" + +-#: libdnf/goal/Goal.cpp:78 ++#: libdnf/goal/Goal.cpp:97 + #, c-format + msgid "package %s is filtered out by modular filtering" + msgstr "le paquet %s a été filtré par filtrage modulaire" + +-#: libdnf/goal/Goal.cpp:79 ++#: libdnf/goal/Goal.cpp:98 + #, c-format + msgid "package %s does not have a compatible architecture" + msgstr "le paquet %s n’a pas d’architecture compatible" + +-#: libdnf/goal/Goal.cpp:80 ++#: libdnf/goal/Goal.cpp:99 + #, c-format + msgid "package %s is not installable" + msgstr "le paquet %s n’est pas installable" + +-#: libdnf/goal/Goal.cpp:81 ++#: libdnf/goal/Goal.cpp:100 + #, c-format + msgid "package %s is filtered out by exclude filtering" + msgstr "le paquet %s a été filtré en excluant le filtrage" + +-#: libdnf/goal/Goal.cpp:82 ++#: libdnf/goal/Goal.cpp:101 + #, c-format + msgid "nothing provides %s needed by %s" + msgstr "rien de fournit %s rendu nécessaire par %s" + +-#: libdnf/goal/Goal.cpp:83 ++#: libdnf/goal/Goal.cpp:102 + #, c-format + msgid "cannot install both %s and %s" + msgstr "installation impossible à la fois de %s et %s" + +-#: libdnf/goal/Goal.cpp:84 ++#: libdnf/goal/Goal.cpp:103 + #, c-format + msgid "package %s conflicts with %s provided by %s" + msgstr "le paquet %s est en conflit avec %s fourni par %s" + +-#: libdnf/goal/Goal.cpp:85 ++#: libdnf/goal/Goal.cpp:104 + #, c-format + msgid "package %s obsoletes %s provided by %s" + msgstr "le paquet %s rend obsolète %s fourni par %s" + +-#: libdnf/goal/Goal.cpp:86 ++#: libdnf/goal/Goal.cpp:105 + #, c-format + msgid "installed package %s obsoletes %s provided by %s" + msgstr "le paquet installé %s rend obsolète %s fourni par %s" + +-#: libdnf/goal/Goal.cpp:87 ++#: libdnf/goal/Goal.cpp:106 + #, c-format + msgid "package %s implicitly obsoletes %s provided by %s" + msgstr "le paquet %s rend implicitement obsolète %s fourni par %s" + +-#: libdnf/goal/Goal.cpp:88 ++#: libdnf/goal/Goal.cpp:107 + #, c-format + msgid "package %s requires %s, but none of the providers can be installed" + msgstr "" + "le paquet %s nécessite %s, mais aucun fournisseur ne peut être installé" + +-#: libdnf/goal/Goal.cpp:89 ++#: libdnf/goal/Goal.cpp:108 + #, c-format + msgid "package %s conflicts with %s provided by itself" + msgstr "le paquet %s est en conflit avec %s fourni par lui-même" + +-#: libdnf/goal/Goal.cpp:90 ++#: libdnf/goal/Goal.cpp:109 + #, c-format + msgid "both package %s and %s obsolete %s" + msgstr "à la fois le paquet %s et %s rendent obsolète %s" + +-#: libdnf/goal/Goal.cpp:96 ++#: libdnf/goal/Goal.cpp:115 + msgid "problem with installed module " + msgstr "problème avec le module installé " + +-#: libdnf/goal/Goal.cpp:100 ++#: libdnf/goal/Goal.cpp:119 + #, c-format + msgid "module %s does not exist" + msgstr "le module %s n’existe pas" + +-#: libdnf/goal/Goal.cpp:103 ++#: libdnf/goal/Goal.cpp:122 + msgid "cannot install the best update candidate for module " + msgstr "" + "installation impossible du meilleur candidat de mise à jour pour le module " + +-#: libdnf/goal/Goal.cpp:105 libdnf/goal/Goal.cpp:108 ++#: libdnf/goal/Goal.cpp:124 libdnf/goal/Goal.cpp:127 + #, c-format + msgid "module %s is disabled" + msgstr "le module %s est désactivé" + +-#: libdnf/goal/Goal.cpp:106 ++#: libdnf/goal/Goal.cpp:125 + #, c-format + msgid "module %s does not have a compatible architecture" + msgstr "le module %s n’a pas d’architecture compatible" + +-#: libdnf/goal/Goal.cpp:107 ++#: libdnf/goal/Goal.cpp:126 + #, c-format + msgid "module %s is not installable" + msgstr "le module %s n’est pas installable" + +-#: libdnf/goal/Goal.cpp:109 ++#: libdnf/goal/Goal.cpp:128 + #, c-format + msgid "nothing provides %s needed by module %s" + msgstr "rien de fournit %s rendu nécessaire par le module %s" + +-#: libdnf/goal/Goal.cpp:110 ++#: libdnf/goal/Goal.cpp:129 + #, c-format + msgid "cannot install both modules %s and %s" + msgstr "installation impossible à la fois des modules %s et %s" + +-#: libdnf/goal/Goal.cpp:111 ++#: libdnf/goal/Goal.cpp:130 + #, c-format + msgid "module %s conflicts with %s provided by %s" + msgstr "le module %s est en conflit avec %s fourni par %s" + +-#: libdnf/goal/Goal.cpp:112 ++#: libdnf/goal/Goal.cpp:131 + #, c-format + msgid "module %s obsoletes %s provided by %s" + msgstr "le module %s rend obsolète %s fourni par %s" + +-#: libdnf/goal/Goal.cpp:113 ++#: libdnf/goal/Goal.cpp:132 + #, c-format + msgid "installed module %s obsoletes %s provided by %s" + msgstr "le module installé %s rend obsolète %s fourni par %s" + +-#: libdnf/goal/Goal.cpp:114 ++#: libdnf/goal/Goal.cpp:133 + #, c-format + msgid "module %s implicitly obsoletes %s provided by %s" + msgstr "le module %s rend implicitement obsolète %s fourni par %s" + +-#: libdnf/goal/Goal.cpp:115 ++#: libdnf/goal/Goal.cpp:134 + #, c-format + msgid "module %s requires %s, but none of the providers can be installed" + msgstr "" + "le module %s nécessite %s, mais aucun fournisseur ne peut être installé" + +-#: libdnf/goal/Goal.cpp:116 ++#: libdnf/goal/Goal.cpp:135 + #, c-format + msgid "module %s conflicts with %s provided by itself" + msgstr "le module %s est en conflit avec %s fourni par lui-même" + +-#: libdnf/goal/Goal.cpp:117 ++#: libdnf/goal/Goal.cpp:136 + #, c-format + msgid "both module %s and %s obsolete %s" + msgstr "à la fois le module %s et %s rendent obsolète %s" + +-#: libdnf/goal/Goal.cpp:1038 ++#: libdnf/goal/Goal.cpp:1051 + msgid "no solver set" + msgstr "aucun solveur défini" + +-#: libdnf/goal/Goal.cpp:1043 ++#: libdnf/goal/Goal.cpp:1056 + #, c-format + msgid "failed to make %s absolute" + msgstr "n’a pas pu rendre %s absolu" + +-#: libdnf/goal/Goal.cpp:1050 ++#: libdnf/goal/Goal.cpp:1063 + #, c-format + msgid "failed writing debugdata to %1$s: %2$s" + msgstr "échec de l’écriture des debugdata dans %1$s : %2$s" + +-#: libdnf/goal/Goal.cpp:1062 ++#: libdnf/goal/Goal.cpp:1075 + msgid "no solv in the goal" + msgstr "pas de solv dans l’objectif" + +-#: libdnf/goal/Goal.cpp:1064 ++#: libdnf/goal/Goal.cpp:1077 + msgid "no solution, cannot remove protected package" + msgstr "aucune solution, n’a pas pu supprimer le package protégé" + +-#: libdnf/goal/Goal.cpp:1067 ++#: libdnf/goal/Goal.cpp:1080 + msgid "no solution possible" + msgstr "aucune solution n’est possible" + +-#: libdnf/goal/Goal.cpp:1479 ++#: libdnf/goal/Goal.cpp:1206 ++msgid "Problem: " ++msgstr "Problème : " ++ ++#: libdnf/goal/Goal.cpp:1211 ++#, c-format ++msgid "Problem %d: " ++msgstr "Probléme %d : " ++ ++#: libdnf/goal/Goal.cpp:1538 + msgid "" + "The operation would result in removing the following protected packages: " + msgstr "" + "L’opération résulterait en la suppression des packages protégés suivants : " + +-#: libdnf/hy-iutil.cpp:322 ++#: libdnf/hy-iutil.cpp:326 + #, c-format + msgid "Failed renaming %1$s to %2$s: %3$s" + msgstr "N’a pas pu renommer %1$s en %2$s : %3$s" + +-#: libdnf/hy-iutil.cpp:330 ++#: libdnf/hy-iutil.cpp:334 + #, c-format + msgid "Failed setting perms on %1$s: %2$s" + msgstr "N’a pas pu définir les permissions sur %1$s : %2$s" + +-#: libdnf/hy-iutil.cpp:376 ++#: libdnf/hy-iutil.cpp:380 + #, c-format + msgid "cannot create directory %1$s: %2$s" + msgstr "impossible de créer le dossier %1$s : %2$s" + +-#: libdnf/hy-iutil.cpp:411 ++#: libdnf/hy-iutil.cpp:415 + #, c-format + msgid "cannot stat path %1$s: %2$s" + msgstr "impossible de stat le chemin %1$s : %2$s" + +-#: libdnf/module/ModulePackage.cpp:499 ++#: libdnf/module/ModulePackage.cpp:560 + #, c-format + msgid "Invalid format of Platform module: %s" + msgstr "Format invalide du module de plateforme : %s" + +-#: libdnf/module/ModulePackage.cpp:514 ++#: libdnf/module/ModulePackage.cpp:575 + msgid "Multiple module platforms provided by available packages\n" + msgstr "" + "De multiples modules de plateformes sont fournis par les paquets " + "disponibles\n" + +-#: libdnf/module/ModulePackage.cpp:527 ++#: libdnf/module/ModulePackage.cpp:588 + msgid "Multiple module platforms provided by installed packages\n" + msgstr "" + "De multiples modules de plateformes sont fournis par les paquets installés\n" + +-#: libdnf/module/ModulePackage.cpp:554 ++#: libdnf/module/ModulePackage.cpp:615 + #, c-format + msgid "Detection of Platform Module in %s failed: %s" + msgstr "La détection des modules de plateformes dans %s a échoué : %s" + +-#: libdnf/module/ModulePackage.cpp:563 ++#: libdnf/module/ModulePackage.cpp:624 + #, c-format + msgid "Missing PLATFORM_ID in %s" + msgstr "L'identifiant de la platforme est manquant dans %s" + +-#: libdnf/module/ModulePackage.cpp:568 ++#: libdnf/module/ModulePackage.cpp:629 + msgid "No valid Platform ID detected" + msgstr "Aucun identifiant de plateforme n'a été détecté" + +@@ -650,42 +782,75 @@ msgstr "Aucun identifiant de plateforme n'a été détecté" + msgid "Cannot enable multiple streams for module '%s'" + msgstr "Impossible d’activer les flux pour le module « %s »" + +-#: libdnf/module/ModulePackageContainer.cpp:294 ++#: libdnf/module/ModulePackageContainer.cpp:295 + #, c-format + msgid "Conflicting defaults with repo '%s': %s" + msgstr "Valeurs par défaut en conflit avec le dépôt « %s » : %s" + +-#: libdnf/module/ModulePackageContainer.cpp:1569 ++#: libdnf/module/ModulePackageContainer.cpp:841 ++msgid "Installing module profiles:\n" ++msgstr "Installation des profils de module :\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:856 ++msgid "Disabling module profiles:\n" ++msgstr "Désactivation des profils de module :\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:871 ++msgid "Enabling module streams:\n" ++msgstr "Activation des flux de modules :\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:885 ++msgid "Switching module streams:\n" ++msgstr "Basculement des flux de modules :\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:903 ++msgid "Disabling modules:\n" ++msgstr "Désactivation des modules :\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:914 ++msgid "Resetting modules:\n" ++msgstr "Réinitialisation des modules :\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:1599 + #, c-format + msgid "Unable to load modular Fail-Safe data at '%s'" + msgstr "Impossible de charger les données de sécurité à « %s »" + +-#: libdnf/module/ModulePackageContainer.cpp:1575 ++#: libdnf/module/ModulePackageContainer.cpp:1605 + #, c-format + msgid "Unable to load modular Fail-Safe data for module '%s:%s'" + msgstr "" + "Impossible de charger les données de sécurité modulaires pour le module " + "« %s : %s »" + +-#: libdnf/module/ModulePackageContainer.cpp:1639 ++#: libdnf/module/ModulePackageContainer.cpp:1663 + #, c-format + msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" + msgstr "" + "Impossible de créer le dossier « %s » pour les données de sécurité " + "modulaires : %s" + +-#: libdnf/module/ModulePackageContainer.cpp:1661 ++#: libdnf/module/ModulePackageContainer.cpp:1679 + #, c-format + msgid "Unable to save a modular Fail Safe data to '%s'" + msgstr "" + "Impossible d’enregistrer les données de sécurité modulaires vers « %s »" + +-#: libdnf/module/ModulePackageContainer.cpp:1686 ++#: libdnf/module/ModulePackageContainer.cpp:1702 + #, c-format + msgid "Unable to remove a modular Fail Safe data in '%s'" + msgstr "" + "Impossible de supprimer les données de sécurité modulaires dans « %s »" + ++#: libdnf/module/ModulePackageContainer.cpp:1734 ++#, c-format ++msgid "" ++"Unable to apply modular obsoletes to '%s:%s' because target module '%s' is " ++"disabled" ++msgstr "" ++"Impossible d'appliquer les obsolètes modulaires à '%s:%s' car le module " ++"cible '%s' est désactivé" ++ + #: libdnf/module/modulemd/ModuleMetadata.cpp:86 + #, c-format + msgid "Failed to update from string: %s" +@@ -712,6 +877,13 @@ msgstr "Échec de la mise à jour des paramètres par défaut : %s" + msgid "Failed to upgrade streams: %s" + msgstr "Échec de la mise à jour des flux : %s" + ++#: libdnf/module/modulemd/ModuleMetadata.cpp:212 ++#, c-format ++msgid "Cannot retrieve module obsoletes because no stream matching %s: %s" ++msgstr "" ++"Impossible de récupérer les modules obsolètes car aucune correspondance de " ++"flux %s: %s" ++ + #: libdnf/plugin/plugin.cpp:46 + #, c-format + msgid "Can't load shared library \"%s\": %s" +@@ -769,12 +941,13 @@ msgid "Repository '%s' has unsupported type: 'type=%s', skipping." + msgstr "" + "Le dépôt « %s » n’a pas de type pris en charge : « type=%s », passer outre." + +-#: libdnf/repo/Repo.cpp:546 ++#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:610 libdnf/repo/Repo.cpp:641 ++#: libdnf/repo/Repo.cpp:1382 + #, c-format +-msgid "Cannot find a valid baseurl for repo: %s" +-msgstr "Impossible de trouver une adresse de base pour le dépôt : %s" ++msgid "repo '%s': 'basecachedir' is not set" ++msgstr "repo '%s' : 'basecachedir' n'est pas fixé" + +-#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 ++#: libdnf/repo/Repo.cpp:512 + msgid "" + "Maximum download speed is lower than minimum. Please change configuration of" + " minrate or throttle" +@@ -782,139 +955,155 @@ msgstr "" + "La vitesse de téléchargement maximale est plus basse que le minimum. " + "Veuillez modifier les paramètres minrate ou throttle" + +-#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 ++#: libdnf/repo/Repo.cpp:546 ++#, c-format ++msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" ++msgstr "repo '%s' : 'proxy_username' est défini mais pas 'proxy_password'." ++ ++#: libdnf/repo/Repo.cpp:548 ++msgid "'proxy_username' is set but not 'proxy_password'" ++msgstr "" ++"Le nom d'utilisateur \"proxy_username\" est défini mais pas le mot de passe " ++"\"proxy_password\"" ++ ++#: libdnf/repo/Repo.cpp:629 ++#, c-format ++msgid "Cannot find a valid baseurl for repo: %s" ++msgstr "Impossible de trouver une adresse de base pour le dépôt : %s" ++ ++#: libdnf/repo/Repo.cpp:660 libdnf/repo/Repo.cpp:682 + #, c-format + msgid "%s: gpgme_data_new_from_fd(): %s" + msgstr "%s : gpgme_data_new_from_fd() : %s" + +-#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 ++#: libdnf/repo/Repo.cpp:668 libdnf/repo/Repo.cpp:690 + #, c-format + msgid "%s: gpgme_op_import(): %s" + msgstr "%s : gpgme_op_import() : %s" + +-#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 ++#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:779 libdnf/repo/Repo.cpp:907 + #, c-format + msgid "%s: gpgme_ctx_set_engine_info(): %s" + msgstr "%s : gpgme_ctx_set_engine_info() : %s" + +-#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 ++#: libdnf/repo/Repo.cpp:740 libdnf/repo/Repo.cpp:804 + #, c-format + msgid "can not list keys: %s" + msgstr "n’a pas pu lister les clés : %s" + +-#: libdnf/repo/Repo.cpp:806 ++#: libdnf/repo/Repo.cpp:833 + #, c-format + msgid "Failed to retrieve GPG key for repo '%s': %s" + msgstr "Impossible de récupérer la clé GPG pour le dépôt « %s » : %s" + +-#: libdnf/repo/Repo.cpp:859 ++#: libdnf/repo/Repo.cpp:886 + #, c-format + msgid "repo %s: 0x%s already imported" + msgstr "dépôt %s : 0x%s déjà importé" + +-#: libdnf/repo/Repo.cpp:887 ++#: libdnf/repo/Repo.cpp:914 + #, c-format + msgid "repo %s: imported key 0x%s." + msgstr "dépôt %s : clé importée 0x%s." + +-#: libdnf/repo/Repo.cpp:1131 ++#: libdnf/repo/Repo.cpp:1162 + #, c-format + msgid "reviving: repo '%s' skipped, no metalink." + msgstr "relance : dépôt « %s » ignoré, pas de méta-lien." + +-#: libdnf/repo/Repo.cpp:1150 ++#: libdnf/repo/Repo.cpp:1181 + #, c-format + msgid "reviving: repo '%s' skipped, no usable hash." + msgstr "relance : dépôt « %s » ignoré, pas de hachage utilisable." + +-#: libdnf/repo/Repo.cpp:1173 ++#: libdnf/repo/Repo.cpp:1204 + #, c-format + msgid "reviving: failed for '%s', mismatched %s sum." + msgstr "relance : échec pour « %s », la somme de %s ne correspond pas." + +-#: libdnf/repo/Repo.cpp:1179 ++#: libdnf/repo/Repo.cpp:1210 + #, c-format + msgid "reviving: '%s' can be revived - metalink checksums match." + msgstr "" + "relance : « %s » peut être relancé - la somme de contrôle du méta-lien " + "correspond." + +-#: libdnf/repo/Repo.cpp:1204 ++#: libdnf/repo/Repo.cpp:1235 + #, c-format + msgid "reviving: '%s' can be revived - repomd matches." + msgstr "relance : « %s » peut être relancé - le repomd correspond." + +-#: libdnf/repo/Repo.cpp:1206 ++#: libdnf/repo/Repo.cpp:1237 + #, c-format + msgid "reviving: failed for '%s', mismatched repomd." + msgstr "relance : échec pour « %s », le repomd ne correspond pas." + +-#: libdnf/repo/Repo.cpp:1224 ++#: libdnf/repo/Repo.cpp:1255 + #, c-format + msgid "Cannot create repo destination directory \"%s\": %s" + msgstr "Impossible de créer le répertoire de destination du dépôt « %s » : %s" + +-#: libdnf/repo/Repo.cpp:1230 ++#: libdnf/repo/Repo.cpp:1261 + #, c-format + msgid "Cannot create repo temporary directory \"%s\": %s" + msgstr "Impossible de créer le répertoire temporaire du dépôt « %s » : %s" + +-#: libdnf/repo/Repo.cpp:1244 ++#: libdnf/repo/Repo.cpp:1275 + #, c-format + msgid "Cannot create directory \"%s\": %s" + msgstr "Impossible de créer le répertoire « %s » : %s" + +-#: libdnf/repo/Repo.cpp:1267 ++#: libdnf/repo/Repo.cpp:1298 + #, c-format + msgid "Cannot rename directory \"%s\" to \"%s\": %s" + msgstr "Impossible de renommer le répertoire « %s » en « %s » : %s" + +-#: libdnf/repo/Repo.cpp:1290 ++#: libdnf/repo/Repo.cpp:1321 + #, c-format + msgid "repo: using cache for: %s" + msgstr "dépôt : utilisation du cache pour : %s" + +-#: libdnf/repo/Repo.cpp:1302 ++#: libdnf/repo/Repo.cpp:1333 + #, c-format + msgid "Cache-only enabled but no cache for '%s'" + msgstr "« cache uniquement » activé, mais pas de cache pour « %s »" + +-#: libdnf/repo/Repo.cpp:1306 ++#: libdnf/repo/Repo.cpp:1337 + #, c-format + msgid "repo: downloading from remote: %s" + msgstr "dépôt : téléchargement à distance en provenance de : %s" + +-#: libdnf/repo/Repo.cpp:1312 ++#: libdnf/repo/Repo.cpp:1344 + #, c-format + msgid "Failed to download metadata for repo '%s': %s" + msgstr "Échec du téléchargement des métadonnées pour le dépôt « %s » : %s" + +-#: libdnf/repo/Repo.cpp:1338 ++#: libdnf/repo/Repo.cpp:1370 + msgid "getCachedir(): Computation of SHA256 failed" + msgstr "getCachedir() : échec du calcul de SHA256" + +-#: libdnf/repo/Repo.cpp:1363 ++#: libdnf/repo/Repo.cpp:1398 + #, c-format + msgid "Cannot create persistdir \"%s\": %s" + msgstr "Impossible de créer le dossier persistant « %s » : %s" + +-#: libdnf/repo/Repo.cpp:1763 ++#: libdnf/repo/Repo.cpp:1775 + msgid "resume cannot be used simultaneously with the byterangestart param" + msgstr "" + "« resume » (reprise) ne peut pas être utilisé avec le paramètre " + "byterangestart" + +-#: libdnf/repo/Repo.cpp:1780 ++#: libdnf/repo/Repo.cpp:1792 + #, c-format + msgid "PackageTarget initialization failed: %s" + msgstr "L’initialisation de Package Target a échoué : %s" + +-#: libdnf/repo/Repo.cpp:1886 ++#: libdnf/repo/Repo.cpp:1898 + #, c-format + msgid "Cannot open %s: %s" + msgstr "impossible d’ouvrir %s : %s" + +-#: libdnf/repo/Repo.cpp:1930 ++#: libdnf/repo/Repo.cpp:1942 + #, c-format + msgid "Log handler with id %ld doesn't exist" + msgstr "Log handler ayant pour id %ld n’existe pas" +@@ -923,13 +1112,13 @@ msgstr "Log handler ayant pour id %ld n’existe pas" + msgid "In progress" + msgstr "En cours" + +-#: libdnf/transaction/Swdb.cpp:188 libdnf/transaction/Swdb.cpp:216 +-#: libdnf/transaction/Swdb.cpp:228 libdnf/transaction/Swdb.cpp:245 +-#: libdnf/transaction/Swdb.cpp:384 libdnf/transaction/Swdb.cpp:394 ++#: libdnf/transaction/Swdb.cpp:187 libdnf/transaction/Swdb.cpp:215 ++#: libdnf/transaction/Swdb.cpp:227 libdnf/transaction/Swdb.cpp:244 ++#: libdnf/transaction/Swdb.cpp:383 libdnf/transaction/Swdb.cpp:393 + msgid "Not in progress" + msgstr "Pas en cours" + +-#: libdnf/transaction/Swdb.cpp:255 ++#: libdnf/transaction/Swdb.cpp:254 + msgid "No transaction in progress" + msgstr "Aucune transaction n’est en cours" + +@@ -975,6 +1164,3 @@ msgstr "" + + #~ msgid "Bad id for repo: %s, byte = %s %d" + #~ msgstr "ID erroné pour le dépôt : %s, byte = %s %d" +- +-#~ msgid "failed calculating RPMDB checksum" +-#~ msgstr "n’a pu calculer la somme de contrôle RPMDB" +diff --git a/po/ja.po b/po/ja.po +index b9064ee6..1f09f2c6 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -1,20 +1,21 @@ + # Casey Jones , 2018. #zanata +-# Ludek Janda , 2018. #zanata ++# Ludek Janda , 2018. #zanata, 2021. + # Casey Jones , 2020. ++# Sundeep Anand , 2021. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2020-05-05 09:40+0000\n" +-"Last-Translator: Casey Jones \n" +-"Language-Team: Japanese \n" ++"POT-Creation-Date: 2021-08-11 14:28+0200\n" ++"PO-Revision-Date: 2021-09-06 17:27+0000\n" ++"Last-Translator: Ludek Janda \n" ++"Language-Team: Japanese \n" + "Language: ja\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Weblate 4.0.3\n" ++"X-Generator: Weblate 4.8\n" + + #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40 + msgid "no value specified" +@@ -35,17 +36,30 @@ msgstr "'%s' を バイトへ変換できませんでした" + msgid "unknown unit '%s'" + msgstr "不明な単位 '%s'" + +-#: libdnf/conf/ConfigMain.cpp:332 ++#: libdnf/conf/ConfigMain.cpp:204 libdnf/conf/OptionEnum.cpp:83 ++#: libdnf/conf/OptionNumber.cpp:88 ++msgid "invalid value" ++msgstr "無効な値" ++ ++#: libdnf/conf/ConfigMain.cpp:207 ++msgid "value 1 is not allowed" ++msgstr "値 1 は許可されません" ++ ++#: libdnf/conf/ConfigMain.cpp:209 ++msgid "negative value is not allowed" ++msgstr "負の値は許可されていません" ++ ++#: libdnf/conf/ConfigMain.cpp:341 + #, c-format + msgid "percentage '%s' is out of range" + msgstr "パーセンテージ '%s' が範囲外にあります" + +-#: libdnf/conf/OptionBinds.cpp:76 ++#: libdnf/conf/OptionBinds.cpp:85 + #, c-format + msgid "Configuration: OptionBinding with id \"%s\" does not exist" + msgstr "設定: id \"%s\" を伴う OptionBinding は存在しません" + +-#: libdnf/conf/OptionBinds.cpp:88 ++#: libdnf/conf/OptionBinds.cpp:97 + #, c-format + msgid "Configuration: OptionBinding with id \"%s\" already exists" + msgstr "設定: id \"%s\" を伴う OptionBinding はすでに存在します" +@@ -56,24 +70,20 @@ msgid "invalid boolean value '%s'" + msgstr "無効な boolean 値 '%s'" + + #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 +-#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 ++#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 + #, c-format + msgid "'%s' is not an allowed value" + msgstr "'%s' 値は許可されていない値です" + +-#: libdnf/conf/OptionEnum.cpp:83 libdnf/conf/OptionNumber.cpp:88 +-msgid "invalid value" +-msgstr "無効な値" +- + #: libdnf/conf/OptionNumber.cpp:73 + #, c-format + msgid "given value [%d] should be less than allowed value [%d]." +-msgstr "指定された値 [%d] は許可された値 [%d]より小さくしてください" ++msgstr "指定された値 [%d] は許可された値 [%d]より小さくしてください。" + + #: libdnf/conf/OptionNumber.cpp:76 + #, c-format + msgid "given value [%d] should be greater than allowed value [%d]." +-msgstr "指定された値 [%d] は許可された値 [%d]より大きくしてください" ++msgstr "指定された値 [%d] は許可された値 [%d]より大きくしてください。" + + #: libdnf/conf/OptionPath.cpp:78 + #, c-format +@@ -90,26 +100,126 @@ msgstr "指定されたパス '%s' が存在しません。" + msgid "could not convert '%s' to seconds" + msgstr "'%s' を 秒に変換できません" + +-#: libdnf/conf/OptionString.cpp:74 ++#: libdnf/conf/OptionString.cpp:79 + msgid "GetValue(): Value not set" + msgstr "GetValue(): 値は設定されていません" + +-#: libdnf/dnf-goal.cpp:68 ++#: libdnf/dnf-context.cpp:3170 libdnf/dnf-context.cpp:3179 ++#, c-format ++msgid "Cannot enable more streams from module '%s' at the same time" ++msgstr "モジュール '%s' から、さらにストリームを同時に有効にできません" ++ ++#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3206 ++#, c-format ++msgid "" ++"Cannot enable module '%1$s' stream '%2$s': State of module already modified" ++msgstr "モジュール '%1$s' ストリーム '%2$s' を有効にできません。モジュールの状態はすでに変更されています" ++ ++#: libdnf/dnf-context.cpp:3253 ++#, c-format ++msgid "Modular dependency problem with Defaults: %s" ++msgstr "デフォルトのモジュラー依存問題: %s" ++ ++#: libdnf/dnf-context.cpp:3256 ++#, c-format ++msgid "Modular dependency problem: %s" ++msgstr "モジュラーの依存に関する問題: %s" ++ ++#: libdnf/dnf-context.cpp:3290 libdnf/dnf-context.cpp:3314 ++#: libdnf/dnf-context.cpp:3325 libdnf/dnf-context.cpp:3364 ++#: libdnf/dnf-context.cpp:3380 libdnf/dnf-context.cpp:3412 ++#: libdnf/dnf-context.cpp:3456 libdnf/dnf-context.cpp:3466 ++#, c-format ++msgid "Unable to resolve argument '%s'" ++msgstr "引数 '%s' を解決できません" ++ ++#: libdnf/dnf-context.cpp:3297 ++#, c-format ++msgid "" ++"Only module name is required. Ignoring unneeded information in argument: " ++"'%s'" ++msgstr "モジュール名のみが必要です。引数の不必要な情報は無視します: '%s'" ++ ++#: libdnf/dnf-context.cpp:3311 ++#, c-format ++msgid "Cannot reset module '%s': State of module already modified" ++msgstr "モジュール '%s' をリセットできません。モジュールの状態はすでに変更されています" ++ ++#: libdnf/dnf-context.cpp:3322 ++#, c-format ++msgid "Cannot disable module '%s': State of module already modified" ++msgstr "モジュール '%s' を無効にできません。モジュールの状態はすでに変更されています" ++ ++#: libdnf/dnf-context.cpp:3353 libdnf/dnf-context.cpp:3445 ++#: libdnf/dnf-context.cpp:3558 ++msgid "No modular data available" ++msgstr "モジュールデータは利用できません" ++ ++#: libdnf/dnf-context.cpp:3370 ++#, c-format ++msgid "Ignoring unneeded information in argument: '%s'" ++msgstr "引数の不要な情報は無視します: '%s'" ++ ++#: libdnf/dnf-context.cpp:3408 ++#, c-format ++msgid "" ++"Problem during enablement of dependency tree for module '%1$s' stream " ++"'%2$s': %3$s" ++msgstr "モジュール '%1$s' ストリーム '%2$s' の依存関係ツリーの有効化中に問題: %3$s" ++ ++#: libdnf/dnf-context.cpp:3420 ++msgid "Problems appeared for module enable request" ++msgstr "モジュール有効リクエストに発生する問題" ++ ++#. this really should never happen; unless the modular repodata is corrupted ++#: libdnf/dnf-context.cpp:3495 ++#, c-format ++msgid "Failed to parse module artifact NEVRA '%s'" ++msgstr "モジュールアーティファクト NEVRA '%s' の解析に失敗しました" ++ ++#: libdnf/dnf-context.cpp:3529 ++msgid "Problems appeared for module install request" ++msgstr "モジュールインストールリクエストに発生する問題" ++ ++#: libdnf/dnf-context.cpp:3589 ++msgid "Problems appeared for module reset request" ++msgstr "モジュールリセットリクエストに発生する問題" ++ ++#: libdnf/dnf-context.cpp:3591 ++msgid "Problems appeared for module disable request" ++msgstr "モジュール無効化リクエストに発生する問題" ++ ++#: libdnf/dnf-context.cpp:3627 ++#, c-format ++msgid "" ++"The operation would result in switching of module '%s' stream '%s' to stream" ++" '%s'" ++msgstr "オペレーションは、モジュール '%s' ストリーム '%s' を ストリーム '%s' へと切り替える結果となります" ++ ++#: libdnf/dnf-context.cpp:3631 ++msgid "" ++"It is not possible to switch enabled streams of a module.\n" ++"It is recommended to remove all installed content from the module, and reset the module using 'microdnf module reset ' command. After you reset the module, you can install the other stream." ++msgstr "" ++"有効化されたモジュールのストリームの切り替えはできません。\n" ++"モジュールからすべてのインストールされたコンテンツを削除し、'microdnf module reset ' コマンドを使用してモジュールをリセットすることを推奨します。モジュールのリセット後に、別のストリームをインストールできます。" ++ ++#: libdnf/dnf-goal.cpp:85 + msgid "Could not depsolve transaction; " + msgstr "トランザクションを depsolve できませんでした; " + +-#: libdnf/dnf-goal.cpp:70 ++#: libdnf/dnf-goal.cpp:87 + #, c-format + msgid "%i problem detected:\n" + msgid_plural "%i problems detected:\n" + msgstr[0] "%i 問題を検出:\n" + +-#: libdnf/dnf-goal.cpp:78 ++#: libdnf/dnf-goal.cpp:95 + #, c-format + msgid " Problem %1$i: %2$s\n" + msgstr " 問題 %1$i: %2$s\n" + +-#: libdnf/dnf-goal.cpp:80 ++#: libdnf/dnf-goal.cpp:97 + #, c-format + msgid " Problem: %s\n" + msgstr " 問題: %s\n" +@@ -174,87 +284,87 @@ msgstr "パッケージ %s を見つけることができませんでした" + msgid "could not add erase element %1$s(%2$i)" + msgstr "erase 要素 %1$s(%2$i) を追加することができません" + +-#: libdnf/dnf-sack.cpp:381 ++#: libdnf/dnf-sack.cpp:395 ++msgid "failed to add solv" ++msgstr "solv の追加に失敗しました" ++ ++#: libdnf/dnf-sack.cpp:414 + #, c-format + msgid "no %1$s string for %2$s" + msgstr "%2$s の %1$s 文字列はありません" + +-#: libdnf/dnf-sack.cpp:404 +-msgid "failed to add solv" +-msgstr "solv の追加に失敗しました" +- +-#: libdnf/dnf-sack.cpp:422 ++#: libdnf/dnf-sack.cpp:424 + #, c-format + msgid "failed to open: %s" + msgstr "開くことに失敗しました: %s" + +-#: libdnf/dnf-sack.cpp:501 ++#: libdnf/dnf-sack.cpp:503 + #, c-format + msgid "cannot create temporary file: %s" + msgstr "一時ファイルを作成できません: %s" + +-#: libdnf/dnf-sack.cpp:511 ++#: libdnf/dnf-sack.cpp:513 + #, c-format + msgid "failed opening tmp file: %s" + msgstr "tmp ファイルを開くことに失敗しました: %s" + +-#: libdnf/dnf-sack.cpp:523 ++#: libdnf/dnf-sack.cpp:525 + #, c-format + msgid "write_main() failed writing data: %i" + msgstr "write_main() はデータの書き込みに失敗しました: %i" + +-#: libdnf/dnf-sack.cpp:540 ++#: libdnf/dnf-sack.cpp:542 + msgid "write_main() failed to re-load written solv file" + msgstr "write_main() は、書き込みされた solv ファイルの再ロードに失敗しました" + +-#: libdnf/dnf-sack.cpp:605 ++#: libdnf/dnf-sack.cpp:607 + #, c-format + msgid "can not create temporary file %s" + msgstr "一時ファイル %s を作成できません" + +-#: libdnf/dnf-sack.cpp:623 ++#: libdnf/dnf-sack.cpp:625 + #, c-format + msgid "write_ext(%1$d) has failed: %2$d" + msgstr "write_ext(%1$d) は失敗しました: %2$d" + +-#: libdnf/dnf-sack.cpp:678 ++#: libdnf/dnf-sack.cpp:680 + msgid "null repo md file" + msgstr "null repo md ファイル" + +-#: libdnf/dnf-sack.cpp:687 ++#: libdnf/dnf-sack.cpp:689 + #, c-format + msgid "can not read file %1$s: %2$s" + msgstr "ファイル %1$s を読み込みできません: %2$s" + +-#: libdnf/dnf-sack.cpp:701 ++#: libdnf/dnf-sack.cpp:703 + msgid "repo_add_solv() has failed." + msgstr "repo_add_solv() は失敗しました。" + +-#: libdnf/dnf-sack.cpp:714 ++#: libdnf/dnf-sack.cpp:716 + msgid "loading of MD_TYPE_PRIMARY has failed." + msgstr "MD_TYPE_PRIMARY のロードに失敗しました。" + +-#: libdnf/dnf-sack.cpp:727 ++#: libdnf/dnf-sack.cpp:729 + msgid "repo_add_repomdxml/rpmmd() has failed." + msgstr "repo_add_repomdxml/rpmmd() は失敗しました。" + +-#: libdnf/dnf-sack.cpp:794 ++#: libdnf/dnf-sack.cpp:796 + msgid "failed to auto-detect architecture" + msgstr "アーキテクチャーの自動検出に失敗しました" + +-#: libdnf/dnf-sack.cpp:919 ++#: libdnf/dnf-sack.cpp:961 + #, c-format + msgid "failed creating cachedir %s" + msgstr "cachedir %s の作成に失敗しました" + +-#: libdnf/dnf-sack.cpp:1696 ++#: libdnf/dnf-sack.cpp:1738 + msgid "failed loading RPMDB" + msgstr "RPMDB のロードに失敗しました" + +-#: libdnf/dnf-sack.cpp:2403 ++#: libdnf/dnf-sack.cpp:2463 + #, c-format + msgid "No module defaults found: %s" +-msgstr "" ++msgstr "モジュールのデフォルトは見つかりませんでした: %s" + + #: libdnf/dnf-state.cpp:1184 + #, c-format +@@ -323,26 +433,26 @@ msgstr "%s に filesystem をフリーサイズで取得することに失敗し + msgid "Not enough free space in %1$s: needed %2$s, available %3$s" + msgstr "%1$s に十分なスペースがありません: %2$s 必要で、利用可能なのは %3$s です" + +-#: libdnf/dnf-transaction.cpp:1196 ++#: libdnf/dnf-transaction.cpp:1195 + msgid "failed to set root" + msgstr "root の設定に失敗しました" + +-#: libdnf/dnf-transaction.cpp:1418 ++#: libdnf/dnf-transaction.cpp:1416 + #, c-format + msgid "Error %i running transaction test" + msgstr "トランザクションテストの実行中にエラー %i" + +-#: libdnf/dnf-transaction.cpp:1458 ++#: libdnf/dnf-transaction.cpp:1456 + #, c-format + msgid "Error %i running transaction" + msgstr "トランザクションの実行中にエラー %i" + +-#: libdnf/dnf-transaction.cpp:1473 ++#: libdnf/dnf-transaction.cpp:1472 + #, c-format + msgid "Transaction did not go to writing phase, but returned no error(%i)" + msgstr "トランザクションは書き込みフェーズまで行きませんでしたが、エラー(%i) は返しませんでした" + +-#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:399 ++#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:403 + #, c-format + msgid "cannot open directory %1$s: %2$s" + msgstr "ディレクトリー %1$s を開くことができません: %2$s" +@@ -352,272 +462,281 @@ msgstr "ディレクトリー %1$s を開くことができません: %2$s" + msgid "failed to remove %s" + msgstr "%s の削除に失敗しました" + +-#: libdnf/goal/Goal.cpp:55 ++#: libdnf/goal/Goal.cpp:74 + msgid "Ill-formed Selector, presence of multiple match objects in the filter" + msgstr "不適格な Selector、フィルター内に複数の一致するオブジェクトが存在" + +-#: libdnf/goal/Goal.cpp:56 ++#: libdnf/goal/Goal.cpp:75 + msgid "Ill-formed Selector used for the operation, incorrect comparison type" + msgstr "操作に使用される不適格な Selector、間違った比較タイプ" + +-#: libdnf/goal/Goal.cpp:67 libdnf/goal/Goal.cpp:94 ++#: libdnf/goal/Goal.cpp:86 libdnf/goal/Goal.cpp:113 + msgid " does not belong to a distupgrade repository" + msgstr " はdistupgradeレポジトリーに属していません" + +-#: libdnf/goal/Goal.cpp:68 libdnf/goal/Goal.cpp:95 ++#: libdnf/goal/Goal.cpp:87 libdnf/goal/Goal.cpp:114 + msgid " has inferior architecture" + msgstr " は下位アーキテクチャがあります" + +-#: libdnf/goal/Goal.cpp:69 ++#: libdnf/goal/Goal.cpp:88 + msgid "problem with installed package " + msgstr "インストール済パッケージの問題 " + +-#: libdnf/goal/Goal.cpp:70 libdnf/goal/Goal.cpp:97 ++#: libdnf/goal/Goal.cpp:89 libdnf/goal/Goal.cpp:116 + msgid "conflicting requests" + msgstr "競合するリクエスト" + +-#: libdnf/goal/Goal.cpp:71 libdnf/goal/Goal.cpp:98 ++#: libdnf/goal/Goal.cpp:90 libdnf/goal/Goal.cpp:117 + msgid "unsupported request" + msgstr "非サポートのリクエスト" + +-#: libdnf/goal/Goal.cpp:72 libdnf/goal/Goal.cpp:99 ++#: libdnf/goal/Goal.cpp:91 libdnf/goal/Goal.cpp:118 + msgid "nothing provides requested " + msgstr "何もリクエストされていません " + +-#: libdnf/goal/Goal.cpp:73 ++#: libdnf/goal/Goal.cpp:92 + #, c-format + msgid "package %s does not exist" + msgstr "パッケージ %s は存在しません" + +-#: libdnf/goal/Goal.cpp:74 libdnf/goal/Goal.cpp:101 ++#: libdnf/goal/Goal.cpp:93 libdnf/goal/Goal.cpp:120 + msgid " is provided by the system" + msgstr " はシステムから提供されます" + +-#: libdnf/goal/Goal.cpp:75 libdnf/goal/Goal.cpp:102 ++#: libdnf/goal/Goal.cpp:94 libdnf/goal/Goal.cpp:121 + msgid "some dependency problem" + msgstr "いくつかの依存問題" + +-#: libdnf/goal/Goal.cpp:76 ++#: libdnf/goal/Goal.cpp:95 + msgid "cannot install the best update candidate for package " + msgstr "パッケージの最良アップデート候補をインストールできません " + +-#: libdnf/goal/Goal.cpp:77 libdnf/goal/Goal.cpp:104 ++#: libdnf/goal/Goal.cpp:96 libdnf/goal/Goal.cpp:123 + msgid "cannot install the best candidate for the job" + msgstr "ジョブの最良アップデート候補をインストールできません" + +-#: libdnf/goal/Goal.cpp:78 ++#: libdnf/goal/Goal.cpp:97 + #, c-format + msgid "package %s is filtered out by modular filtering" + msgstr "パッケージ %s はモジュラーフィルタリングに一致しません" + +-#: libdnf/goal/Goal.cpp:79 ++#: libdnf/goal/Goal.cpp:98 + #, c-format + msgid "package %s does not have a compatible architecture" + msgstr "パッケージ %s は互換性のあるアーキテクチャーがありません" + +-#: libdnf/goal/Goal.cpp:80 ++#: libdnf/goal/Goal.cpp:99 + #, c-format + msgid "package %s is not installable" + msgstr "パッケージ %s はインストール不可です" + +-#: libdnf/goal/Goal.cpp:81 ++#: libdnf/goal/Goal.cpp:100 + #, c-format + msgid "package %s is filtered out by exclude filtering" + msgstr "パッケージ %s は除外フィルタリングに一致しません" + +-#: libdnf/goal/Goal.cpp:82 ++#: libdnf/goal/Goal.cpp:101 + #, c-format + msgid "nothing provides %s needed by %s" + msgstr "%s が提供されません %s に必要です" + +-#: libdnf/goal/Goal.cpp:83 ++#: libdnf/goal/Goal.cpp:102 + #, c-format + msgid "cannot install both %s and %s" + msgstr "%s と %s どちらもインストールできません" + +-#: libdnf/goal/Goal.cpp:84 ++#: libdnf/goal/Goal.cpp:103 + #, c-format + msgid "package %s conflicts with %s provided by %s" + msgstr "パッケージ %s は %s と競合しています。これは %s により提供されます" + +-#: libdnf/goal/Goal.cpp:85 ++#: libdnf/goal/Goal.cpp:104 + #, c-format + msgid "package %s obsoletes %s provided by %s" + msgstr "パッケージ %s は %s を廃止しました。これは %s により提供されます" + +-#: libdnf/goal/Goal.cpp:86 ++#: libdnf/goal/Goal.cpp:105 + #, c-format + msgid "installed package %s obsoletes %s provided by %s" + msgstr "インストール済パッケージ %s は %s を廃止しました。これは %s により提供されます" + +-#: libdnf/goal/Goal.cpp:87 ++#: libdnf/goal/Goal.cpp:106 + #, c-format + msgid "package %s implicitly obsoletes %s provided by %s" + msgstr "パッケージ %s は %s を暗に廃止しました。これは %s により提供されます" + +-#: libdnf/goal/Goal.cpp:88 ++#: libdnf/goal/Goal.cpp:107 + #, c-format + msgid "package %s requires %s, but none of the providers can be installed" + msgstr "パッケージ %s には %s が必要ですが、どのプロバイダーからもインストールできません" + +-#: libdnf/goal/Goal.cpp:89 ++#: libdnf/goal/Goal.cpp:108 + #, c-format + msgid "package %s conflicts with %s provided by itself" + msgstr "パッケージ %s は自己提供される %s と競合しています" + +-#: libdnf/goal/Goal.cpp:90 ++#: libdnf/goal/Goal.cpp:109 + #, c-format + msgid "both package %s and %s obsolete %s" + msgstr "パッケージ %s と %s 両方は %s を廃止しました" + +-#: libdnf/goal/Goal.cpp:96 ++#: libdnf/goal/Goal.cpp:115 + msgid "problem with installed module " + msgstr "インストール済モジュールの問題 " + +-#: libdnf/goal/Goal.cpp:100 ++#: libdnf/goal/Goal.cpp:119 + #, c-format + msgid "module %s does not exist" + msgstr "モジュール %s は存在しません" + +-#: libdnf/goal/Goal.cpp:103 ++#: libdnf/goal/Goal.cpp:122 + msgid "cannot install the best update candidate for module " + msgstr "モジュールの最良アップデート候補をインストールできません " + +-#: libdnf/goal/Goal.cpp:105 libdnf/goal/Goal.cpp:108 ++#: libdnf/goal/Goal.cpp:124 libdnf/goal/Goal.cpp:127 + #, c-format + msgid "module %s is disabled" + msgstr "モジュール %s は無効です" + +-#: libdnf/goal/Goal.cpp:106 ++#: libdnf/goal/Goal.cpp:125 + #, c-format + msgid "module %s does not have a compatible architecture" + msgstr "モジュール %s は互換性のあるアーキテクチャーがありません" + +-#: libdnf/goal/Goal.cpp:107 ++#: libdnf/goal/Goal.cpp:126 + #, c-format + msgid "module %s is not installable" + msgstr "モジュール %s はインストール不可です" + +-#: libdnf/goal/Goal.cpp:109 ++#: libdnf/goal/Goal.cpp:128 + #, c-format + msgid "nothing provides %s needed by module %s" + msgstr "%s が提供されませんモジュール %s に必要です" + +-#: libdnf/goal/Goal.cpp:110 ++#: libdnf/goal/Goal.cpp:129 + #, c-format + msgid "cannot install both modules %s and %s" + msgstr "モジュール %s と %s どちらもインストールできません" + +-#: libdnf/goal/Goal.cpp:111 ++#: libdnf/goal/Goal.cpp:130 + #, c-format + msgid "module %s conflicts with %s provided by %s" + msgstr "モジュール %s は %s と競合しています。これは %s により提供されます" + +-#: libdnf/goal/Goal.cpp:112 ++#: libdnf/goal/Goal.cpp:131 + #, c-format + msgid "module %s obsoletes %s provided by %s" + msgstr "モジュール %s は %s を廃止しました。これは %s により提供されます" + +-#: libdnf/goal/Goal.cpp:113 ++#: libdnf/goal/Goal.cpp:132 + #, c-format + msgid "installed module %s obsoletes %s provided by %s" + msgstr "インストール済モジュール %s は %s を廃止しました。これは %s により提供されます" + +-#: libdnf/goal/Goal.cpp:114 ++#: libdnf/goal/Goal.cpp:133 + #, c-format + msgid "module %s implicitly obsoletes %s provided by %s" + msgstr "モジュール %s は %s を暗に廃止しました。これは %s により提供されます" + +-#: libdnf/goal/Goal.cpp:115 ++#: libdnf/goal/Goal.cpp:134 + #, c-format + msgid "module %s requires %s, but none of the providers can be installed" + msgstr "モジュール %s には %s が必要ですが、どのプロバイダーからもインストールできません" + +-#: libdnf/goal/Goal.cpp:116 ++#: libdnf/goal/Goal.cpp:135 + #, c-format + msgid "module %s conflicts with %s provided by itself" + msgstr "モジュール %s は自己提供される %s と競合しています" + +-#: libdnf/goal/Goal.cpp:117 ++#: libdnf/goal/Goal.cpp:136 + #, c-format + msgid "both module %s and %s obsolete %s" + msgstr "モジュール %s と %s 両方は %s を廃止しました" + +-#: libdnf/goal/Goal.cpp:1038 ++#: libdnf/goal/Goal.cpp:1051 + msgid "no solver set" + msgstr "設定されたソルバーはありません" + +-#: libdnf/goal/Goal.cpp:1043 ++#: libdnf/goal/Goal.cpp:1056 + #, c-format + msgid "failed to make %s absolute" + msgstr "%s を絶対的にすることに失敗しました" + +-#: libdnf/goal/Goal.cpp:1050 ++#: libdnf/goal/Goal.cpp:1063 + #, c-format + msgid "failed writing debugdata to %1$s: %2$s" + msgstr "debugdata を %1$s へ書き込むことに失敗しました: %2$s" + +-#: libdnf/goal/Goal.cpp:1062 ++#: libdnf/goal/Goal.cpp:1075 + msgid "no solv in the goal" + msgstr "目標に solv がありません" + +-#: libdnf/goal/Goal.cpp:1064 ++#: libdnf/goal/Goal.cpp:1077 + msgid "no solution, cannot remove protected package" + msgstr "ソリューションがなく、保護されたパッケージを削除できません" + +-#: libdnf/goal/Goal.cpp:1067 ++#: libdnf/goal/Goal.cpp:1080 + msgid "no solution possible" + msgstr "可能なソリューションがありません" + +-#: libdnf/goal/Goal.cpp:1479 ++#: libdnf/goal/Goal.cpp:1206 ++msgid "Problem: " ++msgstr "問題: " ++ ++#: libdnf/goal/Goal.cpp:1211 ++#, c-format ++msgid "Problem %d: " ++msgstr "問題 %d: " ++ ++#: libdnf/goal/Goal.cpp:1538 + msgid "" + "The operation would result in removing the following protected packages: " + msgstr "操作は結果的に以下の保護されたパッケージを削除します: " + +-#: libdnf/hy-iutil.cpp:322 ++#: libdnf/hy-iutil.cpp:326 + #, c-format + msgid "Failed renaming %1$s to %2$s: %3$s" + msgstr "名前を %1$s から %2$s へ変更できませんでした: %3$s" + +-#: libdnf/hy-iutil.cpp:330 ++#: libdnf/hy-iutil.cpp:334 + #, c-format + msgid "Failed setting perms on %1$s: %2$s" + msgstr "%1$s に権限を設定できませんでした: %2$s" + +-#: libdnf/hy-iutil.cpp:376 ++#: libdnf/hy-iutil.cpp:380 + #, c-format + msgid "cannot create directory %1$s: %2$s" + msgstr "ディレクトリー %1$s を作成できません : %2$s" + +-#: libdnf/hy-iutil.cpp:411 ++#: libdnf/hy-iutil.cpp:415 + #, c-format + msgid "cannot stat path %1$s: %2$s" + msgstr "パス %1$s のstatを調べられません : %2$s" + +-#: libdnf/module/ModulePackage.cpp:499 ++#: libdnf/module/ModulePackage.cpp:560 + #, c-format + msgid "Invalid format of Platform module: %s" + msgstr "不正なプラットフォームモジュールのフォーマット: %s" + +-#: libdnf/module/ModulePackage.cpp:514 ++#: libdnf/module/ModulePackage.cpp:575 + msgid "Multiple module platforms provided by available packages\n" + msgstr "利用可能パッケージに提供される複数のモジュールプラットフォーム\n" + +-#: libdnf/module/ModulePackage.cpp:527 ++#: libdnf/module/ModulePackage.cpp:588 + msgid "Multiple module platforms provided by installed packages\n" + msgstr "インストール済パッケージに提供される複数のモジュールプラットフォーム\n" + +-#: libdnf/module/ModulePackage.cpp:554 ++#: libdnf/module/ModulePackage.cpp:615 + #, c-format + msgid "Detection of Platform Module in %s failed: %s" + msgstr "%s のプラットフォームモジュールの検出に失敗しました: %s" + +-#: libdnf/module/ModulePackage.cpp:563 ++#: libdnf/module/ModulePackage.cpp:624 + #, c-format + msgid "Missing PLATFORM_ID in %s" + msgstr "%s に PLATFORM_ID が見つかりません" + +-#: libdnf/module/ModulePackage.cpp:568 ++#: libdnf/module/ModulePackage.cpp:629 + msgid "No valid Platform ID detected" + msgstr "有効な Platform ID が検出されませんでした" + +@@ -626,36 +745,67 @@ msgstr "有効な Platform ID が検出されませんでした" + msgid "Cannot enable multiple streams for module '%s'" + msgstr "モジュール '%s' の複数ストリームを有効化できません" + +-#: libdnf/module/ModulePackageContainer.cpp:294 ++#: libdnf/module/ModulePackageContainer.cpp:295 + #, c-format + msgid "Conflicting defaults with repo '%s': %s" + msgstr "repo '%s' のデフォルトが競合: %s" + +-#: libdnf/module/ModulePackageContainer.cpp:1569 ++#: libdnf/module/ModulePackageContainer.cpp:841 ++msgid "Installing module profiles:\n" ++msgstr "モジュールプロファイルのインストール中:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:856 ++msgid "Disabling module profiles:\n" ++msgstr "モジュールプロファイルの無効化中:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:871 ++msgid "Enabling module streams:\n" ++msgstr "モジュールストリームの有効化中:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:885 ++msgid "Switching module streams:\n" ++msgstr "モジュールストリームの切り替え中:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:903 ++msgid "Disabling modules:\n" ++msgstr "モジュールの無効化:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:914 ++msgid "Resetting modules:\n" ++msgstr "モジュールの再設定中:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:1599 + #, c-format + msgid "Unable to load modular Fail-Safe data at '%s'" + msgstr "'%s' のモジュラーフェイルセーフデータをロードできません" + +-#: libdnf/module/ModulePackageContainer.cpp:1575 ++#: libdnf/module/ModulePackageContainer.cpp:1605 + #, c-format + msgid "Unable to load modular Fail-Safe data for module '%s:%s'" + msgstr "モジュール '%s:%s' のモジュラーフェイルセーフデータをロードできません" + +-#: libdnf/module/ModulePackageContainer.cpp:1639 ++#: libdnf/module/ModulePackageContainer.cpp:1663 + #, c-format + msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" + msgstr "ディレクトリー \"%s\" を作成できません。対象モジュラーフェイルセーフデータ: %s" + +-#: libdnf/module/ModulePackageContainer.cpp:1661 ++#: libdnf/module/ModulePackageContainer.cpp:1679 + #, c-format + msgid "Unable to save a modular Fail Safe data to '%s'" + msgstr "'%s' のモジュラーフェイルセーフデータを保存できません" + +-#: libdnf/module/ModulePackageContainer.cpp:1686 ++#: libdnf/module/ModulePackageContainer.cpp:1702 + #, c-format + msgid "Unable to remove a modular Fail Safe data in '%s'" + msgstr "'%s' のモジュラーフェイルセーフデータを削除できません" + ++#: libdnf/module/ModulePackageContainer.cpp:1734 ++#, c-format ++msgid "" ++"Unable to apply modular obsoletes to '%s:%s' because target module '%s' is " ++"disabled" ++msgstr "ターゲットモジュール '%s' が無効であるため、モジュラーの廃止を '%s:%s' に適用できません" ++ + #: libdnf/module/modulemd/ModuleMetadata.cpp:86 + #, c-format + msgid "Failed to update from string: %s" +@@ -669,7 +819,7 @@ msgstr "名前解決に失敗しました: %s" + #: libdnf/module/modulemd/ModuleMetadata.cpp:115 + #, c-format + msgid "There were errors while resolving modular defaults: %s" +-msgstr "" ++msgstr "モジュラーデフォルトの解決中にエラーが発生しました: %s" + + #: libdnf/module/modulemd/ModuleMetadata.cpp:120 + #, c-format +@@ -681,6 +831,11 @@ msgstr "デフォルトのアップグレードに失敗しました: %s" + msgid "Failed to upgrade streams: %s" + msgstr "ストリームのアップグレードに失敗しました: %s" + ++#: libdnf/module/modulemd/ModuleMetadata.cpp:212 ++#, c-format ++msgid "Cannot retrieve module obsoletes because no stream matching %s: %s" ++msgstr "%s に一致するストリームがないため、モジュールの廃止を取得できません: %s" ++ + #: libdnf/plugin/plugin.cpp:46 + #, c-format + msgid "Can't load shared library \"%s\": %s" +@@ -722,6 +877,9 @@ msgid "" + "deprecated and the support will be dropped in future versions. Use '=' " + "operator instead." + msgstr "" ++"reldeps で '==' " ++"演算子を使用すると、未定義の動作が発生する可能性があります。これは非推奨で、将来のバージョンではサポートされなくなります。代わりに '=' " ++"演算子を使用してください。" + + #: libdnf/repo/Repo.cpp:321 + #, c-format +@@ -733,146 +891,161 @@ msgstr "リポジトリー %s にはミラーまたは baseurl セットがあ + msgid "Repository '%s' has unsupported type: 'type=%s', skipping." + msgstr "リポジトリー '%s' にはサポートされていないタイプがあります: 'type=%s'、スキッピング。" + +-#: libdnf/repo/Repo.cpp:546 ++#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:610 libdnf/repo/Repo.cpp:641 ++#: libdnf/repo/Repo.cpp:1382 + #, c-format +-msgid "Cannot find a valid baseurl for repo: %s" +-msgstr "repo に対して有効な baseurl を見つけられません: %s" ++msgid "repo '%s': 'basecachedir' is not set" ++msgstr "repo '%s': 'basecachedir' が設定されていません" + +-#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 ++#: libdnf/repo/Repo.cpp:512 + msgid "" + "Maximum download speed is lower than minimum. Please change configuration of" + " minrate or throttle" +-msgstr "ダウンロードの最高速度は、最低速度よりも低いです。minrate またはスロットルの設定を変更してください。" ++msgstr "ダウンロードの最高速度は、最低速度よりも低いです。minrate またはスロットルの設定を変更してください" + +-#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 ++#: libdnf/repo/Repo.cpp:546 ++#, c-format ++msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" ++msgstr "repo '%s': 'proxy_username' は設定済みですが、'proxy_password' は設定されていません" ++ ++#: libdnf/repo/Repo.cpp:548 ++msgid "'proxy_username' is set but not 'proxy_password'" ++msgstr "'proxy_username' は設定済みですが、'proxy_password' は設定されていません" ++ ++#: libdnf/repo/Repo.cpp:629 ++#, c-format ++msgid "Cannot find a valid baseurl for repo: %s" ++msgstr "repo に対して有効な baseurl を見つけられません: %s" ++ ++#: libdnf/repo/Repo.cpp:660 libdnf/repo/Repo.cpp:682 + #, c-format + msgid "%s: gpgme_data_new_from_fd(): %s" + msgstr "%s: gpgme_data_new_from_fd(): %s" + +-#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 ++#: libdnf/repo/Repo.cpp:668 libdnf/repo/Repo.cpp:690 + #, c-format + msgid "%s: gpgme_op_import(): %s" + msgstr "%s: gpgme_op_import(): %s" + +-#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 ++#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:779 libdnf/repo/Repo.cpp:907 + #, c-format + msgid "%s: gpgme_ctx_set_engine_info(): %s" + msgstr "%s: gpgme_ctx_set_engine_info(): %s" + +-#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 ++#: libdnf/repo/Repo.cpp:740 libdnf/repo/Repo.cpp:804 + #, c-format + msgid "can not list keys: %s" + msgstr "キーを一覧表示できません: %s" + +-#: libdnf/repo/Repo.cpp:806 ++#: libdnf/repo/Repo.cpp:833 + #, c-format + msgid "Failed to retrieve GPG key for repo '%s': %s" + msgstr "repo '%s' のGPG鍵の回収に失敗しました : %s" + +-#: libdnf/repo/Repo.cpp:859 ++#: libdnf/repo/Repo.cpp:886 + #, c-format + msgid "repo %s: 0x%s already imported" + msgstr "repo %s: 0x%s はインポート済みです" + +-#: libdnf/repo/Repo.cpp:887 ++#: libdnf/repo/Repo.cpp:914 + #, c-format + msgid "repo %s: imported key 0x%s." + msgstr "repo %s: インポート済みのキー 0x%s。" + +-#: libdnf/repo/Repo.cpp:1131 ++#: libdnf/repo/Repo.cpp:1162 + #, c-format + msgid "reviving: repo '%s' skipped, no metalink." + msgstr "復元中: repo '%s' はスキップされました、metalink はありません。" + +-#: libdnf/repo/Repo.cpp:1150 ++#: libdnf/repo/Repo.cpp:1181 + #, c-format + msgid "reviving: repo '%s' skipped, no usable hash." + msgstr "復元中: repo '%s' はスキップされました、使用可能なハッシュはありません。" + +-#: libdnf/repo/Repo.cpp:1173 ++#: libdnf/repo/Repo.cpp:1204 + #, c-format + msgid "reviving: failed for '%s', mismatched %s sum." + msgstr "復元中: '%s' は失敗しました、%s の合計は一致しません。" + +-#: libdnf/repo/Repo.cpp:1179 ++#: libdnf/repo/Repo.cpp:1210 + #, c-format + msgid "reviving: '%s' can be revived - metalink checksums match." + msgstr "復元中: '%s' は復元できます - metalink チェックサムが一致します。" + +-#: libdnf/repo/Repo.cpp:1204 ++#: libdnf/repo/Repo.cpp:1235 + #, c-format + msgid "reviving: '%s' can be revived - repomd matches." + msgstr "復元中: '%s' は復元できます - repomd が一致します。" + +-#: libdnf/repo/Repo.cpp:1206 ++#: libdnf/repo/Repo.cpp:1237 + #, c-format + msgid "reviving: failed for '%s', mismatched repomd." +-msgstr "復元中: '%s' に失敗しました、repomd が一致しません。" ++msgstr "復元中: '%s' に失敗しました、repomd が一致しません。" + +-#: libdnf/repo/Repo.cpp:1224 ++#: libdnf/repo/Repo.cpp:1255 + #, c-format + msgid "Cannot create repo destination directory \"%s\": %s" + msgstr "repo 送信先ディレクトリ \"%s\" を作成できません : %s" + +-#: libdnf/repo/Repo.cpp:1230 ++#: libdnf/repo/Repo.cpp:1261 + #, c-format + msgid "Cannot create repo temporary directory \"%s\": %s" + msgstr "repo 一時ディレクトリー \"%s\" を作成できません: %s" + +-#: libdnf/repo/Repo.cpp:1244 ++#: libdnf/repo/Repo.cpp:1275 + #, c-format + msgid "Cannot create directory \"%s\": %s" + msgstr "ディレクトリー \"%s\" を作成できません: %s" + +-#: libdnf/repo/Repo.cpp:1267 ++#: libdnf/repo/Repo.cpp:1298 + #, c-format + msgid "Cannot rename directory \"%s\" to \"%s\": %s" + msgstr "ディレクトリー名を \"%s\" から \"%s\" へと変更できません: %s" + +-#: libdnf/repo/Repo.cpp:1290 ++#: libdnf/repo/Repo.cpp:1321 + #, c-format + msgid "repo: using cache for: %s" + msgstr "repo: キャッシュを使用: %s" + +-#: libdnf/repo/Repo.cpp:1302 ++#: libdnf/repo/Repo.cpp:1333 + #, c-format + msgid "Cache-only enabled but no cache for '%s'" + msgstr "キャッシュオンリーが有効になっていますが、'%s' に対するキャッシュはありません" + +-#: libdnf/repo/Repo.cpp:1306 ++#: libdnf/repo/Repo.cpp:1337 + #, c-format + msgid "repo: downloading from remote: %s" + msgstr "repo: リモートからダウンロード中: %s" + +-#: libdnf/repo/Repo.cpp:1312 ++#: libdnf/repo/Repo.cpp:1344 + #, c-format + msgid "Failed to download metadata for repo '%s': %s" + msgstr "repo '%s' のメタデータのダウンロードに失敗しました : %s" + +-#: libdnf/repo/Repo.cpp:1338 ++#: libdnf/repo/Repo.cpp:1370 + msgid "getCachedir(): Computation of SHA256 failed" + msgstr "getCachedir(): SHA256 のコンピュテーションに失敗しました" + +-#: libdnf/repo/Repo.cpp:1363 ++#: libdnf/repo/Repo.cpp:1398 + #, c-format + msgid "Cannot create persistdir \"%s\": %s" + msgstr "persistdir \"%s\" を作成できません : %s" + +-#: libdnf/repo/Repo.cpp:1763 ++#: libdnf/repo/Repo.cpp:1775 + msgid "resume cannot be used simultaneously with the byterangestart param" + msgstr "resume は byterangestart param と同時に使用できません" + +-#: libdnf/repo/Repo.cpp:1780 ++#: libdnf/repo/Repo.cpp:1792 + #, c-format + msgid "PackageTarget initialization failed: %s" + msgstr "PackageTarget の初期化に失敗しました: %s" + +-#: libdnf/repo/Repo.cpp:1886 ++#: libdnf/repo/Repo.cpp:1898 + #, c-format + msgid "Cannot open %s: %s" + msgstr "%s を開くことができません: %s" + +-#: libdnf/repo/Repo.cpp:1930 ++#: libdnf/repo/Repo.cpp:1942 + #, c-format + msgid "Log handler with id %ld doesn't exist" + msgstr "id %ld を伴うログハンドラーは存在しません" +@@ -881,13 +1054,13 @@ msgstr "id %ld を伴うログハンドラーは存在しません" + msgid "In progress" + msgstr "進行中" + +-#: libdnf/transaction/Swdb.cpp:188 libdnf/transaction/Swdb.cpp:216 +-#: libdnf/transaction/Swdb.cpp:228 libdnf/transaction/Swdb.cpp:245 +-#: libdnf/transaction/Swdb.cpp:384 libdnf/transaction/Swdb.cpp:394 ++#: libdnf/transaction/Swdb.cpp:187 libdnf/transaction/Swdb.cpp:215 ++#: libdnf/transaction/Swdb.cpp:227 libdnf/transaction/Swdb.cpp:244 ++#: libdnf/transaction/Swdb.cpp:383 libdnf/transaction/Swdb.cpp:393 + msgid "Not in progress" + msgstr "進行中ではありません" + +-#: libdnf/transaction/Swdb.cpp:255 ++#: libdnf/transaction/Swdb.cpp:254 + msgid "No transaction in progress" + msgstr "進行中のトランザクションはありません" + +@@ -901,7 +1074,7 @@ msgstr "完了したトランザクションにトランザクションアイテ + + #: libdnf/transaction/Transformer.cpp:76 + msgid "Database Corrupted: no row 'version' in table 'config'" +-msgstr "" ++msgstr "データベースが破損しています。テーブル 'config' の行 'version' がありません" + + #: libdnf/transaction/Transformer.cpp:681 + msgid "Transformer: can't open history persist dir" +@@ -926,6 +1099,3 @@ msgstr "未保存のトランザクションにコンソールの出力を追加 + + #~ msgid "Bad id for repo: %s, byte = %s %d" + #~ msgstr "repo に対する不正な id: %s, byte = %s %d" +- +-#~ msgid "failed calculating RPMDB checksum" +-#~ msgstr "RPMDB チェックサムの計算に失敗しました" +diff --git a/po/ko.po b/po/ko.po +index 48094831..f1d47e8f 100644 +--- a/po/ko.po ++++ b/po/ko.po +@@ -1,31 +1,31 @@ + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. +-# FIRST AUTHOR , YEAR. + # Ludek Janda , 2018. #zanata ++# simmon , 2021. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2018-11-02 05:26+0000\n" +-"Last-Translator: Copied by Zanata \n" +-"Language-Team: Korean\n" ++"POT-Creation-Date: 2021-08-11 14:28+0200\n" ++"PO-Revision-Date: 2021-08-13 09:04+0000\n" ++"Last-Translator: simmon \n" ++"Language-Team: Korean \n" + "Language: ko\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"Plural-Forms: nplurals=1; plural=0\n" +-"X-Generator: Zanata 4.6.2\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++"X-Generator: Weblate 4.7.2\n" + + #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40 + msgid "no value specified" +-msgstr "값이 지정되지 않았습니다." ++msgstr "값이 지정되지 않았습니다" + + #: libdnf/conf/ConfigMain.cpp:67 libdnf/conf/OptionSeconds.cpp:48 + #, c-format + msgid "seconds value '%s' must not be negative" +-msgstr "초 값 '%s음수가 아니어야합니다." ++msgstr "초 값 '%s 음수가 아니어야합니다" + + #: libdnf/conf/ConfigMain.cpp:71 + #, c-format +@@ -37,17 +37,30 @@ msgstr "변환 할 수 없습니다 '%s'~ 바이트" + msgid "unknown unit '%s'" + msgstr "알 수없는 단위 '%s'" + +-#: libdnf/conf/ConfigMain.cpp:332 ++#: libdnf/conf/ConfigMain.cpp:204 libdnf/conf/OptionEnum.cpp:83 ++#: libdnf/conf/OptionNumber.cpp:88 ++msgid "invalid value" ++msgstr "잘못된 값" ++ ++#: libdnf/conf/ConfigMain.cpp:207 ++msgid "value 1 is not allowed" ++msgstr "값 1은 허용되지 않습니다" ++ ++#: libdnf/conf/ConfigMain.cpp:209 ++msgid "negative value is not allowed" ++msgstr "음수 값은 허용되지 않습니다" ++ ++#: libdnf/conf/ConfigMain.cpp:341 + #, c-format + msgid "percentage '%s' is out of range" +-msgstr "백분율 '%s'범위를 벗어났습니다." ++msgstr "백분율 '%s' 범위를 벗어났습니다" + +-#: libdnf/conf/OptionBinds.cpp:76 ++#: libdnf/conf/OptionBinds.cpp:85 + #, c-format + msgid "Configuration: OptionBinding with id \"%s\" does not exist" + msgstr "구성 : ID가 \"%s\" 존재하지 않는다" + +-#: libdnf/conf/OptionBinds.cpp:88 ++#: libdnf/conf/OptionBinds.cpp:97 + #, c-format + msgid "Configuration: OptionBinding with id \"%s\" already exists" + msgstr "구성 : ID가 \"%s\" 이미 존재 함" +@@ -58,14 +71,10 @@ msgid "invalid boolean value '%s'" + msgstr "유효하지 않은 부울 값 '%s'" + + #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 +-#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 ++#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 + #, c-format + msgid "'%s' is not an allowed value" +-msgstr "'%s'은 (는) 허용 된 값이 아닙니다." +- +-#: libdnf/conf/OptionEnum.cpp:83 libdnf/conf/OptionNumber.cpp:88 +-msgid "invalid value" +-msgstr "잘못된 값" ++msgstr "'%s'는 허용 된 값이 아닙니다" + + #: libdnf/conf/OptionNumber.cpp:73 + #, c-format +@@ -92,36 +101,136 @@ msgstr "주어진 경로 '%s' 존재하지 않는다." + msgid "could not convert '%s' to seconds" + msgstr "변환 할 수 없습니다 '%s'초까지" + +-#: libdnf/conf/OptionString.cpp:74 ++#: libdnf/conf/OptionString.cpp:79 + msgid "GetValue(): Value not set" +-msgstr "GetValue () : 값이 설정되지 않았습니다." ++msgstr "GetValue () : 값이 설정되지 않았습니다" + +-#: libdnf/dnf-goal.cpp:68 +-msgid "Could not depsolve transaction; " ++#: libdnf/dnf-context.cpp:3170 libdnf/dnf-context.cpp:3179 ++#, c-format ++msgid "Cannot enable more streams from module '%s' at the same time" ++msgstr "동시에 모듈 '%s’에서 다른 스트림을 활성화 할 수 없습니다" ++ ++#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3206 ++#, c-format ++msgid "" ++"Cannot enable module '%1$s' stream '%2$s': State of module already modified" ++msgstr "모듈 '%1$s' 스트림 '%2$s 을 활성화 할 수 없습니다: 모듈 상태가 이미 변경되었습니다" ++ ++#: libdnf/dnf-context.cpp:3253 ++#, c-format ++msgid "Modular dependency problem with Defaults: %s" ++msgstr "기본설정에 모듈 의존성 문제: %s" ++ ++#: libdnf/dnf-context.cpp:3256 ++#, c-format ++msgid "Modular dependency problem: %s" ++msgstr "모듈러 의존성 문제: %s" ++ ++#: libdnf/dnf-context.cpp:3290 libdnf/dnf-context.cpp:3314 ++#: libdnf/dnf-context.cpp:3325 libdnf/dnf-context.cpp:3364 ++#: libdnf/dnf-context.cpp:3380 libdnf/dnf-context.cpp:3412 ++#: libdnf/dnf-context.cpp:3456 libdnf/dnf-context.cpp:3466 ++#, c-format ++msgid "Unable to resolve argument '%s'" ++msgstr "인수 %s를 해결 할 수 없습니다" ++ ++#: libdnf/dnf-context.cpp:3297 ++#, c-format ++msgid "" ++"Only module name is required. Ignoring unneeded information in argument: " ++"'%s'" ++msgstr "모듈 이름만 필요합니다. 인수에서 불필요한 정보를 무시합니다: '%s'" ++ ++#: libdnf/dnf-context.cpp:3311 ++#, c-format ++msgid "Cannot reset module '%s': State of module already modified" ++msgstr "모듈 '%s 를 재설정 할 수 없습니다: 모듈 상태가 이미 변경되었습니다" ++ ++#: libdnf/dnf-context.cpp:3322 ++#, c-format ++msgid "Cannot disable module '%s': State of module already modified" ++msgstr "모듈 '%s'사용 할 수 없습니다: 모듈 상태는 이미 적재되었습니다" ++ ++#: libdnf/dnf-context.cpp:3353 libdnf/dnf-context.cpp:3445 ++#: libdnf/dnf-context.cpp:3558 ++msgid "No modular data available" ++msgstr "모듈러 자료를 이용 할 수 없습니다" ++ ++#: libdnf/dnf-context.cpp:3370 ++#, c-format ++msgid "Ignoring unneeded information in argument: '%s'" ++msgstr "인수: '%s'에 불필요한 정보를 무시하기" ++ ++#: libdnf/dnf-context.cpp:3408 ++#, c-format ++msgid "" ++"Problem during enablement of dependency tree for module '%1$s' stream " ++"'%2$s': %3$s" ++msgstr "모듈 '%1$s' 스트림 '%2$s': %3$s 위해 의존성 트리의 활성화하는 중에 발생하는 문제" ++ ++#: libdnf/dnf-context.cpp:3420 ++msgid "Problems appeared for module enable request" ++msgstr "모듈 활성화 요청에 나타난 문제" ++ ++#. this really should never happen; unless the modular repodata is corrupted ++#: libdnf/dnf-context.cpp:3495 ++#, c-format ++msgid "Failed to parse module artifact NEVRA '%s'" ++msgstr "모듈 artifact NERVE '%s' 구분 분석에 실패함" ++ ++#: libdnf/dnf-context.cpp:3529 ++msgid "Problems appeared for module install request" ++msgstr "모듈 설치 요청을 위해 나타난 문제" ++ ++#: libdnf/dnf-context.cpp:3589 ++msgid "Problems appeared for module reset request" ++msgstr "모듈 초기화 요청을 위해 나나탄 문제" ++ ++#: libdnf/dnf-context.cpp:3591 ++msgid "Problems appeared for module disable request" ++msgstr "모듈 비활성화 요청을 위해 나타난 문제" ++ ++#: libdnf/dnf-context.cpp:3627 ++#, c-format ++msgid "" ++"The operation would result in switching of module '%s' stream '%s' to stream" ++" '%s'" ++msgstr "이 동작은 모듈 '%s'' 스트림 ‘%s'에서 스트림 '%s'로의 전환 결과입니다" ++ ++#: libdnf/dnf-context.cpp:3631 ++msgid "" ++"It is not possible to switch enabled streams of a module.\n" ++"It is recommended to remove all installed content from the module, and reset the module using 'microdnf module reset ' command. After you reset the module, you can install the other stream." + msgstr "" ++"활성화된 모듈 스트림을 전환 할 수 없습니다.\n" ++"설치된 모든 내용을 모듈에서 제거하고 ‘' 명령을 사용하여 모듈을 재설정하는 것이 좋습니다. 모듈을 재설정한 후, 다른 스트림을 설치 할 수 있습니다." + +-#: libdnf/dnf-goal.cpp:70 ++#: libdnf/dnf-goal.cpp:85 ++msgid "Could not depsolve transaction; " ++msgstr "연결을 해제 할 수 없습니다; " ++ ++#: libdnf/dnf-goal.cpp:87 + #, c-format + msgid "%i problem detected:\n" + msgid_plural "%i problems detected:\n" +-msgstr[0] "" ++msgstr[0] "%i 발견 된 문제 :\n" + +-#: libdnf/dnf-goal.cpp:78 ++#: libdnf/dnf-goal.cpp:95 + #, c-format + msgid " Problem %1$i: %2$s\n" +-msgstr "" ++msgstr " 문제 %1$i: %2$s\n" + +-#: libdnf/dnf-goal.cpp:80 ++#: libdnf/dnf-goal.cpp:97 + #, c-format + msgid " Problem: %s\n" +-msgstr "" ++msgstr " 문제: %s\n" + + #: libdnf/dnf-rpmts.cpp:79 + #, c-format + msgid "" + "No available modular metadata for modular package '%s'; cannot be installed " + "on the system" +-msgstr "" ++msgstr "모듈러 꾸러미 '%s'에 사용 가능한 모듈러 메타데이터가 없으며; 시스템에 설치 할 수 없습니다" + + #: libdnf/dnf-rpmts.cpp:121 libdnf/dnf-rpmts.cpp:166 + #, c-format +@@ -156,11 +265,11 @@ msgstr "설치 요소를 추가하지 못했습니다. %1$s [%2$i]" + #: libdnf/dnf-rpmts.cpp:274 + #, c-format + msgid "Error running transaction: %s" +-msgstr "트랜잭션 실행 오류 : %s" ++msgstr "연결 실행 오류 : %s" + + #: libdnf/dnf-rpmts.cpp:283 + msgid "Error running transaction and no problems were reported!" +-msgstr "트랜잭션을 실행하는 중 오류가 발생했으며 아무런 문제도보고되지 않았습니다!" ++msgstr "연결을 실행하는 중 오류가 발생했으며 아무런 문제도 보고되지 않았습니다!" + + #: libdnf/dnf-rpmts.cpp:346 + msgid "Fatal error, run database recovery" +@@ -176,87 +285,87 @@ msgstr "꾸러미를 찾지 못했습니다. %s" + msgid "could not add erase element %1$s(%2$i)" + msgstr "요소 지우기를 추가 할 수 없습니다. %1$s(%2$i)" + +-#: libdnf/dnf-sack.cpp:381 ++#: libdnf/dnf-sack.cpp:395 ++msgid "failed to add solv" ++msgstr "solv를 추가하지 못했습니다" ++ ++#: libdnf/dnf-sack.cpp:414 + #, c-format + msgid "no %1$s string for %2$s" +-msgstr "" +- +-#: libdnf/dnf-sack.cpp:404 +-msgid "failed to add solv" +-msgstr "solv를 추가하지 못했습니다." ++msgstr "%2$s에 %1$s 문자열이 없습니다" + +-#: libdnf/dnf-sack.cpp:422 ++#: libdnf/dnf-sack.cpp:424 + #, c-format + msgid "failed to open: %s" + msgstr "열지 못했습니다 : %s" + +-#: libdnf/dnf-sack.cpp:501 ++#: libdnf/dnf-sack.cpp:503 + #, c-format + msgid "cannot create temporary file: %s" + msgstr "임시 파일을 만들 수 없습니다. %s" + +-#: libdnf/dnf-sack.cpp:511 ++#: libdnf/dnf-sack.cpp:513 + #, c-format + msgid "failed opening tmp file: %s" + msgstr "여는 tmp 파일을 열지 못했습니다. %s" + +-#: libdnf/dnf-sack.cpp:523 ++#: libdnf/dnf-sack.cpp:525 + #, c-format + msgid "write_main() failed writing data: %i" +-msgstr "write_main() failed writing data: %i" ++msgstr "write_main() 실패한 쓰기 자료: %i" + +-#: libdnf/dnf-sack.cpp:540 ++#: libdnf/dnf-sack.cpp:542 + msgid "write_main() failed to re-load written solv file" +-msgstr "write_main ()이 작성된 solv 파일을 다시로드하지 못했습니다." ++msgstr "write_main ()이 작성된 solv 파일을 다시 적재하지 못했습니다" + +-#: libdnf/dnf-sack.cpp:605 ++#: libdnf/dnf-sack.cpp:607 + #, c-format + msgid "can not create temporary file %s" + msgstr "임시 파일을 만들 수 없습니다. %s" + +-#: libdnf/dnf-sack.cpp:623 ++#: libdnf/dnf-sack.cpp:625 + #, c-format + msgid "write_ext(%1$d) has failed: %2$d" +-msgstr "write_ext(%1$d) has failed: %2$d" ++msgstr "write_ext(%1$d) 실패하였습니다: %2$d" + +-#: libdnf/dnf-sack.cpp:678 ++#: libdnf/dnf-sack.cpp:680 + msgid "null repo md file" + msgstr "null repo md 파일" + +-#: libdnf/dnf-sack.cpp:687 ++#: libdnf/dnf-sack.cpp:689 + #, c-format + msgid "can not read file %1$s: %2$s" + msgstr "파일을 읽을 수 없습니다. %1$s: %2$s" + +-#: libdnf/dnf-sack.cpp:701 ++#: libdnf/dnf-sack.cpp:703 + msgid "repo_add_solv() has failed." +-msgstr "repo_add_solv() has failed." ++msgstr "repo_add_solv() 실패하였습니다." + +-#: libdnf/dnf-sack.cpp:714 ++#: libdnf/dnf-sack.cpp:716 + msgid "loading of MD_TYPE_PRIMARY has failed." +-msgstr "" ++msgstr "MD_TYPE_PRIMARY를 적재하지 못했습니다." + +-#: libdnf/dnf-sack.cpp:727 ++#: libdnf/dnf-sack.cpp:729 + msgid "repo_add_repomdxml/rpmmd() has failed." +-msgstr "repo_add_repomdxml/rpmmd() has failed." ++msgstr "repo_add_repomdxml/rpmmd() 실패하였습니다." + +-#: libdnf/dnf-sack.cpp:794 ++#: libdnf/dnf-sack.cpp:796 + msgid "failed to auto-detect architecture" +-msgstr "아키텍처 자동 검색에 실패했습니다." ++msgstr "구조 자동 검색에 실패했습니다" + +-#: libdnf/dnf-sack.cpp:919 ++#: libdnf/dnf-sack.cpp:961 + #, c-format + msgid "failed creating cachedir %s" + msgstr "캐시 된 생성 실패 %s" + +-#: libdnf/dnf-sack.cpp:1696 ++#: libdnf/dnf-sack.cpp:1738 + msgid "failed loading RPMDB" + msgstr "RPMDB로드 실패" + +-#: libdnf/dnf-sack.cpp:2403 ++#: libdnf/dnf-sack.cpp:2463 + #, c-format + msgid "No module defaults found: %s" +-msgstr "" ++msgstr "모듈 기본 설정을 찾을 수 없습니다: %s" + + #: libdnf/dnf-state.cpp:1184 + #, c-format +@@ -285,7 +394,7 @@ msgstr "이미 100 %% 상태 [%s]" + #: libdnf/dnf-transaction.cpp:300 + #, c-format + msgid "Sources not set when trying to ensure package %s" +-msgstr "패키지를 만들 때 소스가 설정되지 않았습니다. %s" ++msgstr "꾸러미를 만들 때 소스가 설정되지 않았습니다. %s" + + #: libdnf/dnf-transaction.cpp:326 + #, c-format +@@ -299,7 +408,7 @@ msgstr "신뢰할 수 없는지 확인하지 못했습니다. " + #: libdnf/dnf-transaction.cpp:377 + #, c-format + msgid "Downloaded file for %s not found" +-msgstr "에 대한 다운로드 파일 %s 찾을 수 없음" ++msgstr "에 대한 내려받기 파일 %s 찾을 수 없음" + + #: libdnf/dnf-transaction.cpp:397 + #, c-format +@@ -308,7 +417,7 @@ msgstr "꾸러미 %1$s 확인 및 복구 할 수 없습니다. %2$s GPG 사용 + + #: libdnf/dnf-transaction.cpp:831 libdnf/dnf-transaction.cpp:903 + msgid "Failed to get value for CacheDir" +-msgstr "CacheDir에 대한 값을 가져 오는 데 실패했습니다." ++msgstr "CacheDir에 대한 값을 가져 오는 데 실패했습니다" + + #: libdnf/dnf-transaction.cpp:911 + #, c-format +@@ -325,26 +434,26 @@ msgstr "에 대한 파일 시스템 크기를 가져 오는 데 실패했습니 + msgid "Not enough free space in %1$s: needed %2$s, available %3$s" + msgstr "여유 공간이 부족합니다. %1$s: 필요 %2$s, 이용 가능 %3$s" + +-#: libdnf/dnf-transaction.cpp:1196 ++#: libdnf/dnf-transaction.cpp:1195 + msgid "failed to set root" +-msgstr "루트를 설정하지 못했습니다." ++msgstr "루트를 설정하지 못했습니다" + +-#: libdnf/dnf-transaction.cpp:1418 ++#: libdnf/dnf-transaction.cpp:1416 + #, c-format + msgid "Error %i running transaction test" +-msgstr "오류 %i 실행중인 트랜잭션 테스트" ++msgstr "%i 연결 실행 중 오류" + +-#: libdnf/dnf-transaction.cpp:1458 ++#: libdnf/dnf-transaction.cpp:1456 + #, c-format + msgid "Error %i running transaction" +-msgstr "오류 %i 실행중인 거래" ++msgstr "오류 %i 실행중인 연결" + +-#: libdnf/dnf-transaction.cpp:1473 ++#: libdnf/dnf-transaction.cpp:1472 + #, c-format + msgid "Transaction did not go to writing phase, but returned no error(%i)" +-msgstr "트랜잭션이 쓰기 단계로 이동하지 않았지만 오류를 반환하지 않았습니다 (%i)" ++msgstr "연결이 쓰기 단계로 이동하지 않았지만 오류를 반환하지 않았습니다 (%i)" + +-#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:399 ++#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:403 + #, c-format + msgid "cannot open directory %1$s: %2$s" + msgstr "디렉토리를 열 수 없습니다. %1$s: %2$s" +@@ -354,369 +463,414 @@ msgstr "디렉토리를 열 수 없습니다. %1$s: %2$s" + msgid "failed to remove %s" + msgstr "제거하지 못했습니다. %s" + +-#: libdnf/goal/Goal.cpp:55 ++#: libdnf/goal/Goal.cpp:74 + msgid "Ill-formed Selector, presence of multiple match objects in the filter" +-msgstr "" ++msgstr "잘못된 형식의 선택기, 필터에 일치하는 개체가 여러 개 있음" + +-#: libdnf/goal/Goal.cpp:56 ++#: libdnf/goal/Goal.cpp:75 + msgid "Ill-formed Selector used for the operation, incorrect comparison type" +-msgstr "" ++msgstr "조작에 잘못 형성된 선택자, 잘못된 비교 유형" + +-#: libdnf/goal/Goal.cpp:67 libdnf/goal/Goal.cpp:94 ++#: libdnf/goal/Goal.cpp:86 libdnf/goal/Goal.cpp:113 + msgid " does not belong to a distupgrade repository" +-msgstr "" ++msgstr " distupgrade 저장소에 속하지 않습니다" + +-#: libdnf/goal/Goal.cpp:68 libdnf/goal/Goal.cpp:95 ++#: libdnf/goal/Goal.cpp:87 libdnf/goal/Goal.cpp:114 + msgid " has inferior architecture" +-msgstr "" ++msgstr " 하위 구조" + +-#: libdnf/goal/Goal.cpp:69 ++#: libdnf/goal/Goal.cpp:88 + msgid "problem with installed package " +-msgstr "" ++msgstr "설치된 꾸러미 문제 " + +-#: libdnf/goal/Goal.cpp:70 libdnf/goal/Goal.cpp:97 ++#: libdnf/goal/Goal.cpp:89 libdnf/goal/Goal.cpp:116 + msgid "conflicting requests" +-msgstr "" ++msgstr "충돌하는 요청" + +-#: libdnf/goal/Goal.cpp:71 libdnf/goal/Goal.cpp:98 ++#: libdnf/goal/Goal.cpp:90 libdnf/goal/Goal.cpp:117 + msgid "unsupported request" +-msgstr "" ++msgstr "지원되지 않는 요청" + +-#: libdnf/goal/Goal.cpp:72 libdnf/goal/Goal.cpp:99 ++#: libdnf/goal/Goal.cpp:91 libdnf/goal/Goal.cpp:118 + msgid "nothing provides requested " +-msgstr "" ++msgstr "요청이 없습니다 " + +-#: libdnf/goal/Goal.cpp:73 ++#: libdnf/goal/Goal.cpp:92 + #, c-format + msgid "package %s does not exist" +-msgstr "" ++msgstr "꾸러미 %s가 존재하지 않습니다" + +-#: libdnf/goal/Goal.cpp:74 libdnf/goal/Goal.cpp:101 ++#: libdnf/goal/Goal.cpp:93 libdnf/goal/Goal.cpp:120 + msgid " is provided by the system" +-msgstr "" ++msgstr " 시스템에서 제공" + +-#: libdnf/goal/Goal.cpp:75 libdnf/goal/Goal.cpp:102 ++#: libdnf/goal/Goal.cpp:94 libdnf/goal/Goal.cpp:121 + msgid "some dependency problem" +-msgstr "" ++msgstr "종속성 문제" + +-#: libdnf/goal/Goal.cpp:76 ++#: libdnf/goal/Goal.cpp:95 + msgid "cannot install the best update candidate for package " +-msgstr "" ++msgstr "꾸러미에 가장 적합한 최신화 선택을 설치 할 수 없습니다 " + +-#: libdnf/goal/Goal.cpp:77 libdnf/goal/Goal.cpp:104 ++#: libdnf/goal/Goal.cpp:96 libdnf/goal/Goal.cpp:123 + msgid "cannot install the best candidate for the job" +-msgstr "" ++msgstr "작업에 가장 적합한 선택을 설치 할 수 없습니다" + +-#: libdnf/goal/Goal.cpp:78 ++#: libdnf/goal/Goal.cpp:97 + #, c-format + msgid "package %s is filtered out by modular filtering" +-msgstr "" ++msgstr "꾸러미 %s가 모듈식으로 걸러 제거됩니다" + +-#: libdnf/goal/Goal.cpp:79 ++#: libdnf/goal/Goal.cpp:98 + #, c-format + msgid "package %s does not have a compatible architecture" +-msgstr "" ++msgstr "꾸러미 %s에 호환 구조가 없습니다" + +-#: libdnf/goal/Goal.cpp:80 ++#: libdnf/goal/Goal.cpp:99 + #, c-format + msgid "package %s is not installable" +-msgstr "" ++msgstr "꾸러미 %s 가 설치 할 수 없습니다" + +-#: libdnf/goal/Goal.cpp:81 ++#: libdnf/goal/Goal.cpp:100 + #, c-format + msgid "package %s is filtered out by exclude filtering" +-msgstr "" ++msgstr "꾸러미 %s가 걸러지는 것에서 제외되었습니다" + +-#: libdnf/goal/Goal.cpp:82 ++#: libdnf/goal/Goal.cpp:101 + #, c-format + msgid "nothing provides %s needed by %s" +-msgstr "" ++msgstr "%s에 필요한 %s가 제공되지 않았습니다" + +-#: libdnf/goal/Goal.cpp:83 ++#: libdnf/goal/Goal.cpp:102 + #, c-format + msgid "cannot install both %s and %s" +-msgstr "" ++msgstr "%s 와 %s 모두 설치 할 수 없습니다" + +-#: libdnf/goal/Goal.cpp:84 ++#: libdnf/goal/Goal.cpp:103 + #, c-format + msgid "package %s conflicts with %s provided by %s" +-msgstr "" ++msgstr "꾸러미 %s은 %s에서 제공된 %s와 충돌합니다" + +-#: libdnf/goal/Goal.cpp:85 ++#: libdnf/goal/Goal.cpp:104 + #, c-format + msgid "package %s obsoletes %s provided by %s" +-msgstr "" ++msgstr "꾸러미 %s가 %s에의해 제공된 %s를 폐기합니다" + +-#: libdnf/goal/Goal.cpp:86 ++#: libdnf/goal/Goal.cpp:105 + #, c-format + msgid "installed package %s obsoletes %s provided by %s" +-msgstr "" ++msgstr "설치된 꾸러미 %s는 %s에 의해 %s 폐기되었습니다" + +-#: libdnf/goal/Goal.cpp:87 ++#: libdnf/goal/Goal.cpp:106 + #, c-format + msgid "package %s implicitly obsoletes %s provided by %s" +-msgstr "" ++msgstr "꾸러미 %s가 %s에 의해 %s가 암시적으로 폐기되었습니다" + +-#: libdnf/goal/Goal.cpp:88 ++#: libdnf/goal/Goal.cpp:107 + #, c-format + msgid "package %s requires %s, but none of the providers can be installed" +-msgstr "" ++msgstr "꾸러미 %s는 %s가 필요하지만, 공급자가 없어 설치 할 수 없습니다" + +-#: libdnf/goal/Goal.cpp:89 ++#: libdnf/goal/Goal.cpp:108 + #, c-format + msgid "package %s conflicts with %s provided by itself" +-msgstr "" ++msgstr "꾸러미 %s가 자체적으로 제공된 %s와 충돌합니다" + +-#: libdnf/goal/Goal.cpp:90 ++#: libdnf/goal/Goal.cpp:109 + #, c-format + msgid "both package %s and %s obsolete %s" +-msgstr "" ++msgstr "꾸러미 %s 와 %s 는 모두 %s에서 폐기되었습니다" + +-#: libdnf/goal/Goal.cpp:96 ++#: libdnf/goal/Goal.cpp:115 + msgid "problem with installed module " +-msgstr "" ++msgstr "설치된 모듈 문제 " + +-#: libdnf/goal/Goal.cpp:100 ++#: libdnf/goal/Goal.cpp:119 + #, c-format + msgid "module %s does not exist" +-msgstr "" ++msgstr "모듈 %s이 존재하지 않음" + +-#: libdnf/goal/Goal.cpp:103 ++#: libdnf/goal/Goal.cpp:122 + msgid "cannot install the best update candidate for module " +-msgstr "" ++msgstr "모듈에 가장 적합한 최신화 추천을 설치 할 수 없습니다 " + +-#: libdnf/goal/Goal.cpp:105 libdnf/goal/Goal.cpp:108 ++#: libdnf/goal/Goal.cpp:124 libdnf/goal/Goal.cpp:127 + #, c-format + msgid "module %s is disabled" +-msgstr "" ++msgstr "모듈 %s를 사용할 수 없습니다" + +-#: libdnf/goal/Goal.cpp:106 ++#: libdnf/goal/Goal.cpp:125 + #, c-format + msgid "module %s does not have a compatible architecture" +-msgstr "" ++msgstr "모듈 %s 에 호환되는 구조가 없습니다" + +-#: libdnf/goal/Goal.cpp:107 ++#: libdnf/goal/Goal.cpp:126 + #, c-format + msgid "module %s is not installable" +-msgstr "" ++msgstr "모듈 %s 를 설치 할 수 없습니다" + +-#: libdnf/goal/Goal.cpp:109 ++#: libdnf/goal/Goal.cpp:128 + #, c-format + msgid "nothing provides %s needed by module %s" +-msgstr "" ++msgstr "모듈 %s 에 필요한 %s 가 제공되지 않았습니다" + +-#: libdnf/goal/Goal.cpp:110 ++#: libdnf/goal/Goal.cpp:129 + #, c-format + msgid "cannot install both modules %s and %s" +-msgstr "" ++msgstr "모듈 %s 와 %s를 모두 설치 할 수 없습니다" + +-#: libdnf/goal/Goal.cpp:111 ++#: libdnf/goal/Goal.cpp:130 + #, c-format + msgid "module %s conflicts with %s provided by %s" +-msgstr "" ++msgstr "모듈 %s가 %s에 의해 제공된 %s와 충돌합니다" + +-#: libdnf/goal/Goal.cpp:112 ++#: libdnf/goal/Goal.cpp:131 + #, c-format + msgid "module %s obsoletes %s provided by %s" +-msgstr "" ++msgstr "모듈 %s가 %s에 의해 제공된 %s를 폐기하였습니다" + +-#: libdnf/goal/Goal.cpp:113 ++#: libdnf/goal/Goal.cpp:132 + #, c-format + msgid "installed module %s obsoletes %s provided by %s" +-msgstr "" ++msgstr "설치된 모듈 %s 가 %s의해 제공된 %s를 폐기합니다" + +-#: libdnf/goal/Goal.cpp:114 ++#: libdnf/goal/Goal.cpp:133 + #, c-format + msgid "module %s implicitly obsoletes %s provided by %s" +-msgstr "" ++msgstr "모듈 %s가 %s 에 의해 %s를 암시적으로 폐기되었습니다" + +-#: libdnf/goal/Goal.cpp:115 ++#: libdnf/goal/Goal.cpp:134 + #, c-format + msgid "module %s requires %s, but none of the providers can be installed" +-msgstr "" ++msgstr "모듈 %s 에 %s 가 필요하지만 공급 업체가 없어 설치 할 수 없습니다" + +-#: libdnf/goal/Goal.cpp:116 ++#: libdnf/goal/Goal.cpp:135 + #, c-format + msgid "module %s conflicts with %s provided by itself" +-msgstr "" ++msgstr "모듈 %s가 자체적으로 제공된 %s와 충돌합니다" + +-#: libdnf/goal/Goal.cpp:117 ++#: libdnf/goal/Goal.cpp:136 + #, c-format + msgid "both module %s and %s obsolete %s" +-msgstr "" ++msgstr "모듈 %s와 %s가 %s에서 폐기되었습니다" + +-#: libdnf/goal/Goal.cpp:1038 ++#: libdnf/goal/Goal.cpp:1051 + msgid "no solver set" +-msgstr "" ++msgstr "solver 설정 없음" + +-#: libdnf/goal/Goal.cpp:1043 ++#: libdnf/goal/Goal.cpp:1056 + #, c-format + msgid "failed to make %s absolute" +-msgstr "" ++msgstr "%s 절대값을 생성을 실패하였습니다" + +-#: libdnf/goal/Goal.cpp:1050 ++#: libdnf/goal/Goal.cpp:1063 + #, c-format + msgid "failed writing debugdata to %1$s: %2$s" +-msgstr "" ++msgstr "%1$s: %2$s에 디버그자료 쓰기를 실패했습니다" + +-#: libdnf/goal/Goal.cpp:1062 ++#: libdnf/goal/Goal.cpp:1075 + msgid "no solv in the goal" +-msgstr "" ++msgstr "목표에 solv가 없다" + +-#: libdnf/goal/Goal.cpp:1064 ++#: libdnf/goal/Goal.cpp:1077 + msgid "no solution, cannot remove protected package" +-msgstr "" ++msgstr "해결책 없음, 보호 된 꾸러미를 제거 할 수 없음" + +-#: libdnf/goal/Goal.cpp:1067 ++#: libdnf/goal/Goal.cpp:1080 + msgid "no solution possible" +-msgstr "" ++msgstr "해결책 없음" ++ ++#: libdnf/goal/Goal.cpp:1206 ++msgid "Problem: " ++msgstr "문제: " + +-#: libdnf/goal/Goal.cpp:1479 ++#: libdnf/goal/Goal.cpp:1211 ++#, c-format ++msgid "Problem %d: " ++msgstr "문제 %d: " ++ ++#: libdnf/goal/Goal.cpp:1538 + msgid "" + "The operation would result in removing the following protected packages: " +-msgstr "" ++msgstr "이 작업으로 인해 다음과 같은 보호 꾸러미가 제거됩니다. " + +-#: libdnf/hy-iutil.cpp:322 ++#: libdnf/hy-iutil.cpp:326 + #, c-format + msgid "Failed renaming %1$s to %2$s: %3$s" +-msgstr "" ++msgstr "%1$s 을 %2$s: %3$s에 이름 바꾸기 실패" + +-#: libdnf/hy-iutil.cpp:330 ++#: libdnf/hy-iutil.cpp:334 + #, c-format + msgid "Failed setting perms on %1$s: %2$s" +-msgstr "" ++msgstr "%1$s: %2$s에 perms 설정 실패하였습니다" + +-#: libdnf/hy-iutil.cpp:376 ++#: libdnf/hy-iutil.cpp:380 + #, c-format + msgid "cannot create directory %1$s: %2$s" +-msgstr "" ++msgstr "디렉토리를 생성 할 수 없습니다 %1$s: %2$s" + +-#: libdnf/hy-iutil.cpp:411 ++#: libdnf/hy-iutil.cpp:415 + #, c-format + msgid "cannot stat path %1$s: %2$s" +-msgstr "" ++msgstr "경로 %1$s: %2$s stat 할 수 없습니다" + +-#: libdnf/module/ModulePackage.cpp:499 ++#: libdnf/module/ModulePackage.cpp:560 + #, c-format + msgid "Invalid format of Platform module: %s" +-msgstr "" ++msgstr "잘못된 형식의 기반 모듈: %s" + +-#: libdnf/module/ModulePackage.cpp:514 ++#: libdnf/module/ModulePackage.cpp:575 + msgid "Multiple module platforms provided by available packages\n" +-msgstr "" ++msgstr "사용 가능한 꾸러미로 제공되는 다중 모듈 기반\n" + +-#: libdnf/module/ModulePackage.cpp:527 ++#: libdnf/module/ModulePackage.cpp:588 + msgid "Multiple module platforms provided by installed packages\n" +-msgstr "" ++msgstr "설치된 꾸러미로 제공되는 다중 모듈 기반\n" + +-#: libdnf/module/ModulePackage.cpp:554 ++#: libdnf/module/ModulePackage.cpp:615 + #, c-format + msgid "Detection of Platform Module in %s failed: %s" +-msgstr "" ++msgstr "%s 실패한: %s 에서 기반(Platform) 모듈 감지" + +-#: libdnf/module/ModulePackage.cpp:563 ++#: libdnf/module/ModulePackage.cpp:624 + #, c-format + msgid "Missing PLATFORM_ID in %s" +-msgstr "" ++msgstr "%s에서 PLATFORM_ID가 누락됨" + +-#: libdnf/module/ModulePackage.cpp:568 ++#: libdnf/module/ModulePackage.cpp:629 + msgid "No valid Platform ID detected" +-msgstr "" ++msgstr "유효한 기반(Platform) ID가 없습니다" + + #: libdnf/module/ModulePackageContainer.cpp:68 + #, c-format + msgid "Cannot enable multiple streams for module '%s'" +-msgstr "" ++msgstr "모듈 '%s’를 위해 다중 스트림을 활성화 할 수 없습니다" + +-#: libdnf/module/ModulePackageContainer.cpp:294 ++#: libdnf/module/ModulePackageContainer.cpp:295 + #, c-format + msgid "Conflicting defaults with repo '%s': %s" +-msgstr "" ++msgstr "저장소 '%s: %s'와 기본 설정이 충돌합니다" ++ ++#: libdnf/module/ModulePackageContainer.cpp:841 ++msgid "Installing module profiles:\n" ++msgstr "모듈 프로파일 설치:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:856 ++msgid "Disabling module profiles:\n" ++msgstr "모듈 프로파일 비활성화:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:871 ++msgid "Enabling module streams:\n" ++msgstr "모듈 스트림 활성화:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:885 ++msgid "Switching module streams:\n" ++msgstr "모듈 스트림 전환:\n" + +-#: libdnf/module/ModulePackageContainer.cpp:1569 ++#: libdnf/module/ModulePackageContainer.cpp:903 ++msgid "Disabling modules:\n" ++msgstr "모듈 비활성화:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:914 ++msgid "Resetting modules:\n" ++msgstr "모듈 재설정:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:1599 + #, c-format + msgid "Unable to load modular Fail-Safe data at '%s'" +-msgstr "" ++msgstr "'%s'에서 모듈식 Fail-Safe 자료를 적재 할 수 없습니다" + +-#: libdnf/module/ModulePackageContainer.cpp:1575 ++#: libdnf/module/ModulePackageContainer.cpp:1605 + #, c-format + msgid "Unable to load modular Fail-Safe data for module '%s:%s'" +-msgstr "" ++msgstr "모듈 '%s:%s'에 대해 모듈식 Fail-Safe 자료를 적재 할 수 없습니다" + +-#: libdnf/module/ModulePackageContainer.cpp:1639 ++#: libdnf/module/ModulePackageContainer.cpp:1663 + #, c-format + msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" +-msgstr "" ++msgstr "모듈식 Fail-Safe 데이터에 대한 “%s\" 디렉토리를 만들 수 없습니다: %s" + +-#: libdnf/module/ModulePackageContainer.cpp:1661 ++#: libdnf/module/ModulePackageContainer.cpp:1679 + #, c-format + msgid "Unable to save a modular Fail Safe data to '%s'" +-msgstr "" ++msgstr "모듈식 Fail Safe 자료를 '%s'에 저장 할 수 없습니다" + +-#: libdnf/module/ModulePackageContainer.cpp:1686 ++#: libdnf/module/ModulePackageContainer.cpp:1702 + #, c-format + msgid "Unable to remove a modular Fail Safe data in '%s'" +-msgstr "" ++msgstr "'%s'에서 모듈식 Fail Safe 자료를 제거 할 수 없습니다" ++ ++#: libdnf/module/ModulePackageContainer.cpp:1734 ++#, c-format ++msgid "" ++"Unable to apply modular obsoletes to '%s:%s' because target module '%s' is " ++"disabled" ++msgstr "'%s:%s'에 사용되지 않는 모듈을 적용할 수 없습니다(대상 모듈 '%s'가 비활성화 되어 있기 때문에)" + + #: libdnf/module/modulemd/ModuleMetadata.cpp:86 + #, c-format + msgid "Failed to update from string: %s" +-msgstr "" ++msgstr "문자열에서 최신화하지 못했습니다: %s" + + #: libdnf/module/modulemd/ModuleMetadata.cpp:110 + #, c-format + msgid "Failed to resolve: %s" +-msgstr "" ++msgstr "해결하지 못했습니다: %s" + + #: libdnf/module/modulemd/ModuleMetadata.cpp:115 + #, c-format + msgid "There were errors while resolving modular defaults: %s" +-msgstr "" ++msgstr "모듈식 기본값을 해결하는 동안 오류가 발생했습니다: %s" + + #: libdnf/module/modulemd/ModuleMetadata.cpp:120 + #, c-format + msgid "Failed to upgrade defaults: %s" +-msgstr "" ++msgstr "기본값을 최신화에 실패하였습니다: %s" + + #: libdnf/module/modulemd/ModuleMetadata.cpp:123 + #, c-format + msgid "Failed to upgrade streams: %s" +-msgstr "" ++msgstr "스트림 최신화에 실패하였습니다: %s" ++ ++#: libdnf/module/modulemd/ModuleMetadata.cpp:212 ++#, c-format ++msgid "Cannot retrieve module obsoletes because no stream matching %s: %s" ++msgstr "%s: %s 일치하는 스트림이 없기 때문에 구식 모듈을 검색 할 수 없습니다" + + #: libdnf/plugin/plugin.cpp:46 + #, c-format + msgid "Can't load shared library \"%s\": %s" +-msgstr "" ++msgstr "공유 라이브러리\"%s\": %s 를 적재 할 수 없습니다" + + #: libdnf/plugin/plugin.cpp:61 libdnf/plugin/plugin.cpp:67 + #: libdnf/plugin/plugin.cpp:73 libdnf/plugin/plugin.cpp:79 + #, c-format + msgid "Can't obtain address of symbol \"%s\": %s" +-msgstr "" ++msgstr "기호 \"%s\": %s 의 주소를 가져 올 수 없습니다" + + #: libdnf/plugin/plugin.cpp:86 + #, c-format + msgid "Loading plugin file=\"%s\"" +-msgstr "" ++msgstr "플러그인 파일 적재중=\"%s\"" + + #: libdnf/plugin/plugin.cpp:89 + #, c-format + msgid "Loaded plugin name=\"%s\", version=\"%s\"" +-msgstr "" ++msgstr "적재된 플러그인 이름=\"%s\", 버전=\"%s\"" + + #: libdnf/plugin/plugin.cpp:96 + msgid "Plugins::loadPlugins() dirPath cannot be empty" +-msgstr "" ++msgstr "Plugins::loadPlugins() dirPath는 비워 둘 수 없습니다" + + #: libdnf/plugin/plugin.cpp:105 + #, c-format + msgid "Can't read plugin directory \"%s\": %s" +-msgstr "" ++msgstr "플러그인 디렉토리 \"%s\": %s 를 읽을 수 없습니다" + + #: libdnf/plugin/plugin.cpp:114 + #, c-format + msgid "Can't load plugin \"%s\": %s" +-msgstr "" ++msgstr "플러그인\"%s\": %s를 적재 할 수 없습니다" + + #: libdnf/repo/DependencySplitter.cpp:50 + msgid "" +@@ -724,198 +878,215 @@ msgid "" + "deprecated and the support will be dropped in future versions. Use '=' " + "operator instead." + msgstr "" ++"reldeps에 '=='연산자를 사용하면 정의되지 않은 동작이 발생할 수 있습니다. 이 연산자는 더 이상 사용되지 않으며, 향후 " ++"버전에서는 지원이 중단됩니다. 대신 '=' 연산자를 사용하세요." + + #: libdnf/repo/Repo.cpp:321 + #, c-format + msgid "Repository %s has no mirror or baseurl set." +-msgstr "" ++msgstr "저장소 %s 는 연결주소 또는 baseurl 구성을 갖고 있지 않습니다." + + #: libdnf/repo/Repo.cpp:330 + #, c-format + msgid "Repository '%s' has unsupported type: 'type=%s', skipping." +-msgstr "" ++msgstr "저장소 '%s'는 지원하지 않는 유형: 'type=%s'이며, 건너뜁니다." + +-#: libdnf/repo/Repo.cpp:546 ++#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:610 libdnf/repo/Repo.cpp:641 ++#: libdnf/repo/Repo.cpp:1382 + #, c-format +-msgid "Cannot find a valid baseurl for repo: %s" +-msgstr "" ++msgid "repo '%s': 'basecachedir' is not set" ++msgstr "repo '%s': 'basecachedir가 구성되어 있지 않습니다" + +-#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 ++#: libdnf/repo/Repo.cpp:512 + msgid "" + "Maximum download speed is lower than minimum. Please change configuration of" + " minrate or throttle" +-msgstr "" ++msgstr "최대 내려받기 속도는 최저보다 낮습니다. 최저속도나 변환 환경구성을 변경해 주세요" ++ ++#: libdnf/repo/Repo.cpp:546 ++#, c-format ++msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" ++msgstr "repo '%s': 'proxy_username' 는 구성되어 있지만 'proxy_password'가 없습니다" ++ ++#: libdnf/repo/Repo.cpp:548 ++msgid "'proxy_username' is set but not 'proxy_password'" ++msgstr "'proxy_username' 이 구성되어 있지만 'proxy_password'가 없습니다" + +-#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 ++#: libdnf/repo/Repo.cpp:629 ++#, c-format ++msgid "Cannot find a valid baseurl for repo: %s" ++msgstr "repo: %s 를 위해 유효한 baseurl을 찾을 수 없습니다" ++ ++#: libdnf/repo/Repo.cpp:660 libdnf/repo/Repo.cpp:682 + #, c-format + msgid "%s: gpgme_data_new_from_fd(): %s" + msgstr "%s: gpgme_data_new_from_fd(): %s" + +-#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 ++#: libdnf/repo/Repo.cpp:668 libdnf/repo/Repo.cpp:690 + #, c-format + msgid "%s: gpgme_op_import(): %s" + msgstr "%s: gpgme_op_import(): %s" + +-#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 ++#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:779 libdnf/repo/Repo.cpp:907 + #, c-format + msgid "%s: gpgme_ctx_set_engine_info(): %s" + msgstr "%s: gpgme_ctx_set_engine_info(): %s" + +-#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 ++#: libdnf/repo/Repo.cpp:740 libdnf/repo/Repo.cpp:804 + #, c-format + msgid "can not list keys: %s" + msgstr "열쇠를 나열 할 수 없습니다 : %s" + +-#: libdnf/repo/Repo.cpp:806 ++#: libdnf/repo/Repo.cpp:833 + #, c-format + msgid "Failed to retrieve GPG key for repo '%s': %s" +-msgstr "" ++msgstr "repo '%s': %sf 를 위해 GPG key 가져오기에 실패하였습니다" + +-#: libdnf/repo/Repo.cpp:859 ++#: libdnf/repo/Repo.cpp:886 + #, c-format + msgid "repo %s: 0x%s already imported" +-msgstr "레포 %s: 0x%s 이미 수입" ++msgstr "repo %s: 0x%s를 이미 가져왔습니다" + +-#: libdnf/repo/Repo.cpp:887 ++#: libdnf/repo/Repo.cpp:914 + #, c-format + msgid "repo %s: imported key 0x%s." +-msgstr "레포 %s: 가져온 키 0x%s." ++msgstr "repo %s: 0x%s 키를 가져왔습니다." + +-#: libdnf/repo/Repo.cpp:1131 ++#: libdnf/repo/Repo.cpp:1162 + #, c-format + msgid "reviving: repo '%s' skipped, no metalink." + msgstr "부활 : repo '%s'건너 뛰었습니다." + +-#: libdnf/repo/Repo.cpp:1150 ++#: libdnf/repo/Repo.cpp:1181 + #, c-format + msgid "reviving: repo '%s' skipped, no usable hash." + msgstr "부활 : repo '%s'건너 뛰었습니다. 사용 가능한 해시가 없습니다." + +-#: libdnf/repo/Repo.cpp:1173 ++#: libdnf/repo/Repo.cpp:1204 + #, c-format + msgid "reviving: failed for '%s', mismatched %s sum." + msgstr "되살리기 : 실패한 '%s', 불일치 %s 합집합." + +-#: libdnf/repo/Repo.cpp:1179 ++#: libdnf/repo/Repo.cpp:1210 + #, c-format + msgid "reviving: '%s' can be revived - metalink checksums match." + msgstr "되살아 난다 : '%s'부활 할 수 있습니다 - metalink 체크섬이 일치합니다." + +-#: libdnf/repo/Repo.cpp:1204 ++#: libdnf/repo/Repo.cpp:1235 + #, c-format + msgid "reviving: '%s' can be revived - repomd matches." + msgstr "되살아 난다 : '%s'부활 할 수 있습니다 - repomd가 일치합니다." + +-#: libdnf/repo/Repo.cpp:1206 ++#: libdnf/repo/Repo.cpp:1237 + #, c-format + msgid "reviving: failed for '%s', mismatched repomd." + msgstr "되살리기 : 실패한 '%s', 일치하지 않는 repomd." + +-#: libdnf/repo/Repo.cpp:1224 ++#: libdnf/repo/Repo.cpp:1255 + #, c-format + msgid "Cannot create repo destination directory \"%s\": %s" +-msgstr "" ++msgstr "repo 목적지 디렉토리 \"%s\": %s 를 생성 할 수 없습니다" + +-#: libdnf/repo/Repo.cpp:1230 ++#: libdnf/repo/Repo.cpp:1261 + #, c-format + msgid "Cannot create repo temporary directory \"%s\": %s" + msgstr "임시 저장소 디렉토리를 만들 수 없습니다 \"%s\": %s" + +-#: libdnf/repo/Repo.cpp:1244 ++#: libdnf/repo/Repo.cpp:1275 + #, c-format + msgid "Cannot create directory \"%s\": %s" + msgstr "디렉토리를 만들 수 없습니다 \"%s\": %s" + +-#: libdnf/repo/Repo.cpp:1267 ++#: libdnf/repo/Repo.cpp:1298 + #, c-format + msgid "Cannot rename directory \"%s\" to \"%s\": %s" + msgstr "디렉터리 이름을 바꿀 수 없습니다 \"%s\"~\"%s\": %s" + +-#: libdnf/repo/Repo.cpp:1290 ++#: libdnf/repo/Repo.cpp:1321 + #, c-format + msgid "repo: using cache for: %s" + msgstr "repo : 캐시 사용 : %s" + +-#: libdnf/repo/Repo.cpp:1302 ++#: libdnf/repo/Repo.cpp:1333 + #, c-format + msgid "Cache-only enabled but no cache for '%s'" + msgstr "캐시 만 사용 가능하지만 '%s'" + +-#: libdnf/repo/Repo.cpp:1306 ++#: libdnf/repo/Repo.cpp:1337 + #, c-format + msgid "repo: downloading from remote: %s" +-msgstr "repo : 원격에서 다운로드 중 : %s" ++msgstr "repo : 원격에서 내려받기 중 : %s" + +-#: libdnf/repo/Repo.cpp:1312 ++#: libdnf/repo/Repo.cpp:1344 + #, c-format + msgid "Failed to download metadata for repo '%s': %s" +-msgstr "" ++msgstr "repo '%s': %s 를 위해 메타데이타 내려받기에 실패하였습니다" + +-#: libdnf/repo/Repo.cpp:1338 ++#: libdnf/repo/Repo.cpp:1370 + msgid "getCachedir(): Computation of SHA256 failed" +-msgstr "getCachedir () : SHA256 계산에 실패했습니다." ++msgstr "getCachedir () : SHA256 계산에 실패했습니다" + +-#: libdnf/repo/Repo.cpp:1363 ++#: libdnf/repo/Repo.cpp:1398 + #, c-format + msgid "Cannot create persistdir \"%s\": %s" +-msgstr "" ++msgstr "persistdir \"%s\": %s 를 생성 할 수 없습니다" + +-#: libdnf/repo/Repo.cpp:1763 ++#: libdnf/repo/Repo.cpp:1775 + msgid "resume cannot be used simultaneously with the byterangestart param" +-msgstr "이력서는 byterangestart 매개 변수와 동시에 사용할 수 없습니다." ++msgstr "이력서는 byterangestart 매개 변수와 동시에 사용 할 수 없습니다" + +-#: libdnf/repo/Repo.cpp:1780 ++#: libdnf/repo/Repo.cpp:1792 + #, c-format + msgid "PackageTarget initialization failed: %s" + msgstr "PackageTarget 초기화에 실패했습니다 : %s" + +-#: libdnf/repo/Repo.cpp:1886 ++#: libdnf/repo/Repo.cpp:1898 + #, c-format + msgid "Cannot open %s: %s" + msgstr "열 수 없다 %s: %s" + +-#: libdnf/repo/Repo.cpp:1930 ++#: libdnf/repo/Repo.cpp:1942 + #, c-format + msgid "Log handler with id %ld doesn't exist" +-msgstr "ID가있는 로그 처리기 %ld 존재하지 않는다." ++msgstr "ID가 있는 로그 처리기 %ld 존재하지 않는다" + + #: libdnf/transaction/Swdb.cpp:173 + msgid "In progress" + msgstr "진행 중" + +-#: libdnf/transaction/Swdb.cpp:188 libdnf/transaction/Swdb.cpp:216 +-#: libdnf/transaction/Swdb.cpp:228 libdnf/transaction/Swdb.cpp:245 +-#: libdnf/transaction/Swdb.cpp:384 libdnf/transaction/Swdb.cpp:394 ++#: libdnf/transaction/Swdb.cpp:187 libdnf/transaction/Swdb.cpp:215 ++#: libdnf/transaction/Swdb.cpp:227 libdnf/transaction/Swdb.cpp:244 ++#: libdnf/transaction/Swdb.cpp:383 libdnf/transaction/Swdb.cpp:393 + msgid "Not in progress" + msgstr "진행 중이 아님" + +-#: libdnf/transaction/Swdb.cpp:255 ++#: libdnf/transaction/Swdb.cpp:254 + msgid "No transaction in progress" +-msgstr "진행중인 트랜잭션 없음" ++msgstr "진행 중인 연결 없음" + + #: libdnf/transaction/TransactionItem.cpp:147 + msgid "Attempt to insert transaction item into completed transaction" +-msgstr "트랜잭션 항목을 완료된 트랜잭션에 삽입하려고 시도했습니다." ++msgstr "연결 항목을 완료된 연결에 삽입하려고 시도했습니다" + + #: libdnf/transaction/TransactionItem.cpp:218 + msgid "Attempt to update transaction item in completed transaction" +-msgstr "완료된 트랜잭션에서 트랜잭션 항목 업데이트를 시도합니다." ++msgstr "완료된 연결에서 연결 항목 최신화를 시도합니다" + + #: libdnf/transaction/Transformer.cpp:76 + msgid "Database Corrupted: no row 'version' in table 'config'" +-msgstr "" ++msgstr "데이타베이스가 오염되었습니다: 테이블 'config'에 'version' 행이 없습니다" + + #: libdnf/transaction/Transformer.cpp:681 + msgid "Transformer: can't open history persist dir" +-msgstr "변압기 : 역사를 열 수 없습니다." ++msgstr "변형 : persist dir 기록을 열 수 없습니다" + + #: libdnf/transaction/Transformer.cpp:694 + msgid "Couldn't find a history database" +-msgstr "기록 데이터베이스를 찾을 수 없습니다." ++msgstr "기록 데이타베이스를 찾을 수 없습니다" + + #: libdnf/transaction/private/Transaction.cpp:41 + msgid "Transaction has already began!" +-msgstr "거래가 이미 시작되었습니다!" ++msgstr "연결이 이미 시작되었습니다!" + + #: libdnf/transaction/private/Transaction.cpp:58 + #, c-format +@@ -924,7 +1095,4 @@ msgstr "TransactionItem 상태가 설정되지 않았습니다. %s" + + #: libdnf/transaction/private/Transaction.cpp:243 + msgid "Can't add console output to unsaved transaction" +-msgstr "저장되지 않은 트랜잭션에 콘솔 출력을 추가 할 수 없습니다." +- +-#~ msgid "failed calculating RPMDB checksum" +-#~ msgstr "RPMDB 체크섬 계산 실패" ++msgstr "저장되지 않은 연결에 콘솔 출력을 추가 할 수 없습니다" +diff --git a/po/zh_CN.po b/po/zh_CN.po +index 9583b075..6bb1680f 100644 +--- a/po/zh_CN.po ++++ b/po/zh_CN.po +@@ -1,19 +1,20 @@ +-# Charles Lee , 2017. #zanata, 2020. ++# Charles Lee , 2017. #zanata, 2020, 2021. + # Ludek Janda , 2018. #zanata ++# Sundeep Anand , 2021. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2020-07-09 13:27+0000\n" +-"Last-Translator: Charles Lee \n" +-"Language-Team: Chinese (Simplified) \n" ++"POT-Creation-Date: 2021-08-11 14:28+0200\n" ++"PO-Revision-Date: 2021-09-06 17:27+0000\n" ++"Last-Translator: Sundeep Anand \n" ++"Language-Team: Chinese (Simplified) \n" + "Language: zh_CN\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Weblate 4.1.1\n" ++"X-Generator: Weblate 4.8\n" + + #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40 + msgid "no value specified" +@@ -32,37 +33,46 @@ msgstr "无法把 '%s' 转换为字节" + #: libdnf/conf/ConfigMain.cpp:83 libdnf/conf/OptionSeconds.cpp:66 + #, c-format + msgid "unknown unit '%s'" +-msgstr "未知单元 “%s”" ++msgstr "未知单元 '%s'" + +-#: libdnf/conf/ConfigMain.cpp:332 ++#: libdnf/conf/ConfigMain.cpp:204 libdnf/conf/OptionEnum.cpp:83 ++#: libdnf/conf/OptionNumber.cpp:88 ++msgid "invalid value" ++msgstr "无效值" ++ ++#: libdnf/conf/ConfigMain.cpp:207 ++msgid "value 1 is not allowed" ++msgstr "1 不是一个被允许的值" ++ ++#: libdnf/conf/ConfigMain.cpp:209 ++msgid "negative value is not allowed" ++msgstr "负数值不被允许" ++ ++#: libdnf/conf/ConfigMain.cpp:341 + #, c-format + msgid "percentage '%s' is out of range" + msgstr "百分数 '%s' 超出范围" + +-#: libdnf/conf/OptionBinds.cpp:76 ++#: libdnf/conf/OptionBinds.cpp:85 + #, c-format + msgid "Configuration: OptionBinding with id \"%s\" does not exist" +-msgstr "配置:ID 为 \"%s\" 的 OptionBinding 不存在" ++msgstr "配置:ID 为 \"%s\" 的 OptionBinding 不存在" + +-#: libdnf/conf/OptionBinds.cpp:88 ++#: libdnf/conf/OptionBinds.cpp:97 + #, c-format + msgid "Configuration: OptionBinding with id \"%s\" already exists" +-msgstr "配置:ID 为 \"%s\" 的 OptionBinding 已存在" ++msgstr "配置:ID 为 \"%s\" 的 OptionBinding 已存在" + + #: libdnf/conf/OptionBool.cpp:47 + #, c-format + msgid "invalid boolean value '%s'" +-msgstr "无效的布尔值“%s”" ++msgstr "无效的布尔值 '%s'" + + #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 +-#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 ++#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 + #, c-format + msgid "'%s' is not an allowed value" +-msgstr "'%s' 不是一个允许的值" +- +-#: libdnf/conf/OptionEnum.cpp:83 libdnf/conf/OptionNumber.cpp:88 +-msgid "invalid value" +-msgstr "无效值" ++msgstr "'%s' 不是一个允许的值" + + #: libdnf/conf/OptionNumber.cpp:73 + #, c-format +@@ -89,26 +99,126 @@ msgstr "给定的路径 “%s” 不存在。" + msgid "could not convert '%s' to seconds" + msgstr "无法把 '%s' 转换为秒" + +-#: libdnf/conf/OptionString.cpp:74 ++#: libdnf/conf/OptionString.cpp:79 + msgid "GetValue(): Value not set" + msgstr "GetValue(): 值没有设置" + +-#: libdnf/dnf-goal.cpp:68 ++#: libdnf/dnf-context.cpp:3170 libdnf/dnf-context.cpp:3179 ++#, c-format ++msgid "Cannot enable more streams from module '%s' at the same time" ++msgstr "无法同时从模块 '%s' 中启用更多流" ++ ++#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3206 ++#, c-format ++msgid "" ++"Cannot enable module '%1$s' stream '%2$s': State of module already modified" ++msgstr "无法启用模块 '%1$s' 流 '%2$s':已经修改的模块状态" ++ ++#: libdnf/dnf-context.cpp:3253 ++#, c-format ++msgid "Modular dependency problem with Defaults: %s" ++msgstr "默认设置的模块依赖性问题:%s" ++ ++#: libdnf/dnf-context.cpp:3256 ++#, c-format ++msgid "Modular dependency problem: %s" ++msgstr "模块依赖问题:%s" ++ ++#: libdnf/dnf-context.cpp:3290 libdnf/dnf-context.cpp:3314 ++#: libdnf/dnf-context.cpp:3325 libdnf/dnf-context.cpp:3364 ++#: libdnf/dnf-context.cpp:3380 libdnf/dnf-context.cpp:3412 ++#: libdnf/dnf-context.cpp:3456 libdnf/dnf-context.cpp:3466 ++#, c-format ++msgid "Unable to resolve argument '%s'" ++msgstr "无法解析参数 '%s'" ++ ++#: libdnf/dnf-context.cpp:3297 ++#, c-format ++msgid "" ++"Only module name is required. Ignoring unneeded information in argument: " ++"'%s'" ++msgstr "只需要模块名。忽略参数 '%s' 中的无用信息" ++ ++#: libdnf/dnf-context.cpp:3311 ++#, c-format ++msgid "Cannot reset module '%s': State of module already modified" ++msgstr "无法重置模块 '%s':已修改的模块状态" ++ ++#: libdnf/dnf-context.cpp:3322 ++#, c-format ++msgid "Cannot disable module '%s': State of module already modified" ++msgstr "无法禁用模块 '%s':已经修改的模块状态" ++ ++#: libdnf/dnf-context.cpp:3353 libdnf/dnf-context.cpp:3445 ++#: libdnf/dnf-context.cpp:3558 ++msgid "No modular data available" ++msgstr "没有可用的模块数据" ++ ++#: libdnf/dnf-context.cpp:3370 ++#, c-format ++msgid "Ignoring unneeded information in argument: '%s'" ++msgstr "忽略参数:\"%s\" 中不需要的信息" ++ ++#: libdnf/dnf-context.cpp:3408 ++#, c-format ++msgid "" ++"Problem during enablement of dependency tree for module '%1$s' stream " ++"'%2$s': %3$s" ++msgstr "为模块 '%1$s' 流 '%2$s' 启用依赖树时出现问题: %3$s" ++ ++#: libdnf/dnf-context.cpp:3420 ++msgid "Problems appeared for module enable request" ++msgstr "模块启用请求时出现问题" ++ ++#. this really should never happen; unless the modular repodata is corrupted ++#: libdnf/dnf-context.cpp:3495 ++#, c-format ++msgid "Failed to parse module artifact NEVRA '%s'" ++msgstr "无法解析模块工件 NEVRA '%s'" ++ ++#: libdnf/dnf-context.cpp:3529 ++msgid "Problems appeared for module install request" ++msgstr "模块安装请求出现问题" ++ ++#: libdnf/dnf-context.cpp:3589 ++msgid "Problems appeared for module reset request" ++msgstr "模块重置请求时出现问题" ++ ++#: libdnf/dnf-context.cpp:3591 ++msgid "Problems appeared for module disable request" ++msgstr "模块禁用请求时出现问题" ++ ++#: libdnf/dnf-context.cpp:3627 ++#, c-format ++msgid "" ++"The operation would result in switching of module '%s' stream '%s' to stream" ++" '%s'" ++msgstr "这个操作会把模块 '%s' 从流 '%s' 切换到流 '%s'" ++ ++#: libdnf/dnf-context.cpp:3631 ++msgid "" ++"It is not possible to switch enabled streams of a module.\n" ++"It is recommended to remove all installed content from the module, and reset the module using 'microdnf module reset ' command. After you reset the module, you can install the other stream." ++msgstr "" ++"无法切换一个模块已启用的流。 推荐从模块中删除所有已安装的内容,使用 'microdnf module reset ' " ++"命令重置模块。在重置模块后就可以安装其他流。" ++ ++#: libdnf/dnf-goal.cpp:85 + msgid "Could not depsolve transaction; " +-msgstr "无法 depsolve 事务: " ++msgstr "无法 depsolve 事务; " + +-#: libdnf/dnf-goal.cpp:70 ++#: libdnf/dnf-goal.cpp:87 + #, c-format + msgid "%i problem detected:\n" + msgid_plural "%i problems detected:\n" + msgstr[0] "发现 %i 问题:\n" + +-#: libdnf/dnf-goal.cpp:78 ++#: libdnf/dnf-goal.cpp:95 + #, c-format + msgid " Problem %1$i: %2$s\n" + msgstr " 问题 %1$i: %2$s\n" + +-#: libdnf/dnf-goal.cpp:80 ++#: libdnf/dnf-goal.cpp:97 + #, c-format + msgid " Problem: %s\n" + msgstr " 问题: %s\n" +@@ -118,7 +228,7 @@ msgstr " 问题: %s\n" + msgid "" + "No available modular metadata for modular package '%s'; cannot be installed " + "on the system" +-msgstr "" ++msgstr "模块软件包 '%s' 没有可用的模块元数据,它将不能被安装至此系统上" + + #: libdnf/dnf-rpmts.cpp:121 libdnf/dnf-rpmts.cpp:166 + #, c-format +@@ -173,87 +283,87 @@ msgstr "无法找到软件包 %s" + msgid "could not add erase element %1$s(%2$i)" + msgstr "无法添加删除元素 %1$s(%2$i)" + +-#: libdnf/dnf-sack.cpp:381 +-#, c-format +-msgid "no %1$s string for %2$s" +-msgstr "" +- +-#: libdnf/dnf-sack.cpp:404 ++#: libdnf/dnf-sack.cpp:395 + msgid "failed to add solv" + msgstr "添加 solv 失败" + +-#: libdnf/dnf-sack.cpp:422 ++#: libdnf/dnf-sack.cpp:414 ++#, c-format ++msgid "no %1$s string for %2$s" ++msgstr "没有为 %2$s 的 %1$s 字符串" ++ ++#: libdnf/dnf-sack.cpp:424 + #, c-format + msgid "failed to open: %s" + msgstr "打开失败:%s" + +-#: libdnf/dnf-sack.cpp:501 ++#: libdnf/dnf-sack.cpp:503 + #, c-format + msgid "cannot create temporary file: %s" + msgstr "不能创建临时文件: %s" + +-#: libdnf/dnf-sack.cpp:511 ++#: libdnf/dnf-sack.cpp:513 + #, c-format + msgid "failed opening tmp file: %s" + msgstr "打开 tmp 文件失败: %s" + +-#: libdnf/dnf-sack.cpp:523 ++#: libdnf/dnf-sack.cpp:525 + #, c-format + msgid "write_main() failed writing data: %i" + msgstr "write_main() 写数据失败: %i" + +-#: libdnf/dnf-sack.cpp:540 ++#: libdnf/dnf-sack.cpp:542 + msgid "write_main() failed to re-load written solv file" + msgstr "write_main() 重新加载写的 solv 文件失败" + +-#: libdnf/dnf-sack.cpp:605 ++#: libdnf/dnf-sack.cpp:607 + #, c-format + msgid "can not create temporary file %s" + msgstr "不能创建临时文件 %s" + +-#: libdnf/dnf-sack.cpp:623 ++#: libdnf/dnf-sack.cpp:625 + #, c-format + msgid "write_ext(%1$d) has failed: %2$d" + msgstr "write_ext(%1$d) 已失败: %2$d" + +-#: libdnf/dnf-sack.cpp:678 ++#: libdnf/dnf-sack.cpp:680 + msgid "null repo md file" + msgstr "null repo md 文件" + +-#: libdnf/dnf-sack.cpp:687 ++#: libdnf/dnf-sack.cpp:689 + #, c-format + msgid "can not read file %1$s: %2$s" + msgstr "不能读文件 %1$s: %2$s" + +-#: libdnf/dnf-sack.cpp:701 ++#: libdnf/dnf-sack.cpp:703 + msgid "repo_add_solv() has failed." + msgstr "repo_add_solv() 已失败。" + +-#: libdnf/dnf-sack.cpp:714 ++#: libdnf/dnf-sack.cpp:716 + msgid "loading of MD_TYPE_PRIMARY has failed." +-msgstr "" ++msgstr "加载 MD_TYPE_PRIMARY 失败。" + +-#: libdnf/dnf-sack.cpp:727 ++#: libdnf/dnf-sack.cpp:729 + msgid "repo_add_repomdxml/rpmmd() has failed." + msgstr "repo_add_repomdxml/rpmmd() 已失败。" + +-#: libdnf/dnf-sack.cpp:794 ++#: libdnf/dnf-sack.cpp:796 + msgid "failed to auto-detect architecture" + msgstr "自动检测架构失败" + +-#: libdnf/dnf-sack.cpp:919 ++#: libdnf/dnf-sack.cpp:961 + #, c-format + msgid "failed creating cachedir %s" + msgstr "无法创建 cachedir %s" + +-#: libdnf/dnf-sack.cpp:1696 ++#: libdnf/dnf-sack.cpp:1738 + msgid "failed loading RPMDB" + msgstr "无法加载 RPMDB" + +-#: libdnf/dnf-sack.cpp:2403 ++#: libdnf/dnf-sack.cpp:2463 + #, c-format + msgid "No module defaults found: %s" +-msgstr "" ++msgstr "没有找到模块默认设置:%s" + + #: libdnf/dnf-state.cpp:1184 + #, c-format +@@ -291,7 +401,7 @@ msgstr "无法确保 %1$s,因为 repo %2$s 没有找到 (%3$i repos 已加载) + + #: libdnf/dnf-transaction.cpp:367 + msgid "Failed to check untrusted: " +-msgstr "检查不被信任失败: " ++msgstr "检查不被信任失败 : " + + #: libdnf/dnf-transaction.cpp:377 + #, c-format +@@ -310,7 +420,7 @@ msgstr "无法为 CacheDir 获得值" + #: libdnf/dnf-transaction.cpp:911 + #, c-format + msgid "Failed to get filesystem free size for %s: " +-msgstr "无法为 %s 获得文件系统可用空间的大小: " ++msgstr "无法为 %s 获得文件系统可用空间的大小: " + + #: libdnf/dnf-transaction.cpp:919 + #, c-format +@@ -322,26 +432,26 @@ msgstr "无法为 %s 获得文件系统可用空间的大小" + msgid "Not enough free space in %1$s: needed %2$s, available %3$s" + msgstr "%1$s 没有足够的空闲空间: 需要 %2$s,可用 %3$s" + +-#: libdnf/dnf-transaction.cpp:1196 ++#: libdnf/dnf-transaction.cpp:1195 + msgid "failed to set root" + msgstr "设置 root 失败" + +-#: libdnf/dnf-transaction.cpp:1418 ++#: libdnf/dnf-transaction.cpp:1416 + #, c-format + msgid "Error %i running transaction test" + msgstr "错误 %i 运行事务测试" + +-#: libdnf/dnf-transaction.cpp:1458 ++#: libdnf/dnf-transaction.cpp:1456 + #, c-format + msgid "Error %i running transaction" + msgstr "错误 %i 运行事务" + +-#: libdnf/dnf-transaction.cpp:1473 ++#: libdnf/dnf-transaction.cpp:1472 + #, c-format + msgid "Transaction did not go to writing phase, but returned no error(%i)" + msgstr "事务没有进入写阶段,但没有返回错误(%i)" + +-#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:399 ++#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:403 + #, c-format + msgid "cannot open directory %1$s: %2$s" + msgstr "无法打开目录 %1$s: %2$s" +@@ -351,369 +461,414 @@ msgstr "无法打开目录 %1$s: %2$s" + msgid "failed to remove %s" + msgstr "无法删除 %s" + +-#: libdnf/goal/Goal.cpp:55 ++#: libdnf/goal/Goal.cpp:74 + msgid "Ill-formed Selector, presence of multiple match objects in the filter" + msgstr "Ill-formed Selector,在过滤器中有多个匹配的对象" + +-#: libdnf/goal/Goal.cpp:56 ++#: libdnf/goal/Goal.cpp:75 + msgid "Ill-formed Selector used for the operation, incorrect comparison type" + msgstr "这个操作使用了 Ill-formed Selector,不正确的比较类型" + +-#: libdnf/goal/Goal.cpp:67 libdnf/goal/Goal.cpp:94 ++#: libdnf/goal/Goal.cpp:86 libdnf/goal/Goal.cpp:113 + msgid " does not belong to a distupgrade repository" +-msgstr "" ++msgstr " 不属于 distupgrade 仓库" + +-#: libdnf/goal/Goal.cpp:68 libdnf/goal/Goal.cpp:95 ++#: libdnf/goal/Goal.cpp:87 libdnf/goal/Goal.cpp:114 + msgid " has inferior architecture" +-msgstr "" ++msgstr " 有 inferior 架构" + +-#: libdnf/goal/Goal.cpp:69 ++#: libdnf/goal/Goal.cpp:88 + msgid "problem with installed package " +-msgstr "" ++msgstr "安装的软件包的问题 " + +-#: libdnf/goal/Goal.cpp:70 libdnf/goal/Goal.cpp:97 ++#: libdnf/goal/Goal.cpp:89 libdnf/goal/Goal.cpp:116 + msgid "conflicting requests" +-msgstr "" ++msgstr "冲突的请求" + +-#: libdnf/goal/Goal.cpp:71 libdnf/goal/Goal.cpp:98 ++#: libdnf/goal/Goal.cpp:90 libdnf/goal/Goal.cpp:117 + msgid "unsupported request" +-msgstr "" ++msgstr "不支持的请求" + +-#: libdnf/goal/Goal.cpp:72 libdnf/goal/Goal.cpp:99 ++#: libdnf/goal/Goal.cpp:91 libdnf/goal/Goal.cpp:118 + msgid "nothing provides requested " +-msgstr "" ++msgstr "没有东西可以提供所请求的 " + +-#: libdnf/goal/Goal.cpp:73 ++#: libdnf/goal/Goal.cpp:92 + #, c-format + msgid "package %s does not exist" +-msgstr "" ++msgstr "软件包 %s 不存在" + +-#: libdnf/goal/Goal.cpp:74 libdnf/goal/Goal.cpp:101 ++#: libdnf/goal/Goal.cpp:93 libdnf/goal/Goal.cpp:120 + msgid " is provided by the system" +-msgstr "" ++msgstr " 由系统提供" + +-#: libdnf/goal/Goal.cpp:75 libdnf/goal/Goal.cpp:102 ++#: libdnf/goal/Goal.cpp:94 libdnf/goal/Goal.cpp:121 + msgid "some dependency problem" +-msgstr "" ++msgstr "一些依赖问题" + +-#: libdnf/goal/Goal.cpp:76 ++#: libdnf/goal/Goal.cpp:95 + msgid "cannot install the best update candidate for package " +-msgstr "" ++msgstr "无法为软件包安装最佳更新候选 " + +-#: libdnf/goal/Goal.cpp:77 libdnf/goal/Goal.cpp:104 ++#: libdnf/goal/Goal.cpp:96 libdnf/goal/Goal.cpp:123 + msgid "cannot install the best candidate for the job" +-msgstr "" ++msgstr "无法为该任务安装最佳候选" + +-#: libdnf/goal/Goal.cpp:78 ++#: libdnf/goal/Goal.cpp:97 + #, c-format + msgid "package %s is filtered out by modular filtering" +-msgstr "" ++msgstr "软件包 %s 被模块过滤过滤掉" + +-#: libdnf/goal/Goal.cpp:79 ++#: libdnf/goal/Goal.cpp:98 + #, c-format + msgid "package %s does not have a compatible architecture" +-msgstr "" ++msgstr "软件包 %s 没有兼容的架构" + +-#: libdnf/goal/Goal.cpp:80 ++#: libdnf/goal/Goal.cpp:99 + #, c-format + msgid "package %s is not installable" +-msgstr "" ++msgstr "软件包 %s 不可安装" + +-#: libdnf/goal/Goal.cpp:81 ++#: libdnf/goal/Goal.cpp:100 + #, c-format + msgid "package %s is filtered out by exclude filtering" +-msgstr "" ++msgstr "软件包 %s 被排除过滤过滤掉" + +-#: libdnf/goal/Goal.cpp:82 ++#: libdnf/goal/Goal.cpp:101 + #, c-format + msgid "nothing provides %s needed by %s" +-msgstr "" ++msgstr "没有东西可提供 %s(%s 需要)" + +-#: libdnf/goal/Goal.cpp:83 ++#: libdnf/goal/Goal.cpp:102 + #, c-format + msgid "cannot install both %s and %s" +-msgstr "" ++msgstr "无法同时安装 %s 和 %s" + +-#: libdnf/goal/Goal.cpp:84 ++#: libdnf/goal/Goal.cpp:103 + #, c-format + msgid "package %s conflicts with %s provided by %s" +-msgstr "" ++msgstr "软件包 %s 与 %s(由 %s 提供)冲突" + +-#: libdnf/goal/Goal.cpp:85 ++#: libdnf/goal/Goal.cpp:104 + #, c-format + msgid "package %s obsoletes %s provided by %s" +-msgstr "" ++msgstr "软件包 %s 取代了 %s(由 %s 提供)" + +-#: libdnf/goal/Goal.cpp:86 ++#: libdnf/goal/Goal.cpp:105 + #, c-format + msgid "installed package %s obsoletes %s provided by %s" +-msgstr "" ++msgstr "已安装的软件包 %s 取代了 %s(由 %s 提供)" + +-#: libdnf/goal/Goal.cpp:87 ++#: libdnf/goal/Goal.cpp:106 + #, c-format + msgid "package %s implicitly obsoletes %s provided by %s" +-msgstr "" ++msgstr "软件包 %s 隐式地取代了 %s(由 %s 提供)" + +-#: libdnf/goal/Goal.cpp:88 ++#: libdnf/goal/Goal.cpp:107 + #, c-format + msgid "package %s requires %s, but none of the providers can be installed" +-msgstr "" ++msgstr "软件包 %s 需要 %s,但没有提供者可以被安装" + +-#: libdnf/goal/Goal.cpp:89 ++#: libdnf/goal/Goal.cpp:108 + #, c-format + msgid "package %s conflicts with %s provided by itself" +-msgstr "" ++msgstr "软件包 %s 与自己提供的 %s 冲突" + +-#: libdnf/goal/Goal.cpp:90 ++#: libdnf/goal/Goal.cpp:109 + #, c-format + msgid "both package %s and %s obsolete %s" +-msgstr "" ++msgstr "软件包 %s 和 %s 同时取代了 %s" + +-#: libdnf/goal/Goal.cpp:96 ++#: libdnf/goal/Goal.cpp:115 + msgid "problem with installed module " +-msgstr "" ++msgstr "已安装模块的问题 " + +-#: libdnf/goal/Goal.cpp:100 ++#: libdnf/goal/Goal.cpp:119 + #, c-format + msgid "module %s does not exist" +-msgstr "" ++msgstr "模块 %s 不存在" + +-#: libdnf/goal/Goal.cpp:103 ++#: libdnf/goal/Goal.cpp:122 + msgid "cannot install the best update candidate for module " +-msgstr "" ++msgstr "无法为模块安装最佳更新候选 " + +-#: libdnf/goal/Goal.cpp:105 libdnf/goal/Goal.cpp:108 ++#: libdnf/goal/Goal.cpp:124 libdnf/goal/Goal.cpp:127 + #, c-format + msgid "module %s is disabled" +-msgstr "" ++msgstr "模块 %s 被禁用" + +-#: libdnf/goal/Goal.cpp:106 ++#: libdnf/goal/Goal.cpp:125 + #, c-format + msgid "module %s does not have a compatible architecture" +-msgstr "" ++msgstr "模块 %s 没有兼容的架构" + +-#: libdnf/goal/Goal.cpp:107 ++#: libdnf/goal/Goal.cpp:126 + #, c-format + msgid "module %s is not installable" +-msgstr "" ++msgstr "模块 %s 不可安装" + +-#: libdnf/goal/Goal.cpp:109 ++#: libdnf/goal/Goal.cpp:128 + #, c-format + msgid "nothing provides %s needed by module %s" +-msgstr "" ++msgstr "没有东西提供 %s(模块 %s 需要它)" + +-#: libdnf/goal/Goal.cpp:110 ++#: libdnf/goal/Goal.cpp:129 + #, c-format + msgid "cannot install both modules %s and %s" +-msgstr "" ++msgstr "无法同时安装模块 %s 和 %s" + +-#: libdnf/goal/Goal.cpp:111 ++#: libdnf/goal/Goal.cpp:130 + #, c-format + msgid "module %s conflicts with %s provided by %s" +-msgstr "" ++msgstr "模块 %s 与 %s (由 %s 提供)冲突" + +-#: libdnf/goal/Goal.cpp:112 ++#: libdnf/goal/Goal.cpp:131 + #, c-format + msgid "module %s obsoletes %s provided by %s" +-msgstr "" ++msgstr "模块 %s 取代了 %s(由 %s 提供)" + +-#: libdnf/goal/Goal.cpp:113 ++#: libdnf/goal/Goal.cpp:132 + #, c-format + msgid "installed module %s obsoletes %s provided by %s" +-msgstr "" ++msgstr "已安装的模块 %s 取代了 %s(由 %s 提供)" + +-#: libdnf/goal/Goal.cpp:114 ++#: libdnf/goal/Goal.cpp:133 + #, c-format + msgid "module %s implicitly obsoletes %s provided by %s" +-msgstr "" ++msgstr "模块 %s 隐式地取代了 %s(由 %s 提供)" + +-#: libdnf/goal/Goal.cpp:115 ++#: libdnf/goal/Goal.cpp:134 + #, c-format + msgid "module %s requires %s, but none of the providers can be installed" +-msgstr "" ++msgstr "模块 %s 需要 %s,但没有提供者可以被安装" + +-#: libdnf/goal/Goal.cpp:116 ++#: libdnf/goal/Goal.cpp:135 + #, c-format + msgid "module %s conflicts with %s provided by itself" +-msgstr "" ++msgstr "模块 %s 与自己提供的 %s 冲突" + +-#: libdnf/goal/Goal.cpp:117 ++#: libdnf/goal/Goal.cpp:136 + #, c-format + msgid "both module %s and %s obsolete %s" +-msgstr "" ++msgstr "模块 %s 和 %s 同时取代了 %s" + +-#: libdnf/goal/Goal.cpp:1038 ++#: libdnf/goal/Goal.cpp:1051 + msgid "no solver set" + msgstr "无 solver 设置" + +-#: libdnf/goal/Goal.cpp:1043 ++#: libdnf/goal/Goal.cpp:1056 + #, c-format + msgid "failed to make %s absolute" + msgstr "无法使 %s 绝对" + +-#: libdnf/goal/Goal.cpp:1050 ++#: libdnf/goal/Goal.cpp:1063 + #, c-format + msgid "failed writing debugdata to %1$s: %2$s" + msgstr "把 debugdata 写入到 %1$s 失败: %2$s" + +-#: libdnf/goal/Goal.cpp:1062 ++#: libdnf/goal/Goal.cpp:1075 + msgid "no solv in the goal" + msgstr "在目标中没有 solv" + +-#: libdnf/goal/Goal.cpp:1064 ++#: libdnf/goal/Goal.cpp:1077 + msgid "no solution, cannot remove protected package" + msgstr "没有解决方案,不能删除保护的软件包" + +-#: libdnf/goal/Goal.cpp:1067 ++#: libdnf/goal/Goal.cpp:1080 + msgid "no solution possible" + msgstr "没有可能的解决方案" + +-#: libdnf/goal/Goal.cpp:1479 ++#: libdnf/goal/Goal.cpp:1206 ++msgid "Problem: " ++msgstr "问题: " ++ ++#: libdnf/goal/Goal.cpp:1211 ++#, c-format ++msgid "Problem %d: " ++msgstr "问题 %d: " ++ ++#: libdnf/goal/Goal.cpp:1538 + msgid "" + "The operation would result in removing the following protected packages: " +-msgstr "这个操作可能会导致删除以下受保护的软件包: " ++msgstr "这个操作将会导致删除以下受保护的软件包: " + +-#: libdnf/hy-iutil.cpp:322 ++#: libdnf/hy-iutil.cpp:326 + #, c-format + msgid "Failed renaming %1$s to %2$s: %3$s" + msgstr "将 %1$s 重命名为 %2$s 失败: %3$s" + +-#: libdnf/hy-iutil.cpp:330 ++#: libdnf/hy-iutil.cpp:334 + #, c-format + msgid "Failed setting perms on %1$s: %2$s" + msgstr "在 %1$s 中设置 perms 失败: %2$s" + +-#: libdnf/hy-iutil.cpp:376 ++#: libdnf/hy-iutil.cpp:380 + #, c-format + msgid "cannot create directory %1$s: %2$s" +-msgstr "" ++msgstr "无法创建目录 %1$s: %2$s" + +-#: libdnf/hy-iutil.cpp:411 ++#: libdnf/hy-iutil.cpp:415 + #, c-format + msgid "cannot stat path %1$s: %2$s" +-msgstr "" ++msgstr "无法 stat 路径 %1$s: %2$s" + +-#: libdnf/module/ModulePackage.cpp:499 ++#: libdnf/module/ModulePackage.cpp:560 + #, c-format + msgid "Invalid format of Platform module: %s" +-msgstr "" ++msgstr "Platform 模块格式无效 : %s" + +-#: libdnf/module/ModulePackage.cpp:514 ++#: libdnf/module/ModulePackage.cpp:575 + msgid "Multiple module platforms provided by available packages\n" +-msgstr "" ++msgstr "可用软件包提供了多个模块平台\n" + +-#: libdnf/module/ModulePackage.cpp:527 ++#: libdnf/module/ModulePackage.cpp:588 + msgid "Multiple module platforms provided by installed packages\n" +-msgstr "" ++msgstr "已安装的软件包提供了多个模块平台\n" + +-#: libdnf/module/ModulePackage.cpp:554 ++#: libdnf/module/ModulePackage.cpp:615 + #, c-format + msgid "Detection of Platform Module in %s failed: %s" +-msgstr "" ++msgstr "检测 %s 中的 Platform 模块失败: %s" + +-#: libdnf/module/ModulePackage.cpp:563 ++#: libdnf/module/ModulePackage.cpp:624 + #, c-format + msgid "Missing PLATFORM_ID in %s" +-msgstr "" ++msgstr "在 %s 中缺少 PLATFORM_ID" + +-#: libdnf/module/ModulePackage.cpp:568 ++#: libdnf/module/ModulePackage.cpp:629 + msgid "No valid Platform ID detected" +-msgstr "" ++msgstr "没有检测到有效的 Platform ID" + + #: libdnf/module/ModulePackageContainer.cpp:68 + #, c-format + msgid "Cannot enable multiple streams for module '%s'" +-msgstr "" ++msgstr "无法为模块 '%s' 启用多个流" + +-#: libdnf/module/ModulePackageContainer.cpp:294 ++#: libdnf/module/ModulePackageContainer.cpp:295 + #, c-format + msgid "Conflicting defaults with repo '%s': %s" +-msgstr "" ++msgstr "默认设置与 repo '%s' 冲突 : %s" ++ ++#: libdnf/module/ModulePackageContainer.cpp:841 ++msgid "Installing module profiles:\n" ++msgstr "安装模块配置档案:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:856 ++msgid "Disabling module profiles:\n" ++msgstr "禁用模块配置档案:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:871 ++msgid "Enabling module streams:\n" ++msgstr "启用模块流:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:885 ++msgid "Switching module streams:\n" ++msgstr "切换模块流:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:903 ++msgid "Disabling modules:\n" ++msgstr "禁用模块:\n" ++ ++#: libdnf/module/ModulePackageContainer.cpp:914 ++msgid "Resetting modules:\n" ++msgstr "重置模块:\n" + +-#: libdnf/module/ModulePackageContainer.cpp:1569 ++#: libdnf/module/ModulePackageContainer.cpp:1599 + #, c-format + msgid "Unable to load modular Fail-Safe data at '%s'" +-msgstr "" ++msgstr "无法加载位于 '%s' 的模块 Fail-Safe 数据" + +-#: libdnf/module/ModulePackageContainer.cpp:1575 ++#: libdnf/module/ModulePackageContainer.cpp:1605 + #, c-format + msgid "Unable to load modular Fail-Safe data for module '%s:%s'" +-msgstr "" ++msgstr "无法为模块 '%s:%s' 加载模块 Fail-Safe 数据" + +-#: libdnf/module/ModulePackageContainer.cpp:1639 ++#: libdnf/module/ModulePackageContainer.cpp:1663 + #, c-format + msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" +-msgstr "" ++msgstr "无法为模块 Fail Safe 数据创建目录 \"%s\" : %s" + +-#: libdnf/module/ModulePackageContainer.cpp:1661 ++#: libdnf/module/ModulePackageContainer.cpp:1679 + #, c-format + msgid "Unable to save a modular Fail Safe data to '%s'" +-msgstr "" ++msgstr "无法把模块 Fail Safe 数据保存到 '%s'" + +-#: libdnf/module/ModulePackageContainer.cpp:1686 ++#: libdnf/module/ModulePackageContainer.cpp:1702 + #, c-format + msgid "Unable to remove a modular Fail Safe data in '%s'" +-msgstr "" ++msgstr "无法删除 '%s' 处的模块 Fail Safe 数据" ++ ++#: libdnf/module/ModulePackageContainer.cpp:1734 ++#, c-format ++msgid "" ++"Unable to apply modular obsoletes to '%s:%s' because target module '%s' is " ++"disabled" ++msgstr "无法将模块化过时应用到 '%s:%s',因为目标模块 '%s' 被禁用" + + #: libdnf/module/modulemd/ModuleMetadata.cpp:86 + #, c-format + msgid "Failed to update from string: %s" +-msgstr "" ++msgstr "无法从字符串更新: %s" + + #: libdnf/module/modulemd/ModuleMetadata.cpp:110 + #, c-format + msgid "Failed to resolve: %s" +-msgstr "" ++msgstr "无法解析: %s" + + #: libdnf/module/modulemd/ModuleMetadata.cpp:115 + #, c-format + msgid "There were errors while resolving modular defaults: %s" +-msgstr "" ++msgstr "在解析模块默认值时出现了错误:%s" + + #: libdnf/module/modulemd/ModuleMetadata.cpp:120 + #, c-format + msgid "Failed to upgrade defaults: %s" +-msgstr "" ++msgstr "无法升级默认值: %s" + + #: libdnf/module/modulemd/ModuleMetadata.cpp:123 + #, c-format + msgid "Failed to upgrade streams: %s" +-msgstr "" ++msgstr "升级流失败: %s" ++ ++#: libdnf/module/modulemd/ModuleMetadata.cpp:212 ++#, c-format ++msgid "Cannot retrieve module obsoletes because no stream matching %s: %s" ++msgstr "无法获取模块过时,因为没有流匹配 %s:%s" + + #: libdnf/plugin/plugin.cpp:46 + #, c-format + msgid "Can't load shared library \"%s\": %s" +-msgstr "" ++msgstr "无法加载共享库 \"%s\": %s" + + #: libdnf/plugin/plugin.cpp:61 libdnf/plugin/plugin.cpp:67 + #: libdnf/plugin/plugin.cpp:73 libdnf/plugin/plugin.cpp:79 + #, c-format + msgid "Can't obtain address of symbol \"%s\": %s" +-msgstr "" ++msgstr "无法获取符号 \"%s\" 的地址: %s" + + #: libdnf/plugin/plugin.cpp:86 + #, c-format + msgid "Loading plugin file=\"%s\"" +-msgstr "" ++msgstr "正在加载插件文件=\"%s\"" + + #: libdnf/plugin/plugin.cpp:89 + #, c-format + msgid "Loaded plugin name=\"%s\", version=\"%s\"" +-msgstr "" ++msgstr "已加载插件名=\"%s\", 版本=\"%s\"" + + #: libdnf/plugin/plugin.cpp:96 + msgid "Plugins::loadPlugins() dirPath cannot be empty" +-msgstr "" ++msgstr "Plugins::loadPlugins() dirPath 不能为空" + + #: libdnf/plugin/plugin.cpp:105 + #, c-format + msgid "Can't read plugin directory \"%s\": %s" +-msgstr "" ++msgstr "无法读取插件目录 \"%s\": %s" + + #: libdnf/plugin/plugin.cpp:114 + #, c-format + msgid "Can't load plugin \"%s\": %s" +-msgstr "" ++msgstr "无法加载插件 \"%s\": %s" + + #: libdnf/repo/DependencySplitter.cpp:50 + msgid "" +@@ -721,6 +876,8 @@ msgid "" + "deprecated and the support will be dropped in future versions. Use '=' " + "operator instead." + msgstr "" ++"在 reldeps 中使用 '==' 操作符可能导致一个未定义的行为。这个操作符已被废弃,并且在未来的版本中会取消对它的支持。请使用 '=' " ++"操作符代替。" + + #: libdnf/repo/Repo.cpp:321 + #, c-format +@@ -732,146 +889,161 @@ msgstr "软件仓库 %s 没有设置镜像或者 baseurl。" + msgid "Repository '%s' has unsupported type: 'type=%s', skipping." + msgstr "仓库 '%s' 有不被支持的类型: 'type=%s', 忽略。" + +-#: libdnf/repo/Repo.cpp:546 ++#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:610 libdnf/repo/Repo.cpp:641 ++#: libdnf/repo/Repo.cpp:1382 + #, c-format +-msgid "Cannot find a valid baseurl for repo: %s" +-msgstr "无法为仓库 %s 找到一个有效的 baseurl" ++msgid "repo '%s': 'basecachedir' is not set" ++msgstr "Repo '%s': 'basecachedir' 没有设置" + +-#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 ++#: libdnf/repo/Repo.cpp:512 + msgid "" + "Maximum download speed is lower than minimum. Please change configuration of" + " minrate or throttle" + msgstr "最大下载速度低于最小值。请修改 minrate 或 throttle 的配置" + +-#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 ++#: libdnf/repo/Repo.cpp:546 ++#, c-format ++msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" ++msgstr "Repo '%s': 'proxy_username' 已被设置,但没有设置 'proxy_password'" ++ ++#: libdnf/repo/Repo.cpp:548 ++msgid "'proxy_username' is set but not 'proxy_password'" ++msgstr "'proxy_username' 已被设置,但没有设置 'proxy_password'" ++ ++#: libdnf/repo/Repo.cpp:629 ++#, c-format ++msgid "Cannot find a valid baseurl for repo: %s" ++msgstr "无法为仓库 %s 找到一个有效的 baseurl" ++ ++#: libdnf/repo/Repo.cpp:660 libdnf/repo/Repo.cpp:682 + #, c-format + msgid "%s: gpgme_data_new_from_fd(): %s" + msgstr "%s: gpgme_data_new_from_fd(): %s" + +-#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 ++#: libdnf/repo/Repo.cpp:668 libdnf/repo/Repo.cpp:690 + #, c-format + msgid "%s: gpgme_op_import(): %s" + msgstr "%s: gpgme_op_import(): %s" + +-#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 ++#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:779 libdnf/repo/Repo.cpp:907 + #, c-format + msgid "%s: gpgme_ctx_set_engine_info(): %s" + msgstr "%s: gpgme_ctx_set_engine_info(): %s" + +-#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 ++#: libdnf/repo/Repo.cpp:740 libdnf/repo/Repo.cpp:804 + #, c-format + msgid "can not list keys: %s" + msgstr "不能列出 key: %s" + +-#: libdnf/repo/Repo.cpp:806 ++#: libdnf/repo/Repo.cpp:833 + #, c-format + msgid "Failed to retrieve GPG key for repo '%s': %s" +-msgstr "" ++msgstr "为仓库 '%s' 获取 GPG 密钥失败 : %s" + +-#: libdnf/repo/Repo.cpp:859 ++#: libdnf/repo/Repo.cpp:886 + #, c-format + msgid "repo %s: 0x%s already imported" + msgstr "repo %s: 0x%s 已被导入" + +-#: libdnf/repo/Repo.cpp:887 ++#: libdnf/repo/Repo.cpp:914 + #, c-format + msgid "repo %s: imported key 0x%s." + msgstr "repo %s: 已导入密钥 0x%s。" + +-#: libdnf/repo/Repo.cpp:1131 ++#: libdnf/repo/Repo.cpp:1162 + #, c-format + msgid "reviving: repo '%s' skipped, no metalink." + msgstr "恢复中: 仓库 '%s' 已被跳过,无 metalink。" + +-#: libdnf/repo/Repo.cpp:1150 ++#: libdnf/repo/Repo.cpp:1181 + #, c-format + msgid "reviving: repo '%s' skipped, no usable hash." + msgstr "恢复中: 仓库 '%s' 已被跳过,无可用 hash。" + +-#: libdnf/repo/Repo.cpp:1173 ++#: libdnf/repo/Repo.cpp:1204 + #, c-format + msgid "reviving: failed for '%s', mismatched %s sum." + msgstr "恢复: '%s' 失败,不匹配的 %s sum。" + +-#: libdnf/repo/Repo.cpp:1179 ++#: libdnf/repo/Repo.cpp:1210 + #, c-format + msgid "reviving: '%s' can be revived - metalink checksums match." + msgstr "恢复中: '%s' 可以被恢复 - metalink 校验和匹配。" + +-#: libdnf/repo/Repo.cpp:1204 ++#: libdnf/repo/Repo.cpp:1235 + #, c-format + msgid "reviving: '%s' can be revived - repomd matches." + msgstr "恢复: '%s' 可用被恢复 - repomd 匹配。" + +-#: libdnf/repo/Repo.cpp:1206 ++#: libdnf/repo/Repo.cpp:1237 + #, c-format + msgid "reviving: failed for '%s', mismatched repomd." + msgstr "恢复: '%s' 失败,不匹配的 repomd。" + +-#: libdnf/repo/Repo.cpp:1224 ++#: libdnf/repo/Repo.cpp:1255 + #, c-format + msgid "Cannot create repo destination directory \"%s\": %s" +-msgstr "" ++msgstr "无法创建仓库目标目录 \"%s\": %s" + +-#: libdnf/repo/Repo.cpp:1230 ++#: libdnf/repo/Repo.cpp:1261 + #, c-format + msgid "Cannot create repo temporary directory \"%s\": %s" + msgstr "无法创建 repo 临时目录 \"%s\": %s" + +-#: libdnf/repo/Repo.cpp:1244 ++#: libdnf/repo/Repo.cpp:1275 + #, c-format + msgid "Cannot create directory \"%s\": %s" + msgstr "无法创建目录 \"%s\": %s" + +-#: libdnf/repo/Repo.cpp:1267 ++#: libdnf/repo/Repo.cpp:1298 + #, c-format + msgid "Cannot rename directory \"%s\" to \"%s\": %s" + msgstr "无法把目录 \"%s\" 重命名为 \"%s\": %s" + +-#: libdnf/repo/Repo.cpp:1290 ++#: libdnf/repo/Repo.cpp:1321 + #, c-format + msgid "repo: using cache for: %s" + msgstr "仓库: 正在为 %s 使用缓存" + +-#: libdnf/repo/Repo.cpp:1302 ++#: libdnf/repo/Repo.cpp:1333 + #, c-format + msgid "Cache-only enabled but no cache for '%s'" + msgstr "仅使用缓存已开启但没有 '%s' 的缓存" + +-#: libdnf/repo/Repo.cpp:1306 ++#: libdnf/repo/Repo.cpp:1337 + #, c-format + msgid "repo: downloading from remote: %s" + msgstr "repo: 从远程下载: %s" + +-#: libdnf/repo/Repo.cpp:1312 ++#: libdnf/repo/Repo.cpp:1344 + #, c-format + msgid "Failed to download metadata for repo '%s': %s" +-msgstr "" ++msgstr "为仓库 '%s' 下载元数据失败 : %s" + +-#: libdnf/repo/Repo.cpp:1338 ++#: libdnf/repo/Repo.cpp:1370 + msgid "getCachedir(): Computation of SHA256 failed" + msgstr "getCachedir(): 计算 SHA256 失败" + +-#: libdnf/repo/Repo.cpp:1363 ++#: libdnf/repo/Repo.cpp:1398 + #, c-format + msgid "Cannot create persistdir \"%s\": %s" +-msgstr "" ++msgstr "无法创建 persistdir \"%s\": %s" + +-#: libdnf/repo/Repo.cpp:1763 ++#: libdnf/repo/Repo.cpp:1775 + msgid "resume cannot be used simultaneously with the byterangestart param" + msgstr "resume 不能和 the byterangestart 参数同时使用" + +-#: libdnf/repo/Repo.cpp:1780 ++#: libdnf/repo/Repo.cpp:1792 + #, c-format + msgid "PackageTarget initialization failed: %s" + msgstr "PackageTarget 初始失败: %s" + +-#: libdnf/repo/Repo.cpp:1886 ++#: libdnf/repo/Repo.cpp:1898 + #, c-format + msgid "Cannot open %s: %s" + msgstr "无法打开 %s: %s" + +-#: libdnf/repo/Repo.cpp:1930 ++#: libdnf/repo/Repo.cpp:1942 + #, c-format + msgid "Log handler with id %ld doesn't exist" + msgstr "id 为 %ld 的日志处理器不存在" +@@ -880,13 +1052,13 @@ msgstr "id 为 %ld 的日志处理器不存在" + msgid "In progress" + msgstr "进行中" + +-#: libdnf/transaction/Swdb.cpp:188 libdnf/transaction/Swdb.cpp:216 +-#: libdnf/transaction/Swdb.cpp:228 libdnf/transaction/Swdb.cpp:245 +-#: libdnf/transaction/Swdb.cpp:384 libdnf/transaction/Swdb.cpp:394 ++#: libdnf/transaction/Swdb.cpp:187 libdnf/transaction/Swdb.cpp:215 ++#: libdnf/transaction/Swdb.cpp:227 libdnf/transaction/Swdb.cpp:244 ++#: libdnf/transaction/Swdb.cpp:383 libdnf/transaction/Swdb.cpp:393 + msgid "Not in progress" + msgstr "没有在进行中" + +-#: libdnf/transaction/Swdb.cpp:255 ++#: libdnf/transaction/Swdb.cpp:254 + msgid "No transaction in progress" + msgstr "没有事务在进行中" + +@@ -900,7 +1072,7 @@ msgstr "试图在已完成的事务中更新事务" + + #: libdnf/transaction/Transformer.cpp:76 + msgid "Database Corrupted: no row 'version' in table 'config'" +-msgstr "" ++msgstr "数据库损坏:表 'config' 中没有 'version' 行" + + #: libdnf/transaction/Transformer.cpp:681 + msgid "Transformer: can't open history persist dir" +@@ -925,6 +1097,3 @@ msgstr "无法向未保存的事务中添加控制台输出" + + #~ msgid "Bad id for repo: %s, byte = %s %d" + #~ msgstr "repo 的 id 无效: %s, byte = %s %d" +- +-#~ msgid "failed calculating RPMDB checksum" +-#~ msgstr "无法计算 RPMDB checksum" +-- +2.31.1 + diff --git a/SPECS/libdnf.spec b/SPECS/libdnf.spec index 0bf373a..59202ed 100644 --- a/SPECS/libdnf.spec +++ b/SPECS/libdnf.spec @@ -1,10 +1,10 @@ -%global libsolv_version 0.7.7 -%global libmodulemd_version 2.5.0 -%global librepo_version 1.12.0 +%global libsolv_version 0.7.17 +%global libmodulemd_version 2.11.2-2 +%global librepo_version 1.13.1 %global dnf_conflict 4.3.0 %global swig_version 3.0.12 %global libdnf_major_version 0 -%global libdnf_minor_version 55 +%global libdnf_minor_version 63 %global libdnf_micro_version 0 %define __cmake_in_source_build 1 @@ -56,20 +56,34 @@ Name: libdnf Version: %{libdnf_major_version}.%{libdnf_minor_version}.%{libdnf_micro_version} -Release: 7%{?dist} +Release: 3%{?dist} Summary: Library providing simplified C and Python API to libsolv License: LGPLv2+ URL: https://github.com/rpm-software-management/libdnf Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz -Patch0: 0001-Better-msgs-if-basecachedir-or-proxy-password-isn-t-set-RhBug-1888946.patch -Patch1: 0002-modules-Add-special-handling-for-src-artifacts-RhBug-1809314.patch -Patch2: 0003-Avoid-multilib-file-conflict-in-config.h-RhBug-1918818.patch -Patch3: 0004-context-improve-retrieving-repository-configuration.patch -Patch4: 0005-Allow-loading-incomplete-cache-and-loading-ext-solv-files-without-its-repodata.patch -Patch5: 0006-Add-new-option-module-stream-switch.patch -Patch6: 0007-Fix-removal-step-during-modular-enable-in-context-part.patch -Patch7: 0008-Update-translations.patch - +Patch1: 0001-Revert-Improve-performance-for-module-query.patch +Patch2: 0002-Revert-Enhance-description-of-modular-solvables.patch +Patch3: 0003-Revert-Fix-typo-lates-latest.patch +Patch4: 0004-Revert-Remove-unused-code-bump-version.patch +Patch5: 0005-Revert-Report-a-new-type-of-the-module-resolve-error.patch +Patch6: 0006-Revert-Add-additional-fallback-for-module-resolve.patch +Patch7: 0007-Revert-Decide-how-to-handle-context-according-to-sta.patch +Patch8: 0008-Revert-Fix-load-update-FailSafe.patch +Patch9: 0009-Revert-Change-mechanism-of-module-conflicts.patch +Patch10: 0010-Revert-Call-addVersion2Modules-as-late-as-possible.patch +Patch11: 0011-Revert-Fix-modular-queries-with-the-new-solver.patch +Patch12: 0012-Revert-Add-compatible-layer-for-MdDocuments-v2.patch +Patch13: 0013-Revert-Add-an-alternative-constructor-for-ModulePack.patch +Patch14: 0014-Revert-Adjust-modular-solver-to-new-context-type.patch +Patch15: 0015-Revert-Change-usage-of-context-and-version-in-modula.patch +Patch16: 0016-Fix-failing-unittest-caused-by-the-revert-of-new-mod.patch +Patch17: 0017-Modify-unit-test-after-change-of-handling-advisories.patch +Patch18: 0018-Adjust-module-error-formatting-function-for-original.patch +Patch19: 0019-Remove-redundant-test.patch +Patch20: 0020-Fix-dnf_context_module_install-memory-leaks.patch +Patch21: 0021-covscan-remove-unused-vars-mark-private-func-static-return-values.patch +Patch22: 0022-hawkey-surrogateescape-error-handler-to-decode-UTF-8-strings-RhBug1893176.patch +Patch23: 0023-Update-translations.patch BuildRequires: cmake BuildRequires: gcc @@ -99,9 +113,9 @@ BuildRequires: gettext BuildRequires: gpgme-devel %if %{with sanitizers} -BuildRequires: libasan-static -BuildRequires: liblsan-static -BuildRequires: libubsan-static +BuildRequires: libasan +BuildRequires: liblsan +BuildRequires: libubsan %endif Requires: libmodulemd%{?_isa} >= %{libmodulemd_version} @@ -167,11 +181,6 @@ Python 3 bindings for the libdnf library. Summary: Python 2 bindings for the hawkey library %{?python_provide:%python_provide python2-hawkey} BuildRequires: python2-devel -%if 0%{?rhel} && 0%{?rhel} <= 7 -BuildRequires: python-nose -%else -BuildRequires: python2-nose -%endif Requires: %{name}%{?_isa} = %{version}-%{release} Requires: python2-%{name} = %{version}-%{release} # Fix problem with hawkey - dnf version incompatibility @@ -189,7 +198,6 @@ Python 2 bindings for the hawkey library. Summary: Python 3 bindings for the hawkey library %{?python_provide:%python_provide python3-hawkey} BuildRequires: python3-devel -BuildRequires: python3-nose Requires: %{name}%{?_isa} = %{version}-%{release} Requires: python3-%{name} = %{version}-%{release} # Fix problem with hawkey - dnf version incompatibility @@ -203,7 +211,7 @@ Python 3 bindings for the hawkey library. %endif %prep -%autosetup -p1 +%autosetup -S git -p1 %if %{with python2} mkdir build-py2 %endif @@ -289,6 +297,9 @@ popd %dir %{_libdir}/libdnf/ %dir %{_libdir}/libdnf/plugins/ %{_libdir}/libdnf/plugins/README +%if %{with sanitizers} +%{_sysconfdir}/profile.d/dnf-sanitizers.sh +%endif %files devel %doc %{_datadir}/gtk-doc/html/%{name}/ @@ -317,8 +328,39 @@ popd %endif %changelog -* Mon Mar 8 2021 Marek Blaha - 0.55.0-7 -- Update translations (RhBug:1820548) +* Mon Sep 13 2021 Marek Blaha - 0.63.0-3 +- Update translations (RhBug:1961634) + +* Tue Jul 27 2021 Pavla Kratochvilova - 0.63.0-2 +- Fix: dnf_context_module_install: memory leaks +- covscan: remove unused vars, mark private func static, return values +- DNF does not fail on non UTF-8 file names in a package + +* Wed May 19 2021 Pavla Kratochvilova - 0.63.0-1 +- Update to 0.62.0 +- Hardening: add signature check with rpmcliVerifySignatures (RhBug:1932079) +- Support allow_vendor_change setting in dnf context API +- Add a new option module_obsoletes +- Add new API applyObsoletes() function to apply modular obsoletes +- Do not allow 1 as installonly_limit value (RhBug:1926261) +- Add a config option to check TLS certificate revocation status (using OCSP stapling), defaults to false (RhBug:1814383) +- Swdb: Add a method to get the current transaction +- [context,API] Functions for accessing main/global configuration options +- [context,API] Function for adding setopt +- Add getter for modular obsoletes from ModuleMetadata +- Add ModulePackage.getStaticContext() and getRequires() +- Fix modular queries with the new solver +- Fix: Fully set ssl in newHandle function +- [conf] Add options for working with certificates used with proxy +- Modify module NSVCA parsing - context definition (RhBug:1926771) +- [context] Fix: dnf_package_is_installonly (RhBug:1928056) +- Add getApplicablePackages to advisory and isApplicable to advisorymodule +- Keep isAdvisoryApplicable to preserve API +- [context] Support config file option "proxy_auth_method", defaults "any" +- Support main config file options "installonlypkgs" and "protected_packages". Changes behaviour of microdnf and PackageKit. +- Properly handle multiple collections in updateinfo.xml (RhBug:1804234) +- Fix a crash when [media] section in .treeinfo is missing for bootable media (RhBug:1946024) +- Add new dnf_context_module_install() C API * Fri Feb 12 2021 Nicola Sella - 0.55.0-6 - Fix removal step during modular enable in context part