From 70af06f40a4fc68c0e2552bdc553d6b11e7b6ef0 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 9 Nov 2021 04:56:22 -0500 Subject: [PATCH] import dnf-plugins-core-4.0.21-3.el8 --- .dnf-plugins-core.metadata | 2 +- .gitignore | 2 +- ...e-introduce-yum-groups-manager-funct.patch | 653 ------- ...clude-locked-obsoleters-RhBug1957280.patch | 38 + ...-add-s-to-list-services-RhBug-177293.patch | 138 -- ...age-Allow-running-only-with-metadata.patch | 49 + ...epomanage-documentation-RhBug1898293.patch | 42 + ...of-downloaded-packages-RhBug-1856818.patch | 194 -- SOURCES/0004-Update-translations.patch | 1652 +++++++++++------ SPECS/dnf-plugins-core.spec | 42 +- 10 files changed, 1286 insertions(+), 1526 deletions(-) delete mode 100644 SOURCES/0001-groups-manager-Re-introduce-yum-groups-manager-funct.patch create mode 100644 SOURCES/0001-versionlock-Do-not-exclude-locked-obsoleters-RhBug1957280.patch delete mode 100644 SOURCES/0002-needs-restarting-add-s-to-list-services-RhBug-177293.patch create mode 100644 SOURCES/0002-repomanage-Allow-running-only-with-metadata.patch create mode 100644 SOURCES/0003-repomanage-Enhance-repomanage-documentation-RhBug1898293.patch delete mode 100644 SOURCES/0003-reposync-Check-GPG-signatures-of-downloaded-packages-RhBug-1856818.patch diff --git a/.dnf-plugins-core.metadata b/.dnf-plugins-core.metadata index fc3009b..40ecba9 100644 --- a/.dnf-plugins-core.metadata +++ b/.dnf-plugins-core.metadata @@ -1 +1 @@ -3b8638dec2cb91a13241106b9a57114ed037d2ca SOURCES/dnf-plugins-core-4.0.18.tar.gz +40f26a50a6605eacb1e9c4a443f01655fa461767 SOURCES/dnf-plugins-core-4.0.21.tar.gz diff --git a/.gitignore b/.gitignore index dae8243..ae4a8af 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/dnf-plugins-core-4.0.18.tar.gz +SOURCES/dnf-plugins-core-4.0.21.tar.gz diff --git a/SOURCES/0001-groups-manager-Re-introduce-yum-groups-manager-funct.patch b/SOURCES/0001-groups-manager-Re-introduce-yum-groups-manager-funct.patch deleted file mode 100644 index ddebf40..0000000 --- a/SOURCES/0001-groups-manager-Re-introduce-yum-groups-manager-funct.patch +++ /dev/null @@ -1,653 +0,0 @@ -From 40f08d7a22907e6292c314462c01de94584c0854 Mon Sep 17 00:00:00 2001 -From: Marek Blaha -Date: Tue, 27 Oct 2020 15:46:03 +0100 -Subject: [PATCH 1/2] [groups-manager] Re-introduce yum-groups-manager - functionality (RhBug:1826016) - -Implements 'dnf groups-manager' command with features: -- read, merge, print and write groups metadata files -- edit group attributes name (with translated variants), - description (with translated variants), uservisible, displayorder -- add packgages to group -- remove packages from group - -= changelog = -msg: Re-introduce yum-groups-manager functionality -type: enhancement -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1826016 ---- - dnf-plugins-core.spec | 22 ++- - doc/CMakeLists.txt | 2 + - doc/conf.py | 2 + - doc/groups-manager.rst | 94 ++++++++++++ - doc/index.rst | 1 + - libexec/dnf-utils.in | 1 + - plugins/CMakeLists.txt | 1 + - plugins/groups_manager.py | 314 ++++++++++++++++++++++++++++++++++++++ - 8 files changed, 432 insertions(+), 5 deletions(-) - create mode 100644 doc/groups-manager.rst - create mode 100644 plugins/groups_manager.py - -diff --git a/dnf-plugins-core.spec b/dnf-plugins-core.spec -index d13a996..42d0884 100644 ---- a/dnf-plugins-core.spec -+++ b/dnf-plugins-core.spec -@@ -58,6 +58,7 @@ Provides: dnf-command(debug-dump) - Provides: dnf-command(debug-restore) - Provides: dnf-command(debuginfo-install) - Provides: dnf-command(download) -+Provides: dnf-command(groups-manager) - Provides: dnf-command(repoclosure) - Provides: dnf-command(repograph) - Provides: dnf-command(repomanage) -@@ -73,6 +74,7 @@ Provides: dnf-plugin-debuginfo-install = %{version}-%{release} - Provides: dnf-plugin-download = %{version}-%{release} - Provides: dnf-plugin-generate_completion_cache = %{version}-%{release} - Provides: dnf-plugin-needs_restarting = %{version}-%{release} -+Provides: dnf-plugin-groups-manager = %{version}-%{release} - Provides: dnf-plugin-repoclosure = %{version}-%{release} - Provides: dnf-plugin-repodiff = %{version}-%{release} - Provides: dnf-plugin-repograph = %{version}-%{release} -@@ -87,7 +89,7 @@ Conflicts: dnf-plugins-extras-common-data < %{dnf_plugins_extra} - - %description - Core Plugins for DNF. This package enhances DNF with builddep, config-manager, --copr, debug, debuginfo-install, download, needs-restarting, repoclosure, -+copr, debug, debuginfo-install, download, needs-restarting, groups-manager, repoclosure, - repograph, repomanage, reposync, changelog and repodiff commands. Additionally - provides generate_completion_cache passive plugin. - -@@ -129,7 +131,8 @@ Conflicts: python-%{name} < %{version}-%{release} - %description -n python2-%{name} - Core Plugins for DNF, Python 2 interface. This package enhances DNF with builddep, - config-manager, copr, degug, debuginfo-install, download, needs-restarting, --repoclosure, repograph, repomanage, reposync, changelog and repodiff commands. -+groups-manager, repoclosure, repograph, repomanage, reposync, changelog -+and repodiff commands. - Additionally provides generate_completion_cache passive plugin. - %endif - -@@ -163,7 +166,8 @@ Conflicts: python-%{name} < %{version}-%{release} - %description -n python3-%{name} - Core Plugins for DNF, Python 3 interface. This package enhances DNF with builddep, - config-manager, copr, debug, debuginfo-install, download, needs-restarting, --repoclosure, repograph, repomanage, reposync, changelog and repodiff commands. -+groups-manager, repoclosure, repograph, repomanage, reposync, changelog -+and repodiff commands. - Additionally provides generate_completion_cache passive plugin. - %endif - -@@ -190,8 +194,8 @@ Summary: Yum-utils CLI compatibility layer - %description -n %{yum_utils_subpackage_name} - As a Yum-utils CLI compatibility layer, supplies in CLI shims for - debuginfo-install, repograph, package-cleanup, repoclosure, repomanage, --repoquery, reposync, repotrack, repodiff, builddep, config-manager, debug --and download that use new implementations using DNF. -+repoquery, reposync, repotrack, repodiff, builddep, config-manager, debug, -+download and yum-groups-manager that use new implementations using DNF. - %endif - - %if 0%{?rhel} == 0 && %{with python2} -@@ -458,6 +462,7 @@ ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yum-builddep - ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yum-config-manager - ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yum-debug-dump - ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yum-debug-restore -+ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yum-groups-manager - ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yumdownloader - # These commands don't have a dedicated man page, so let's just point them - # to the utils page which contains their descriptions. -@@ -483,6 +488,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/ - %{_mandir}/man8/dnf-debuginfo-install.* - %{_mandir}/man8/dnf-download.* - %{_mandir}/man8/dnf-generate_completion_cache.* -+%{_mandir}/man8/dnf-groups-manager.* - %{_mandir}/man8/dnf-needs-restarting.* - %{_mandir}/man8/dnf-repoclosure.* - %{_mandir}/man8/dnf-repodiff.* -@@ -513,6 +519,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/ - %{python2_sitelib}/dnf-plugins/debuginfo-install.* - %{python2_sitelib}/dnf-plugins/download.* - %{python2_sitelib}/dnf-plugins/generate_completion_cache.* -+%{python2_sitelib}/dnf-plugins/groups_manager.* - %{python2_sitelib}/dnf-plugins/needs_restarting.* - %{python2_sitelib}/dnf-plugins/repoclosure.* - %{python2_sitelib}/dnf-plugins/repodiff.* -@@ -538,6 +545,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/ - %{python3_sitelib}/dnf-plugins/debuginfo-install.py - %{python3_sitelib}/dnf-plugins/download.py - %{python3_sitelib}/dnf-plugins/generate_completion_cache.py -+%{python3_sitelib}/dnf-plugins/groups_manager.py - %{python3_sitelib}/dnf-plugins/needs_restarting.py - %{python3_sitelib}/dnf-plugins/repoclosure.py - %{python3_sitelib}/dnf-plugins/repodiff.py -@@ -552,6 +560,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/ - %{python3_sitelib}/dnf-plugins/__pycache__/debuginfo-install.* - %{python3_sitelib}/dnf-plugins/__pycache__/download.* - %{python3_sitelib}/dnf-plugins/__pycache__/generate_completion_cache.* -+%{python3_sitelib}/dnf-plugins/__pycache__/groups_manager.* - %{python3_sitelib}/dnf-plugins/__pycache__/needs_restarting.* - %{python3_sitelib}/dnf-plugins/__pycache__/repoclosure.* - %{python3_sitelib}/dnf-plugins/__pycache__/repodiff.* -@@ -579,6 +588,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/ - %{_bindir}/yum-config-manager - %{_bindir}/yum-debug-dump - %{_bindir}/yum-debug-restore -+%{_bindir}/yum-groups-manager - %{_bindir}/yumdownloader - %{_mandir}/man1/debuginfo-install.* - %{_mandir}/man1/needs-restarting.* -@@ -591,6 +601,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/ - %{_mandir}/man1/yum-config-manager.* - %{_mandir}/man1/yum-debug-dump.* - %{_mandir}/man1/yum-debug-restore.* -+%{_mandir}/man1/yum-groups-manager.* - %{_mandir}/man1/yumdownloader.* - %{_mandir}/man1/package-cleanup.* - %{_mandir}/man1/dnf-utils.* -@@ -612,6 +623,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/ - %exclude %{_mandir}/man1/yum-config-manager.* - %exclude %{_mandir}/man1/yum-debug-dump.* - %exclude %{_mandir}/man1/yum-debug-restore.* -+%exclude %{_mandir}/man1/yum-groups-manager.* - %exclude %{_mandir}/man1/yumdownloader.* - %exclude %{_mandir}/man1/package-cleanup.* - %exclude %{_mandir}/man1/dnf-utils.* -diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt -index dd97eb2..3fb665d 100644 ---- a/doc/CMakeLists.txt -+++ b/doc/CMakeLists.txt -@@ -26,6 +26,7 @@ INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/dnf-builddep.8 - ${CMAKE_CURRENT_BINARY_DIR}/dnf-debuginfo-install.8 - ${CMAKE_CURRENT_BINARY_DIR}/dnf-download.8 - ${CMAKE_CURRENT_BINARY_DIR}/dnf-generate_completion_cache.8 -+ ${CMAKE_CURRENT_BINARY_DIR}/dnf-groups-manager.8 - ${CMAKE_CURRENT_BINARY_DIR}/dnf-leaves.8 - ${CMAKE_CURRENT_BINARY_DIR}/dnf-needs-restarting.8 - ${CMAKE_CURRENT_BINARY_DIR}/dnf-repoclosure.8 -@@ -61,6 +62,7 @@ INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/debuginfo-install.1 - ${CMAKE_CURRENT_BINARY_DIR}/yum-config-manager.1 - ${CMAKE_CURRENT_BINARY_DIR}/yum-debug-dump.1 - ${CMAKE_CURRENT_BINARY_DIR}/yum-debug-restore.1 -+ ${CMAKE_CURRENT_BINARY_DIR}/yum-groups-manager.1 - ${CMAKE_CURRENT_BINARY_DIR}/yumdownloader.1 - ${CMAKE_CURRENT_BINARY_DIR}/package-cleanup.1 - ${CMAKE_CURRENT_BINARY_DIR}/dnf-utils.1 -diff --git a/doc/conf.py b/doc/conf.py -index d760ef3..645185a 100644 ---- a/doc/conf.py -+++ b/doc/conf.py -@@ -251,6 +251,7 @@ man_pages = [ - ('download', 'dnf-download', u'DNF download Plugin', AUTHORS, 8), - ('generate_completion_cache', 'dnf-generate_completion_cache', - u'DNF generate_completion_cache Plugin', AUTHORS, 8), -+ ('groups-manager', 'dnf-groups-manager', u'DNF groups-manager Plugin', AUTHORS, 8), - ('leaves', 'dnf-leaves', u'DNF leaves Plugin', AUTHORS, 8), - ('local', 'dnf-local', u'DNF local Plugin', AUTHORS, 8), - ('needs_restarting', 'dnf-needs-restarting', u'DNF needs_restarting Plugin', AUTHORS, 8), -@@ -268,6 +269,7 @@ man_pages = [ - ('copr', 'yum-copr', u'redirecting to DNF copr Plugin', AUTHORS, 8), - ('debuginfo-install', 'debuginfo-install', u'redirecting to DNF debuginfo-install Plugin', - AUTHORS, 1), -+ ('groups-manager', 'yum-groups-manager', u'redirecting to DNF groups-manager Plugin', AUTHORS, 1), - ('needs_restarting', 'needs-restarting', u'redirecting to DNF needs-restarting Plugin', - AUTHORS, 1), - ('repoclosure', 'repoclosure', u'redirecting to DNF repoclosure Plugin', AUTHORS, 1), -diff --git a/doc/groups-manager.rst b/doc/groups-manager.rst -new file mode 100644 -index 0000000..f8f76a1 ---- /dev/null -+++ b/doc/groups-manager.rst -@@ -0,0 +1,94 @@ -+.. -+ Copyright (C) 2020 Red Hat, Inc. -+ -+ This copyrighted material is made available to anyone wishing to use, -+ modify, copy, or redistribute it subject to the terms and conditions of -+ the GNU General Public License v.2, or (at your option) any later version. -+ This program is distributed in the hope that it will be useful, but WITHOUT -+ ANY WARRANTY expressed or implied, including the implied warranties of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -+ Public License for more details. You should have received a copy of the -+ GNU General Public License along with this program; if not, write to the -+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -+ 02110-1301, USA. Any Red Hat trademarks that are incorporated in the -+ source code or documentation are not subject to the GNU General Public -+ License and may only be used or replicated with the express permission of -+ Red Hat, Inc. -+ -+========================= -+DNF groups-manager Plugin -+========================= -+ -+Create and edit groups repository metadata files. -+ -+-------- -+Synopsis -+-------- -+ -+``dnf groups-manager [options] [package-name-spec [package-name-spec ...]]`` -+ -+----------- -+Description -+----------- -+groups-manager plugin is used to create or edit a group metadata file for a repository. This is often much easier than writing/editing the XML by hand. The groups-manager can load an entire file of groups metadata and either create a new group or edit an existing group and then write all of the groups metadata back out. -+ -+--------- -+Arguments -+--------- -+ -+```` -+ Package to add to a group or remove from a group. -+ -+------- -+Options -+------- -+ -+All general DNF options are accepted, see `Options` in :manpage:`dnf(8)` for details. -+ -+``--load=`` -+ Load the groups metadata information from the specified file before performing any operations. Metadata from all files are merged together if the option is specified multiple times. -+ -+``--save=`` -+ Save the result to this file. You can specify the name of a file you are loading from as the data will only be saved when all the operations have been performed. This option can also be specified multiple times. -+ -+``--merge=`` -+ This is the same as loading and saving a file, however the "merge" file is loaded before any others and saved last. -+ -+``--print`` -+ Also print the result to stdout. -+ -+``--id=`` -+ The id to lookup/use for the group. If you don't specify an ````, but do specify a name that doesn't refer to an existing group, then an id for the group is generated based on the name. -+ -+``-n , --name=`` -+ The name to lookup/use for the group. If you specify an existing group id, then the group with that id will have it's name changed to this value. -+ -+``--description=`` -+ The description to use for the group. -+ -+``--display-order=`` -+ Change the integer which controls the order groups are presented in, for example in ``dnf grouplist``. -+ -+``--translated-name=`` -+ A translation of the group name in the given language. The syntax is ``lang:text``. Eg. ``en:my-group-name-in-english`` -+ -+``--translated-description=`` -+ A translation of the group description in the given language. The syntax is ``lang:text``. Eg. ``en:my-group-description-in-english``. -+ -+``--user-visible`` -+ Make the group visible in ``dnf grouplist`` (this is the default). -+ -+``--not-user-visible`` -+ Make the group not visible in ``dnf grouplist``. -+ -+``--mandatory`` -+ Store the package names specified within the mandatory section of the specified group, the default is to use the default section. -+ -+``--optional`` -+ Store the package names specified within the optional section of the specified group, the default is to use the default section. -+ -+``--remove`` -+ Instead of adding packages remove them. Note that the packages are removed from all sections (default, mandatory and optional). -+ -+``--dependencies`` -+ Also include the names of the direct dependencies for each package specified. -diff --git a/doc/index.rst b/doc/index.rst -index 91bb36e..7213253 100644 ---- a/doc/index.rst -+++ b/doc/index.rst -@@ -33,6 +33,7 @@ This documents core plugins of DNF: - debuginfo-install - download - generate_completion_cache -+ groups-manager - leaves - local - migrate -diff --git a/libexec/dnf-utils.in b/libexec/dnf-utils.in -index 667ce13..af1e893 100644 ---- a/libexec/dnf-utils.in -+++ b/libexec/dnf-utils.in -@@ -37,6 +37,7 @@ MAPPING = {'debuginfo-install': ['debuginfo-install'], - 'yum-config-manager': ['config-manager'], - 'yum-debug-dump': ['debug-dump'], - 'yum-debug-restore': ['debug-restore'], -+ 'yum-groups-manager': ['groups-manager'], - 'yumdownloader': ['download'] - } - -diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt -index 7465e53..f66d3df 100644 ---- a/plugins/CMakeLists.txt -+++ b/plugins/CMakeLists.txt -@@ -6,6 +6,7 @@ INSTALL (FILES config_manager.py DESTINATION ${PYTHON_INSTALL_DIR}/dnf-plugins) - INSTALL (FILES copr.py DESTINATION ${PYTHON_INSTALL_DIR}/dnf-plugins) - INSTALL (FILES download.py DESTINATION ${PYTHON_INSTALL_DIR}/dnf-plugins) - INSTALL (FILES generate_completion_cache.py DESTINATION ${PYTHON_INSTALL_DIR}/dnf-plugins) -+INSTALL (FILES groups_manager.py DESTINATION ${PYTHON_INSTALL_DIR}/dnf-plugins) - INSTALL (FILES leaves.py DESTINATION ${PYTHON_INSTALL_DIR}/dnf-plugins) - if (${WITHOUT_LOCAL} STREQUAL "0") - INSTALL (FILES local.py DESTINATION ${PYTHON_INSTALL_DIR}/dnf-plugins) -diff --git a/plugins/groups_manager.py b/plugins/groups_manager.py -new file mode 100644 -index 0000000..382df37 ---- /dev/null -+++ b/plugins/groups_manager.py -@@ -0,0 +1,314 @@ -+# groups_manager.py -+# DNF plugin for managing comps groups metadata files -+# -+# Copyright (C) 2020 Red Hat, Inc. -+# -+# This copyrighted material is made available to anyone wishing to use, -+# modify, copy, or redistribute it subject to the terms and conditions of -+# the GNU General Public License v.2, or (at your option) any later version. -+# This program is distributed in the hope that it will be useful, but WITHOUT -+# ANY WARRANTY expressed or implied, including the implied warranties of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -+# Public License for more details. You should have received a copy of the -+# GNU General Public License along with this program; if not, write to the -+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -+# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the -+# source code or documentation are not subject to the GNU General Public -+# License and may only be used or replicated with the express permission of -+# Red Hat, Inc. -+# -+ -+from __future__ import absolute_import -+from __future__ import unicode_literals -+ -+import argparse -+import gzip -+import libcomps -+import os -+import re -+import shutil -+import tempfile -+ -+from dnfpluginscore import _, logger -+import dnf -+import dnf.cli -+ -+ -+RE_GROUP_ID_VALID = '-a-z0-9_.:' -+RE_GROUP_ID = re.compile(r'^[{}]+$'.format(RE_GROUP_ID_VALID)) -+RE_LANG = re.compile(r'^[-a-zA-Z0-9_.@]+$') -+COMPS_XML_OPTIONS = { -+ 'default_explicit': True, -+ 'uservisible_explicit': True, -+ 'empty_groups': True} -+ -+ -+def group_id_type(value): -+ '''group id validator''' -+ if not RE_GROUP_ID.match(value): -+ raise argparse.ArgumentTypeError(_('Invalid group id')) -+ return value -+ -+ -+def translation_type(value): -+ '''translated texts validator''' -+ data = value.split(':', 2) -+ if len(data) != 2: -+ raise argparse.ArgumentTypeError( -+ _("Invalid translated data, should be in form 'lang:text'")) -+ lang, text = data -+ if not RE_LANG.match(lang): -+ raise argparse.ArgumentTypeError(_('Invalid/empty language for translated data')) -+ return lang, text -+ -+ -+def text_to_id(text): -+ '''generate group id based on its name''' -+ group_id = text.lower() -+ group_id = re.sub('[^{}]'.format(RE_GROUP_ID_VALID), '', group_id) -+ if not group_id: -+ raise dnf.cli.CliError( -+ _("Can't generate group id from '{}'. Please specify group id using --id.").format( -+ text)) -+ return group_id -+ -+ -+@dnf.plugin.register_command -+class GroupsManagerCommand(dnf.cli.Command): -+ aliases = ('groups-manager',) -+ summary = _('create and edit groups metadata file') -+ -+ def __init__(self, cli): -+ super(GroupsManagerCommand, self).__init__(cli) -+ self.comps = libcomps.Comps() -+ -+ @staticmethod -+ def set_argparser(parser): -+ # input / output options -+ parser.add_argument('--load', action='append', default=[], -+ metavar='COMPS.XML', -+ help=_('load groups metadata from file')) -+ parser.add_argument('--save', action='append', default=[], -+ metavar='COMPS.XML', -+ help=_('save groups metadata to file')) -+ parser.add_argument('--merge', metavar='COMPS.XML', -+ help=_('load and save groups metadata to file')) -+ parser.add_argument('--print', action='store_true', default=False, -+ help=_('print the result metadata to stdout')) -+ # group options -+ parser.add_argument('--id', type=group_id_type, -+ help=_('group id')) -+ parser.add_argument('-n', '--name', help=_('group name')) -+ parser.add_argument('--description', -+ help=_('group description')) -+ parser.add_argument('--display-order', type=int, -+ help=_('group display order')) -+ parser.add_argument('--translated-name', action='append', default=[], -+ metavar='LANG:TEXT', type=translation_type, -+ help=_('translated name for the group')) -+ parser.add_argument('--translated-description', action='append', default=[], -+ metavar='LANG:TEXT', type=translation_type, -+ help=_('translated description for the group')) -+ visible = parser.add_mutually_exclusive_group() -+ visible.add_argument('--user-visible', dest='user_visible', action='store_true', -+ default=None, -+ help=_('make the group user visible (default)')) -+ visible.add_argument('--not-user-visible', dest='user_visible', action='store_false', -+ default=None, -+ help=_('make the group user invisible')) -+ -+ # package list options -+ section = parser.add_mutually_exclusive_group() -+ section.add_argument('--mandatory', action='store_true', -+ help=_('add packages to the mandatory section')) -+ section.add_argument('--optional', action='store_true', -+ help=_('add packages to the optional section')) -+ section.add_argument('--remove', action='store_true', default=False, -+ help=_('remove packages from the group instead of adding them')) -+ parser.add_argument('--dependencies', action='store_true', -+ help=_('include also direct dependencies for packages')) -+ -+ parser.add_argument("packages", nargs='*', metavar='PACKAGE', -+ help=_('package specification')) -+ -+ def configure(self): -+ demands = self.cli.demands -+ -+ if self.opts.packages: -+ demands.sack_activation = True -+ demands.available_repos = True -+ demands.load_system_repo = False -+ -+ # handle --merge option (shortcut to --load and --save the same file) -+ if self.opts.merge: -+ self.opts.load.insert(0, self.opts.merge) -+ self.opts.save.append(self.opts.merge) -+ -+ # check that group is specified when editing is attempted -+ if (self.opts.description -+ or self.opts.display_order -+ or self.opts.translated_name -+ or self.opts.translated_description -+ or self.opts.user_visible is not None -+ or self.opts.packages): -+ if not self.opts.id and not self.opts.name: -+ raise dnf.cli.CliError( -+ _("Can't edit group without specifying it (use --id or --name)")) -+ -+ def load_input_files(self): -+ """ -+ Loads all input xml files. -+ Returns True if at least one file was successfuly loaded -+ """ -+ for file_name in self.opts.load: -+ file_comps = libcomps.Comps() -+ try: -+ if file_name.endswith('.gz'): -+ # libcomps does not support gzipped files - decompress to temporary -+ # location -+ with gzip.open(file_name) as gz_file: -+ temp_file = tempfile.NamedTemporaryFile(delete=False) -+ try: -+ shutil.copyfileobj(gz_file, temp_file) -+ # close temp_file to ensure the content is flushed to disk -+ temp_file.close() -+ file_comps.fromxml_f(temp_file.name) -+ finally: -+ os.unlink(temp_file.name) -+ else: -+ file_comps.fromxml_f(file_name) -+ except (IOError, OSError, libcomps.ParserError) as err: -+ # gzip module raises OSError on reading from malformed gz file -+ # get_last_errors() output often contains duplicit lines, remove them -+ seen = set() -+ for error in file_comps.get_last_errors(): -+ if error in seen: -+ continue -+ logger.error(error.strip()) -+ seen.add(error) -+ raise dnf.exceptions.Error( -+ _("Can't load file \"{}\": {}").format(file_name, err)) -+ else: -+ self.comps += file_comps -+ -+ def save_output_files(self): -+ for file_name in self.opts.save: -+ try: -+ # xml_f returns a list of errors / log entries -+ errors = self.comps.xml_f(file_name, xml_options=COMPS_XML_OPTIONS) -+ except libcomps.XMLGenError as err: -+ errors = [err] -+ if errors: -+ # xml_f() method could return more than one error. In this case -+ # raise the latest of them and log the others. -+ for err in errors[:-1]: -+ logger.error(err.strip()) -+ raise dnf.exceptions.Error(_("Can't save file \"{}\": {}").format( -+ file_name, errors[-1].strip())) -+ -+ -+ def find_group(self, group_id, name): -+ ''' -+ Try to find group according to command line parameters - first by id -+ then by name. -+ ''' -+ group = None -+ if group_id: -+ for grp in self.comps.groups: -+ if grp.id == group_id: -+ group = grp -+ break -+ if group is None and name: -+ for grp in self.comps.groups: -+ if grp.name == name: -+ group = grp -+ break -+ return group -+ -+ def edit_group(self, group): -+ ''' -+ Set attributes and package lists for selected group -+ ''' -+ def langlist_to_strdict(lst): -+ str_dict = libcomps.StrDict() -+ for lang, text in lst: -+ str_dict[lang] = text -+ return str_dict -+ -+ # set group attributes -+ if self.opts.name: -+ group.name = self.opts.name -+ if self.opts.description: -+ group.desc = self.opts.description -+ if self.opts.display_order: -+ group.display_order = self.opts.display_order -+ if self.opts.user_visible is not None: -+ group.uservisible = self.opts.user_visible -+ if self.opts.translated_name: -+ group.name_by_lang = langlist_to_strdict(self.opts.translated_name) -+ if self.opts.translated_description: -+ group.desc_by_lang = langlist_to_strdict(self.opts.translated_description) -+ -+ # edit packages list -+ if self.opts.packages: -+ # find packages according to specifications from command line -+ packages = set() -+ for pkg_spec in self.opts.packages: -+ q = self.base.sack.query().filterm(name__glob=pkg_spec).latest() -+ if not q: -+ logger.warning(_("No match for argument: {}").format(pkg_spec)) -+ continue -+ packages.update(q) -+ if self.opts.dependencies: -+ # add packages that provide requirements -+ requirements = set() -+ for pkg in packages: -+ requirements.update(pkg.requires) -+ packages.update(self.base.sack.query().filterm(provides=requirements)) -+ -+ pkg_names = {pkg.name for pkg in packages} -+ -+ if self.opts.remove: -+ for pkg_name in pkg_names: -+ for pkg in group.packages_match(name=pkg_name, -+ type=libcomps.PACKAGE_TYPE_UNKNOWN): -+ group.packages.remove(pkg) -+ else: -+ if self.opts.mandatory: -+ pkg_type = libcomps.PACKAGE_TYPE_MANDATORY -+ elif self.opts.optional: -+ pkg_type = libcomps.PACKAGE_TYPE_OPTIONAL -+ else: -+ pkg_type = libcomps.PACKAGE_TYPE_DEFAULT -+ for pkg_name in sorted(pkg_names): -+ if not group.packages_match(name=pkg_name, type=pkg_type): -+ group.packages.append(libcomps.Package(name=pkg_name, type=pkg_type)) -+ -+ def run(self): -+ self.load_input_files() -+ -+ if self.opts.id or self.opts.name: -+ # we are adding / editing a group -+ group = self.find_group(group_id=self.opts.id, name=self.opts.name) -+ if group is None: -+ # create a new group -+ if self.opts.remove: -+ raise dnf.exceptions.Error(_("Can't remove packages from non-existent group")) -+ group = libcomps.Group() -+ if self.opts.id: -+ group.id = self.opts.id -+ group.name = self.opts.id -+ elif self.opts.name: -+ group_id = text_to_id(self.opts.name) -+ if self.find_group(group_id=group_id, name=None): -+ raise dnf.cli.CliError( -+ _("Group id '{}' generated from '{}' is duplicit. " -+ "Please specify group id using --id.").format( -+ group_id, self.opts.name)) -+ group.id = group_id -+ self.comps.groups.append(group) -+ self.edit_group(group) -+ -+ self.save_output_files() -+ if self.opts.print or (not self.opts.save): -+ print(self.comps.xml_str(xml_options=COMPS_XML_OPTIONS)) --- -2.26.2 - diff --git a/SOURCES/0001-versionlock-Do-not-exclude-locked-obsoleters-RhBug1957280.patch b/SOURCES/0001-versionlock-Do-not-exclude-locked-obsoleters-RhBug1957280.patch new file mode 100644 index 0000000..133ea78 --- /dev/null +++ b/SOURCES/0001-versionlock-Do-not-exclude-locked-obsoleters-RhBug1957280.patch @@ -0,0 +1,38 @@ +From a3b9e17628994b43080b8c03b9f665a0e6514cd6 Mon Sep 17 00:00:00 2001 +From: Marek Blaha +Date: Tue, 11 May 2021 08:29:31 +0200 +Subject: [PATCH] versionlock: Do not exclude locked obsoleters (RhBug:1957280) + +The versionlock plugin excludes all obsoleters of locked packages. If +both versions (obsoleted package and its obsoleter) are locked, this +leads to the inability to install the obsoleter package. The patch +protects all locked packages from being excluded as obsoleters. + += changelog = +msg: versionlock: Locking obsoleted package does not make the obsoleter unavailable +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1957280 +--- + plugins/versionlock.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/plugins/versionlock.py b/plugins/versionlock.py +index d997130..c89a75d 100644 +--- a/plugins/versionlock.py ++++ b/plugins/versionlock.py +@@ -113,8 +113,10 @@ class VersionLock(dnf.Plugin): + other_versions = all_versions.difference(locked_query) + excludes_query = excludes_query.union(other_versions) + # exclude also anything that obsoletes the locked versions of packages +- excludes_query = excludes_query.union( +- self.base.sack.query().filterm(obsoletes=locked_query)) ++ obsoletes_query = self.base.sack.query().filterm(obsoletes=locked_query) ++ # leave out obsoleters that are also part of locked versions (otherwise the obsoleter package ++ # would not be installable at all) ++ excludes_query = excludes_query.union(obsoletes_query.difference(locked_query)) + + excludes_query.filterm(reponame__neq=hawkey.SYSTEM_REPO_NAME) + if excludes_query: +-- +libgit2 1.0.1 + diff --git a/SOURCES/0002-needs-restarting-add-s-to-list-services-RhBug-177293.patch b/SOURCES/0002-needs-restarting-add-s-to-list-services-RhBug-177293.patch deleted file mode 100644 index b832730..0000000 --- a/SOURCES/0002-needs-restarting-add-s-to-list-services-RhBug-177293.patch +++ /dev/null @@ -1,138 +0,0 @@ -From b2a912724d737ca7ac4350885b54117f5e043046 Mon Sep 17 00:00:00 2001 -From: Nicola Sella -Date: Thu, 5 Mar 2020 12:45:39 +0100 -Subject: [PATCH 2/2] [needs-restarting] add -s to list services - (RhBug:1772939) - -= changelog = -msg: [needs-restarting] add -s to list services (RhBug:1772939) -type: bugfix -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1772939 - -Closes: #395 -Approved by: kontura ---- - dnf-plugins-core.spec | 6 ++++++ - doc/needs_restarting.rst | 3 +++ - plugins/needs_restarting.py | 33 +++++++++++++++++++++++++++++++++ - 3 files changed, 42 insertions(+) - -diff --git a/dnf-plugins-core.spec b/dnf-plugins-core.spec -index 42d0884..012dde8 100644 ---- a/dnf-plugins-core.spec -+++ b/dnf-plugins-core.spec -@@ -99,8 +99,10 @@ Summary: Core Plugins for DNF - %{?python_provide:%python_provide python2-%{name}} - BuildRequires: python2-dnf >= %{dnf_lowest_compatible} - %if 0%{?rhel} && 0%{?rhel} <= 7 -+BuildRequires: dbus-python - BuildRequires: python-nose - %else -+BuildRequires: python2-dbus - BuildRequires: python2-nose - %endif - BuildRequires: python2-devel -@@ -110,8 +112,10 @@ Requires: python2-distro - Requires: python2-dnf >= %{dnf_lowest_compatible} - Requires: python2-hawkey >= %{hawkey_version} - %if 0%{?rhel} && 0%{?rhel} <= 7 -+Requires: dbus-python - Requires: python-dateutil - %else -+Requires: python2-dbus - Requires: python2-dateutil - %endif - Provides: python2-dnf-plugins-extras-debug = %{version}-%{release} -@@ -140,12 +144,14 @@ Additionally provides generate_completion_cache passive plugin. - %package -n python3-%{name} - Summary: Core Plugins for DNF - %{?python_provide:%python_provide python3-%{name}} -+BuildRequires: python3-dbus - BuildRequires: python3-devel - BuildRequires: python3-dnf >= %{dnf_lowest_compatible} - BuildRequires: python3-nose - %if 0%{?fedora} - Requires: python3-distro - %endif -+Requires: python3-dbus - Requires: python3-dnf >= %{dnf_lowest_compatible} - Requires: python3-hawkey >= %{hawkey_version} - Requires: python3-dateutil -diff --git a/doc/needs_restarting.rst b/doc/needs_restarting.rst -index e79b43f..1a3fbbe 100644 ---- a/doc/needs_restarting.rst -+++ b/doc/needs_restarting.rst -@@ -48,3 +48,6 @@ All general DNF options are accepted, see `Options` in :manpage:`dnf(8)` for det - ``-r, --reboothint`` - - Only report whether a reboot is required (exit code 1) or not (exit code 0). -+ -+``-s, --services`` -+ Only list the affected systemd services. -diff --git a/plugins/needs_restarting.py b/plugins/needs_restarting.py -index 69203f4..f6bf525 100644 ---- a/plugins/needs_restarting.py -+++ b/plugins/needs_restarting.py -@@ -29,6 +29,7 @@ from dnfpluginscore import logger, _ - - import dnf - import dnf.cli -+import dbus - import functools - import os - import re -@@ -126,6 +127,30 @@ def print_cmd(pid): - print('%d : %s' % (pid, command)) - - -+def get_service_dbus(pid): -+ bus = dbus.SystemBus() -+ systemd_manager_object = bus.get_object( -+ 'org.freedesktop.systemd1', -+ '/org/freedesktop/systemd1' -+ ) -+ systemd_manager_interface = dbus.Interface( -+ systemd_manager_object, -+ 'org.freedesktop.systemd1.Manager' -+ ) -+ service_proxy = bus.get_object( -+ 'org.freedesktop.systemd1', -+ systemd_manager_interface.GetUnitByPID(pid) -+ ) -+ service_properties = dbus.Interface( -+ service_proxy, dbus_interface="org.freedesktop.DBus.Properties") -+ name = service_properties.Get( -+ "org.freedesktop.systemd1.Unit", -+ 'Id' -+ ) -+ if name.endswith(".service"): -+ return name -+ return -+ - def smap2opened_file(pid, line): - slash = line.find('/') - if slash < 0: -@@ -205,6 +230,8 @@ class NeedsRestartingCommand(dnf.cli.Command): - parser.add_argument('-r', '--reboothint', action='store_true', - help=_("only report whether a reboot is required " - "(exit code 1) or not (exit code 0)")) -+ parser.add_argument('-s', '--services', action='store_true', -+ help=_("only report affected systemd services")) - - def configure(self): - demands = self.cli.demands -@@ -251,5 +278,11 @@ class NeedsRestartingCommand(dnf.cli.Command): - if pkg.installtime > process_start(ofile.pid): - stale_pids.add(ofile.pid) - -+ if self.opts.services: -+ names = set([get_service_dbus(pid) for pid in sorted(stale_pids)]) -+ for name in names: -+ if name is not None: -+ print(name) -+ return 0 - for pid in sorted(stale_pids): - print_cmd(pid) --- -2.26.2 - diff --git a/SOURCES/0002-repomanage-Allow-running-only-with-metadata.patch b/SOURCES/0002-repomanage-Allow-running-only-with-metadata.patch new file mode 100644 index 0000000..2067f00 --- /dev/null +++ b/SOURCES/0002-repomanage-Allow-running-only-with-metadata.patch @@ -0,0 +1,49 @@ +From 716c5978a8036df22d6f5b430ba38c35d034f3ea Mon Sep 17 00:00:00 2001 +From: Aleลก Matฤ›j +Date: Tue, 8 Jun 2021 10:25:55 +0200 +Subject: [PATCH] [repomanage] Allow running only with metadata + +Requiring some packages to be present even if there are repodata was +arbitrary because they are never used. +--- + plugins/repomanage.py | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/plugins/repomanage.py b/plugins/repomanage.py +index 445006d..989bd78 100644 +--- a/plugins/repomanage.py ++++ b/plugins/repomanage.py +@@ -58,18 +58,13 @@ class RepoManageCommand(dnf.cli.Command): + if self.opts.new and self.opts.old: + raise dnf.exceptions.Error(_("Pass either --old or --new, not both!")) + +- rpm_list = [] +- rpm_list = self._get_file_list(self.opts.path, ".rpm") + verfile = {} + pkgdict = {} + module_dict = {} # {NameStream: {Version: [modules]}} + all_modular_artifacts = set() + + keepnum = int(self.opts.keep) # the number of items to keep + +- if len(rpm_list) == 0: +- raise dnf.exceptions.Error(_("No files to process")) +- + try: + repo_conf = self.base.repos.add_new_repo("repomanage_repo", self.base.conf, baseurl=[self.opts.path]) + # Always expire the repo, otherwise repomanage could use cached metadata and give identical results +@@ -88,6 +83,11 @@ class RepoManageCommand(dnf.cli.Command): + module_package.getVersionNum(), []).append(module_package) + + except dnf.exceptions.RepoError: ++ rpm_list = [] ++ rpm_list = self._get_file_list(self.opts.path, ".rpm") ++ if len(rpm_list) == 0: ++ raise dnf.exceptions.Error(_("No files to process")) ++ + self.base.reset(sack=True, repos=True) + self.base.fill_sack(load_system_repo=False, load_available_repos=False) + try: +-- +libgit2 1.0.1 + diff --git a/SOURCES/0003-repomanage-Enhance-repomanage-documentation-RhBug1898293.patch b/SOURCES/0003-repomanage-Enhance-repomanage-documentation-RhBug1898293.patch new file mode 100644 index 0000000..7563d02 --- /dev/null +++ b/SOURCES/0003-repomanage-Enhance-repomanage-documentation-RhBug1898293.patch @@ -0,0 +1,42 @@ +From 1b432bada5a3627f729cb42b99b7a93f808e3a80 Mon Sep 17 00:00:00 2001 +From: Aleลก Matฤ›j +Date: Tue, 8 Jun 2021 11:48:07 +0200 +Subject: [PATCH] [repomanage] Enhance repomanage documentation (RhBug:1898293) + += changelog = +msg: Enhance repomanage documentation +type: enhancement +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1898293 +--- + doc/repomanage.rst | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/doc/repomanage.rst b/doc/repomanage.rst +index e4da441..e3171ef 100644 +--- a/doc/repomanage.rst ++++ b/doc/repomanage.rst +@@ -31,9 +31,10 @@ Synopsis + Description + ----------- + +-`repomanage` prints newest or oldest packages in a repository specified by for easy piping to xargs or similar programs. In case doesn't contain a valid repository it is searched for rpm packages which are then used instead. ++`repomanage` prints newest or older packages in a repository specified by for easy piping to xargs or similar programs. In case doesn't contain a valid repodata, it is searched for rpm packages which are then used instead. ++If the repodata are present, `repomanage` uses them as the source of truth, it doesn't verify that they match the present rpm packages. In fact, `repomanage` can run with just the repodata, no rpm packages are needed. + +-In order to work correctly with modular packages has to contain repodata with modular metadata. If modular content is present `repomanage` prints packages from newest or oldest versions of each stream in addition to newest or oldest non-modular packages. ++In order to work correctly with modular packages, has to contain repodata with modular metadata. If modular content is present, `repomanage` prints packages from newest or older stream versions in addition to newest or older non-modular packages. + + + Options +@@ -44,7 +45,7 @@ All general DNF options are accepted, see `Options` in :manpage:`dnf(8)` for det + The following options set what packages are displayed. These options are mutually exclusive, i.e. only one can be specified. If no option is specified, the newest packages are shown. + + ``--old`` +- Show older packages. ++ Show older packages (for a package or a stream show all versions except the newest one). + + ``--new`` + Show newest packages. +-- +libgit2 1.0.1 + diff --git a/SOURCES/0003-reposync-Check-GPG-signatures-of-downloaded-packages-RhBug-1856818.patch b/SOURCES/0003-reposync-Check-GPG-signatures-of-downloaded-packages-RhBug-1856818.patch deleted file mode 100644 index 45cc285..0000000 --- a/SOURCES/0003-reposync-Check-GPG-signatures-of-downloaded-packages-RhBug-1856818.patch +++ /dev/null @@ -1,194 +0,0 @@ -From a4f21266a6dab9e77913d56c04aba1e579f0e0c1 Mon Sep 17 00:00:00 2001 -From: Marek Blaha -Date: Fri, 23 Oct 2020 09:06:35 +0200 -Subject: [PATCH 1/2] [reposync] Reorder options alphabetically - ---- - doc/reposync.rst | 30 +++++++++++++++--------------- - plugins/reposync.py | 18 +++++++++--------- - 2 files changed, 24 insertions(+), 24 deletions(-) - -diff --git a/doc/reposync.rst b/doc/reposync.rst -index 71a435dc..3b820f33 100644 ---- a/doc/reposync.rst -+++ b/doc/reposync.rst -@@ -39,36 +39,36 @@ Options - - All general DNF options are accepted. Namely, the ``--repoid`` option can be used to specify the repositories to synchronize. See `Options` in :manpage:`dnf(8)` for details. - --``-p , --download-path=`` -- Root path under which the downloaded repositories are stored, relative to the current working directory. Defaults to the current working directory. Every downloaded repository has a subdirectory named after its ID under this path. -- --``--norepopath`` -- Don't add the reponame to the download path. Can only be used when syncing a single repository (default is to add the reponame). -- --``--download-metadata`` -- Download all repository metadata. Downloaded copy is instantly usable as a repository, no need to run createrepo_c on it. -- - ``-a , --arch=`` - Download only packages of given architectures (default is all architectures). Can be used multiple times. - --``--source`` -- Operate on source packages. -+``--delete`` -+ Delete local packages no longer present in repository. -+ -+``--download-metadata`` -+ Download all repository metadata. Downloaded copy is instantly usable as a repository, no need to run createrepo_c on it. - - ``-m, --downloadcomps`` - Also download and uncompress comps.xml. Consider using ``--download-metadata`` option which will download all available repository metadata. - -+``--metadata-path`` -+ Root path under which the downloaded metadata are stored. It defaults to ``--download-path`` value if not given. -+ - ``-n, --newest-only`` - Download only newest packages per-repo. - --``--delete`` -- Delete local packages no longer present in repository. -+``--norepopath`` -+ Don't add the reponame to the download path. Can only be used when syncing a single repository (default is to add the reponame). - --``--metadata-path`` -- Root path under which the downloaded metadata are stored. It defaults to ``--download-path`` value if not given. -+``-p , --download-path=`` -+ Root path under which the downloaded repositories are stored, relative to the current working directory. Defaults to the current working directory. Every downloaded repository has a subdirectory named after its ID under this path. - - ``--remote-time`` - Try to set the timestamps of the downloaded files to those on the remote side. - -+``--source`` -+ Operate on source packages. -+ - ``-u, --urls`` - Just print urls of what would be downloaded, don't download. - -diff --git a/plugins/reposync.py b/plugins/reposync.py -index 7556e7eb..6f572cac 100644 ---- a/plugins/reposync.py -+++ b/plugins/reposync.py -@@ -63,24 +63,24 @@ def set_argparser(parser): - help=_('download only packages for this ARCH')) - parser.add_argument('--delete', default=False, action='store_true', - help=_('delete local packages no longer present in repository')) -- parser.add_argument('-m', '--downloadcomps', default=False, action='store_true', -- help=_('also download and uncompress comps.xml')) - parser.add_argument('--download-metadata', default=False, action='store_true', - help=_('download all the metadata.')) -+ parser.add_argument('-m', '--downloadcomps', default=False, action='store_true', -+ help=_('also download and uncompress comps.xml')) -+ parser.add_argument('--metadata-path', -+ help=_('where to store downloaded repository metadata. ' -+ 'Defaults to the value of --download-path.')) - parser.add_argument('-n', '--newest-only', default=False, action='store_true', - help=_('download only newest packages per-repo')) -- parser.add_argument('-p', '--download-path', default='./', -- help=_('where to store downloaded repositories')) - parser.add_argument('--norepopath', default=False, action='store_true', - help=_("Don't add the reponame to the download path.")) -- parser.add_argument('--metadata-path', -- help=_('where to store downloaded repository metadata. ' -- 'Defaults to the value of --download-path.')) -- parser.add_argument('--source', default=False, action='store_true', -- help=_('operate on source packages')) -+ parser.add_argument('-p', '--download-path', default='./', -+ help=_('where to store downloaded repositories')) - parser.add_argument('--remote-time', default=False, action='store_true', - help=_('try to set local timestamps of local files by ' - 'the one on the server')) -+ parser.add_argument('--source', default=False, action='store_true', -+ help=_('operate on source packages')) - parser.add_argument('-u', '--urls', default=False, action='store_true', - help=_("Just list urls of what would be downloaded, " - "don't download")) - -From 978b7f2b1c654fed7b1b4cf45cb607143226804c Mon Sep 17 00:00:00 2001 -From: Marek Blaha -Date: Fri, 23 Oct 2020 09:14:02 +0200 -Subject: [PATCH 2/2] [reposync] Check GPG signatures of downloaded packages - (RhBug:1856818) - -YUMv3 reposync used to have --gpgcheck option to remove packages that fail GPG -signature checking after downloading. -This patch implements the option for DNF. - -= changelog = -msg: Add --gpgcheck option to reposync (RhBug:1856818) -type: enhancement -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1856818 ---- - doc/reposync.rst | 4 ++++ - plugins/reposync.py | 21 +++++++++++++++++++++ - 2 files changed, 25 insertions(+) - -diff --git a/doc/reposync.rst b/doc/reposync.rst -index 3b820f33..de40957f 100644 ---- a/doc/reposync.rst -+++ b/doc/reposync.rst -@@ -48,6 +48,10 @@ All general DNF options are accepted. Namely, the ``--repoid`` option can be use - ``--download-metadata`` - Download all repository metadata. Downloaded copy is instantly usable as a repository, no need to run createrepo_c on it. - -+``-g, --gpgcheck`` -+ Remove packages that fail GPG signature checking after downloading. Exit code is ``1`` if at least one package was removed. -+ Note that for repositories with ``gpgcheck=0`` set in their configuration the GPG signature is not checked even with this option used. -+ - ``-m, --downloadcomps`` - Also download and uncompress comps.xml. Consider using ``--download-metadata`` option which will download all available repository metadata. - -diff --git a/plugins/reposync.py b/plugins/reposync.py -index 6f572cac..c891bfa2 100644 ---- a/plugins/reposync.py -+++ b/plugins/reposync.py -@@ -24,6 +24,7 @@ - import hawkey - import os - import shutil -+import types - - from dnfpluginscore import _, logger - from dnf.cli.option_parser import OptionParser -@@ -65,6 +66,9 @@ def set_argparser(parser): - help=_('delete local packages no longer present in repository')) - parser.add_argument('--download-metadata', default=False, action='store_true', - help=_('download all the metadata.')) -+ parser.add_argument('-g', '--gpgcheck', default=False, action='store_true', -+ help=_('Remove packages that fail GPG signature checking ' -+ 'after downloading')) - parser.add_argument('-m', '--downloadcomps', default=False, action='store_true', - help=_('also download and uncompress comps.xml')) - parser.add_argument('--metadata-path', -@@ -114,6 +118,7 @@ def configure(self): - - def run(self): - self.base.conf.keepcache = True -+ gpgcheck_ok = True - for repo in self.base.repos.iter_enabled(): - if self.opts.remote_time: - repo._repo.setPreserveRemoteTime(True) -@@ -150,8 +155,24 @@ def run(self): - self.print_urls(pkglist) - else: - self.download_packages(pkglist) -+ if self.opts.gpgcheck: -+ for pkg in pkglist: -+ local_path = self.pkg_download_path(pkg) -+ # base.package_signature_check uses pkg.localPkg() to determine -+ # the location of the package rpm file on the disk. -+ # Set it to the correct download path. -+ pkg.localPkg = types.MethodType( -+ lambda s, local_path=local_path: local_path, pkg) -+ result, error = self.base.package_signature_check(pkg) -+ if result != 0: -+ logger.warning(_("Removing {}: {}").format( -+ os.path.basename(local_path), error)) -+ os.unlink(local_path) -+ gpgcheck_ok = False - if self.opts.delete: - self.delete_old_local_packages(repo, pkglist) -+ if not gpgcheck_ok: -+ raise dnf.exceptions.Error(_("GPG signature check failed.")) - - def repo_target(self, repo): - return _pkgdir(self.opts.destdir or self.opts.download_path, diff --git a/SOURCES/0004-Update-translations.patch b/SOURCES/0004-Update-translations.patch index 4572853..3ab0465 100644 --- a/SOURCES/0004-Update-translations.patch +++ b/SOURCES/0004-Update-translations.patch @@ -1,360 +1,25 @@ -From ffce18035e04a92d482bf775b450df2dadcbe19b Mon Sep 17 00:00:00 2001 +From a15c6beee8ba3af9005cc49794ac6517f018d7a1 Mon Sep 17 00:00:00 2001 From: Marek Blaha -Date: Mon, 8 Mar 2021 15:51:24 +0100 +Date: Mon, 13 Sep 2021 10:01:53 +0200 Subject: [PATCH] Update translations --- - po/CMakeLists.txt | 1 + - po/dnf-plugins-core.pot | 199 ++++++++++++++++---- - po/fr.po | 221 ++++++++++++++++++---- - po/ja.po | 405 ++++++++++++++++++++++++++++------------ - po/ko.po | 214 +++++++++++++++++---- - po/zh_CN.po | 402 +++++++++++++++++++++++++++------------ - 6 files changed, 1095 insertions(+), 347 deletions(-) + po/fr.po | 222 +++++++++++++++++---- + po/ja.po | 409 +++++++++++++++++++++++++++----------- + po/ko.po | 556 ++++++++++++++++++++++++++++++++++------------------ + po/zh_CN.po | 417 +++++++++++++++++++++++++++------------ + 4 files changed, 1130 insertions(+), 474 deletions(-) -diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt -index 4f106fc..1ef5055 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/dnf-plugins-core.pot b/po/dnf-plugins-core.pot -index 7cd717e..f796147 100644 ---- a/po/dnf-plugins-core.pot -+++ b/po/dnf-plugins-core.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 10:06+0100\n" - "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" - "Last-Translator: FULL NAME \n" - "Language-Team: LANGUAGE \n" -@@ -560,7 +560,7 @@ msgstr "" - msgid "when running with --url, limit to specific protocols" - msgstr "" - --#: plugins/download.py:121 plugins/reposync.py:293 -+#: plugins/download.py:121 plugins/reposync.py:314 - #, python-format - msgid "Failed to get mirror for package: %s" - msgstr "" -@@ -583,6 +583,120 @@ msgstr "" - msgid "No package %s available." - msgstr "" - -+#: plugins/groups_manager.py:49 -+msgid "Invalid group id" -+msgstr "" -+ -+#: plugins/groups_manager.py:58 -+msgid "Invalid translated data, should be in form 'lang:text'" -+msgstr "" -+ -+#: plugins/groups_manager.py:61 -+msgid "Invalid/empty language for translated data" -+msgstr "" -+ -+#: plugins/groups_manager.py:71 -+msgid "Can't generate group id from '{}'. Please specify group id using --id." -+msgstr "" -+ -+#: plugins/groups_manager.py:79 -+msgid "create and edit groups metadata file" -+msgstr "" -+ -+#: plugins/groups_manager.py:90 -+msgid "load groups metadata from file" -+msgstr "" -+ -+#: plugins/groups_manager.py:93 -+msgid "save groups metadata to file" -+msgstr "" -+ -+#: plugins/groups_manager.py:95 -+msgid "load and save groups metadata to file" -+msgstr "" -+ -+#: plugins/groups_manager.py:97 -+msgid "print the result metadata to stdout" -+msgstr "" -+ -+#: plugins/groups_manager.py:100 -+msgid "group id" -+msgstr "" -+ -+#: plugins/groups_manager.py:101 -+msgid "group name" -+msgstr "" -+ -+#: plugins/groups_manager.py:103 -+msgid "group description" -+msgstr "" -+ -+#: plugins/groups_manager.py:105 -+msgid "group display order" -+msgstr "" -+ -+#: plugins/groups_manager.py:108 -+msgid "translated name for the group" -+msgstr "" -+ -+#: plugins/groups_manager.py:111 -+msgid "translated description for the group" -+msgstr "" -+ -+#: plugins/groups_manager.py:115 -+msgid "make the group user visible (default)" -+msgstr "" -+ -+#: plugins/groups_manager.py:118 -+msgid "make the group user invisible" -+msgstr "" -+ -+#: plugins/groups_manager.py:123 -+msgid "add packages to the mandatory section" -+msgstr "" -+ -+#: plugins/groups_manager.py:125 -+msgid "add packages to the optional section" -+msgstr "" -+ -+#: plugins/groups_manager.py:127 -+msgid "remove packages from the group instead of adding them" -+msgstr "" -+ -+#: plugins/groups_manager.py:129 -+msgid "include also direct dependencies for packages" -+msgstr "" -+ -+#: plugins/groups_manager.py:132 -+msgid "package specification" -+msgstr "" -+ -+#: plugins/groups_manager.py:156 -+msgid "Can't edit group without specifying it (use --id or --name)" -+msgstr "" -+ -+#: plugins/groups_manager.py:190 -+msgid "Can't load file \"{}\": {}" -+msgstr "" -+ -+#: plugins/groups_manager.py:206 -+msgid "Can't save file \"{}\": {}" -+msgstr "" -+ -+#: plugins/groups_manager.py:259 -+msgid "No match for argument: {}" -+msgstr "" -+ -+#: plugins/groups_manager.py:296 -+msgid "Can't remove packages from non-existent group" -+msgstr "" -+ -+#: plugins/groups_manager.py:305 -+msgid "" -+"Group id '{}' generated from '{}' is duplicit. Please specify group id using " -+"--id." -+msgstr "" -+ - #: plugins/leaves.py:32 - msgid "List installed packages not required by any other package" - msgstr "" -@@ -615,43 +729,47 @@ msgstr "" - msgid "Migrating history data..." - msgstr "" - --#: plugins/needs_restarting.py:65 -+#: plugins/needs_restarting.py:66 - #, python-brace-format - msgid "" - "No installed package found for package name \"{pkg}\" specified in needs-" - "restarting file \"{file}\"." - msgstr "" - --#: plugins/needs_restarting.py:199 -+#: plugins/needs_restarting.py:224 - msgid "determine updated binaries that need restarting" - msgstr "" - --#: plugins/needs_restarting.py:204 -+#: plugins/needs_restarting.py:229 - msgid "only consider this user's processes" - msgstr "" - --#: plugins/needs_restarting.py:206 -+#: plugins/needs_restarting.py:231 - msgid "" - "only report whether a reboot is required (exit code 1) or not (exit code 0)" - msgstr "" - --#: plugins/needs_restarting.py:230 -+#: plugins/needs_restarting.py:234 -+msgid "only report affected systemd services" -+msgstr "" -+ -+#: plugins/needs_restarting.py:257 - msgid "Core libraries or services have been updated since boot-up:" - msgstr "" - --#: plugins/needs_restarting.py:235 -+#: plugins/needs_restarting.py:262 - msgid "Reboot is required to fully utilize these updates." - msgstr "" - --#: plugins/needs_restarting.py:236 -+#: plugins/needs_restarting.py:263 - msgid "More information:" - msgstr "" - --#: plugins/needs_restarting.py:240 -+#: plugins/needs_restarting.py:267 - msgid "No core libraries or services have been updated since boot-up." - msgstr "" - --#: plugins/needs_restarting.py:242 -+#: plugins/needs_restarting.py:269 - msgid "Reboot should not be necessary." - msgstr "" - -@@ -871,84 +989,96 @@ msgstr "" - msgid "Path to directory" - msgstr "" - --#: plugins/reposync.py:54 -+#: plugins/reposync.py:55 - msgid "download all packages from remote repo" - msgstr "" - --#: plugins/reposync.py:63 -+#: plugins/reposync.py:64 - msgid "download only packages for this ARCH" - msgstr "" - --#: plugins/reposync.py:65 -+#: plugins/reposync.py:66 - msgid "delete local packages no longer present in repository" - msgstr "" - --#: plugins/reposync.py:67 --msgid "also download and uncompress comps.xml" --msgstr "" -- --#: plugins/reposync.py:69 -+#: plugins/reposync.py:68 - msgid "download all the metadata." - msgstr "" - --#: plugins/reposync.py:71 --msgid "download only newest packages per-repo" -+#: plugins/reposync.py:70 -+msgid "Remove packages that fail GPG signature checking after downloading" - msgstr "" - - #: plugins/reposync.py:73 --msgid "where to store downloaded repositories" -+msgid "also download and uncompress comps.xml" - msgstr "" - - #: plugins/reposync.py:75 --msgid "Don't add the reponame to the download path." --msgstr "" -- --#: plugins/reposync.py:77 - msgid "" - "where to store downloaded repository metadata. Defaults to the value of --" - "download-path." - msgstr "" - -+#: plugins/reposync.py:78 -+msgid "download only newest packages per-repo" -+msgstr "" -+ - #: plugins/reposync.py:80 --msgid "operate on source packages" -+msgid "Don't add the reponame to the download path." - msgstr "" - - #: plugins/reposync.py:82 -+msgid "where to store downloaded repositories" -+msgstr "" -+ -+#: plugins/reposync.py:84 - msgid "try to set local timestamps of local files by the one on the server" - msgstr "" - --#: plugins/reposync.py:85 -+#: plugins/reposync.py:87 -+msgid "operate on source packages" -+msgstr "" -+ -+#: plugins/reposync.py:89 - msgid "Just list urls of what would be downloaded, don't download" - msgstr "" - --#: plugins/reposync.py:109 -+#: plugins/reposync.py:113 - msgid "Can't use --norepopath with multiple repositories" - msgstr "" - --#: plugins/reposync.py:127 -+#: plugins/reposync.py:132 - #, python-format - msgid "Failed to get mirror for metadata: %s" - msgstr "" - --#: plugins/reposync.py:144 -+#: plugins/reposync.py:149 - msgid "Failed to get mirror for the group file." - msgstr "" - -+#: plugins/reposync.py:168 -+msgid "Removing {}: {}" -+msgstr "" -+ - #: plugins/reposync.py:175 -+msgid "GPG signature check failed." -+msgstr "" -+ -+#: plugins/reposync.py:196 - msgid "Download target '{}' is outside of download path '{}'." - msgstr "" - --#: plugins/reposync.py:190 -+#: plugins/reposync.py:211 - #, python-format - msgid "[DELETED] %s" - msgstr "" - --#: plugins/reposync.py:192 -+#: plugins/reposync.py:213 - #, python-format - msgid "failed to delete file %s" - msgstr "" - --#: plugins/reposync.py:201 -+#: plugins/reposync.py:222 - #, python-format - msgid "comps.xml for repository %s saved" - msgstr "" -@@ -1018,3 +1148,4 @@ msgstr "" - #: plugins/versionlock.py:136 - msgid "Use package specifications as they are, do not try to parse them" - msgstr "" -+ diff --git a/po/fr.po b/po/fr.po -index dfa06ad..d47761a 100644 +index dfa06ad..e517103 100644 --- a/po/fr.po +++ b/po/fr.po -@@ -6,20 +6,21 @@ - # Ludek Janda , 2018. #zanata +@@ -3,23 +3,24 @@ + # Josรฉ Fournier , 2017. #zanata + # Jรฉrรดme Fenal , 2017. #zanata + # Jean-Baptiste Holcroft , 2018. #zanata, 2020. +-# Ludek Janda , 2018. #zanata ++# Ludek Janda , 2018. #zanata, 2021. # Jean-Baptiste Holcroft , 2019. #zanata, 2020. # Julien Humbert , 2020. +# Sundeep Anand , 2021. @@ -367,8 +32,8 @@ index dfa06ad..d47761a 100644 -"Last-Translator: Julien Humbert \n" -"Language-Team: French \n" +"POT-Creation-Date: 2021-02-22 10:06+0100\n" -+"PO-Revision-Date: 2021-03-08 11:08+0000\n" -+"Last-Translator: Sundeep Anand \n" ++"PO-Revision-Date: 2021-09-03 10:36+0000\n" ++"Last-Translator: Ludek Janda \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" @@ -376,7 +41,7 @@ index dfa06ad..d47761a 100644 "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" ++"X-Generator: Weblate 4.8\n" #: plugins/builddep.py:45 msgid "[PACKAGE|PACKAGE.spec]" @@ -389,27 +54,26 @@ index dfa06ad..d47761a 100644 #, python-format msgid "Failed to get mirror for package: %s" msgstr "ร‰chec de lโ€™obtention du miroir pour le paquet : %s" -@@ -665,6 +666,126 @@ msgstr "Aucune source dรฉfinie pour %s" +@@ -665,6 +666,125 @@ msgstr "Aucune source dรฉfinie pour %s" msgid "No package %s available." msgstr "Aucun paquet %s nโ€™est disponible." +#: plugins/groups_manager.py:49 +msgid "Invalid group id" -+msgstr "ID de groupe non valide" ++msgstr "id de groupe invalide" + +#: plugins/groups_manager.py:58 +msgid "Invalid translated data, should be in form 'lang:text'" -+msgstr "" -+"Les donnรฉes traduites non valides doivent รชtre sous la forme \"lang:text\"" ++msgstr "Donnรฉes traduites invalides, doivent รชtre au format ยซ lang : text ยป" + +#: plugins/groups_manager.py:61 +msgid "Invalid/empty language for translated data" -+msgstr "Langue non valable/vide pour les donnรฉes traduites" ++msgstr "Langue non valide / vide pour les donnรฉes traduites" + +#: plugins/groups_manager.py:71 +msgid "Can't generate group id from '{}'. Please specify group id using --id." +msgstr "" -+"Impossible de gรฉnรฉrer un id de groupe ร  partir de '{}'. Veuillez spรฉcifier " ++"Impossible de gรฉnรฉrer l'id du groupe ร  partir de ยซ{}ยป. Veuillez spรฉcifier " +"l'id du groupe en utilisant --id." + +#: plugins/groups_manager.py:79 @@ -418,7 +82,7 @@ index dfa06ad..d47761a 100644 + +#: plugins/groups_manager.py:90 +msgid "load groups metadata from file" -+msgstr "charger les groupes de mรฉtadonnรฉes du fichier" ++msgstr "charger des mรฉtadonnรฉes de groupes ร  partir d'un fichier" + +#: plugins/groups_manager.py:93 +msgid "save groups metadata to file" @@ -426,19 +90,19 @@ index dfa06ad..d47761a 100644 + +#: plugins/groups_manager.py:95 +msgid "load and save groups metadata to file" -+msgstr "charger et enregistrer les mรฉtadonnรฉes des groupes dans un fichier" ++msgstr "charge et enregistre les mรฉtadonnรฉes des groupes dans un fichier" + +#: plugins/groups_manager.py:97 +msgid "print the result metadata to stdout" -+msgstr "imprimer les mรฉtadonnรฉes de rรฉsultat sur stdout" ++msgstr "affiche les mรฉtadonnรฉes du rรฉsultat sur la sortie standard" + +#: plugins/groups_manager.py:100 +msgid "group id" -+msgstr "id groupe" ++msgstr "id du groupe" + +#: plugins/groups_manager.py:101 +msgid "group name" -+msgstr "nom du groupe" ++msgstr "Nom du groupe" + +#: plugins/groups_manager.py:103 +msgid "group description" @@ -446,7 +110,7 @@ index dfa06ad..d47761a 100644 + +#: plugins/groups_manager.py:105 +msgid "group display order" -+msgstr "ordre d'affichage des groupes" ++msgstr "ordre d'affichage du groupe" + +#: plugins/groups_manager.py:108 +msgid "translated name for the group" @@ -466,36 +130,36 @@ index dfa06ad..d47761a 100644 + +#: plugins/groups_manager.py:123 +msgid "add packages to the mandatory section" -+msgstr "ajouter des paquets ร  la section obligatoire" ++msgstr "ajoute les paquets ร  la section obligatoire" + +#: plugins/groups_manager.py:125 +msgid "add packages to the optional section" -+msgstr "ajouter des paquets ร  la section facultative" ++msgstr "ajoute les paquets ร  la section optionnelle" + +#: plugins/groups_manager.py:127 +msgid "remove packages from the group instead of adding them" -+msgstr "retirer des paquets du groupe au lieu de les ajouter" ++msgstr "supprime les paquets du groupe au lieu de les ajouter" + +#: plugins/groups_manager.py:129 +msgid "include also direct dependencies for packages" -+msgstr "inclure รฉgalement les dรฉpendances directes pour les paquets" ++msgstr "inclus รฉgalement les dรฉpendances directes pour les paquets" + +#: plugins/groups_manager.py:132 +msgid "package specification" -+msgstr "caractรฉristiques du paquet" ++msgstr "spรฉcification du paquet" + +#: plugins/groups_manager.py:156 +msgid "Can't edit group without specifying it (use --id or --name)" +msgstr "" -+"Impossible de modifier le groupe sans le spรฉcifier (utiliser --id ou --name)" ++"Un groupe ne peut pas รชtre รฉditรฉ sans le spรฉcifier (utilisez --id ou --name)" + +#: plugins/groups_manager.py:190 +msgid "Can't load file \"{}\": {}" -+msgstr "Impossible de charger le fichier \"{}\" : {}" ++msgstr "Impossible de charger le fichier ยซ {} ยป : {}" + +#: plugins/groups_manager.py:206 +msgid "Can't save file \"{}\": {}" -+msgstr "Impossible d'enregistrer le fichier \"{}\" : {}" ++msgstr "Impossible dโ€™enregistrer le fichier ยซ {} ยป : {}" + +#: plugins/groups_manager.py:259 +msgid "No match for argument: {}" @@ -503,20 +167,20 @@ index dfa06ad..d47761a 100644 + +#: plugins/groups_manager.py:296 +msgid "Can't remove packages from non-existent group" -+msgstr "Impossible de retirer des paquets d'un groupe inexistant" ++msgstr "Les paquets ne peuvent pas รชtre retirรฉs d'un groupe qui n'existe pas" + +#: plugins/groups_manager.py:305 +msgid "" +"Group id '{}' generated from '{}' is duplicit. Please specify group id using" +" --id." +msgstr "" -+"L'identifiant de groupe '{}' gรฉnรฉrรฉ ร  partir de '{}' est redondant. Veuillez" -+" spรฉcifier l'identifiant du groupe en utilisant --id." ++"L'id du groupe ยซ {} ยป qui a รฉtรฉ gรฉnรฉrรฉ pour ยซ {} ยป est en double. Veuillez " ++"le spรฉcifier en utilisant --id." + #: plugins/leaves.py:32 msgid "List installed packages not required by any other package" msgstr "" -@@ -698,7 +819,7 @@ msgstr "migrer les donnรฉes dโ€™historique, de groupe et de yumdb, vers dnf" +@@ -698,7 +818,7 @@ msgstr "migrer les donnรฉes dโ€™historique, de groupe et de yumdb, vers dnf" msgid "Migrating history data..." msgstr "Migration des donnรฉes dโ€™historique โ€ฆ" @@ -525,7 +189,7 @@ index dfa06ad..d47761a 100644 #, python-brace-format msgid "" "No installed package found for package name \"{pkg}\" specified in needs-" -@@ -707,44 +828,48 @@ msgstr "" +@@ -707,44 +827,48 @@ msgstr "" "Aucun paquet installรฉ trouvรฉ pour le nom de paquet ยซโ€ฏ{pkg}โ€ฏยป spรฉcifiรฉ dans " "needs-restarting du fichier ยซโ€ฏ{file}โ€ฏยป." @@ -550,7 +214,7 @@ index dfa06ad..d47761a 100644 -#: plugins/needs_restarting.py:230 +#: plugins/needs_restarting.py:234 +msgid "only report affected systemd services" -+msgstr "ne signaler que les services systรฉmiques concernรฉs" ++msgstr "signaler uniquement les services systemd affectรฉs" + +#: plugins/needs_restarting.py:257 msgid "Core libraries or services have been updated since boot-up:" @@ -582,7 +246,7 @@ index dfa06ad..d47761a 100644 msgid "Reboot should not be necessary." msgstr "Un nouveau dรฉmarrage ne devrait pas รชtre utile." -@@ -981,39 +1106,33 @@ msgstr "N paquets les plus rรฉcents ร  conserver โ€” par dรฉfaut 1" +@@ -981,39 +1105,33 @@ msgstr "N paquets les plus rรฉcents ร  conserver โ€” par dรฉfaut 1" msgid "Path to directory" msgstr "Chemin vers le rรฉpertoire" @@ -616,8 +280,8 @@ index dfa06ad..d47761a 100644 +#: plugins/reposync.py:70 +msgid "Remove packages that fail GPG signature checking after downloading" +msgstr "" -+"Supprimer les paquets qui รฉchouent ร  la vรฉrification de la signature GPG " -+"aprรจs le tรฉlรฉchargement" ++"Retire les paquets qui ont รฉchouรฉ la vรฉrification de la signature GPG aprรจs " ++"tรฉlรฉchargement" #: plugins/reposync.py:73 -msgid "where to store downloaded repositories" @@ -633,7 +297,7 @@ index dfa06ad..d47761a 100644 msgid "" "where to store downloaded repository metadata. Defaults to the value of " "--download-path." -@@ -1021,51 +1140,71 @@ msgstr "" +@@ -1021,51 +1139,71 @@ msgstr "" "lร  oรน stocker les mรฉtadonnรฉes du dรฉpรดt. Prend par dรฉfaut la valeur de " "--download-path." @@ -685,11 +349,11 @@ index dfa06ad..d47761a 100644 +#: plugins/reposync.py:168 +msgid "Removing {}: {}" -+msgstr "Suppression {}: {}" ++msgstr "Suppression de ยซ {} ยป : {}" + #: plugins/reposync.py:175 +msgid "GPG signature check failed." -+msgstr "La vรฉrification de la signature du GPG a รฉchouรฉ." ++msgstr "La vรฉrification de la signature GPG a รฉchouรฉ." + +#: plugins/reposync.py:196 msgid "Download target '{}' is outside of download path '{}'." @@ -715,12 +379,13 @@ index dfa06ad..d47761a 100644 msgid "comps.xml for repository %s saved" msgstr "comps.xml pour le dรฉpรดt %s sauvegardรฉ" diff --git a/po/ja.po b/po/ja.po -index 5e443ec..663b522 100644 +index 5e443ec..854e20e 100644 --- a/po/ja.po +++ b/po/ja.po @@ -1,20 +1,21 @@ # Ooyama Yosiyuki , 2015. #zanata - # Ludek Janda , 2018. #zanata +-# Ludek Janda , 2018. #zanata ++# Ludek Janda , 2018. #zanata, 2021. # Casey Jones , 2020. +# Sundeep Anand , 2021. msgid "" @@ -732,8 +397,8 @@ index 5e443ec..663b522 100644 -"Last-Translator: Casey Jones \n" -"Language-Team: Japanese \n" +"POT-Creation-Date: 2021-02-22 10:06+0100\n" -+"PO-Revision-Date: 2021-03-08 11:08+0000\n" -+"Last-Translator: Sundeep Anand \n" ++"PO-Revision-Date: 2021-09-03 10:36+0000\n" ++"Last-Translator: Ludek Janda \n" +"Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" @@ -741,7 +406,7 @@ index 5e443ec..663b522 100644 "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" ++"X-Generator: Weblate 4.8\n" #: plugins/builddep.py:45 msgid "[PACKAGE|PACKAGE.spec]" @@ -853,6 +518,15 @@ index 5e443ec..663b522 100644 #: plugins/config_manager.py:131 #, python-format +@@ -246,7 +250,7 @@ msgstr "" + " list --available-by-user=NAME\n" + " search project\n" + "\n" +-" Examples:\n" ++" ไพ‹:\n" + " copr enable rhscl/perl516 epel-6-x86_64\n" + " copr enable ignatenkobrain/ocltoys\n" + " copr disable rhscl/perl516\n" @@ -274,7 +278,7 @@ msgstr "ๅˆฉ็”จๅฏ่ƒฝใช Copr ใƒชใƒใ‚ธใƒˆใƒชใƒผใ‚’ใƒฆใƒผใ‚ถใƒผ NAME ใ”ใจใซไธ€ #: plugins/copr.py:115 @@ -1174,12 +848,12 @@ index 5e443ec..663b522 100644 "only report whether a reboot is required (exit code 1) or not (exit code 0)" -msgstr "" +msgstr "ๅ†่ตทๅ‹•ใŒๅฟ…่ฆใ‹ (็ต‚ไบ†ใ‚ณใƒผใƒ‰ 1) ๅฟ…่ฆใงใชใ„ใ‹ (็ต‚ไบ†ใ‚ณใƒผใƒ‰ 0) ใฎใฟใ‚’ๅ ฑๅ‘Šใ—ใพใ™" - --#: plugins/needs_restarting.py:230 ++ +#: plugins/needs_restarting.py:234 +msgid "only report affected systemd services" +msgstr "ๅฝฑ้Ÿฟใ‚’ๅ—ใ‘ใ‚‹ systemd ใ‚ตใƒผใƒ“ใ‚นใฎใฟใ‚’ๅ ฑๅ‘Š" -+ + +-#: plugins/needs_restarting.py:230 +#: plugins/needs_restarting.py:257 msgid "Core libraries or services have been updated since boot-up:" -msgstr "" @@ -1535,7 +1209,7 @@ index 5e443ec..663b522 100644 #: plugins/versionlock.py:36 msgid "Package already locked in equivalent form:" -msgstr "" -+msgstr "ๅŒ็ญ‰ใฎๅฝขใงๆ—ขใซใƒญใƒƒใ‚ฏใ•ใ‚Œใฆใ„ใ‚‹ใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใ€‚" ++msgstr "ๅŒ็ญ‰ใฎๅฝขใงๆ—ขใซใƒญใƒƒใ‚ฏใ•ใ‚Œใฆใ„ใ‚‹ใƒ‘ใƒƒใ‚ฑใƒผใ‚ธ:" #: plugins/versionlock.py:37 msgid "Package {} is already locked" @@ -1559,161 +1233,678 @@ index 5e443ec..663b522 100644 #~ msgid "" #~ "\n" diff --git a/po/ko.po b/po/ko.po -index 3f4eb89..a8ba74b 100644 +index 3f4eb89..520a72b 100644 --- a/po/ko.po +++ b/po/ko.po -@@ -3,7 +3,7 @@ msgid "" +@@ -1,55 +1,56 @@ + # Ludek Janda , 2018. #zanata, 2020. ++# 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: 2020-09-12 11:29+0000\n" +-"Last-Translator: Ludek Janda \n" +-"Language-Team: Korean \n" +"POT-Creation-Date: 2021-02-22 10:06+0100\n" - "PO-Revision-Date: 2020-09-12 11:29+0000\n" - "Last-Translator: Ludek Janda \n" - "Language-Team: Korean \n" -@@ -559,7 +559,7 @@ msgstr "๋‹ค์šด๋กœ๋“œ ๋Œ€์‹  rpms๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜์žˆ๋Š” URL ๋ชฉ๋ก ์ธ์‡„ ++"PO-Revision-Date: 2021-04-18 16:02+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: Weblate 4.2.2\n" ++"X-Generator: Weblate 4.5.3\n" + + #: plugins/builddep.py:45 + msgid "[PACKAGE|PACKAGE.spec]" +-msgstr "" ++msgstr "[PACKAGE|PACKAGE.spec]" + + #: plugins/builddep.py:85 + #, python-format + msgid "'%s' is not of the format 'MACRO EXPR'" +-msgstr "" ++msgstr "'%s'๋Š” 'MACRO EXPR' ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค" + + #: plugins/builddep.py:90 + msgid "packages with builddeps to install" +-msgstr "" ++msgstr "์„ค์น˜ ํ•  builddeps๊ฐ€ ์žˆ๋Š” ๊พธ๋Ÿฌ๋ฏธ(package)" + + #: plugins/builddep.py:93 + msgid "define a macro for spec file parsing" +-msgstr "" ++msgstr "ํŠน์ •ํ•œ ํŒŒ์ผ ๊ตฌ๋ฌธ๋ถ„์„์„ ์œ„ํ•ด ๋งคํฌ๋กœ๋ฅผ ์ •์˜ํ•œ๋‹ค" + + #: plugins/builddep.py:95 + msgid "skip build dependencies not available in repositories" +-msgstr "" ++msgstr "์ €์žฅ์†Œ์—์„œ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†๋Š” ๊ตฌ์„ฑ ์˜์กด์„ฑ์„ ๊ฑด๋„ˆ๋„๊ธฐ ํ•œ๋‹ค" + + #: plugins/builddep.py:98 + msgid "treat commandline arguments as spec files" +-msgstr "" ++msgstr "๋ช…๋ น์ค„ ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•œ ํŒŒ์ผ๋กœ ๋‹ค๋ฃฌ๋‹ค" + + #: plugins/builddep.py:100 + msgid "treat commandline arguments as source rpm" +-msgstr "" ++msgstr "๋ช…๋ น์ค„ ์ธ์ˆ˜๋ฅผ rpm ์†Œ์Šค๋กœ ๋‹ค๋ฃฌ๋‹ค" + + #: plugins/builddep.py:144 + msgid "RPM: {}" +-msgstr "" ++msgstr "RPM: {}" + + #: plugins/builddep.py:153 + msgid "Some packages could not be found." +-msgstr "" ++msgstr "๋ช‡๋ช‡ ๊พธ๋Ÿฌ๋ฏธ(packages)๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." + + #. No provides, no files + #. Richdeps can have no matches but it could be correct (solver must decide +@@ -57,86 +58,86 @@ msgstr "" + #: plugins/builddep.py:173 + #, python-format + msgid "No matching package to install: '%s'" +-msgstr "" ++msgstr "์„ค์น˜: '%s' ๊พธ๋Ÿฌ๋ฏธ(package)๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค" + + #: plugins/builddep.py:191 + #, python-format + msgid "Failed to open: '%s', not a valid source rpm file." +-msgstr "" ++msgstr "์—ฌ๋Š”๋ฐ ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค: '%s', ์œ ํšจํ•œ rpm ํŒŒ์ผ ์ถœ์ฒ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค." + + #: plugins/builddep.py:204 plugins/builddep.py:220 plugins/builddep.py:237 + msgid "Not all dependencies satisfied" +-msgstr "" ++msgstr "๋ชจ๋“  ์˜์กด์„ฑ์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค" + + #: plugins/builddep.py:211 + #, python-format + msgid "Failed to open: '%s', not a valid spec file: %s" +-msgstr "" ++msgstr "์—ฌ๋Š”๋ฐ ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค '%s', ์ง€์ •ํ•œ ํŒŒ์ผ: %s๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค" + + #: plugins/builddep.py:230 plugins/repoclosure.py:118 + #, python-format + msgid "no package matched: %s" +-msgstr "์ผ์น˜ํ•˜๋Š” ํŒจํ‚ค์ง€ ์—†์Œ : %s" ++msgstr "์ผ์น˜ํ•˜๋Š” ๊พธ๋Ÿฌ๋ฏธ(package) ์—†์Œ: %s" + + #: plugins/changelog.py:37 + #, python-brace-format + msgid "Not a valid date: \"{0}\"." +-msgstr "" ++msgstr "์œ ํšจํ•œ ๋‚ ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค: \"{0}\"." + + #: plugins/changelog.py:43 + msgid "Show changelog data of packages" +-msgstr "" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(packages)์˜ ๋ณ€ํ™” ๊ธฐ๋ก์ž๋ฃŒ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค" + + #: plugins/changelog.py:51 + msgid "" + "show changelog entries since DATE. To avoid ambiguosity, YYYY-MM-DD format " + "is recommended." +-msgstr "" ++msgstr "DATE ์ดํ›„์— ๋ณ€ํ™”๊ธฐ๋ก๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋ชจํ˜ธํ•จ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•˜์—ฌ, YYYY-MM-DD ํ˜•์‹์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค." + + #: plugins/changelog.py:55 + msgid "show given number of changelog entries per package" +-msgstr "" ++msgstr "์ฃผ์–ด์ง„ ์ˆ˜์˜ ๊พธ๋Ÿฌ๋ฏธ(package) ๋งˆ๋‹ค ๋ณ€ํ™”๊ธฐ๋ก ํ•ญ๋ชฉ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค" + + #: plugins/changelog.py:58 + msgid "" + "show only new changelog entries for packages, that provide an upgrade for " + "some of already installed packages." +-msgstr "" ++msgstr "๋ช‡๋ช‡ ์ด๋ฏธ ์„ค์น˜๋œ ๊พธ๋Ÿฌ๋ฏธ(package)๋“ค์˜ ์ตœ์‹ ํ™”๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊พธ๋Ÿฌ๋ฏธ๋ฅผ ์œ„ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ณ€ํ™”๊ธฐ๋ก๋งŒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค." + + #: plugins/changelog.py:60 + msgid "PACKAGE" +-msgstr "" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(package)" + + #: plugins/changelog.py:81 plugins/debuginfo-install.py:90 + #, python-format + msgid "No match for argument: %s" +-msgstr "์ธ์ˆ˜์™€ ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ ์—†์Œ : %s" ++msgstr "์ธ์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค: %s" + + #: plugins/changelog.py:109 + msgid "Listing changelogs since {}" +-msgstr "" ++msgstr "{} ์ด ํ›„์˜ ๋ณ€ํ™”๊ธฐ๋ก ๋ชฉ๋ก" + + #: plugins/changelog.py:111 + msgid "Listing only latest changelog" + msgid_plural "Listing {} latest changelogs" +-msgstr[0] "" ++msgstr[0] "์ตœ์‹ ํ™”๋œ ๋ณ€ํ™”๊ธฐ๋ก ๋ชฉ๋ก {}" + + #: plugins/changelog.py:116 + msgid "Listing only new changelogs since installed version of the package" +-msgstr "" ++msgstr "๊พธ๋Ÿฌ๋ฏธ ์„ค์น˜ ๋ฒ„์ „ ์ดํ›„์˜ ์ƒˆ๋กœ์šด ๋ณ€ํ™” ๊ธฐ๋ก๋งŒ ๋ชฉ๋กํ™”ํ•จ" + + #: plugins/changelog.py:118 + msgid "Listing all changelogs" +-msgstr "" ++msgstr "๋ชจ๋“  ๋ณ€ํ™”๊ธฐ๋ก ๋ชฉ๋ก" + + #: plugins/changelog.py:122 + msgid "Changelogs for {}" +-msgstr "" ++msgstr "{}์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ" + + #: plugins/config_manager.py:37 + #, python-brace-format + msgid "manage {prog} configuration options and repositories" +-msgstr "" ++msgstr "{prog} ํ™˜๊ฒฝ ์„ ํƒ๊ณผ ์ €์žฅ์†Œ ๊ด€๋ฆฌ" + + #: plugins/config_manager.py:44 + msgid "repo to modify" +@@ -160,21 +161,23 @@ msgstr "๋ณ€์ˆ˜ ๊ฐ’์„ ํ‘œ์ค€ ์ถœ๋ ฅ์œผ๋กœ ์ถœ๋ ฅ" + + #: plugins/config_manager.py:60 + msgid "enable repos (automatically saves)" +-msgstr "" ++msgstr "์ €์žฅ์†Œ ํ™œ์„ฑํ™” (์ž๋™์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค)" + + #: plugins/config_manager.py:63 + msgid "disable repos (automatically saves)" +-msgstr "" ++msgstr "์ €์žฅ์†Œ ๋น„ํ™œ์„ฑํ™” (์ž๋™์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค)" + + #: plugins/config_manager.py:77 + msgid "one of the following arguments is required: {}" +-msgstr "" ++msgstr "๋‹ค์Œ ์ธ์ˆ˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค: {}" + + #: plugins/config_manager.py:86 + msgid "" + "Warning: --enablerepo/--disablerepo arguments have no meaningwith config " + "manager. Use --set-enabled/--set-disabled instead." + msgstr "" ++"๊ฒฝ๊ณ : -- --enablerepo/--disablerepo ์ธ์ˆ˜๋Š” ์„ค์ • ๊ด€๋ฆฌ์ž์™€ ํ•จ๊ป˜ ์˜๋ฏธ๋ฅผ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ ์— --set-" ++"enabled/--set-disabled๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”." + + #: plugins/config_manager.py:131 + #, python-format +@@ -189,7 +192,7 @@ msgstr "๋‹ค์Œ ์œ„์น˜์—์„œ ๋ ˆํฌ ์ถ”๊ฐ€ : %s" + #: plugins/config_manager.py:206 + msgid "Configuration of repo failed" + msgid_plural "Configuration of repos failed" +-msgstr[0] "์ €์žฅ์†Œ ๊ตฌ์„ฑ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค." ++msgstr[0] "์ €์žฅ์†Œ ๊ตฌ์„ฑ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" + + #: plugins/config_manager.py:216 + #, python-format +@@ -237,7 +240,21 @@ msgid "" + " " + msgstr "" + "\n" +-" ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ / ํ”„๋กœ์ ํŠธ ์ œ๊ฑฐ - ์„ค์น˜ / ์‚ฌ์šฉ / ์‚ฌ์šฉ ์•ˆ ํ•จ ๋ชฉ๋ก - ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์‚ฌ์šฉ์ž = NAME ๊ฒ€์ƒ‰ ํ”„๋กœ์ ํŠธ ์˜ˆ : copr enable rhscl / perl516 epel-6-x86_64 copr enable ignatenkobrain / ocltoys copr ๋น„ํ™œ์„ฑํ™” rhscl / perl516 copr ์ œ๊ฑฐ rhscl / perl516 copr ๋ชฉ๋ก - ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ชฉ๋ก - ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์‚ฌ์šฉ์ž = ignatenkobrain copr ๊ฒ€์ƒ‰ ํ…Œ์ŠคํŠธ\n" ++" enable name/project [chroot]\n" ++" disable name/project\n" ++" remove name/project\n" ++" list --installed/enabled/disabled\n" ++" list --available-by-user=NAME\n" ++" search project\n" ++"\n" ++" Examples:\n" ++" copr enable rhscl/perl516 epel-6-x86_64\n" ++" copr enable ignatenkobrain/ocltoys\n" ++" copr disable rhscl/perl516\n" ++" copr remove rhscl/perl516\n" ++" copr list --enabled\n" ++" copr list --available-by-user=ignatenkobrain\n" ++" copr search tests\n" + " " + + #: plugins/copr.py:107 +@@ -258,7 +275,7 @@ msgstr "์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” Copr ์ €์žฅ์†Œ๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. NAME + + #: plugins/copr.py:115 + msgid "Specify an instance of Copr to work with" +-msgstr "" ++msgstr "์ผํ•˜๋Š” Copr์˜ ์˜ˆ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค" + + #: plugins/copr.py:149 plugins/copr.py:217 plugins/copr.py:237 + msgid "Error: " +@@ -269,14 +286,16 @@ msgid "" + "specify Copr hub either with `--hub` or using " + "`copr_hub/copr_username/copr_projectname` format" + msgstr "" ++"Corp hub๋ฅผ `--hub` ๋˜๋Š” ์‚ฌ์šฉํ•˜๊ธฐ `copr_hub/copr_username/copr_projectname`ํ˜•์‹์œผ๋กœ " ++"์ง€์ •ํ•ฉ๋‹ˆ๋‹ค" + + #: plugins/copr.py:153 + msgid "multiple hubs specified" +-msgstr "" ++msgstr "์ง€์ •๋œ ์—ฌ๋Ÿฌ ํ—ˆ๋ธŒ" + + #: plugins/copr.py:218 plugins/copr.py:222 + msgid "exactly two additional parameters to copr command are required" +-msgstr "copr ๋ช…๋ น์— ์ •ํ™•ํžˆ ๋‘ ๊ฐœ์˜ ์ถ”๊ฐ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." ++msgstr "copr ๋ช…๋ น์— ์ •ํ™•ํžˆ ๋‘ ๊ฐœ์˜ ์ถ”๊ฐ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" + + #: plugins/copr.py:238 + msgid "use format `copr_username/copr_projectname` to reference copr project" +@@ -300,6 +319,17 @@ msgid "" + "Please do not file bug reports about these packages in Fedora\n" + "Bugzilla. In case of problems, contact the owner of this repository.\n" + msgstr "" ++"\n" ++"Core ์ €์ •์†Œ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ €์žฅ์†Œ๋Š” ์ฃผ์š” ๋ฐฐํฌํŒ ๋ถ€๋ถ„์ด ์•„๋‹˜์„ ์•Œ๊ณ  ์žˆ๊ธฐ ๋ฐ”๋ผ๊ณ ,\n" ++"ํ’ˆ์งˆ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n" ++"\n" ++"ํŽ˜๋„๋ผ ํ”„๋กœ์ ํŠธ๋Š”\n" ++"์—\n" ++"Core FAQ์— ์žˆ๋Š” ์„ค๋ช…๋œ ๊ทœ์น™์„ ๋„˜๋Š” ์ €์žฅ์†Œ ๋‚ด์šฉ ์ด์ƒ์˜ ๊ถŒํ•œ์„ ์‹œํ—˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ,\n" ++"๊ทธ๋ฆฌ๊ณ  ๊พธ๋Ÿฌ๋ฏธ(package)๋Š” ์–ด๋–ค ํ’ˆ์งˆ์ด๋‚˜ ๋ณด์•ˆ ์ˆ˜์ค€์„ ์œ ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.\n" ++"\n" ++"ํŽ˜๋„๋ผ ๋ฒ„๊ทธ์งˆ๋ผ์— ์ด๋“ค ๊พธ๋Ÿฌ๋ฏธ์— ๋Œ€ํ•œ ํŒŒ์ผ ๊ฒฐ์  ๋ณด๊ณ ๋ฅผ ์ œ์ถœํ•˜์ง€ ๋งˆ์„ธ์š”.\n" ++"์ด๋“ค ๋ฌธ์ œ๋Š”, ์ด๋“ค ์ €์žฅ์†Œ ์†Œ์œ ์ž์™€ ์ ‘์ด‰ํ•˜์„ธ์š”.\n" + + #: plugins/copr.py:271 + msgid "Repository successfully enabled." +@@ -323,6 +353,8 @@ msgid "" + " about Copr hub - the default one was assumed. Re-enable the project to fix " + "this." + msgstr "" ++"* ์ด๋“ค coprs์€ Copr hub์— ๋Œ€ํ•˜์—ฌ ์–ด๋–ค ์ •๋ณด๋„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ์˜ค๋ž˜๋œ ํ˜•ํƒœ์˜ ์ €์žฅ์†Œ ํŒŒ์ผ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ" ++" ์œ„ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์žฌํ™œ์„ฑํ™”ํ•˜์„ธ์š”." + + #: plugins/copr.py:353 + msgid "Can't parse repositories for username '{}'." +@@ -334,7 +366,7 @@ msgstr "{} ๋ช…์˜ ๊ฒฝ์ฐฐ ๋ชฉ๋ก" + + #: plugins/copr.py:364 + msgid "No description given" +-msgstr "์„ค๋ช…์ด ์—†์Šต๋‹ˆ๋‹ค." ++msgstr "์„ค๋ช…์ด ์—†์Šต๋‹ˆ๋‹ค" + + #: plugins/copr.py:376 + msgid "Can't parse search for '{}'." +@@ -381,19 +413,31 @@ msgid "" + "\n" + "These repositories have been enabled automatically." + msgstr "" ++"ํ™œ์„ฑํ™”๋œ Core ์ €์žฅ์†Œ์˜ ์œ ์ง€๋Š” ๋‹ค๋ฅธ ์ €์žฅ์†Œ์— ์ด๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ\n" ++"๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ ๊ฒฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.\n" ++"๊ทธ๋Ÿฐ ์ €์žฅ์†Œ๋Š” ์ฃผ์š” Corp ์ €์žฅ์†Œ์—์„œ ์„ฑ๊ณต์ ์ธ RPM ์„ค์น˜๋ฅผ\n" ++"์œ„ํ•˜์—ฌ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(์ด๋“ค์€ ์‹คํ–‰ ์˜์กด์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค).\n" ++"\n" ++"์œ„๋„ ์—ฌ๊ธฐ์— ์ ์šฉ๋˜๋ฉฐ ํ’ˆ์งˆ๊ณผ ๊ฒฐ์ -๋ณด๊ณ ์— ๋Œ€ํ•œ ์ฐธ๊ณ  ์‚ฌํ•ญ์„ ์•Œ์•„์•ผ ํ•˜๊ณ ,\n" ++"ํŽ˜๋„๋ผ ํ”„๋กœ์ ํŠธ๋Š” ๊ทธ ๋‚ด์šฉ์„ ํ†ต์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.\n" ++"๋ชฉ๋ก์„ ๋‹ค์‹œ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค:\n" ++"\n" ++"{0}\n" ++"\n" ++"์ด๋“ค ์ €์žฅ์†Œ๋Š” ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™” ๋ฉ๋‹ˆ๋‹ค." + + #: plugins/copr.py:549 + msgid "Do you want to keep them enabled?" +-msgstr "" ++msgstr "๊ณ„์† ์‚ฌ์šฉํ•˜๊ธธ ์›ํ•˜์‹œ๋‚˜์š”?" + + #: plugins/copr.py:582 + #, python-brace-format + msgid "Failed to remove copr repo {0}/{1}/{2}" +-msgstr "" ++msgstr "copr repo {0}/{1}/{2} ์ œ๊ฑฐ๋ฅผ ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค" + + #: plugins/copr.py:593 + msgid "Failed to disable copr repo {}/{}" +-msgstr "copr repo {} / {}๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค." ++msgstr "copr repo {} / {}๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€๋ฅผ ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค" + + #: plugins/copr.py:611 plugins/copr.py:648 + msgid "Unknown response from server." +@@ -404,14 +448,12 @@ msgid "Interact with Playground repository." + msgstr "๋†€์ดํ„ฐ ์ €์žฅ์†Œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์‹ญ์‹œ์˜ค." + + #: plugins/copr.py:639 +-#, fuzzy +-#| msgid "Interact with Playground repository." + msgid "Enabling a Playground repository." +-msgstr "๋†€์ดํ„ฐ ์ €์žฅ์†Œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์‹ญ์‹œ์˜ค." ++msgstr "๋™์ž‘ ์ €์žฅ์†Œ์™€ ํ™œ์šฉํ•˜๊ธฐ." + + #: plugins/copr.py:640 + msgid "Do you want to continue?" +-msgstr "" ++msgstr "๊ณ„์†ํ•˜๊ธฐ๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ?" + + #: plugins/copr.py:683 + msgid "Playground repositories successfully enabled." +@@ -427,7 +469,7 @@ msgstr "๋†€์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค." + + #: plugins/debug.py:53 + msgid "dump information about installed rpm packages to file" +-msgstr "์„ค์น˜๋œ rpm ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํŒŒ์ผ์— ๋คํ”„ํ•˜์‹ญ์‹œ์˜ค." ++msgstr "์„ค์น˜๋œ rpm ๊พธ๋Ÿฌ๋ฏธ(package)์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํŒŒ์ผ์— ๋คํ”„ํ•˜์‹ญ์‹œ์˜ค" + + #: plugins/debug.py:67 + msgid "do not attempt to dump the repository contents." +@@ -444,7 +486,7 @@ msgstr "์ž‘์„ฑ๋œ ์ถœ๋ ฅ : %s" + + #: plugins/debug.py:172 + msgid "restore packages recorded in debug-dump file" +-msgstr "๋””๋ฒ„๊ทธ ๋คํ”„ ํŒŒ์ผ์— ๊ธฐ๋ก ๋œ ํŒจํ‚ค์ง€ ๋ณต์›" ++msgstr "๋””๋ฒ„๊ทธ ๋คํ”„ ํŒŒ์ผ์— ๊ธฐ๋ก ๋œ ๊พธ๋Ÿฌ๋ฏธ(package) ๋ณต์›" + + #: plugins/debug.py:185 + msgid "output commands that would be run to stdout." +@@ -452,13 +494,13 @@ msgstr "stdout์œผ๋กœ ์‹คํ–‰๋  ์ถœ๋ ฅ ๋ช…๋ น." + + #: plugins/debug.py:188 + msgid "Install the latest version of recorded packages." +-msgstr "๊ธฐ๋ก ๋œ ํŒจํ‚ค์ง€์˜ ์ตœ์‹  ๋ฒ„์ „์„ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค." ++msgstr "๊ธฐ๋ก ๋œ ๊พธ๋Ÿฌ๋ฏธ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค." + + #: plugins/debug.py:191 + msgid "" + "Ignore architecture and install missing packages matching the name, epoch, " + "version and release." +-msgstr "์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์ด๋ฆ„, ๊ธฐ์›, ๋ฒ„์ „ ๋ฐ ๋ฆด๋ฆฌ์Šค์™€ ์ผ์น˜ํ•˜๋Š” ๋ˆ„๋ฝ ๋œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค." ++msgstr "๊ตฌ์กฐ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์ด๋ฆ„, ๊ธฐ์›, ๋ฒ„์ „๋ฐ ์ถœ์‹œ์™€ ์ผ์น˜ํ•˜๋Š” ๋ˆ„๋ฝ ๋œ ๊พธ๋Ÿฌ๋ฏธ๋ฅผ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค." + + #: plugins/debug.py:196 + msgid "limit to specified type" +@@ -468,7 +510,7 @@ msgstr "ํŠน์ • ์œ ํ˜•์œผ๋กœ ์ œํ•œ" + msgid "" + "Allow removing of install-only packages. Using this option may result in an " + "attempt to remove the running kernel." +-msgstr "" ++msgstr "์„ค์น˜์ „์šฉ ๊พธ๋ฆฌ๋ฏธ ์ œ๊ฑฐ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ ํƒ์˜ ์‚ฌ์šฉ์€ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š” ์ปค๋„์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + + #: plugins/debug.py:202 + msgid "name of dump file" +@@ -477,7 +519,7 @@ msgstr "๋คํ”„ ํŒŒ์ผ์˜ ์ด๋ฆ„" + #: plugins/debug.py:273 + #, python-format + msgid "Package %s is not available" +-msgstr "๊พธ๋Ÿฌ๋ฏธ %s ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(package) %s ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + + #: plugins/debug.py:283 + #, python-format +@@ -486,31 +528,31 @@ msgstr "์ž˜๋ชป๋œ dnf ๋””๋ฒ„๊ทธ ํŒŒ์ผ : %s" + + #: plugins/debuginfo-install.py:56 + msgid "install debuginfo packages" +-msgstr "debuginfo ํŒจํ‚ค์ง€ ์„ค์น˜" ++msgstr "๋””๋ฒ„๊ทธ์ •๋ณด ๊พธ๋Ÿฌ๋ฏธ(package) ์„ค์น˜" + + #: plugins/debuginfo-install.py:180 + #, python-format + msgid "" + "Could not find debuginfo package for the following available packages: %s" +-msgstr "" ++msgstr "๋‹ค์Œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๊พธ๋Ÿฌ๋ฏธ(package): %s ๋ฅผ ์œ„ํ•˜์—ฌ ๋””๋ฒ„๊ทธ์ •๋ณด ๊พธ๋Ÿฌ๋ฏธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + + #: plugins/debuginfo-install.py:185 + #, python-format + msgid "" + "Could not find debugsource package for the following available packages: %s" +-msgstr "" ++msgstr "๋‹ค์Œ ๊ฐ€์šฉํ•œ ๊พธ๋Ÿฌ๋ฏธ(package): %s ๋ฅผ ์œ„ํ•˜์—ฌ ๋””๋ฒ„๊ทธ์ž์› ๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + + #: plugins/debuginfo-install.py:190 + #, python-format + msgid "" + "Could not find debuginfo package for the following installed packages: %s" +-msgstr "" ++msgstr "๋‹ค์Œ ์„ค์น˜๋œ ๊พธ๋Ÿฌ๋ฏธ(package): %s ๋ฅผ ์œ„ํ•œ ๋””๋ฒ„๊ทธ์ •๋ณด ๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + + #: plugins/debuginfo-install.py:195 + #, python-format + msgid "" + "Could not find debugsource package for the following installed packages: %s" +-msgstr "" ++msgstr "๋‹ค์Œ ์„ค์น˜๋œ ๊พธ๋Ÿฌ๋ฏธ(package): %s ๋ฅผ ์œ„ํ•˜์—ฌ ๋””๋ฒ„๊ทธ์ž์› ๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + + #: plugins/debuginfo-install.py:199 + msgid "Unable to find a match" +@@ -518,51 +560,51 @@ msgstr "์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + + #: plugins/download.py:41 + msgid "Download package to current directory" +-msgstr "ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ" ++msgstr "ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ๊พธ๋Ÿฌ๋ฏธ ๋‚ด๋ ค๋ฐ›๊ธฐ" + + #: plugins/download.py:51 + msgid "packages to download" +-msgstr "๋‹ค์šด๋กœ๋“œ ํ•  ํŒจํ‚ค์ง€" ++msgstr "๋‚ด๋ ค๋ฐ›๊ธฐ ํ•  ๊พธ๋Ÿฌ๋ฏธ" + + #: plugins/download.py:53 + msgid "download the src.rpm instead" +-msgstr "๋Œ€์‹  src.rpm์„ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค." ++msgstr "๋Œ€์‹  src.rpm์„ ๋‚ด๋ ค๋ฐ›์œผ์„ธ์š”" + + #: plugins/download.py:55 + msgid "download the -debuginfo package instead" +-msgstr "๋Œ€์‹  -debuginfo ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค." ++msgstr "๋Œ€์‹  -debuginfo ๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ๋‚ด๋ ค๋ฐ›์•„์š”" + + #: plugins/download.py:57 + msgid "download the -debugsource package instead" +-msgstr "" ++msgstr "๋Œ€์‹  -debuginfo ๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ๋‚ด๋ ค๋ฐ›์œผ์„ธ์š”" + + #: plugins/download.py:60 + msgid "limit the query to packages of given architectures." +-msgstr "์ฟผ๋ฆฌ๋ฅผ ์ฃผ์–ด์ง„ ์•„ํ‚คํ…์ฒ˜์˜ ํŒจํ‚ค์ง€๋กœ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค." ++msgstr "์š”์ฒญ๋ฅผ ์ฃผ์–ด์ง„ ๊ตฌ์กฐ ๊พธ๋Ÿฌ๋ฏธ(package)๋กœ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค." + + #: plugins/download.py:62 + msgid "resolve and download needed dependencies" +-msgstr "ํ•„์š”ํ•œ ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค." ++msgstr "ํ•„์š”ํ•œ ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ณ  ๋‚ด๋ ค๋ฐ›์•„์š”" + + #: plugins/download.py:64 + msgid "" + "when running with --resolve, download all dependencies (do not exclude " + "already installed ones)" +-msgstr "" ++msgstr "--resolve ์™€ ํ•จ๊ป˜ ์‹คํ–‰ ํ•  ๋•Œ์—, ๋ชจ๋“  ์˜์กด์„ฑ์„ ๋‚ด๋ ค๋ฐ›์Šต๋‹ˆ๋‹ค (์ด๋ฏธ ์„ค์น˜๋œ ๊ฒƒ๋“ค์€ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)" + + #: plugins/download.py:67 + msgid "" + "print list of urls where the rpms can be downloaded instead of downloading" +-msgstr "๋‹ค์šด๋กœ๋“œ ๋Œ€์‹  rpms๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜์žˆ๋Š” URL ๋ชฉ๋ก ์ธ์‡„" ++msgstr "๋‚ด๋ ค๋ฐ›๊ธฐ ๋Œ€์‹  rpms๋ฅผ ๋‚ด๋ ค๋ฐ›๊ธฐ ํ•  ์ˆ˜ ์žˆ๋Š” URL ๋ชฉ๋ก ์ธ์‡„" + + #: plugins/download.py:72 msgid "when running with --url, limit to specific protocols" - msgstr "--url์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•˜๋ฉด ํŠน์ • ํ”„๋กœํ† ์ฝœ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค." +-msgstr "--url์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•˜๋ฉด ํŠน์ • ํ”„๋กœํ† ์ฝœ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค." ++msgstr "--url์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•˜๋ฉด ํŠน์ • ํ†ต์‹ ๊ทœ์•ฝ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค" -#: plugins/download.py:121 plugins/reposync.py:293 +#: plugins/download.py:121 plugins/reposync.py:314 #, python-format msgid "Failed to get mirror for package: %s" - msgstr "ํŒจํ‚ค์ง€ ๋ฏธ๋Ÿฌ๋ง์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. %s" -@@ -582,6 +582,132 @@ msgstr "์†Œ์Šค rpm์ด ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. %s" - msgid "No package %s available." - msgstr "ํŒจํ‚ค์ง€ ์—†์Œ %s ์œ ํšจํ•œ." +-msgstr "ํŒจํ‚ค์ง€ ๋ฏธ๋Ÿฌ๋ง์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. %s" ++msgstr "๊พธ๋Ÿฌ๋ฏธ ์—ฐ๊ฒฐ์ฃผ์†Œ ์–ป๊ธฐ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค: %s" + #: plugins/download.py:243 + msgid "Exiting due to strict setting." +@@ -570,7 +612,7 @@ msgstr "์—„๊ฒฉํ•œ ์„ค์ •์œผ๋กœ ์ธํ•ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค." + + #: plugins/download.py:261 + msgid "Error in resolve of packages:" +-msgstr "ํŒจํ‚ค์ง€ ํ•ด๊ฒฐ ์˜ค๋ฅ˜ :" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(package) ํ•ด๊ฒฐ ์˜ค๋ฅ˜ :" + + #: plugins/download.py:279 + #, python-format +@@ -580,27 +622,141 @@ msgstr "์†Œ์Šค rpm์ด ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. %s" + #: plugins/download.py:296 plugins/download.py:309 + #, python-format + msgid "No package %s available." +-msgstr "ํŒจํ‚ค์ง€ ์—†์Œ %s ์œ ํšจํ•œ." ++msgstr "๊ฐ€์šฉํ•œ ๊พธ๋Ÿฌ๋ฏธ(package) %s๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." ++ +#: plugins/groups_manager.py:49 +msgid "Invalid group id" -+msgstr "" ++msgstr "์œ ํšจํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ฃน id" + +#: plugins/groups_manager.py:58 +msgid "Invalid translated data, should be in form 'lang:text'" -+msgstr "" ++msgstr "์ž˜๋ชป ๋ฒˆ์—ญ๋œ ์ž๋ฃŒ, ํ˜•์‹ 'lang:text' ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:61 +msgid "Invalid/empty language for translated data" -+msgstr "" ++msgstr "๋ฒˆ์—ญ๋œ ์ž๋ฃŒ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์Œ/๋น„์›Œ์ง" + +#: plugins/groups_manager.py:71 +msgid "Can't generate group id from '{}'. Please specify group id using --id." -+msgstr "" ++msgstr "'{}' ์—์„œ ๊ทธ๋ฃน id๋ฅผ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. --id๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฃน id๋ฅผ ์ง€์ •ํ•ด ์ฃผ์„ธ์š”." + +#: plugins/groups_manager.py:79 +msgid "create and edit groups metadata file" -+msgstr "" ++msgstr "๊ทธ๋ฃน ๋ฉ”ํƒ€๋ฐ์ดํƒ€ ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:90 +msgid "load groups metadata from file" -+msgstr "" ++msgstr "ํŒŒ์ผ์—์„œ ๊ทธ๋ฃน ๋ฉ”ํƒ€ํŒŒ์ผ์„ ์ ์žฌํ•ฉ๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:93 +msgid "save groups metadata to file" -+msgstr "" ++msgstr "๊ทธ๋ฃน ๋ฉ”ํƒ€์ž๋ฃŒ๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:95 +msgid "load and save groups metadata to file" -+msgstr "" ++msgstr "๊ทธ๋ฃน ๋ฉ”ํƒ€ํŒŒ์ผ์„ ํŒŒ์ผ์— ์ ์žฌํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:97 -+#, fuzzy -+#| msgid "print variable values to stdout" +msgid "print the result metadata to stdout" -+msgstr "๋ณ€์ˆ˜ ๊ฐ’์„ ํ‘œ์ค€ ์ถœ๋ ฅ์œผ๋กœ ์ถœ๋ ฅ" ++msgstr "๊ฒฐ๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํƒ€๋ฅผ ํ‘œ์ค€์ถœ๋ ฅ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค" + +#: plugins/groups_manager.py:100 +msgid "group id" -+msgstr "" ++msgstr "๊ทธ๋ฃน id" + +#: plugins/groups_manager.py:101 +msgid "group name" -+msgstr "" ++msgstr "๊ทธ๋ฃน ์ด๋ฆ„" + +#: plugins/groups_manager.py:103 -+#, fuzzy -+#| msgid "No description given" +msgid "group description" -+msgstr "์„ค๋ช…์ด ์—†์Šต๋‹ˆ๋‹ค." ++msgstr "๊ทธ๋ฃน ์„ค๋ช…" + +#: plugins/groups_manager.py:105 +msgid "group display order" -+msgstr "" ++msgstr "๊ทธ๋ฃธ ํ‘œ์‹œ ์ˆœ์„œ" + +#: plugins/groups_manager.py:108 +msgid "translated name for the group" -+msgstr "" ++msgstr "๊ทธ๋ฃน์„ ์œ„ํ•œ ๋ฒˆ์—ญ๋œ ์ด๋ฆ„" + +#: plugins/groups_manager.py:111 +msgid "translated description for the group" -+msgstr "" ++msgstr "๊ทธ๋ฃน์„ ์œ„ํ•œ ๋ฒˆ์—ญ ์„ค๋ช…" + +#: plugins/groups_manager.py:115 +msgid "make the group user visible (default)" -+msgstr "" ++msgstr "๊ทธ๋ฃน ์‚ฌ์šฉ์ž๋ฅผ ํ‘œ์‹œ (๊ธฐ๋ณธ๊ฐ’)" + +#: plugins/groups_manager.py:118 +msgid "make the group user invisible" -+msgstr "" ++msgstr "๊ทธ๋ฃน ์‚ฌ์šฉ์ž๋ฅผ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ‘œ์‹œ" + +#: plugins/groups_manager.py:123 +msgid "add packages to the mandatory section" -+msgstr "" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ํ•„ ์ˆ˜ ๋ถ€๋ถ„์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:125 +msgid "add packages to the optional section" -+msgstr "" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ์„ ํƒ ๋ถ€๋ถ„์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:127 +msgid "remove packages from the group instead of adding them" -+msgstr "" ++msgstr "์ถ”๊ฐ€ํ•˜๊ธฐ ๋Œ€์‹ ์— ๊ทธ๋ฃน์—์„œ ๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:129 -+#, fuzzy -+#| msgid "Display a list of unresolved dependencies for repositories" +msgid "include also direct dependencies for packages" -+msgstr "์ €์žฅ์†Œ์— ๋Œ€ํ•œ ํ™•์ธ๋˜์ง€ ์•Š์€ ์ข…์†์„ฑ ๋ชฉ๋ก ํ‘œ์‹œ" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ์œ„ํ•ด ์ง์ ‘์ ์ธ ์˜์กด์„ฑ์„ ํฌํ•จํ•œ๋‹ค" + +#: plugins/groups_manager.py:132 +msgid "package specification" -+msgstr "" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(package) ์‚ฌ์–‘" + +#: plugins/groups_manager.py:156 +msgid "Can't edit group without specifying it (use --id or --name)" -+msgstr "" ++msgstr "์ด๊ฒƒ(user --id ๋˜๋Š --name)์„ ํŠน์ •ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ฃน์„ ์ˆ˜์ • ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:190 -+#, fuzzy -+#| msgid "Can't write file '{}'" +msgid "Can't load file \"{}\": {}" -+msgstr "'{}'ํŒŒ์ผ์„ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." ++msgstr "ํŒŒ์ผ \"{}\": {} ๋ฅผ ์ ์žฌ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:206 -+#, fuzzy -+#| msgid "Can't write file '{}'" +msgid "Can't save file \"{}\": {}" -+msgstr "'{}'ํŒŒ์ผ์„ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." ++msgstr "ํŒŒ์ผ \"{}\": {}์„ ์ €์žฅ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:259 -+#, fuzzy -+#| msgid "No match for argument: %s" +msgid "No match for argument: {}" -+msgstr "์ธ์ˆ˜์™€ ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ ์—†์Œ : %s" ++msgstr "์ผ์น˜ํ•˜๋Š” ์ธ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค :{}" + +#: plugins/groups_manager.py:296 +msgid "Can't remove packages from non-existent group" -+msgstr "" ++msgstr "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ฃน์—์„œ ๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + +#: plugins/groups_manager.py:305 +msgid "" +"Group id '{}' generated from '{}' is duplicit. Please specify group id using" +" --id." -+msgstr "" -+ ++msgstr "'{}'์—์„œ ๋ฐœ์ƒํ•œ ๊ทธ๋ฃน id '{}'๋Š” ์ค‘๋ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. --id๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฃน id๋ฅผ ์ง€์ •ํ•˜๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค." + #: plugins/leaves.py:32 msgid "List installed packages not required by any other package" - msgstr "๋‹ค๋ฅธ ํŒจํ‚ค์ง€์—์„œ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ๋‚˜์—ด" -@@ -614,43 +740,47 @@ msgstr "yum์˜ ํžˆ์Šคํ† ๋ฆฌ, ๊ทธ๋ฃน ๋ฐ yumdb ๋ฐ์ดํ„ฐ๋ฅผ dnf๋กœ ๋งˆ์ด๊ทธ๋ ˆ +-msgstr "๋‹ค๋ฅธ ํŒจํ‚ค์ง€์—์„œ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ๋‚˜์—ด" ++msgstr "๋‹ค๋ฅธ ๊พธ๋Ÿฌ๋ฏธ(package)์—์„œ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์„ค์น˜๋œ ๊พธ๋Ÿฌ๋ฏธ(packages) ๋‚˜์—ด" + + #: plugins/local.py:122 + msgid "Unable to create a directory '{}' due to '{}'" +-msgstr "'{}'(์œผ)๋กœ ์ธํ•ด '{}'๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." ++msgstr "'{}'(์œผ)๋กœ ์ธํ•ด '{}'๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + + #: plugins/local.py:126 + msgid "'{}' is not a directory" +-msgstr "'{}'์€ (๋Š”) ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค." ++msgstr "'{}'๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค" + + #: plugins/local.py:135 + msgid "Copying '{}' to local repo" +-msgstr "'{}'์„ (๋ฅผ) ๋กœ์ปฌ ์ €์žฅ์†Œ๋กœ ๋ณต์‚ฌ ์ค‘์ž…๋‹ˆ๋‹ค." ++msgstr "'{}'์„ ๋กœ์ปฌ ์ €์žฅ์†Œ๋กœ ๋ณต์‚ฌ ์ค‘์ž…๋‹ˆ๋‹ค" + + #: plugins/local.py:141 + msgid "Can't write file '{}'" +-msgstr "'{}'ํŒŒ์ผ์„ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." ++msgstr "'{}'ํŒŒ์ผ์„ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + + #: plugins/local.py:156 + msgid "Rebuilding local repo" +@@ -608,73 +764,79 @@ msgstr "์ง€์—ญ ๋ ˆํฌ ๋ณต๊ตฌ" + + #: plugins/migrate.py:45 + msgid "migrate yum's history, group and yumdb data to dnf" +-msgstr "yum์˜ ํžˆ์Šคํ† ๋ฆฌ, ๊ทธ๋ฃน ๋ฐ yumdb ๋ฐ์ดํ„ฐ๋ฅผ dnf๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค." ++msgstr "yum ์‚ฌ์šฉ๊ธฐ๋ก, ๊ทธ๋ฃน ๋ฐ yumdb ๋ฐ์ดํ„ฐ๋ฅผ dnf๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค" + + #: plugins/migrate.py:54 msgid "Migrating history data..." msgstr "๊ธฐ๋ก ๋ฐ์ดํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค‘ ..." @@ -1724,6 +1915,8 @@ index 3f4eb89..a8ba74b 100644 "No installed package found for package name \"{pkg}\" specified in needs-" "restarting file \"{file}\"." msgstr "" ++"์žฌ์‹œ์ž‘์ด ํ•„์š”ํ•œ ํŒŒ์ผ \"{file}\" ์— ์ง€์ •ํ•œ ๊พธ๋Ÿฌ๋ฏธ ์ด๋ฆ„ \"{pkg}\"์„ ์œ„ํ•˜์—ฌ ์„ค์น˜๋œ ๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ์ฐพ์„ ์ˆ˜ " ++"์—†์Šต๋‹ˆ๋‹ค." -#: plugins/needs_restarting.py:199 +#: plugins/needs_restarting.py:224 @@ -1733,61 +1926,327 @@ index 3f4eb89..a8ba74b 100644 -#: plugins/needs_restarting.py:204 +#: plugins/needs_restarting.py:229 msgid "only consider this user's processes" - msgstr "์ด ์‚ฌ์šฉ์ž์˜ ํ”„๋กœ์„ธ์Šค ๋งŒ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค." +-msgstr "์ด ์‚ฌ์šฉ์ž์˜ ํ”„๋กœ์„ธ์Šค ๋งŒ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค." ++msgstr "์ด ์‚ฌ์šฉ์ž์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ๊ณ ๋ คํ•˜์„ธ์š”" -#: plugins/needs_restarting.py:206 +#: plugins/needs_restarting.py:231 msgid "" "only report whether a reboot is required (exit code 1) or not (exit code 0)" - msgstr "" +-msgstr "" ++msgstr "์žฌ์‹œ์ž‘์ด ์š”๊ตฌ๋˜๋Š” (exit code 1) ๋˜๋Š” ์•„๋‹Œ(exit code0) ๊ฒฝ์šฐ์—๋งŒ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค" -#: plugins/needs_restarting.py:230 +#: plugins/needs_restarting.py:234 +msgid "only report affected systemd services" -+msgstr "" ++msgstr "systemd ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ๋งŒ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค" + +#: plugins/needs_restarting.py:257 msgid "Core libraries or services have been updated since boot-up:" - msgstr "" +-msgstr "" ++msgstr "Core ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์„œ๋น„์Šค๋Š” ์žฌ์‹œ์ž‘ ์ด ํ›„์— ์ตœ์‹ ํ™” ๋ฉ๋‹ˆ๋‹ค:" -#: plugins/needs_restarting.py:235 +#: plugins/needs_restarting.py:262 msgid "Reboot is required to fully utilize these updates." - msgstr "" +-msgstr "" ++msgstr "์žฌ์‹œ์ž‘์€ ์ด๋“ค ์ตœ์‹ ํ™”๋ฅผ ์™„์ „ํžˆ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." -#: plugins/needs_restarting.py:236 +#: plugins/needs_restarting.py:263 msgid "More information:" - msgstr "" +-msgstr "" ++msgstr "์ž์„ธํ•œ ์ •๋ณด:" -#: plugins/needs_restarting.py:240 +#: plugins/needs_restarting.py:267 msgid "No core libraries or services have been updated since boot-up." - msgstr "" +-msgstr "" ++msgstr "ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์„œ๋น„์Šค๋Š” ์žฌ์‹œ์ž‘ ์ด ํ›„์— ์ตœ์‹ ํ™” ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." -#: plugins/needs_restarting.py:242 +#: plugins/needs_restarting.py:269 msgid "Reboot should not be necessary." - msgstr "" +-msgstr "" ++msgstr "์žฌ์‹œ์ž‘์€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." -@@ -871,84 +1001,96 @@ msgstr "๋ณด๊ด€ํ•  ์ตœ์‹  N ํŒจํ‚ค์ง€ - ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค." + #: plugins/post-transaction-actions.py:71 + #, python-format + msgid "Bad Action Line \"%s\": %s" +-msgstr "" ++msgstr "์ž˜๋ชป๋œ ๋™์ž‘ ์„  \"%s\": %s" + + #. unsupported state, skip it + #: plugins/post-transaction-actions.py:130 + #, python-format + msgid "Bad Transaction State: %s" +-msgstr "" ++msgstr "์ž˜๋ชป๋œ ์—ฐ๊ฒฐ ์ƒํƒœ: %s" + + #: plugins/post-transaction-actions.py:153 + #: plugins/post-transaction-actions.py:155 + #, python-format + msgid "post-transaction-actions: %s" +-msgstr "" ++msgstr "์—ฐ๊ฒฐ ํ›„ ๋™์ž‘: %s" + + #: plugins/post-transaction-actions.py:157 + #, python-format + msgid "post-transaction-actions: Bad Command \"%s\": %s" +-msgstr "" ++msgstr "์—ฐ๊ฒฐ ํ›„ ๋™์ž‘: ์ž˜๋ชป๋œ ๋ช…๋ น \"%s\": %s" + + #: plugins/repoclosure.py:42 + msgid "Display a list of unresolved dependencies for repositories" +@@ -686,149 +848,157 @@ msgstr "์žฌ๊ตฌ ์ถ•์€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์ข…์†์„ฑ์œผ๋กœ ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. + + #: plugins/repoclosure.py:153 + msgid "check packages of the given archs, can be specified multiple times" +-msgstr "์ง€์ •๋œ ์•„์น˜์˜ ํŒจํ‚ค์ง€๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." ++msgstr "์ง€์ •๋œ ์•„์น˜์˜ ๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค" + + #: plugins/repoclosure.py:156 + msgid "Specify repositories to check" +-msgstr "ํ™•์ธํ•  ์ €์žฅ์†Œ๋ฅผ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค." ++msgstr "์ ๊ฒ€ ํ•  ์ €์žฅ์†Œ๋ฅผ ์ง€์ •ํ•˜์„ธ์š”" + + #: plugins/repoclosure.py:158 + msgid "Check only the newest packages in the repos" +-msgstr "๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ตœ์‹  ํŒจํ‚ค์ง€ ๋งŒ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค." ++msgstr "์ €์žฅ์†Œ ์ตœ์‹  ๊พธ๋Ÿฌ๋ฏธ(package)๋งŒ ํ™•์ธํ•˜์„ธ์š”" + + #: plugins/repoclosure.py:161 + msgid "Check closure for this package only" +-msgstr "์ด ํŒจํ‚ค์ง€์˜ ํ์‡„ ๋งŒ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค." ++msgstr "์ด ๊พธ๋Ÿฌ๋ฏธ(package)์˜ ํ์‡„๋งŒ ํ™•์ธํ•˜์„ธ์š”" + + #: plugins/repodiff.py:45 + msgid "List differences between two sets of repositories" +-msgstr "" ++msgstr "๋‘ ๊ฐœ์˜ ์ €์žฅ์†Œ ๊ตฌ์„ฑ ์‚ฌ์ด์˜ ๋ชฉ๋ก ์ฐจ์ด์ " + + #: plugins/repodiff.py:58 + msgid "Specify old repository, can be used multiple times" +-msgstr "" ++msgstr "์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”, ์˜ค๋ž˜๋œ ์ €์žฅ์†Œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค" + + #: plugins/repodiff.py:60 + msgid "Specify new repository, can be used multiple times" +-msgstr "" ++msgstr "์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉ ๋  ์ˆ˜ ์žˆ๋Š”, ์ƒˆ๋กœ์šด ์ €์žฅ์†Œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค" + + #: plugins/repodiff.py:63 + msgid "" + "Specify architectures to compare, can be used multiple times. By default, " + "only source rpms are compared." +-msgstr "" ++msgstr "๋น„๊ต ํ•  ๊ตฌ์กฐ๋ฅผ ์ง€์ •ํ•˜๊ณ , ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ, ์ž์› rpms๋งŒ ๋น„๊ต๋ฉ๋‹ˆ๋‹ค." + + #: plugins/repodiff.py:67 + msgid "Output additional data about the size of the changes." +-msgstr "" ++msgstr "ํฌ๊ธฐ ๋ณ€ํ™”์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ž๋ฃŒ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค." + + #: plugins/repodiff.py:69 + msgid "" + "Compare packages also by arch. By default packages are compared just by " + "name." +-msgstr "" ++msgstr "๊ตฌ์กฐ์— ์˜ํ•ด ๊พธ๋Ÿฌ๋ฏธ(package) ๋˜ํ•œ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊พธ๋Ÿฌ๋ฏธ(package)๋Š” ์ด๋ฆ„์œผ๋กœ๋งŒ ๋น„๊ต๋ฉ๋‹ˆ๋‹ค." + + #: plugins/repodiff.py:72 + msgid "Output a simple one line message for modified packages." +-msgstr "" ++msgstr "์ˆ˜์ •๋œ ๊พธ๋Ÿฌ๋ฏธ(pacakage)์ง€๋ฅผ ์œ„ํ•ด ๋‹จ์ˆœํžˆ ํ•œ ์ค„ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค." + + #: plugins/repodiff.py:74 + msgid "" + "Split the data for modified packages between upgraded and downgraded " + "packages." +-msgstr "" ++msgstr "ํ–ฅ์ƒ ๋˜๋Š” ํ–ฅ์ƒ ๊พธ๋Ÿฌ๋ฏธ ์‚ฌ์ด์—์„œ ๋ณ€ํ˜•๋œ ๊พธ๋Ÿฌ๋ฏธ๋ฅผ ์œ„ํ•ด ์ž๋ฃŒ๋ฅผ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค." + + #: plugins/repodiff.py:86 + msgid "Both old and new repositories must be set." +-msgstr "" ++msgstr "์˜ค๋ž˜๋œ ๊ฒƒ๊ณผ ์ƒˆ๋กœ์šด ์ €์žฅ์†Œ ๋ชจ๋‘ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + + #: plugins/repodiff.py:178 + msgid "Size change: {} bytes" +-msgstr "" ++msgstr "ํฌ๊ธฐ ๋ณ€ํ™”: {} bytes" + + #: plugins/repodiff.py:184 + msgid "Added package : {}" +-msgstr "" ++msgstr "์ถ”๊ฐ€๋œ ๊พธ๋Ÿฌ๋ฏธ(package) : {}" + + #: plugins/repodiff.py:187 + msgid "Removed package: {}" +-msgstr "" ++msgstr "์ œ๊ฑฐ๋œ ๊พธ๋Ÿฌ๋ฏธ(package): {}" + + #: plugins/repodiff.py:190 + msgid "Obsoleted by : {}" +-msgstr "" ++msgstr "์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ : {}" + + #: plugins/repodiff.py:195 + msgid "" + "\n" + "Upgraded packages" + msgstr "" ++"\n" ++"ํ–ฅ์ƒ๋œ ๊พธ๋Ÿฌ๋ฏธ(package)" + + #: plugins/repodiff.py:200 + msgid "" + "\n" + "Downgraded packages" + msgstr "" ++"\n" ++"๊พธ๋Ÿฌ๋ฏธ ํ•˜ํ–ฅ์„ค์น˜" + + #: plugins/repodiff.py:207 + msgid "" + "\n" + "Modified packages" + msgstr "" ++"\n" ++"๋ณ€ํ˜•๋œ ๊พธ๋Ÿฌ๋ฏธ(package)" + + #: plugins/repodiff.py:212 + msgid "" + "\n" + "Summary" + msgstr "" ++"\n" ++"์š”์•ฝ" + + #: plugins/repodiff.py:213 + msgid "Added packages: {}" +-msgstr "" ++msgstr "์ถ”๊ฐ€๋œ ๊พธ๋Ÿฌ๋ฏธ(package): {}" + + #: plugins/repodiff.py:214 + msgid "Removed packages: {}" +-msgstr "" ++msgstr "์ œ๊ฑฐ๋œ ๊พธ๋Ÿฌ๋ฏธ(package): {}" + + #: plugins/repodiff.py:216 + msgid "Upgraded packages: {}" +-msgstr "" ++msgstr "ํ–ฅ์ƒ๋œ ๊พธ๋Ÿฌ๋ฏธ(package): {}" + + #: plugins/repodiff.py:217 + msgid "Downgraded packages: {}" +-msgstr "" ++msgstr "ํ•˜ํ–ฅ์„ค์น˜๋œ ๊พธ๋Ÿฌ๋ฏธ: {}" + + #: plugins/repodiff.py:219 + msgid "Modified packages: {}" +-msgstr "" ++msgstr "๋ณ€ํ˜•๋œ ๊พธ๋Ÿฌ๋ฏธ(package): {}" + + #: plugins/repodiff.py:222 + msgid "Size of added packages: {}" +-msgstr "" ++msgstr "ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€๋œ ๊พธ๋Ÿฌ๋ฏธ(package): {}" + + #: plugins/repodiff.py:223 + msgid "Size of removed packages: {}" +-msgstr "" ++msgstr "ํฌ๊ธฐ๊ฐ€ ์ œ๊ฑฐ๋œ ๊พธ๋Ÿฌ๋ฏธ(package): {}" + + #: plugins/repodiff.py:225 + msgid "Size of modified packages: {}" +-msgstr "" ++msgstr "ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ˜•๋œ ๊พธ๋Ÿฌ๋ฏธ(package): {}" + + #: plugins/repodiff.py:228 + msgid "Size of upgraded packages: {}" +-msgstr "" ++msgstr "ํฌ๊ธฐ๊ฐ€ ํ–ฅ์ƒ๋œ ๊พธ๋Ÿฌ๋ฏธ: {}" + + #: plugins/repodiff.py:230 + msgid "Size of downgraded packages: {}" +-msgstr "" ++msgstr "ํฌ๊ธฐ๊ฐ€ ํ•˜ํ–ฅ์„ค์น˜๋œ ๊พธ๋Ÿฌ๋ฏธ: {}" + + #: plugins/repodiff.py:232 + msgid "Size change: {}" +-msgstr "" ++msgstr "ํฌ๊ธฐ ๋ณ€๊ฒฝ: {}" + + #: plugins/repograph.py:50 + msgid "Output a full package dependency graph in dot format" +-msgstr "๋„ํŠธ ํ˜•์‹์˜ ์ „์ฒด ํŒจํ‚ค์ง€ ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„ ์ถœ๋ ฅ" ++msgstr "๋„ํŠธ ํ˜•์‹์˜ ์ „์ฒด ๊พธ๋Ÿฌ๋ฏธ(package) ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„ ์ถœ๋ ฅ" + + #: plugins/repograph.py:110 + #, python-format +@@ -837,27 +1007,27 @@ msgstr "์•„๋ฌด๊ฒƒ๋„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค : '%s'" + + #: plugins/repomanage.py:45 + msgid "Manage a directory of rpm packages" +-msgstr "rpm ํŒจํ‚ค์ง€ ๋””๋ ‰ํ† ๋ฆฌ ๊ด€๋ฆฌ" ++msgstr "rpm ๊พธ๋Ÿฌ๋ฏธ(package) ๋””๋ ‰ํ† ๋ฆฌ ๊ด€๋ฆฌ" + + #: plugins/repomanage.py:59 + msgid "Pass either --old or --new, not both!" +-msgstr "--old ๋˜๋Š” --new ์ค‘ ํ•˜๋‚˜๋ฅผ ์ „๋‹ฌํ•˜์‹ญ์‹œ์˜ค." ++msgstr "--old ๋˜๋Š” --new ์ค‘ ํ•˜๋‚˜๋ฅผ ์ „๋‹ฌํ•˜์„ธ์š”!" + + #: plugins/repomanage.py:71 + msgid "No files to process" +-msgstr "์ฒ˜๋ฆฌ ํ•  ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค." ++msgstr "์ฒ˜๋ฆฌ ํ•  ํŒŒ์ผ ์—†์Œ" + + #: plugins/repomanage.py:93 + msgid "Could not open {}" +-msgstr "{}์„ (๋ฅผ) ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." ++msgstr "{}์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" + + #: plugins/repomanage.py:177 + msgid "Print the older packages" +-msgstr "์ด์ „ ํŒจํ‚ค์ง€ ์ธ์‡„" ++msgstr "์ด์ „ ๊พธ๋Ÿฌ๋ฏธ(package) ์ธ์‡„" + + #: plugins/repomanage.py:179 + msgid "Print the newest packages" +-msgstr "์ตœ์‹  ํŒจํ‚ค์ง€ ์ธ์‡„" ++msgstr "์ตœ์‹  ๊พธ๋Ÿฌ๋ฏธ(package) ์ธ์‡„" + + #: plugins/repomanage.py:181 + msgid "Space separated output, not newline" +@@ -865,97 +1035,109 @@ msgstr "๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ ๋œ ์ถœ๋ ฅ์ด ์•„๋‹Œ ๊ฐœํ–‰ ๋ฌธ์ž" + + #: plugins/repomanage.py:183 + msgid "Newest N packages to keep - defaults to 1" +-msgstr "๋ณด๊ด€ํ•  ์ตœ์‹  N ํŒจํ‚ค์ง€ - ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค." ++msgstr "๋ณด๊ด€ํ•  ์ตœ์‹  N ๊พธ๋Ÿฌ๋ฏธ(package) - ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค" + + #: plugins/repomanage.py:186 msgid "Path to directory" msgstr "๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ" -#: plugins/reposync.py:54 +#: plugins/reposync.py:55 msgid "download all packages from remote repo" - msgstr "์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค." +-msgstr "์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค." ++msgstr "์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ๋ชจ๋“  ๊พธ๋Ÿฌ๋ฏธ(package)๋ฅผ ๋‚ด๋ ค๋ฐ›์•„์š”" -#: plugins/reposync.py:63 +#: plugins/reposync.py:64 msgid "download only packages for this ARCH" - msgstr "์ด ARCH ์šฉ ํŒจํ‚ค์ง€ ๋งŒ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค." +-msgstr "์ด ARCH ์šฉ ํŒจํ‚ค์ง€ ๋งŒ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค." ++msgstr "์ด ARCH์šฉ ๊พธ๋Ÿฌ๋ฏธ(package)๋งŒ ๋‚ด๋ ค๋ฐ›์•„์š”" -#: plugins/reposync.py:65 +#: plugins/reposync.py:66 msgid "delete local packages no longer present in repository" - msgstr "์ €์žฅ์†Œ์— ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋กœ์ปฌ ํŒจํ‚ค์ง€ ์‚ญ์ œ" +-msgstr "์ €์žฅ์†Œ์— ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋กœ์ปฌ ํŒจํ‚ค์ง€ ์‚ญ์ œ" ++msgstr "์ €์žฅ์†Œ์— ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋กœ์ปฌ ๊พธ๋Ÿฌ๋ฏธ(package) ์‚ญ์ œ" -#: plugins/reposync.py:67 -msgid "also download and uncompress comps.xml" @@ -1796,19 +2255,21 @@ index 3f4eb89..a8ba74b 100644 -#: plugins/reposync.py:69 +#: plugins/reposync.py:68 msgid "download all the metadata." - msgstr "" +-msgstr "" ++msgstr "๋ชจ๋“  ๋ฉ”ํƒ€๋ฐ์ดํƒ€ ๋‚ด๋ ค๋ฐ›๊ธฐ." -#: plugins/reposync.py:71 -msgid "download only newest packages per-repo" -msgstr "repo ๋‹น ์ตœ์‹  ํŒจํ‚ค์ง€ ๋งŒ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค." +#: plugins/reposync.py:70 +msgid "Remove packages that fail GPG signature checking after downloading" -+msgstr "" ++msgstr "๋‚ด๋ ค๋ฐ›๊ธฐ ํ›„์— ์ ๊ฒ€ํ•œ GPG ์„œ๋ช…์ด ์‹คํŒจํ•œ ๊พธ๋Ÿฌ๋ฏธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค" #: plugins/reposync.py:73 -msgid "where to store downloaded repositories" +-msgstr "" +msgid "also download and uncompress comps.xml" - msgstr "" ++msgstr "๋˜ํ•œ comps.xml ๋‚ด๋ ค๋ฐ›๊ธฐ์™€ ์••์ถ• ํ’€๊ธฐ" #: plugins/reposync.py:75 -msgid "Don't add the reponame to the download path." @@ -1818,62 +2279,69 @@ index 3f4eb89..a8ba74b 100644 msgid "" "where to store downloaded repository metadata. Defaults to the value of " "--download-path." - msgstr "" - +-msgstr "" ++msgstr "๋‚ด๋ ค๋ฐ›์€ ์ €์žฅ์†Œ ๋ฉ”ํƒ€๋ฐ์ดํƒ€๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์žฅ์†Œ. --download-path์˜ ๊ฐ’์œผ๋กœ ๊ธฐ๋ณธ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." ++ +#: plugins/reposync.py:78 +msgid "download only newest packages per-repo" -+msgstr "repo ๋‹น ์ตœ์‹  ํŒจํ‚ค์ง€ ๋งŒ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค." -+ ++msgstr "์ €์žฅ์†Œ ์ตœ์‹  ๊พธ๋Ÿฌ๋ฏธ(package)๋งŒ ๋‚ด๋ ค๋ฐ›์•„์š”" + #: plugins/reposync.py:80 -msgid "operate on source packages" -msgstr "์†Œ์Šค ํŒจํ‚ค์ง€๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค." +msgid "Don't add the reponame to the download path." -+msgstr "" ++msgstr "๋‚ด๋ ค๋ฐ›๊ธฐ ๊ฒฝ๋กœ์— ์ €์žฅ์†Œ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." #: plugins/reposync.py:82 +msgid "where to store downloaded repositories" -+msgstr "" ++msgstr "๋‚ด๋ ค๋ฐ›๊ธฐ ํ•œ ์ €์žฅ์†Œ๋ฅผ ์ €์žฅํ•  ์œ„์น˜" + +#: plugins/reposync.py:84 msgid "try to set local timestamps of local files by the one on the server" - msgstr "" +-msgstr "" ++msgstr "์„œ๋ฒ„์— ์žˆ๋Š” ํ•˜๋‚˜์—์„œ ๋กœ์ปฌํŒŒ์ผ์˜ ๋กœ์ปฌ ํƒ€์ž„์Šคํ…œํ”„ ์„ค์ •์„ ์‹œ๋„ํ•˜์„ธ์š”" -#: plugins/reposync.py:85 +#: plugins/reposync.py:87 +msgid "operate on source packages" -+msgstr "์†Œ์Šค ํŒจํ‚ค์ง€๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค." ++msgstr "์ž์› ๊พธ๋Ÿฌ๋ฏธ์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค" + +#: plugins/reposync.py:89 msgid "Just list urls of what would be downloaded, don't download" - msgstr "" +-msgstr "" ++msgstr "๋‚ด๋ ค ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” url๋งŒ ๋ชฉ๋กํ™”ํ•˜๋ฉฐ, ๋‚ด๋ ค ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค" -#: plugins/reposync.py:109 +#: plugins/reposync.py:113 msgid "Can't use --norepopath with multiple repositories" - msgstr "" +-msgstr "" ++msgstr "๋‹ค์ค‘ ์ €์žฅ์†Œ์™€ ํ•จ๊ป˜ --norepath๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" -#: plugins/reposync.py:127 +#: plugins/reposync.py:132 #, python-format msgid "Failed to get mirror for metadata: %s" - msgstr "" +-msgstr "" ++msgstr "๋ฉ”ํƒ€๋ฐ์ดํƒ€์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์ฃผ์†Œ ์–ป๊ธฐ๋ฅผ ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค:%s" -#: plugins/reposync.py:144 +#: plugins/reposync.py:149 msgid "Failed to get mirror for the group file." - msgstr "" - +-msgstr "" ++msgstr "๊ทธ๋ฃน ํŒŒ์ผ์„ ์œ„ํ•˜์—ฌ ์—ฐ๊ฒฐ์ฃผ์†Œ ์–ป๊ธฐ์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค." ++ +#: plugins/reposync.py:168 +msgid "Removing {}: {}" -+msgstr "" -+ ++msgstr "์ œ๊ฑฐํ•˜๊ธฐ{}: {}" + #: plugins/reposync.py:175 +msgid "GPG signature check failed." -+msgstr "" ++msgstr "GPG ์„œ๋ช… ์ ๊ฒ€์ด ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค." + +#: plugins/reposync.py:196 msgid "Download target '{}' is outside of download path '{}'." - msgstr "" +-msgstr "" ++msgstr "๋‚ด๋ ค๋ฐ›๊ธฐ ๋Œ€์ƒ '{}'๋Š” ๋‚ด๋ ค๋ฐ›๊ธฐ ๊ฒฝ๋กœ'{}'์˜ ๋ฐ–์— ์žˆ์Šต๋‹ˆ๋‹ค." -#: plugins/reposync.py:190 +#: plugins/reposync.py:211 @@ -1892,15 +2360,104 @@ index 3f4eb89..a8ba74b 100644 #, python-format msgid "comps.xml for repository %s saved" msgstr "์ €์žฅ์†Œ์— ๋Œ€ํ•œ comps.xml %s ์ €์žฅ๋œ" + + #: plugins/show_leaves.py:54 + msgid "New leaves:" +-msgstr "์ƒˆ ์žŽ :" ++msgstr "๋…๋ฆฝ ๊พธ๋Ÿฌ๋ฏธ(package):" + + #: plugins/versionlock.py:32 + #, python-format +@@ -964,59 +1146,59 @@ msgstr "๋ฒ„์ „ ์ž ๊ธˆ ์„ค์ •์„ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค : %s" + + #: plugins/versionlock.py:33 + msgid "Locklist not set" +-msgstr "์ž ๊ธˆ ๋ชฉ๋ก์ด ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค." ++msgstr "์ž ๊ธˆ ๋ชฉ๋ก ์„ค์ •๋˜์ง€ ์•Š์Œ" + + #: plugins/versionlock.py:34 + msgid "Adding versionlock on:" +-msgstr "" ++msgstr "๋ฒ„์ „์ž ๊ธˆ ์„ค์ • ์ถ”๊ฐ€ํ•˜๊ธฐ:" + + #: plugins/versionlock.py:35 + msgid "Adding exclude on:" +-msgstr "" ++msgstr "์ œ์™ธ ํ•˜๊ธฐ ์ถ”๊ฐ€ํ•˜๊ธฐ:" + + #: plugins/versionlock.py:36 + msgid "Package already locked in equivalent form:" +-msgstr "" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(package)๋Š” ์ด๋ฏธ ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ์ž ๊ฒจ์กŒ์Šต๋‹ˆ๋‹ค:" + + #: plugins/versionlock.py:37 + msgid "Package {} is already locked" +-msgstr "" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(package) {} ๋Š” ์ด๋ฏธ ์ž ๊ฒจ์กŒ์Šต๋‹ˆ๋‹ค" + + #: plugins/versionlock.py:38 + msgid "Package {} is already excluded" +-msgstr "" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(package) {} ๋Š” ์ด๋ฏธ ์ œ์™ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค" + + #: plugins/versionlock.py:39 + msgid "Deleting versionlock for:" +-msgstr "" ++msgstr "๋ฒ„์ „ ์ž ๊ธˆ์„ ์ œ๊ฑฐํ•˜๊ธฐ:" + + #: plugins/versionlock.py:40 + msgid "No package found for:" +-msgstr "" ++msgstr "์ฐพ๊ณ ์ž ํ•˜๋Š” ๊พธ๋Ÿฌ๋ฏธ(package)๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค:" + + #: plugins/versionlock.py:41 + msgid "Excludes from versionlock plugin were not applied" +-msgstr "" ++msgstr "๋ฒ„์ „ ์ž ๊ธˆ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์ œ์™ธ๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค" + + #: plugins/versionlock.py:42 + msgid "Versionlock plugin: number of lock rules from file \"{}\" applied: {}" +-msgstr "" ++msgstr "๋ฒ„์ „ ์ž ๊ธˆ ํ”Œ๋Ÿฌ๊ทธ์ธ: ์ ์šฉ๋œ ํŒŒ์ผ \"{} \"์—์„œ ์ž ๊ธˆ ๊ทœ์น™์˜ ์ˆ˜: {}" + + #: plugins/versionlock.py:43 + msgid "Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" +-msgstr "" ++msgstr "๋ฒ„์ „ ์ž ๊ธˆ ํ”Œ๋Ÿฌ๊ทธ์ธ: ์ ์šฉ๋œ ํŒŒ์ผ \"{} \"์—์„œ ์ œ์™ธ ๊ทœ์น™์˜ ์ˆ˜: {}" + + #: plugins/versionlock.py:44 + msgid "Versionlock plugin: could not parse pattern:" +-msgstr "" ++msgstr "๋ฒ„์ „ ์ž ๊ธˆ ํ”Œ๋Ÿฌ๊ทธ์ธ: ์œ ํ˜•์„ ๊ตฌ๋ฌธ ๋ถ„์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค:" + + #: plugins/versionlock.py:130 + msgid "control package version locks" +-msgstr "" ++msgstr "๊พธ๋Ÿฌ๋ฏธ ๋ฒ„์ „ ์ž ๊ธˆ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค" + + #: plugins/versionlock.py:136 + msgid "Use package specifications as they are, do not try to parse them" +-msgstr "" ++msgstr "๊พธ๋Ÿฌ๋ฏธ(package) ์‚ฌ์–‘์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ตฌ๋ฌธ ๋ถ„์„์„ ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค" + + #~ msgid "" + #~ "\n" diff --git a/po/zh_CN.po b/po/zh_CN.po -index 151441d..27645c4 100644 +index 151441d..ea0afbc 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po -@@ -5,20 +5,21 @@ +@@ -1,24 +1,26 @@ + # Tommy He , 2015. #zanata + # Tommy He , 2016. #zanata + # mosquito , 2016. #zanata +-# Charles Lee , 2017. #zanata, 2020. ++# Charles Lee , 2017. #zanata, 2020, 2021. # cheng ye <18969068329@163.com>, 2017. #zanata - # Ludek Janda , 2018. #zanata +-# Ludek Janda , 2018. #zanata ++# Ludek Janda , 2018. #zanata, 2021. # Hongqiao Chen , 2020. +# Sundeep Anand , 2021. ++# Qiyu Yan , 2021. msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" @@ -1910,8 +2467,8 @@ index 151441d..27645c4 100644 -"Last-Translator: Charles Lee \n" -"Language-Team: Chinese (Simplified) \n" +"POT-Creation-Date: 2021-02-22 10:06+0100\n" -+"PO-Revision-Date: 2021-03-08 11:08+0000\n" -+"Last-Translator: Sundeep Anand \n" ++"PO-Revision-Date: 2021-09-03 07:40+0000\n" ++"Last-Translator: Ludek Janda \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" @@ -1919,11 +2476,11 @@ index 151441d..27645c4 100644 "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" ++"X-Generator: Weblate 4.8\n" #: plugins/builddep.py:45 msgid "[PACKAGE|PACKAGE.spec]" -@@ -39,7 +40,7 @@ msgstr "ๅฎšไน‰ไธ€ไธช็”จไบŽๅค„็† Spec ๆ–‡ไปถ็š„ๅฎ" +@@ -39,7 +41,7 @@ msgstr "ๅฎšไน‰ไธ€ไธช็”จไบŽๅค„็† Spec ๆ–‡ไปถ็š„ๅฎ" #: plugins/builddep.py:95 msgid "skip build dependencies not available in repositories" @@ -1932,7 +2489,7 @@ index 151441d..27645c4 100644 #: plugins/builddep.py:98 msgid "treat commandline arguments as spec files" -@@ -51,7 +52,7 @@ msgstr "ๅฐ†ๅ‘ฝไปค่กŒๅ‚ๆ•ฐไฝœไธบๆบ็  RPM ๅค„็†" +@@ -51,7 +53,7 @@ msgstr "ๅฐ†ๅ‘ฝไปค่กŒๅ‚ๆ•ฐไฝœไธบๆบ็  RPM ๅค„็†" #: plugins/builddep.py:144 msgid "RPM: {}" @@ -1941,12 +2498,12 @@ index 151441d..27645c4 100644 #: plugins/builddep.py:153 msgid "Some packages could not be found." -@@ -87,27 +88,27 @@ msgstr "ๆ— ๅŒน้…่ฝฏไปถๅŒ…๏ผš %s" +@@ -87,27 +89,27 @@ msgstr "ๆ— ๅŒน้…่ฝฏไปถๅŒ…๏ผš %s" #: plugins/changelog.py:37 #, python-brace-format msgid "Not a valid date: \"{0}\"." -msgstr "" -+msgstr "ๆ— ๆ•ˆ็š„ๆ—ฅๆœŸ : \"{0}\"." ++msgstr "ๆ— ๆ•ˆ็š„ๆ—ฅๆœŸ : \"{0}\"ใ€‚" #: plugins/changelog.py:43 msgid "Show changelog data of packages" @@ -1970,11 +2527,11 @@ index 151441d..27645c4 100644 "show only new changelog entries for packages, that provide an upgrade for " "some of already installed packages." -msgstr "" -+msgstr "ๅชๆ˜พ็คบ่ฝฏไปถๅŒ…ๆ–ฐ็š„ๆ”นๅ˜ๆ—ฅๅฟ—ไฟกๆฏ๏ผŒไธบๅทฒๅฎ‰่ฃ…็š„่ฝฏไปถๅŒ…ๆไพ›ๅ‡็บง" ++msgstr "ๅชๆ˜พ็คบ่ฝฏไปถๅŒ…ๆ–ฐ็š„ๆ”นๅ˜ๆ—ฅๅฟ—ไฟกๆฏ๏ผŒไธบๅทฒๅฎ‰่ฃ…็š„่ฝฏไปถๅŒ…ๆไพ›ๅ‡็บงใ€‚" #: plugins/changelog.py:60 msgid "PACKAGE" -@@ -120,20 +121,20 @@ msgstr "ๆœชๆ‰พๅˆฐๅŒน้…็š„ๅ‚ๆ•ฐ๏ผš %s" +@@ -120,20 +122,20 @@ msgstr "ๆœชๆ‰พๅˆฐๅŒน้…็š„ๅ‚ๆ•ฐ๏ผš %s" #: plugins/changelog.py:109 msgid "Listing changelogs since {}" @@ -1985,7 +2542,7 @@ index 151441d..27645c4 100644 msgid "Listing only latest changelog" msgid_plural "Listing {} latest changelogs" -msgstr[0] "" -+msgstr[0] "ๅชๅˆ—ๅ‡บๆœ€ๆ–ฐ็š„ๆ”นๅ˜ๆ—ฅๅฟ—" ++msgstr[0] "ๅชๅˆ—ๅ‡บๆœ€ๆ–ฐ {} ้กนๆ›ดๆ”นๆ—ฅๅฟ—" #: plugins/changelog.py:116 msgid "Listing only new changelogs since installed version of the package" @@ -1999,7 +2556,7 @@ index 151441d..27645c4 100644 #: plugins/changelog.py:122 msgid "Changelogs for {}" -@@ -142,7 +143,7 @@ msgstr "{}็š„ๅ˜ๆ›ด่ฎฐๅฝ•" +@@ -142,7 +144,7 @@ msgstr "{}็š„ๅ˜ๆ›ด่ฎฐๅฝ•" #: plugins/config_manager.py:37 #, python-brace-format msgid "manage {prog} configuration options and repositories" @@ -2008,7 +2565,7 @@ index 151441d..27645c4 100644 #: plugins/config_manager.py:44 msgid "repo to modify" -@@ -166,21 +167,23 @@ msgstr "ๆ‰“ๅฐๅ˜้‡ๅ€ผๅˆฐๆ ‡ๅ‡†่พ“ๅ‡บ" +@@ -166,21 +168,23 @@ msgstr "ๆ‰“ๅฐๅ˜้‡ๅ€ผๅˆฐๆ ‡ๅ‡†่พ“ๅ‡บ" #: plugins/config_manager.py:60 msgid "enable repos (automatically saves)" @@ -2035,7 +2592,25 @@ index 151441d..27645c4 100644 #: plugins/config_manager.py:131 #, python-format -@@ -278,7 +281,7 @@ msgstr "ๆŒ‰็…ง็”จๆˆท NAME ๅˆ—ๅ‡บๅฏ็”จ็š„ Copr ไป“ๅบ“" +@@ -220,7 +224,7 @@ msgstr "ๅฆ" + + #: plugins/copr.py:79 + msgid "Interact with Copr repositories." +-msgstr "ไธŽ Copr ไป“ๅบ“ไบคไบ’" ++msgstr "ไธŽ Copr ไป“ๅบ“ไบคไบ’ใ€‚" + + #: plugins/copr.py:81 + msgid "" +@@ -250,7 +254,7 @@ msgstr "" + " list --available-by-user=NAME\n" + " search project\n" + "\n" +-" Examples:\n" ++" ไพ‹ๅฆ‚๏ผš\n" + " copr enable rhscl/perl516 epel-6-x86_64\n" + " copr enable ignatenkobrain/ocltoys\n" + " copr disable rhscl/perl516\n" +@@ -278,7 +282,7 @@ msgstr "ๆŒ‰็…ง็”จๆˆท NAME ๅˆ—ๅ‡บๅฏ็”จ็š„ Copr ไป“ๅบ“" #: plugins/copr.py:115 msgid "Specify an instance of Copr to work with" @@ -2044,7 +2619,7 @@ index 151441d..27645c4 100644 #: plugins/copr.py:149 plugins/copr.py:217 plugins/copr.py:237 msgid "Error: " -@@ -289,10 +292,11 @@ msgid "" +@@ -289,10 +293,11 @@ msgid "" "specify Copr hub either with `--hub` or using " "`copr_hub/copr_username/copr_projectname` format" msgstr "" @@ -2057,7 +2632,7 @@ index 151441d..27645c4 100644 #: plugins/copr.py:218 plugins/copr.py:222 msgid "exactly two additional parameters to copr command are required" -@@ -320,6 +324,17 @@ msgid "" +@@ -320,6 +325,17 @@ msgid "" "Please do not file bug reports about these packages in Fedora\n" "Bugzilla. In case of problems, contact the owner of this repository.\n" msgstr "" @@ -2075,7 +2650,7 @@ index 151441d..27645c4 100644 #: plugins/copr.py:271 msgid "Repository successfully enabled." -@@ -343,6 +358,7 @@ msgid "" +@@ -343,6 +359,7 @@ msgid "" " about Copr hub - the default one was assumed. Re-enable the project to fix " "this." msgstr "" @@ -2083,7 +2658,16 @@ index 151441d..27645c4 100644 #: plugins/copr.py:353 msgid "Can't parse repositories for username '{}'." -@@ -401,15 +417,27 @@ msgid "" +@@ -374,7 +391,7 @@ msgstr "ๅฎ‰ๅ…จๅŠๆ˜Žๆ™บ็š„็ญ”ๆกˆใ€‚้€€ๅ‡บใ€‚" + + #: plugins/copr.py:417 + msgid "This command has to be run under the root user." +-msgstr "่ฏฅๅ‘ฝไปคๅฟ…้กปไปฅ root ็”จๆˆท่ฟ่กŒ" ++msgstr "่ฏฅๅ‘ฝไปคๅฟ…้กปไปฅ root ็”จๆˆท่ฟ่กŒใ€‚" + + #: plugins/copr.py:481 + msgid "" +@@ -401,15 +418,27 @@ msgid "" "\n" "These repositories have been enabled automatically." msgstr "" @@ -2109,11 +2693,11 @@ index 151441d..27645c4 100644 #, python-brace-format msgid "Failed to remove copr repo {0}/{1}/{2}" -msgstr "" -+msgstr "ๅˆ ้™ค copr repo {0}/{1}/{2} ๅคฑ่ดฅ" ++msgstr "ๅˆ ้™ค copr ไป“ๅบ“ {0}/{1}/{2} ๅคฑ่ดฅ" #: plugins/copr.py:593 msgid "Failed to disable copr repo {}/{}" -@@ -424,14 +452,12 @@ msgid "Interact with Playground repository." +@@ -424,14 +453,12 @@ msgid "Interact with Playground repository." msgstr "ไธŽ Playground ไป“ๅบ“ไบคไบ’ใ€‚" #: plugins/copr.py:639 @@ -2121,7 +2705,7 @@ index 151441d..27645c4 100644 -#| msgid "Interact with Playground repository." msgid "Enabling a Playground repository." -msgstr "ไธŽ Playground ไป“ๅบ“ไบคไบ’ใ€‚" -+msgstr "ๅฏ็”จไธ€ไธช Playground ไป“ๅบ“ใ€‚" ++msgstr "ๅฏ็”จ Playground ไป“ๅบ“ใ€‚" #: plugins/copr.py:640 msgid "Do you want to continue?" @@ -2130,16 +2714,25 @@ index 151441d..27645c4 100644 #: plugins/copr.py:683 msgid "Playground repositories successfully enabled." -@@ -488,7 +514,7 @@ msgstr "้™ๅˆถๅˆฐๆŒ‡ๅฎš็ฑปๅž‹" +@@ -488,7 +515,7 @@ msgstr "้™ๅˆถๅˆฐๆŒ‡ๅฎš็ฑปๅž‹" msgid "" "Allow removing of install-only packages. Using this option may result in an " "attempt to remove the running kernel." -msgstr "" -+msgstr "ๅ…่ฎธๅˆ ้™คๅชๅฎ‰่ฃ…็š„่ฝฏไปถๅŒ…ใ€‚ไฝฟ็”จ่ฟ™ไธช้€‰้กนๅฏ่ƒฝไผšๅฏผ่‡ดๅฐ่ฏ•ๅˆ ้™คๆญฃๅœจ่ฟ่กŒ็š„ๅ†…ๆ ธใ€‚" ++msgstr "ๅ…่ฎธๅˆ ้™คไป…ๅฎ‰่ฃ…(install-only)็š„่ฝฏไปถๅŒ…ใ€‚ไฝฟ็”จ่ฟ™ไธช้€‰้กนๅฏ่ƒฝไผšๅฏผ่‡ดๅฐ่ฏ•ๅˆ ้™คๆญฃๅœจ่ฟ่กŒ็š„ๅ†…ๆ ธใ€‚" #: plugins/debug.py:202 msgid "name of dump file" -@@ -512,25 +538,25 @@ msgstr "ๅฎ‰่ฃ…่ฐƒ่ฏ•ไฟกๆฏ่ฝฏไปถๅŒ…" +@@ -497,7 +524,7 @@ msgstr "่ฝฌๅ‚จๆ–‡ไปถๅ็งฐ" + #: plugins/debug.py:273 + #, python-format + msgid "Package %s is not available" +-msgstr "่ฝฏไปถๅŒ… %s ไธๅฏ็”จใ€‚" ++msgstr "่ฝฏไปถๅŒ… %s ไธๅฏ็”จ" + + #: plugins/debug.py:283 + #, python-format +@@ -512,25 +539,25 @@ msgstr "ๅฎ‰่ฃ…่ฐƒ่ฏ•ไฟกๆฏ่ฝฏไปถๅŒ…" #, python-format msgid "" "Could not find debuginfo package for the following available packages: %s" @@ -2169,7 +2762,7 @@ index 151441d..27645c4 100644 #: plugins/debuginfo-install.py:199 msgid "Unable to find a match" -@@ -554,7 +580,7 @@ msgstr "ๅ–่€Œไปฃไน‹ไธ‹่ฝฝ -debuginfo ่ฝฏไปถๅŒ…" +@@ -554,11 +581,11 @@ msgstr "ๅ–่€Œไปฃไน‹ไธ‹่ฝฝ -debuginfo ่ฝฏไปถๅŒ…" #: plugins/download.py:57 msgid "download the -debugsource package instead" @@ -2178,7 +2771,12 @@ index 151441d..27645c4 100644 #: plugins/download.py:60 msgid "limit the query to packages of given architectures." -@@ -568,7 +594,7 @@ msgstr "่งฃๆžๅนถไธ‹่ฝฝๆ‰€้œ€็š„ไพ่ต–ๅ…ณ็ณป" +-msgstr "้™ๅฎšๆŸฅ่ฏขๆŒ‡ๅฎšๆžถๆž„็š„่ฝฏไปถๅŒ…" ++msgstr "้™ๅฎšๆŸฅ่ฏขๆŒ‡ๅฎšๆžถๆž„็š„่ฝฏไปถๅŒ…ใ€‚" + + #: plugins/download.py:62 + msgid "resolve and download needed dependencies" +@@ -568,7 +595,7 @@ msgstr "่งฃๆžๅนถไธ‹่ฝฝๆ‰€้œ€็š„ไพ่ต–ๅ…ณ็ณป" msgid "" "when running with --resolve, download all dependencies (do not exclude " "already installed ones)" @@ -2187,7 +2785,7 @@ index 151441d..27645c4 100644 #: plugins/download.py:67 msgid "" -@@ -579,7 +605,7 @@ msgstr "ๆ‰“ๅฐ rpm ๅฏ่ขซไธ‹่ฝฝ็š„ url ๅˆ—่กจ่€Œไธๆ˜ฏ็›ดๆŽฅไธ‹่ฝฝ" +@@ -579,7 +606,7 @@ msgstr "ๆ‰“ๅฐ rpm ๅฏ่ขซไธ‹่ฝฝ็š„ url ๅˆ—่กจ่€Œไธๆ˜ฏ็›ดๆŽฅไธ‹่ฝฝ" msgid "when running with --url, limit to specific protocols" msgstr "ๅฝ“ๆ‰ง่กŒๆ—ถๅธฆๆœ‰ --url ๅ‚ๆ•ฐ๏ผŒๅˆ™้™ๅˆถไฝฟ็”จๆŒ‡ๅฎšๅ่ฎฎ" @@ -2196,7 +2794,7 @@ index 151441d..27645c4 100644 #, python-format msgid "Failed to get mirror for package: %s" msgstr "่Žทๅ–้’ˆๅฏนไปฅไธ‹่ฝฏไปถๅŒ…็š„้•œๅƒๅคฑ่ดฅ๏ผš%s" -@@ -602,13 +628,127 @@ msgstr "ๆœชๆ‰พๅˆฐๆ‰€ๅฎšไน‰ %s ็š„ๆบไปฃ็ ่ฝฏไปถๅŒ… SRPM" +@@ -602,13 +629,127 @@ msgstr "ๆœชๆ‰พๅˆฐๆ‰€ๅฎšไน‰ %s ็š„ๆบไปฃ็ ่ฝฏไปถๅŒ… SRPM" msgid "No package %s available." msgstr "ๆฒกๆœ‰ๅฏ็”จ็š„่ฝฏไปถๅŒ… %sใ€‚" @@ -2325,7 +2923,7 @@ index 151441d..27645c4 100644 #: plugins/local.py:126 msgid "'{}' is not a directory" -@@ -634,67 +774,71 @@ msgstr "่ฟ็งป yum ็š„ๅŽ†ๅฒใ€ๅˆ†็ป„ไปฅๅŠ yumdb ๆ•ฐๆฎ่‡ณ dnf" +@@ -634,67 +775,71 @@ msgstr "่ฟ็งป yum ็š„ๅŽ†ๅฒใ€ๅˆ†็ป„ไปฅๅŠ yumdb ๆ•ฐๆฎ่‡ณ dnf" msgid "Migrating history data..." msgstr "ๆญฃๅœจ่ฟ็งปๅŽ†ๅฒๆ•ฐๆฎโ€ฆ" @@ -2354,12 +2952,12 @@ index 151441d..27645c4 100644 "only report whether a reboot is required (exit code 1) or not (exit code 0)" -msgstr "" +msgstr "ๅชๆŠฅๅ‘Š้œ€่ฆ้‡ๆ–ฐๅผ•ๅฏผ (้€€ๅ‡บไปฃ็ ไธบ 1) ๆˆ–ไธ้œ€่ฆ้‡ๆ–ฐๅผ•ๅฏผ (้€€ๅ‡บไปฃ็ ไธบ 0)" -+ + +-#: plugins/needs_restarting.py:230 +#: plugins/needs_restarting.py:234 +msgid "only report affected systemd services" +msgstr "ๅชๆŠฅๅ‘Šๅ—ๅฝฑๅ“็š„ systemd ๆœๅŠก" - --#: plugins/needs_restarting.py:230 ++ +#: plugins/needs_restarting.py:257 msgid "Core libraries or services have been updated since boot-up:" -msgstr "" @@ -2369,7 +2967,7 @@ index 151441d..27645c4 100644 +#: plugins/needs_restarting.py:262 msgid "Reboot is required to fully utilize these updates." -msgstr "" -+msgstr "้œ€่ฆ้‡ๆ–ฐๅฏๅŠจๅŽๆ‰ๅฏไปฅไฝฟ่ฟ™ไบ›ๆ›ดๆ–ฐๅฎŒๅ…จ็”Ÿๆ•ˆ" ++msgstr "้œ€่ฆ้‡ๆ–ฐๅฏๅŠจๅŽๆ‰ๅฏไปฅไฝฟ่ฟ™ไบ›ๆ›ดๆ–ฐๅฎŒๅ…จ็”Ÿๆ•ˆใ€‚" -#: plugins/needs_restarting.py:236 +#: plugins/needs_restarting.py:263 @@ -2407,17 +3005,17 @@ index 151441d..27645c4 100644 #, python-format msgid "post-transaction-actions: %s" -msgstr "" -+msgstr "ไบคๆ˜“ๅŽ็š„ๆ“ไฝœ๏ผš %s" ++msgstr "ไบ‹็‰ฉๅŽ็š„ๆ“ไฝœ๏ผš %s" #: plugins/post-transaction-actions.py:157 #, python-format msgid "post-transaction-actions: Bad Command \"%s\": %s" -msgstr "" -+msgstr "ไบคๆ˜“ๅŽ็š„ๆ“ไฝœ : ้”™่ฏฏๅ‘ฝไปค \"%s\": %s" ++msgstr "ไบ‹็‰ฉๅŽ็š„ๆ“ไฝœ : ๆ— ๆ•ˆ็š„ๅ‘ฝไปค \"%s\": %s" #: plugins/repoclosure.py:42 msgid "Display a list of unresolved dependencies for repositories" -@@ -722,129 +866,137 @@ msgstr "ไป…ไธบ่ฏฅ่ฝฏไปถๅŒ…ๆฃ€ๆŸฅไพ่ต–้—ญๅˆๆ€ง" +@@ -722,129 +867,137 @@ msgstr "ไป…ไธบ่ฏฅ่ฝฏไปถๅŒ…ๆฃ€ๆŸฅไพ่ต–้—ญๅˆๆ€ง" #: plugins/repodiff.py:45 msgid "List differences between two sets of repositories" @@ -2488,7 +3086,7 @@ index 151441d..27645c4 100644 #: plugins/repodiff.py:190 msgid "Obsoleted by : {}" -msgstr "" -+msgstr "่ฟ‡ๆœŸไบŽ : {}" ++msgstr "่ขซไธ‹่ฟฐ่ฝฏไปถๅŒ…ๅผƒ็”จ๏ผš{}" #: plugins/repodiff.py:195 msgid "" @@ -2579,7 +3177,7 @@ index 151441d..27645c4 100644 #: plugins/repograph.py:50 msgid "Output a full package dependency graph in dot format" -@@ -891,84 +1043,96 @@ msgstr "่ฆไฟ็•™็š„ๆœ€ๆ–ฐ็š„ N ไธช่ฝฏไปถๅŒ… - ้ป˜่ฎคๅ€ผไธบ 1" +@@ -891,84 +1044,96 @@ msgstr "่ฆไฟ็•™็š„ๆœ€ๆ–ฐ็š„ N ไธช่ฝฏไปถๅŒ… - ้ป˜่ฎคๅ€ผไธบ 1" msgid "Path to directory" msgstr "ๆŒ‡ๅ‘็›ฎๅฝ•็š„่ทฏๅพ„" @@ -2606,14 +3204,14 @@ index 151441d..27645c4 100644 +#: plugins/reposync.py:68 msgid "download all the metadata." -msgstr "" -+msgstr "ไธ‹่ฝฝๆ‰€ๆœ‰ๅ…ƒๆ•ฐๆฎ" ++msgstr "ไธ‹่ฝฝๆ‰€ๆœ‰ๅ…ƒๆ•ฐๆฎใ€‚" -#: plugins/reposync.py:71 -msgid "download only newest packages per-repo" -msgstr "ๅชไธ‹่ฝฝๆœ€ๆ–ฐ็š„่ฝฏไปถๅŒ… per-repo" +#: plugins/reposync.py:70 +msgid "Remove packages that fail GPG signature checking after downloading" -+msgstr "ไธ‹่ฝฝๅŽๅˆ ้™คๆ— ๆณ•่ฟ›่กŒ GPG ็ญพๅๆฃ€ๆŸฅ็š„่ฝฏไปถๅŒ…" ++msgstr "ไธ‹่ฝฝๅŽๅˆ ้™คๆ— ๆณ•้€š่ฟ‡ GPG ็ญพๅๆฃ€ๆŸฅ็š„่ฝฏไปถๅŒ…" #: plugins/reposync.py:73 -msgid "where to store downloaded repositories" @@ -2644,7 +3242,7 @@ index 151441d..27645c4 100644 #: plugins/reposync.py:82 +msgid "where to store downloaded repositories" -+msgstr "ๅญ˜ๅ‚จไธ‹่ฝฝ็š„ไป“ๅบ“็š„ไฝ็ฝฎ" ++msgstr "ๅœจไฝ•ๅค„ๅญ˜ๅ‚จๅทฒไธ‹่ฝฝ็š„ไป“ๅบ“" + +#: plugins/reposync.py:84 msgid "try to set local timestamps of local files by the one on the server" @@ -2665,7 +3263,7 @@ index 151441d..27645c4 100644 +#: plugins/reposync.py:113 msgid "Can't use --norepopath with multiple repositories" -msgstr "" -+msgstr "ไธ่ƒฝไฝฟ็”จ --norepopath ไธŽๅคšไธชไป“ๅบ“ไธ€่ตทไฝฟ็”จใ€‚" ++msgstr "ไธ่ƒฝๅฐ† --norepopath ไธŽๅคšไธชไป“ๅบ“ไธ€่ตทไฝฟ็”จ" -#: plugins/reposync.py:127 +#: plugins/reposync.py:132 @@ -2678,7 +3276,7 @@ index 151441d..27645c4 100644 +#: plugins/reposync.py:149 msgid "Failed to get mirror for the group file." -msgstr "" -+msgstr "่Žทๅ–็ป„ๆ–‡ไปถ้•œๅƒๅคฑ่ดฅ" ++msgstr "่Žทๅ–็ป„ๆ–‡ไปถ้•œๅƒๅคฑ่ดฅใ€‚" + +#: plugins/reposync.py:168 +msgid "Removing {}: {}" @@ -2710,7 +3308,7 @@ index 151441d..27645c4 100644 #, python-format msgid "comps.xml for repository %s saved" msgstr "ไป“ๅบ“ %s ็š„ comps.xml ๅทฒไฟๅญ˜" -@@ -996,15 +1160,15 @@ msgstr "ๆญฃๅœจๆทปๅŠ ๆŽ’้™ค๏ผš" +@@ -996,15 +1161,15 @@ msgstr "ๆญฃๅœจๆทปๅŠ ๆŽ’้™ค๏ผš" #: plugins/versionlock.py:36 msgid "Package already locked in equivalent form:" @@ -2729,7 +3327,7 @@ index 151441d..27645c4 100644 #: plugins/versionlock.py:39 msgid "Deleting versionlock for:" -@@ -1036,7 +1200,7 @@ msgstr "ๆŽงๅˆถ่ฝฏไปถๅŒ…็‰ˆๆœฌ้”" +@@ -1036,7 +1201,7 @@ msgstr "ๆŽงๅˆถ่ฝฏไปถๅŒ…็‰ˆๆœฌ้”" #: plugins/versionlock.py:136 msgid "Use package specifications as they are, do not try to parse them" @@ -2739,5 +3337,5 @@ index 151441d..27645c4 100644 #~ msgid "" #~ "\n" -- -2.29.2 +2.31.1 diff --git a/SPECS/dnf-plugins-core.spec b/SPECS/dnf-plugins-core.spec index 5fa1aa9..393a80b 100644 --- a/SPECS/dnf-plugins-core.spec +++ b/SPECS/dnf-plugins-core.spec @@ -6,6 +6,8 @@ %global yum_utils_subpackage_name yum-utils %endif +%define __cmake_in_source_build 1 + %if 0%{?rhel} && 0%{?rhel} <= 7 %bcond_with python3 %else @@ -31,16 +33,17 @@ %endif Name: dnf-plugins-core -Version: 4.0.18 -Release: 4%{?dist} +Version: 4.0.21 +Release: 3%{?dist} Summary: Core Plugins for DNF License: GPLv2+ URL: https://github.com/rpm-software-management/dnf-plugins-core Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz -Patch1: 0001-groups-manager-Re-introduce-yum-groups-manager-funct.patch -Patch2: 0002-needs-restarting-add-s-to-list-services-RhBug-177293.patch -Patch3: 0003-reposync-Check-GPG-signatures-of-downloaded-packages-RhBug-1856818.patch +Patch1: 0001-versionlock-Do-not-exclude-locked-obsoleters-RhBug1957280.patch +Patch2: 0002-repomanage-Allow-running-only-with-metadata.patch +Patch3: 0003-repomanage-Enhance-repomanage-documentation-RhBug1898293.patch Patch4: 0004-Update-translations.patch + BuildArch: noarch BuildRequires: cmake BuildRequires: gettext @@ -102,10 +105,8 @@ Summary: Core Plugins for DNF BuildRequires: python2-dnf >= %{dnf_lowest_compatible} %if 0%{?rhel} && 0%{?rhel} <= 7 BuildRequires: dbus-python -BuildRequires: python-nose %else BuildRequires: python2-dbus -BuildRequires: python2-nose %endif BuildRequires: python2-devel %if 0%{?fedora} @@ -148,7 +149,6 @@ Summary: Core Plugins for DNF BuildRequires: python3-dbus BuildRequires: python3-devel BuildRequires: python3-dnf >= %{dnf_lowest_compatible} -BuildRequires: python3-nose %if 0%{?fedora} Requires: python3-distro %endif @@ -479,10 +479,14 @@ ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/ %check %if %{with python2} -PYTHONPATH=./plugins nosetests-%{python2_version} -s tests/ + pushd build-py2 + ctest -VV + popd %endif %if %{with python3} -PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/ + pushd build-py3 + ctest -VV + popd %endif %files @@ -762,8 +766,22 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/ %endif %changelog -* Mon Mar 8 2021 Marek Blaha - 4.0.18-4 -- Update translations (RhBug:1899687) +* Mon Sep 13 2021 Marek Blaha - 4.0.21-3 +- Translations update (RhBug:1961633) + +* Tue Jul 27 2021 Pavla Kratochvilova - 4.0.21-2 +- [versionlock] Locking obsoleted package does not make the obsoleter unavailable (RhBug:1957280) +- [repomanage] Allow running with metadata only +- [repomanage] Enhance repomanage documentation (RhBug:1898293) + +* Wed May 19 2021 Pavla Kratochvilova - 4.0.21-1 +- Update to 4.0.21 +- [repomanage] Don't use cached metadata (RhBug:1899852) +- [needs-restarting] fix -r in nspawn containers (RhBug:1913962,1914251) +- doc: add packages to needs-restarting conf +- Set blacklist subcommand as deprecated +- Removed dependency on dnf.yum.misc.Checksum class (RhBug:1935465) +- Bugs fixed (RhBug:1914827,1916782) * Fri Jan 15 2021 Nicola Sella - 4.0.18-3 - [reposync] Check GPG signatures of downloaded packages (RhBug:1856818)