commit 60a1829ab73f8673c032a24d5befa0fc8a3f7308 Author: CentOS Sources Date: Fri Dec 11 06:10:08 2020 +0000 import dnf-plugins-core-4.0.18-2.el8 diff --git a/.dnf-plugins-core.metadata b/.dnf-plugins-core.metadata new file mode 100644 index 0000000..fc3009b --- /dev/null +++ b/.dnf-plugins-core.metadata @@ -0,0 +1 @@ +3b8638dec2cb91a13241106b9a57114ed037d2ca SOURCES/dnf-plugins-core-4.0.18.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dae8243 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/dnf-plugins-core-4.0.18.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 new file mode 100644 index 0000000..ddebf40 --- /dev/null +++ b/SOURCES/0001-groups-manager-Re-introduce-yum-groups-manager-funct.patch @@ -0,0 +1,653 @@ +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/0002-needs-restarting-add-s-to-list-services-RhBug-177293.patch b/SOURCES/0002-needs-restarting-add-s-to-list-services-RhBug-177293.patch new file mode 100644 index 0000000..b832730 --- /dev/null +++ b/SOURCES/0002-needs-restarting-add-s-to-list-services-RhBug-177293.patch @@ -0,0 +1,138 @@ +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/SPECS/dnf-plugins-core.spec b/SPECS/dnf-plugins-core.spec new file mode 100644 index 0000000..d2ed2c9 --- /dev/null +++ b/SPECS/dnf-plugins-core.spec @@ -0,0 +1,1536 @@ +%{?!dnf_lowest_compatible: %global dnf_lowest_compatible 4.2.22} +%global dnf_plugins_extra 2.0.0 +%global hawkey_version 0.46.1 +%global yum_utils_subpackage_name dnf-utils +%if 0%{?rhel} > 7 +%global yum_utils_subpackage_name yum-utils +%endif + +%if 0%{?rhel} && 0%{?rhel} <= 7 +%bcond_with python3 +%else +%bcond_without python3 +%endif + +%if 0%{?rhel} > 7 || 0%{?fedora} > 29 +%bcond_with python2 +%else +%bcond_without python2 +%endif + +%if 0%{?rhel} > 7 || 0%{?fedora} > 30 +%bcond_without yumcompatibility +%else +%bcond_with yumcompatibility +%endif + +%if 0%{?rhel} && 0%{?rhel} <= 7 +%bcond_with yumutils +%else +%bcond_without yumutils +%endif + +Name: dnf-plugins-core +Version: 4.0.18 +Release: 2%{?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 +BuildArch: noarch +BuildRequires: cmake +BuildRequires: gettext +# Documentation +%if %{with python3} +BuildRequires: %{_bindir}/sphinx-build-3 +Requires: python3-%{name} = %{version}-%{release} +%else +BuildRequires: %{_bindir}/sphinx-build +Requires: python2-%{name} = %{version}-%{release} +%endif +Provides: dnf-command(builddep) +Provides: dnf-command(changelog) +Provides: dnf-command(config-manager) +Provides: dnf-command(copr) +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) +Provides: dnf-command(reposync) +Provides: dnf-command(repodiff) +Provides: dnf-plugins-extras-debug = %{version}-%{release} +Provides: dnf-plugins-extras-repoclosure = %{version}-%{release} +Provides: dnf-plugins-extras-repograph = %{version}-%{release} +Provides: dnf-plugins-extras-repomanage = %{version}-%{release} +Provides: dnf-plugin-builddep = %{version}-%{release} +Provides: dnf-plugin-config-manager = %{version}-%{release} +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} +Provides: dnf-plugin-repomanage = %{version}-%{release} +Provides: dnf-plugin-reposync = %{version}-%{release} +%if %{with yumcompatibility} +Provides: yum-plugin-copr = %{version}-%{release} +Provides: yum-plugin-changelog = %{version}-%{release} +Provides: yum-plugin-auto-update-debug-info = %{version}-%{release} +%endif +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, groups-manager, needs-restarting, repoclosure, +repograph, repomanage, reposync, changelog and repodiff commands. Additionally +provides generate_completion_cache passive plugin. + +%if %{with python2} +%package -n python2-%{name} +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 +%if 0%{?fedora} +Requires: python2-distro +%endif +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} +Provides: python2-dnf-plugins-extras-repoclosure = %{version}-%{release} +Provides: python2-dnf-plugins-extras-repograph = %{version}-%{release} +Provides: python2-dnf-plugins-extras-repomanage = %{version}-%{release} +Obsoletes: python2-dnf-plugins-extras-debug < %{dnf_plugins_extra} +Obsoletes: python2-dnf-plugins-extras-repoclosure < %{dnf_plugins_extra} +Obsoletes: python2-dnf-plugins-extras-repograph < %{dnf_plugins_extra} +Obsoletes: python2-dnf-plugins-extras-repomanage < %{dnf_plugins_extra} + +Conflicts: %{name} <= 0.1.5 +# let the both python plugin versions be updated simultaneously +Conflicts: python3-%{name} < %{version}-%{release} +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, groups-manager, needs-restarting, +repoclosure, repograph, repomanage, reposync, changelog and repodiff commands. +Additionally provides generate_completion_cache passive plugin. +%endif + +%if %{with python3} +%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 +Provides: python3-dnf-plugins-extras-debug = %{version}-%{release} +Provides: python3-dnf-plugins-extras-repoclosure = %{version}-%{release} +Provides: python3-dnf-plugins-extras-repograph = %{version}-%{release} +Provides: python3-dnf-plugins-extras-repomanage = %{version}-%{release} +Obsoletes: python3-dnf-plugins-extras-debug < %{dnf_plugins_extra} +Obsoletes: python3-dnf-plugins-extras-repoclosure < %{dnf_plugins_extra} +Obsoletes: python3-dnf-plugins-extras-repograph < %{dnf_plugins_extra} +Obsoletes: python3-dnf-plugins-extras-repomanage < %{dnf_plugins_extra} + +Conflicts: %{name} <= 0.1.5 +# let the both python plugin versions be updated simultaneously +Conflicts: python2-%{name} < %{version}-%{release} +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, groups-manager, needs-restarting, +repoclosure, repograph, repomanage, reposync, changelog and repodiff commands. +Additionally provides generate_completion_cache passive plugin. +%endif + +%if %{with yumutils} +%package -n %{yum_utils_subpackage_name} +%if "%{yum_utils_subpackage_name}" == "dnf-utils" +Conflicts: yum-utils < 1.1.31-520 +%if 0%{?rhel} != 7 +Provides: yum-utils = %{version}-%{release} +%endif +%else +Provides: dnf-utils = %{version}-%{release} +Obsoletes: dnf-utils < %{version}-%{release} +%endif +Requires: dnf >= %{dnf_lowest_compatible} +Requires: %{name} = %{version}-%{release} +%if %{with python3} +Requires: python3-dnf >= %{dnf_lowest_compatible} +%else +Requires: python2-dnf >= %{dnf_lowest_compatible} +%endif +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, +download and yum-groups-manager that use new implementations using DNF. +%endif + +%if 0%{?rhel} == 0 && %{with python2} +%package -n python2-dnf-plugin-leaves +Summary: Leaves Plugin for DNF +Requires: python2-%{name} = %{version}-%{release} +Provides: python2-dnf-plugins-extras-leaves = %{version}-%{release} +%if !%{with python3} +Provides: dnf-command(leaves) +Provides: dnf-plugin-leaves = %{version}-%{release} +Provides: dnf-plugins-extras-leaves = %{version}-%{release} +%endif +Conflicts: dnf-plugins-extras-common-data < %{dnf_plugins_extra} +Conflicts: python3-dnf-plugin-leaves < %{version}-%{release} +Obsoletes: python2-dnf-plugins-extras-leaves < %{dnf_plugins_extra} + +%description -n python2-dnf-plugin-leaves +Leaves Plugin for DNF, Python 2 version. List all installed packages +not required by any other installed package. +%endif + +%if 0%{?rhel} == 0 && %{with python3} +%package -n python3-dnf-plugin-leaves +Summary: Leaves Plugin for DNF +Requires: python3-%{name} = %{version}-%{release} +Provides: python3-dnf-plugins-extras-leaves = %{version}-%{release} +Provides: dnf-command(leaves) +Provides: dnf-plugin-leaves = %{version}-%{release} +Provides: dnf-plugins-extras-leaves = %{version}-%{release} +Conflicts: dnf-plugins-extras-common-data < %{dnf_plugins_extra} +Conflicts: python2-dnf-plugin-leaves < %{version}-%{release} +Obsoletes: python3-dnf-plugins-extras-leaves < %{dnf_plugins_extra} + +%description -n python3-dnf-plugin-leaves +Leaves Plugin for DNF, Python 3 version. List all installed packages +not required by any other installed package. +%endif + +%if 0%{?rhel} == 0 && %{with python2} +%package -n python2-dnf-plugin-local +Summary: Local Plugin for DNF +Requires: %{_bindir}/createrepo_c +Requires: python2-%{name} = %{version}-%{release} +%if !%{with python3} +Provides: dnf-plugin-local = %{version}-%{release} +Provides: dnf-plugins-extras-local = %{version}-%{release} +%endif +Provides: python2-dnf-plugins-extras-local = %{version}-%{release} +Conflicts: dnf-plugins-extras-common-data < %{dnf_plugins_extra} +Conflicts: python3-dnf-plugin-local < %{version}-%{release} +Obsoletes: python2-dnf-plugins-extras-local < %{dnf_plugins_extra} + +%description -n python2-dnf-plugin-local +Local Plugin for DNF, Python 2 version. Automatically copy all downloaded packages to a +repository on the local filesystem and generating repo metadata. +%endif + +%if %{with python3} && 0%{?rhel} == 0 +%package -n python3-dnf-plugin-local +Summary: Local Plugin for DNF +Requires: %{_bindir}/createrepo_c +Requires: python3-%{name} = %{version}-%{release} +Provides: dnf-plugin-local = %{version}-%{release} +Provides: python3-dnf-plugins-extras-local = %{version}-%{release} +Provides: dnf-plugins-extras-local = %{version}-%{release} +Conflicts: dnf-plugins-extras-common-data < %{dnf_plugins_extra} +Conflicts: python2-dnf-plugin-local < %{version}-%{release} +Obsoletes: python3-dnf-plugins-extras-local < %{dnf_plugins_extra} + +%description -n python3-dnf-plugin-local +Local Plugin for DNF, Python 3 version. Automatically copy all downloaded +packages to a repository on the local filesystem and generating repo metadata. +%endif + +%if %{with python2} +%package -n python2-dnf-plugin-migrate +Summary: Migrate Plugin for DNF +Requires: python2-%{name} = %{version}-%{release} +Requires: yum +Provides: dnf-plugin-migrate = %{version}-%{release} +Provides: python2-dnf-plugins-extras-migrate = %{version}-%{release} +Provides: dnf-command(migrate) +Provides: dnf-plugins-extras-migrate = %{version}-%{release} +Conflicts: dnf-plugins-extras-common-data < %{dnf_plugins_extra} +Obsoletes: python2-dnf-plugins-extras-migrate < %{dnf_plugins_extra} +Obsoletes: python-dnf-plugins-extras-migrate < %{dnf_plugins_extra} + +%description -n python2-dnf-plugin-migrate +Migrate Plugin for DNF, Python 2 version. Migrates history, group and yumdb data from yum to dnf. +%endif + +%if %{with python2} +%package -n python2-dnf-plugin-post-transaction-actions +Summary: Post transaction actions Plugin for DNF +Requires: python2-%{name} = %{version}-%{release} +%if !%{with python3} +Provides: dnf-plugin-post-transaction-actions = %{version}-%{release} +%endif +Conflicts: python3-dnf-plugin-post-transaction-actions < %{version}-%{release} + +%description -n python2-dnf-plugin-post-transaction-actions +Post transaction actions Plugin for DNF, Python 2 version. Plugin runs actions +(shell commands) after transaction is completed. Actions are defined in action +files. +%endif + +%if %{with python3} +%package -n python3-dnf-plugin-post-transaction-actions +Summary: Post transaction actions Plugin for DNF +Requires: python3-%{name} = %{version}-%{release} +Provides: dnf-plugin-post-transaction-actions = %{version}-%{release} +Conflicts: python2-dnf-plugin-post-transaction-actions < %{version}-%{release} + +%description -n python3-dnf-plugin-post-transaction-actions +Post transaction actions Plugin for DNF, Python 3 version. Plugin runs actions +(shell commands) after transaction is completed. Actions are defined in action +files. +%endif + +%if 0%{?rhel} == 0 && %{with python2} +%package -n python2-dnf-plugin-show-leaves +Summary: Leaves Plugin for DNF +Requires: python2-%{name} = %{version}-%{release} +Requires: python2-dnf-plugin-leaves = %{version}-%{release} +%if !%{with python3} +Provides: dnf-plugin-show-leaves = %{version}-%{release} +Provides: dnf-command(show-leaves) +Provides: dnf-plugins-extras-show-leaves = %{version}-%{release} +%endif +Provides: python2-dnf-plugins-extras-show-leaves = %{version}-%{release} +Conflicts: dnf-plugins-extras-common-data < %{dnf_plugins_extra} +Conflicts: python3-dnf-plugin-show-leaves < %{version}-%{release} +Obsoletes: python2-dnf-plugins-extras-show-leaves < %{dnf_plugins_extra} + +%description -n python2-dnf-plugin-show-leaves +Show-leaves Plugin for DNF, Python 2 version. List all installed +packages that are no longer required by any other installed package +after a transaction. +%endif + +%if 0%{?rhel} == 0 && %{with python3} +%package -n python3-dnf-plugin-show-leaves +Summary: Show-leaves Plugin for DNF +Requires: python3-%{name} = %{version}-%{release} +Requires: python3-dnf-plugin-leaves = %{version}-%{release} +Provides: dnf-plugin-show-leaves = %{version}-%{release} +Provides: python3-dnf-plugins-extras-show-leaves = %{version}-%{release} +Provides: dnf-command(show-leaves) +Provides: dnf-plugins-extras-show-leaves = %{version}-%{release} +Conflicts: dnf-plugins-extras-common-data < %{dnf_plugins_extra} +Conflicts: python2-dnf-plugin-show-leaves < %{version}-%{release} +Obsoletes: python3-dnf-plugins-extras-show-leaves < %{dnf_plugins_extra} + +%description -n python3-dnf-plugin-show-leaves +Show-leaves Plugin for DNF, Python 3 version. List all installed +packages that are no longer required by any other installed package +after a transaction. +%endif + +%if %{with python2} +%package -n python2-dnf-plugin-versionlock +Summary: Version Lock Plugin for DNF +Requires: python2-%{name} = %{version}-%{release} +%if !%{with python3} +Provides: dnf-plugin-versionlock = %{version}-%{release} +Provides: dnf-command(versionlock) +Provides: dnf-plugins-extras-versionlock = %{version}-%{release} +%if %{with yumcompatibility} +Provides: yum-plugin-versionlock = %{version}-%{release} +%endif +%endif +Provides: python2-dnf-plugins-extras-versionlock = %{version}-%{release} +Conflicts: dnf-plugins-extras-common-data < %{dnf_plugins_extra} +Conflicts: python3-dnf-plugin-versionlock < %{version}-%{release} +Obsoletes: python2-dnf-plugins-extras-versionlock < %{dnf_plugins_extra} + +%description -n python2-dnf-plugin-versionlock +Version lock plugin takes a set of name/versions for packages and excludes all other +versions of those packages. This allows you to e.g. protect packages from being +updated by newer versions. +%endif + +%if %{with python3} +%package -n python3-dnf-plugin-versionlock +Summary: Version Lock Plugin for DNF +Requires: python3-%{name} = %{version}-%{release} +Provides: dnf-plugin-versionlock = %{version}-%{release} +Provides: python3-dnf-plugins-extras-versionlock = %{version}-%{release} +Provides: dnf-command(versionlock) +%if %{with yumcompatibility} +Provides: yum-plugin-versionlock = %{version}-%{release} +%endif +Provides: dnf-plugins-extras-versionlock = %{version}-%{release} +Conflicts: dnf-plugins-extras-common-data < %{dnf_plugins_extra} +Conflicts: python2-dnf-plugin-versionlock < %{version}-%{release} +Obsoletes: python3-dnf-plugins-extras-versionlock < %{dnf_plugins_extra} + +%description -n python3-dnf-plugin-versionlock +Version lock plugin takes a set of name/versions for packages and excludes all other +versions of those packages. This allows you to e.g. protect packages from being +updated by newer versions. +%endif + +%prep +%autosetup -p1 +%if %{with python2} +mkdir build-py2 +%endif +%if %{with python3} +mkdir build-py3 +%endif + +%build +%if %{with python2} +pushd build-py2 + %cmake ../ -DPYTHON_DESIRED:FILEPATH=%{__python2} -DWITHOUT_LOCAL:str=0%{?rhel} + %make_build + make doc-man +popd +%endif +%if %{with python3} +pushd build-py3 + %cmake ../ -DPYTHON_DESIRED:FILEPATH=%{__python3} -DWITHOUT_LOCAL:str=0%{?rhel} + %make_build + make doc-man +popd +%endif + +%install +%if %{with python2} +pushd build-py2 + %make_install +popd +%endif +%if %{with python3} +pushd build-py3 + %make_install +popd +%endif +%find_lang %{name} +%if %{with yumutils} + %if %{with python3} + mv %{buildroot}%{_libexecdir}/dnf-utils-3 %{buildroot}%{_libexecdir}/dnf-utils + %else + mv %{buildroot}%{_libexecdir}/dnf-utils-2 %{buildroot}%{_libexecdir}/dnf-utils + %endif +%endif +rm -vf %{buildroot}%{_libexecdir}/dnf-utils-* + +%if %{with yumutils} +mkdir -p %{buildroot}%{_bindir} +ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/debuginfo-install +ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/needs-restarting +ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/find-repos-of-install +ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/repo-graph +ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/package-cleanup +ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/repoclosure +ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/repodiff +ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/repomanage +ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/repoquery +ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/reposync +ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/repotrack +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. +ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/man1/find-repos-of-install.1.gz +ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/man1/repoquery.1.gz +ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/man1/repotrack.1.gz +%endif + +%check +%if %{with python2} +PYTHONPATH=./plugins nosetests-%{python2_version} -s tests/ +%endif +%if %{with python3} +PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/ +%endif + +%files +%{_mandir}/man8/dnf-builddep.* +%{_mandir}/man8/dnf-changelog.* +%{_mandir}/man8/dnf-config-manager.* +%{_mandir}/man8/dnf-copr.* +%{_mandir}/man8/dnf-debug.* +%{_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.* +%{_mandir}/man8/dnf-repograph.* +%{_mandir}/man8/dnf-repomanage.* +%{_mandir}/man8/dnf-reposync.* +%if %{with yumcompatibility} +%{_mandir}/man1/yum-changelog.* +%{_mandir}/man8/yum-copr.* +%else +%exclude %{_mandir}/man1/yum-changelog.* +%exclude %{_mandir}/man8/yum-copr.* +%endif + +%if %{with python2} +%files -n python2-%{name} -f %{name}.lang +%license COPYING +%doc AUTHORS README.rst +%ghost %attr(644,-,-) %{_var}/cache/dnf/packages.db +%config(noreplace) %{_sysconfdir}/dnf/plugins/copr.conf +%config(noreplace) %{_sysconfdir}/dnf/plugins/copr.d +%config(noreplace) %{_sysconfdir}/dnf/plugins/debuginfo-install.conf +%{python2_sitelib}/dnf-plugins/builddep.* +%{python2_sitelib}/dnf-plugins/changelog.* +%{python2_sitelib}/dnf-plugins/config_manager.* +%{python2_sitelib}/dnf-plugins/copr.* +%{python2_sitelib}/dnf-plugins/debug.* +%{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.* +%{python2_sitelib}/dnf-plugins/repograph.* +%{python2_sitelib}/dnf-plugins/repomanage.* +%{python2_sitelib}/dnf-plugins/reposync.* +%{python2_sitelib}/dnfpluginscore/ +%endif + +%if %{with python3} +%files -n python3-%{name} -f %{name}.lang +%license COPYING +%doc AUTHORS README.rst +%ghost %attr(644,-,-) %{_var}/cache/dnf/packages.db +%config(noreplace) %{_sysconfdir}/dnf/plugins/copr.conf +%config(noreplace) %{_sysconfdir}/dnf/plugins/copr.d +%config(noreplace) %{_sysconfdir}/dnf/plugins/debuginfo-install.conf +%{python3_sitelib}/dnf-plugins/builddep.py +%{python3_sitelib}/dnf-plugins/changelog.py +%{python3_sitelib}/dnf-plugins/config_manager.py +%{python3_sitelib}/dnf-plugins/copr.py +%{python3_sitelib}/dnf-plugins/debug.py +%{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 +%{python3_sitelib}/dnf-plugins/repograph.py +%{python3_sitelib}/dnf-plugins/repomanage.py +%{python3_sitelib}/dnf-plugins/reposync.py +%{python3_sitelib}/dnf-plugins/__pycache__/builddep.* +%{python3_sitelib}/dnf-plugins/__pycache__/changelog.* +%{python3_sitelib}/dnf-plugins/__pycache__/config_manager.* +%{python3_sitelib}/dnf-plugins/__pycache__/copr.* +%{python3_sitelib}/dnf-plugins/__pycache__/debug.* +%{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.* +%{python3_sitelib}/dnf-plugins/__pycache__/repograph.* +%{python3_sitelib}/dnf-plugins/__pycache__/repomanage.* +%{python3_sitelib}/dnf-plugins/__pycache__/reposync.* +%{python3_sitelib}/dnfpluginscore/ +%endif + +%if %{with yumutils} +%files -n %{yum_utils_subpackage_name} +%{_libexecdir}/dnf-utils +%{_bindir}/debuginfo-install +%{_bindir}/needs-restarting +%{_bindir}/find-repos-of-install +%{_bindir}/package-cleanup +%{_bindir}/repo-graph +%{_bindir}/repoclosure +%{_bindir}/repodiff +%{_bindir}/repomanage +%{_bindir}/repoquery +%{_bindir}/reposync +%{_bindir}/repotrack +%{_bindir}/yum-builddep +%{_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.* +%{_mandir}/man1/repo-graph.* +%{_mandir}/man1/repoclosure.* +%{_mandir}/man1/repodiff.* +%{_mandir}/man1/repomanage.* +%{_mandir}/man1/reposync.* +%{_mandir}/man1/yum-builddep.* +%{_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.* +%{_mandir}/man1/yum-utils.* +# These are only built with yumutils bcond. +%{_mandir}/man1/find-repos-of-install.* +%{_mandir}/man1/repoquery.* +%{_mandir}/man1/repotrack.* +%else +# These are built regardless of yumutils bcond so we need to exclude them. +%exclude %{_mandir}/man1/debuginfo-install.* +%exclude %{_mandir}/man1/needs-restarting.* +%exclude %{_mandir}/man1/repo-graph.* +%exclude %{_mandir}/man1/repoclosure.* +%exclude %{_mandir}/man1/repodiff.* +%exclude %{_mandir}/man1/repomanage.* +%exclude %{_mandir}/man1/reposync.* +%exclude %{_mandir}/man1/yum-builddep.* +%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.* +%exclude %{_mandir}/man1/yum-utils.* +%endif + +%if 0%{?rhel} == 0 + +%if %{with python2} +%files -n python2-dnf-plugin-leaves +%{python2_sitelib}/dnf-plugins/leaves.* +%{_mandir}/man8/dnf-leaves.* +%endif + +%if %{with python3} +%files -n python3-dnf-plugin-leaves +%{python3_sitelib}/dnf-plugins/leaves.* +%{python3_sitelib}/dnf-plugins/__pycache__/leaves.* +%{_mandir}/man8/dnf-leaves.* +%endif + +%else +%exclude %{_mandir}/man8/dnf-leaves.* +%if %{with python2} +%exclude %{python2_sitelib}/dnf-plugins/leaves.* +%endif +%if %{with python3} +%exclude %{python3_sitelib}/dnf-plugins/leaves.* +%exclude %{python3_sitelib}/dnf-plugins/__pycache__/leaves.* +%endif +%endif +# endif 0%%{?rhel} == 0 + +%if 0%{?rhel} == 0 && %{with python2} +%files -n python2-dnf-plugin-local +%config(noreplace) %{_sysconfdir}/dnf/plugins/local.conf +%{python2_sitelib}/dnf-plugins/local.* +%{_mandir}/man8/dnf-local.* +%endif + +%if %{with python3} && 0%{?rhel} == 0 +%files -n python3-dnf-plugin-local +%config(noreplace) %{_sysconfdir}/dnf/plugins/local.conf +%{python3_sitelib}/dnf-plugins/local.* +%{python3_sitelib}/dnf-plugins/__pycache__/local.* +%{_mandir}/man8/dnf-local.* +%endif + +%if %{with python2} +%files -n python2-dnf-plugin-migrate +%{python2_sitelib}/dnf-plugins/migrate.* +%{_mandir}/man8/dnf-migrate.* +%else +%exclude %{_mandir}/man8/dnf-migrate.* +%endif + +%if %{with python2} +%files -n python2-dnf-plugin-post-transaction-actions +%config(noreplace) %{_sysconfdir}/dnf/plugins/post-transaction-actions.conf +%config(noreplace) %{_sysconfdir}/dnf/plugins/post-transaction-actions.d +%{python2_sitelib}/dnf-plugins/post-transaction-actions.* +%{_mandir}/man8/dnf-post-transaction-actions.* +%endif + +%if %{with python3} +%files -n python3-dnf-plugin-post-transaction-actions +%config(noreplace) %{_sysconfdir}/dnf/plugins/post-transaction-actions.conf +%config(noreplace) %{_sysconfdir}/dnf/plugins/post-transaction-actions.d +%{python3_sitelib}/dnf-plugins/post-transaction-actions.* +%{python3_sitelib}/dnf-plugins/__pycache__/post-transaction-actions.* +%{_mandir}/man8/dnf-post-transaction-actions.* +%endif + +%if 0%{?rhel} == 0 + +%if %{with python2} +%files -n python2-dnf-plugin-show-leaves +%{python2_sitelib}/dnf-plugins/show_leaves.* +%{_mandir}/man8/dnf-show-leaves.* +%endif + +%if %{with python3} +%files -n python3-dnf-plugin-show-leaves +%{python3_sitelib}/dnf-plugins/show_leaves.* +%{python3_sitelib}/dnf-plugins/__pycache__/show_leaves.* +%{_mandir}/man8/dnf-show-leaves.* +%endif + +%else +%exclude %{_mandir}/man8/dnf-show-leaves.* +%if %{with python2} +%exclude %{python2_sitelib}/dnf-plugins/show_leaves.* +%endif +%if %{with python3} +%exclude %{python3_sitelib}/dnf-plugins/show_leaves.* +%exclude %{python3_sitelib}/dnf-plugins/__pycache__/show_leaves.* +%endif +%endif +# endif 0%%{?rhel} == 0 + +%if %{with python2} +%files -n python2-dnf-plugin-versionlock +%config(noreplace) %{_sysconfdir}/dnf/plugins/versionlock.conf +%config(noreplace) %{_sysconfdir}/dnf/plugins/versionlock.list +%{python2_sitelib}/dnf-plugins/versionlock.* +%{_mandir}/man8/dnf-versionlock.* +%if %{with yumcompatibility} +%{_mandir}/man8/yum-versionlock.* +%{_mandir}/man5/yum-versionlock.* +%else +%exclude %{_mandir}/man8/yum-versionlock.* +%exclude %{_mandir}/man5/yum-versionlock.* +%endif +%endif + +%if %{with python3} +%files -n python3-dnf-plugin-versionlock +%config(noreplace) %{_sysconfdir}/dnf/plugins/versionlock.conf +%config(noreplace) %{_sysconfdir}/dnf/plugins/versionlock.list +%{python3_sitelib}/dnf-plugins/versionlock.* +%{python3_sitelib}/dnf-plugins/__pycache__/versionlock.* +%{_mandir}/man8/dnf-versionlock.* +%if %{with yumcompatibility} +%{_mandir}/man8/yum-versionlock.* +%{_mandir}/man5/yum-versionlock.* +%else +%exclude %{_mandir}/man8/yum-versionlock.* +%exclude %{_mandir}/man5/yum-versionlock.* +%endif +%endif + +%changelog +* Tue Dec 8 2020 Marek Blaha - 4.0.18-2 +- Introduce groups-manager plugin (RhBug:1826016) +- [needs-restarting] add -s to list services (RhBug:1772939) + +* Tue Nov 10 2020 Nicola Sella - 4.0.18-1 +- Update to 4.0.18 +- [needs-restarting] Fix plugin fail if needs-restarting.d does not exist +- [needs-restarting] add kernel-rt to reboot list +- Fix debug-restore command +- [config-manager] enable/disable comma separated pkgs (RhBug:1830530) +- [debug] Use standard demands.resolving for transaction handling +- [debug] Do not remove install-only packages (RhBug:1844533) +- return error when dnf download failed +- README: Reference Fedora Weblate instead of Zanata +- [reposync] Add latest NEVRAs per stream to download (RhBug: 1833074) +- copr: don't try to list runtime dependencies + +* Wed Aug 05 2020 Nicola Sella - 4.0.17-5 +- [reposync] Add latest NEVRAs per stream to download (RhBug: 1833074) + +* Tue Jul 28 2020 Marek Blaha - 4.0.17-4 +- Debug-restore command do not remove installonly packages (RhBug:1844533) +- Update translations (RhBug:1820546) + +* Fri Jul 17 2020 Nicola Sella - 4.0.17-3 +- Fix debug-restore command (RhBug:1844533) + +* Thu Jun 11 2020 Nicola Sella - 4.0.17-2 +- [needs-restarting] Fix plugin fail if needs-restarting.d does not exist + +* Wed Jun 10 2020 Nicola Sella - 4.0.17-1 +- [repomanage] Add modular support (RhBug:1804720) +- [needs-restarting] add options using .conf file (RhBug:1810123) + +* Wed Jun 03 2020 Nicola Sella - 4.0.16-1 +- Update to 4.0.16 +- [versionlock] Take obsoletes into account (RhBug:1627124) +- Move args "--set-enabled", "--set-disabled" from DNF (RhBug:1727882) +- Add missing arguments --set-enabled/--set-diabled into error message +- Warn when --enablerepo/--disablerepo args were passed (RhBug:1727882) +- [copr] add support for enabling/disabling runtime dependencies +- [copr] no-liability text to be always printed + +* Mon Apr 06 2020 Ales Matej - 4.0.15-1 +- Update to 4.0.15 +- Fix: config_manager respect config file location during save +- Fix conflict for dnf download --resolve (RhBug:1787908) +- Fix: don't open stdin if versionlock is missing (RhBug:1785563) +- config-manager calls parser error when without options (RhBug:1782822) +- Update reposync.py with --norepopath option +- Support remote files in dnf builddep +- [versionlock] Prevent conflicting/duplicate entries (RhBug:1782052) +- [download] Respect repo priority (RhBug:1800342) +- [doc] Skip creating and installing migrate documentation for Python 3+ + +* Fri Jan 31 2020 Marek Blaha - 4.0.12-3 +- [translations] Update translations from zanata (RhBug:1754960) + +* Mon Jan 13 2020 Ales Matej - 4.0.12-2 +- [config-manager] Allow use of --set-enabled without arguments (RhBug:1679213) +- [reposync] Fix --delete with multiple repos (RhBug:1774103) +- Redesign reposync --latest for modular system (RhBug:1775434) + +* Mon Nov 25 2019 Ales Matej - 4.0.12-1 +- Update to 4.0.12 +- [reposync] Add --urls option (RhBug:1686602) +- [versionlock] Add --raw option (RhBug:1645564) +- [doc] move manpages for plugins to "dnf-PLUGIN" (RhBug:1706386) +- Add new plugin post-transaction-actions (RhBug:967264) +- [builddep] Add --skip-unavailable switch (RhBug:1628634) +- [versionlock] Don't apply excludes on @System (RhBug:1726712) +- [reposync] Ignore only modular excludes (RhBug:1750273) + +* Thu Nov 14 2019 Ales Matej - 4.0.11-1 +- Update to 4.0.11 +- [spec] Specify attributes for ghost file (RhBug:1754463) +- download: add the --debugsource option (RhBug:1637008) +- Fix incorrect handling richdeps in buildep (RhBug:1756902) + +* Tue Oct 22 2019 Ales Matej - 4.0.10-1 +- Update to 4.0.10 +- debuginfo-install: Update both debuginfo and debugsource for updated package (RhBug:1586084) +- copr: Support multilib repofiles (RhBug:1393664) +- copr: Fix disable if copr instance has non-default port +- copr: Fix repoid when using subdirectories in copr project + +* Wed Aug 14 2019 Pavla Kratochvilova - 4.0.8-3 +- Generate yum-utils(1) instead of symlinking (RhBug:1676418) + +* Tue Aug 06 2019 Pavla Kratochvilova - 4.0.8-2 +- Update localizations from zanata (RhBug:1689984) +- Rename dnf-utils to yum-utils (RhBug:1722093) +- [builddep] Report all rpm errors (RhBug:1724668) +- [config-manager] Behaviour of --setopt (RhBug:1702678) + +* Tue Jun 11 2019 Pavla Kratochvilova - 4.0.8-1 +- Update to 4.0.8 +- [reposync] Enable timestamp preserving for downloaded data (RhBug:1688537) +- [reposync] Download packages from all streams (RhBug:1714788) +- Make yum-copr manpage available (RhBug:1673902) +- [needs-restarting] Add --reboothint option (RhBug:1192946) (RhBug:1639468) +- Set the cost of ``_dnf_local`` repo to 500, to make it preferred to normal + repos + +* Mon May 13 2019 Pavla Kratochvilova - 4.0.7-1 +- Update to 4.0.7 +- Use improved config parser that preserves order of data +- Fix: copr disable command traceback (RhBug:1693551) +- [doc] state repoid as repo identifier of config-manager (RhBug:1686779) +- [leaves] Show multiply satisfied dependencies as leaves +- [download] Fix downloading an rpm from a URL (RhBug:1678582) +- [download] Do not download src without ``--source`` (RhBug:1666648) +- [download] Fix problem with downloading src pkgs (RhBug:1649627) +- [download] Fix download of src when not the latest requested (RhBug:1649627) + +* Tue Jan 08 2019 Daniel Mach - 4.0.2.2-3 +- reposync: fix-up path traversal prevention (RhBug: 1600722) + +* Fri Jan 04 2019 Jaroslav Mracek - 4.0.2.2-1 +- Add option for reposync +- Add changelog plugin + +* Mon Dec 17 2018 Daniel Mach - 4.0.2.1-1 +- zanata update +- Attribute repo.metadata._comps_fn does not exist anymore +- [download] Fix traceback when local rpm / url is passed +- Run transaction hook only if transaction +- [versionlock] Accept more NEVRA forms in the deletion code (RhBug:1654529) +- [spec] Obsolete yum-utils < 1.1.31-513 (RhBug: 1579322) + +* Fri Nov 23 2018 Jaroslav Mracek - 4.0.2-1 +- Added repodif command +- copr: fix enabling Rawhide repository +- Add needs-restarting CLI shim +- [reposync] Fix traceback with --quiet option +- [versionlock] Accept more pkgspec forms + +* Mon Oct 15 2018 Jaroslav Mracek - 4.0.0-1 +- Update to 4.0.0 +- Enhance documentation +- [repoclosure] check every --pkg attribute separately +- [repoclosure] Now accepts nevra as a argument of --pkg option +- [reposync] enhancements (RhBug:1550063,1582152,1550064,1405789,1598068) +- package-cleanup: remove --oldkernels +- Download only packages with unique NEVRAs (RhBug:1612874) + +* Tue Sep 25 2018 Jaroslav Mracek - 3.0.4-1 +- [copr] Huge upgrade of copr plugin +- [spec] Disable building python2 modules on Fedora 30+ +- Add characters into repo URL sanitization (RhBug:1615416) +- copr: add support for multiple copr instances (RhBug:1478208) +- Redirect repo progress to std error (RhBug:1626011) +- Resolves: rhbz#1578787 - repodiff command not available in dnf-utils + +* Wed Aug 01 2018 Charalampos Stratakis - 3.0.1-3 +- Rebuild for platform-python + +* Fri Jun 29 2018 Jaroslav Mracek 3.0.1-2 +- Rebuilt for Python 3.7 + +* Tue Jun 26 2018 Jaroslav Mracek 3.0.1-1 +- Enhanced documentation +- Resolves: rhbz#1576594 +- Resolves: rhbz#1530081 +- Resolves: rhbz#1547897 +- Resolves: rhbz#1550006 +- Resolves: rhbz#1431491 +- Resolves: rhbz#1516857 +- Resolves: rhbz#1499623 +- Resolves: rhbz#1489724 + +* Mon Jun 18 2018 Miro Hrončok - 2.1.5-5 +- Rebuilt for Python 3.7 + +* Sat Feb 10 2018 Igor Gnatenko - 2.1.5-4 +- Conflict with any yum-utils + +* Fri Feb 09 2018 Igor Gnatenko - 2.1.5-3 +- Escape macros in %%changelog + +* Wed Feb 07 2018 Fedora Release Engineering - 2.1.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Fri Oct 06 2017 Igor Gnatenko - 2.1.5-1 +- Fix download command (RHBZ #1498426) + +* Mon Oct 02 2017 Jaroslav Mracek 2.1.4-1 +- Added four new options for ``list`` subcommand of ``copr`` plugin +- Resolves: rhbz#1476834 - [abrt] dnf: arch(): config.py:908:arch:TypeError: unhashable type: 'list' + +* Wed Jul 26 2017 Fedora Release Engineering - 2.1.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon Jul 24 2017 Jaroslav Mracek 2.1.3-1 +- Solve conflict with migrate plugin (RhBug:1470843) (Jaroslav Mracek) +- Move copying to dnf (RhBug:1279001) (Ondřej Sojka) +- Return 1 if dnf config-manager --add-repo fails (RhBug:1439514) (Jaroslav + Mracek) +- bump minimal dnf version to 2.6.0 (Igor Gnatenko) +- trivial: remove whitespace at end of line (Igor Gnatenko) + +* Sun Jul 02 2017 Igor Gnatenko - 2.1.2-2 +- Fix crash in COPR plugin + +* Sat Jul 01 2017 Igor Gnatenko - 2.1.2-1 +- debuginfo-install: install only requested packages +- Unify user confirmation in copr with dnf itself + +* Mon Jun 12 2017 Jaroslav Mracek 2.1.1-1 +- bump version to 2.1.1 + update release notes (Jaroslav Mracek) +- Enhance versionlock documentation (Jaroslav Mracek) +- Fix typos in args.ingex to args.index (RhBug:1458446) (Jaroslav Mracek) +- dont run versionlock on non-transactional operations (Jan Silhan) + +* Mon May 22 2017 Jaroslav Mracek 2.1.0-1 +- bump version to 2.1.0 + update release notes (Jaroslav Mracek) +- Adjust the dnf-utils subpackage to be more accurate (Neal Gompa) +- Add new sub-package dnf-utils (RhBug:1381917) (Jaroslav Mracek) +- Fix two renamed functions by dnf privatization (Jaroslav Mracek) + +* Tue May 02 2017 Jaroslav Mracek 2.0.0-1 +- update release notes (Jaroslav Mracek) +- po: Update translations (Igor Gnatenko) +- Fix incorrect exclude of locked version in versionlock (Jaroslav Mracek) +- po: Update translations (Igor Gnatenko) +- Setup selectively provides for python2 packages (Jaroslav Mracek) +- Build python3 packages only if with_python3 (Jaroslav Mracek) +- Search only according nevra in versionlock (Jaroslav Mracek) +- Solve a problem in performance of versionlock (RhBug:1431493) (Jaroslav + Mracek) +- Repoclosure exit with 1 if unsatisfied dependencies (RhBug:1416782) (Jaroslav + Rohel) +- Not raise an Error if strict=False and --url for download command (Jaroslav + Mracek) +- Check argument if it is a file ending with .rpm (RhBug:1436570) (Jaroslav + Mracek) +- update link to "What I can build in Copr? documentation page (clime) +- po: Update translations (Igor Gnatenko) +- Create dir for local plugin if path not exist (Jaroslav Mracek) +- Correct some PEP8 violations after plugin import (Jaroslav Mracek) +- Add debug into dnf-plugins-core (Jaroslav Mracek) +- Added latest doc changes from plugins-extras upstream (Jaroslav Mracek) +- bump version to 2.0.0 (Jaroslav Mracek) +- Add migrate plugin into dnf-plugins-core (Jaroslav Mracek) +- Add man pages for transfered plugins (Jaroslav Mracek) +- Add provide dnf-plugin-* for each plugin (Jaroslav Mracek) +- Correct some PEP8 violations (Jaroslav Mracek) +- Add local into dnf-plugins-core (Jaroslav Mracek) +- Add leaves and show-leaves into dnf-plugins-core (Jaroslav Mracek) +- Add versionlock into dnf-plugins-core (Jaroslav Mracek) +- Add repograph into dnf-plugins-core (Jaroslav Mracek) +- Add repoclosure into dnf-plugins-core (Jaroslav Mracek) +- Add repomanage into dnf-plugins-core (Jaroslav Mracek) +- Add --archlist option for dnf download command (Jaroslav Mracek) +- Change code that provides package location for download command (Jaroslav + Mracek) +- po: update translations (Igor Gnatenko) +- po: add sv translations (Igor Gnatenko) + +* Tue Mar 21 2017 Igor Gnatenko 1.1.0-1 +- dnf dowload --resolve should download everytime requested packages + (RhBug:1276611) (stepasm) +- builddep: install requirements by provides (RhBug:1332830) (Igor Gnatenko) +- builddep: do not check GPG key of SRPM (RhBug:1431486) (Igor Gnatenko) +- builddep: properly check for nosrc.rpm (Igor Gnatenko) +- po: Update translations (RhBug:1429087) (Igor Gnatenko) +- Remove noroot plugin that was move into dnf itself (Jaroslav Mracek) + +* Mon Feb 20 2017 Jaroslav Mracek 1.0.2-1 +- bump version to 1.0.2 + update release notes (Jaroslav Mracek) +- download: add --urlprotocols option (Dusty Mabe) +- download: add --url cli option (RhBug:1250115) (Dusty Mabe) +- download: refactor download code (Dusty Mabe) +- copr: Tweak wording to be more generic (Neal Gompa) +- Automatic commit of package [dnf-plugins-core] release [1.0.1-1]. (Jaroslav + Mracek) +- bump version to 1.0.1 + update release notes (Jaroslav Mracek) + +* Thu Feb 16 2017 Igor Gnatenko - 1.0.1-2 +- Rebuild due to infra breakage + +* Fri Feb 10 2017 Jaroslav Mracek 1.0.1-1 +- bump version to 1.0.1 + update release notes (Jaroslav Mracek) +- setup SideCI to ignore some PEP8 violations (Jaroslav Mracek) +- spec: define all configs as (noreplace) (Igor Gnatenko) +- spec: include __pycache__ files (Igor Gnatenko) +- builddep: print errors from RPM SPEC parser (Petr Spacek) + +* Fri Feb 10 2017 Fedora Release Engineering - 1.0.0-0.rc1.2.1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Dec 13 2016 Stratakis Charalampos - 1.0.0-0.rc1.2 +- Rebuild for Python 3.6 + +* Thu Sep 29 2016 Michal Luscon 1.0.0-0.rc1.1 +- doc: open rpmspec in utf-8 mode (Igor Gnatenko) +- cls.chroot_config inside _guess_chroot returns None (RhBug: 1361003) (Michael + Goodwin) +- builddep: adjust to new config (dnf-2.0) (Michal Luscon) +- Change minimal required version (Jaroslav Mracek) +- introduced config-manager --dump-variables (RhBug:1360752) (Michael Mraka) +- Fix string puzzle in translatable message (Luigi Toscano) +- Added alias to 'builddep'->'build-dep' (RhBug:1350604) (stepasm) +- reposync should keep packages (RhBug:1325350) (Michael Mraka) +- Change usage of add_remote_rpm according to new API (Jaroslav Mracek) +- Remove lib.py from plugins-core (Jaroslav Mracek) +- Delete repoquery from dnf-plugins-core (Jaroslav Mracek) +- removed protected_packages plugin (Jan Silhan) +- repoquery: add --requires-pre switch (RhBug:1303117) (Michal Luscon) +- spec: bump version to 1.0.0 (Igor Gnatenko) +- Automatic commit of package [dnf-plugins-core] release [0.1.21-2]. (Igor + Gnatenko) +- Automatic commit of package [dnf-plugins-core] release [0.1.21-1]. (Igor + Gnatenko) +- spec: explicitly conflict with python-%%{name} with different version (Igor + Gnatenko) +- updated plugin to read_config() change (RhBug:1193823) (Michael Mraka) +- repoquery: sourcerpm does not contain epoch (RhBug:1335959) (Michael Mraka) +- enforce-api: use api method transaction (Michal Luscon) +- enforce-api: apply changes from Base class (Michal Luscon) +- copr: Read the %%distro_arch macro to determine Mageia chroot arch (Neal + Gompa (ニール・ゴンパ)) +- copr: Remove unnecessary function calls/options and simplify conditional + (Neal Gompa (ニール・ゴンパ)) +- copr: Add Mageia chroot selection support (Neal Gompa (ニール・ゴンパ)) +- copr: Simplify and fix up reading copr chroot config override (Neal Gompa + (ニール・ゴンパ)) +- autoglob feature has been moved to filter() (RhBug:1279538) (Michael Mraka) + +* Fri May 27 2016 Igor Gnatenko 0.1.21-2 +- spec: explicitly conflict with python-%%{name} with different version (Igor + Gnatenko) + +* Thu May 19 2016 Igor Gnatenko 0.1.21-1 +- doc: release notes 0.1.21 (Igor Gnatenko) +- spec: correctly set up requirements for python subpkg (Igor Gnatenko) +- spec: improve python packaging according to new guidelines & compat with EL7 + (Igor Gnatenko) +- tests/support: set priority and cost in RepoStub (Igor Gnatenko) +- repoquery: sourcerpm does not contain epoch (RhBug:1335959) (Michael Mraka) +- enforce-api: use api method transaction (Michal Luscon) +- enforce-api: apply changes from Base class (Michal Luscon) +- copr: Read the %%distro_arch macro to determine Mageia chroot arch (Neal + Gompa (ニール・ゴンパ)) +- copr: Remove unnecessary function calls/options and simplify conditional + (Neal Gompa (ニール・ゴンパ)) +- copr: Add Mageia chroot selection support (Neal Gompa (ニール・ゴンパ)) +- copr: Simplify and fix up reading copr chroot config override (Neal Gompa + (ニール・ゴンパ)) +- zanata update (Jan Silhan) +- Add link for other project documentation pages (Jaroslav Mracek) +- autoglob feature has been moved to filter() (RhBug:1279538) (Michael Mraka) +- support globs in --what (RhBug:1303311) (Michael Mraka) +- repoquery: fix typo (there -> that, and plural form) (Luigi Toscano) +- copr: fix string - singular is required (Luigi Toscano) +- doc: release notes updated to vallid plugins version (Jan Šilhan) + +* Tue Apr 05 2016 Michal Luscon 0.1.20-1 +- doc: release notes 0.1.20 (Igor Gnatenko) +- copr: Properly detect reposdir and add chroot override capability (Neal Gompa + (ニール・ゴンパ)) +- config_manager: Use new API in dnfpluginscore.lib for determining reposdir + (Neal Gompa (ニール・ゴンパ)) +- dnfpluginscore.lib: Add get_reposdir() API function (Neal Gompa (ニール・ゴンパ)) +- Fix typo (Eduardo Mayorga Téllez) + +* Tue Mar 22 2016 Miroslav Suchý 0.1.19-1 +- spec: correct requires on F22 + EPEL (Miroslav Suchý) + +* Tue Mar 22 2016 Miroslav Suchý 0.1.18-1 +- Add myself as contributor in AUTHORS (Neal Gompa (ニール・ゴンパ)) +- copr: copr.fedoraproject.org -> copr.fedorainfracloud.org (Neal Gompa + (ニール・ゴンパ)) +- copr: fix traceback when trying to enable non-existing project (RhBug: + 1304615) (Jakub Kadlčík) +- README: mention translation fixes should be made on Zanata (Jan Šilhan) + +* Thu Feb 25 2016 Michal Luscon 0.1.17-1 +- enable debuginfo repos if autoupdate is on (RhBug:1024701) (Michael Mraka) +- fixed string suffix removal (Michael Mraka) +- install latest debuginfo by default (Michael Mraka) +- Enable strings for translation (RhBug:1302214) (Parag Nemade) + +* Mon Jan 25 2016 Jan Silhan 0.1.16-1 +- zanata update (Jan Silhan) +- AUTHORS: updated (Jan Silhan) +- run noroot in non cli mode (RhBug:1297511) (Jan Silhan) +- Sanitize repos containing a tilde in the URL (François RIGAULT) +- contributor added (clime) +- latest-limit option moved to base set of options making it compatible with + --queryformat and other output formatters (RhBug: 1292475) (clime) +- builddep: do not download source package (Jeff Smith) +- repoquery: keep --autoremove as secret option (Jan Silhan) +- cosmetic: repoquery: remove unused imports (Jan Silhan) +- doc: repoquery: --recent (Jan Silhan) +- doc: renamed autoremove to unneeded and extended docs (Jan Silhan) + +* Fri Dec 18 2015 Michal Luscon 0.1.15-1 +- Make it possible to specify the source package name as parameter in stub + constructor. (Alexander Todorov) +- Add --debuginfo to download (Alexander Todorov) +- resolve local RPMs when downloading. useful with --source (Alexander Todorov) +- spec: ensure python*-dnf-plugins-core versions are the same (RhBug:1283448) + (Jan Silhan) +- reimplemented config file writing (RhBug:1253237) (Michael Mraka) + +* Mon Nov 16 2015 Michal Luscon 0.1.14-1 +- zanata update (Jan Silhan) +- repoquery: do not require loading metadata when we want to query system only + (Jan Silhan) +- repoquery: fix unicode tracebacks (Michal Luscon) +- repoquery: use new methods recent, extras, unneeded (Michal Luscon) +- repoquery: use new api methods duplicated and latest (RhBug:1231572) (Michal + Luscon) +- Exit with non-zero status if strict and package not found (alde) +- Fix cmdline conversion to unicode (RhBug:1265210) (Michal Domonkos) +- Remove extra 'l' in test class name (Alexander Todorov) +- copr: PEP formating (Miroslav Suchý) +- copr: allow to use staging instance of Copr for testing (Miroslav Suchý) +- do not use @ in repoid (RhBug:1280416) (Miroslav Suchý) +- reverts unintentional releaser from e035152 (Jan Silhan) +- don't look for builddeps on source packages (RhBug:1272936) (Michael Mraka) +- Fix hawkey version constraint (Neal Gompa (ニール・ゴンパ)) + +* Wed Oct 14 2015 Jan Silhan 0.1.13-1 +- updated: release notes for 0.1.13 (Jan Silhan) +- Remove kickstart plugin from core plugins (Neal Gompa + (ニール・ゴンパ)) +- read file as utf-8 in Py3 (RhBug:1267808) (Miroslav Suchý) +- playground: check if repo actually exists for our version of OS (Miroslav + Suchý) +- add Catalan (Robert Antoni Buj Gelonch) +- repoquery: Fix UnicodeEncodeError with --info (RhBug:1264125) (Jaroslav + Mracek) +- lookup builddeps in source package for given package name (RhBug:1265622) + (Michael Mraka) +- functions moved to library (Michael Mraka) +- functions to return name of source and debuginfo package (Michael Mraka) +- try -debuginfo first then -debuginfo (RhBug:1159614) (Michael + Mraka) +- Automatic commit of package [dnf-plugins-core] release [0.1.12-2]. (Michal + Luscon) +- doc: release notes 0.1.12 (Michal Luscon) + +* Tue Sep 22 2015 Michal Luscon 0.1.12-2 +- add python2-dnf requirements + +* Tue Sep 22 2015 Michal Luscon 0.1.12-1 +- repoquery: add globbing support to whatrequires/whatprovides. + (RhBug:1249073) (Valentina Mukhamedzhanova) +- needs_restarting: Rewrite a warning message (Wieland Hoffmann) +- Remove extra quotation mark in comment (Alexander Todorov) + +* Tue Sep 01 2015 Michal Luscon 0.1.11-1 +- dnf donwload checks for duplicate packages (rhBug:1250114) (Adam Salih) +- Extend repoquery --arch option. You can now pass multiple archs separated by + commas (RhBug:1186381) (Adam Salih) +- download plugin now prints not valid packages (RhBug:1225784) (Adam Salih) +- correct typo (Adam Salih) +- dnf now accepts more than one key (RhBug:1233728) (Adam Salih) +- description should be print unwrapped (Adam Salih) +- alternative to pkgnarrow (RhBug:1199601) (Adam Salih) +- sort output alphabetically, tree accepts switches --enhances --suggests + --provides --suplements --recommends (RhBug:1156778) (Adam Salih) + +* Mon Aug 10 2015 Jan Silhan 0.1.10-1 +- generate_completion_cache: use list for each insert (fixes regression + introduced in e020c96) (Igor Gnatenko) +- generate_completion_cache: store NEVRA insted of NA (RhBug:1226663) (Igor + Gnatenko) +- repoquery: weak deps queries (RhBug:1184930) (Michal Luscon) +- builddep requires an argument (Michael Mraka) +- disable c++ checks in rpmbuild (Michael Mraka) +- path may contain unicode (RhBug:1234099) (Michael Mraka) +- fail if no package match (RhBug:1241126) (Michael Mraka) +- make --spec and --srpm mutually exclusive (Michael Mraka) +- handle error message in python3 (RhBug:1218299) (Michael Mraka) +- options to recognize spec/srpm files (RhBug:1241135) (Michael Mraka) +- copr: set chmod to rw-r--r-- on repo files (Miroslav Suchý) +- [copr] refactor duplicated lines (Jakub Kadlčík) +- [copr] allow utf-8 user input (RhBug:1244125) (Jakub Kadlčík) +- [copr] fix regression with handling `search` and `list` subcommands (Valentin + Gologuzov) +- [copr] terminate execution when failed to parse project name (Valentin + Gologuzov) +- [copr] unused import (Valentin Gologuzov) +- [copr] subcommand `disable` now only set `enabled=0`, repo file could be + deleted by new subcommand `remove` (Valentin Gologuzov) + +* Wed Jun 24 2015 Michal Luscon 0.1.9-1 +- repoquery: add srpm option (RhBug:1186382) (Vladan Kudlac) +- create repo files readable by users (RhBug:1228693) (Michael Mraka) +- copr: use librepo instead of python-request (Miroslav Suchý) +- --tree now works with --conflicts --obsoletes --requires and --whatrequires + (RhBug:1128424) (RhBug:1186689) (Adam Salih) +- url for copr repos changed (RhBug:1227190) (Miroslav Suchý) +- repoquery: fixed conflicts package format (Adam Salih) +- document that globs can be used in dnf config-manager (Michael Mraka) + + +* Wed Jun 17 2015 Fedora Release Engineering - 0.1.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed May 06 2015 Michal Luscon 0.1.8-1 +- spec: fix an upgrade path from dnf-plugins-core <= 0.1.5 (Radek Holy) + +* Thu Apr 30 2015 Michal Luscon 0.1.7-1 +- doc: release notes dnf-plugins-core-0.1.7 (Michal Luscon) +- spec: fix Conflicts of the new plugins (Radek Holy) +- spec: allow DNF 1.x.x (Radek Holy) +- AUTHORS: filled in missing email address (Jan Silhan) +- download: enabling source repos when desired only (Jan Silhan) +- download: using enable_source_repos from lib (Jan Silhan) +- lib: inform user when enabling disabled repo (Jan Silhan) +- AUTHORS: made 2 categories (Jan Silhan) +- fixed typos and missing demand (Michael Mraka) +- changed warning paragraph (Michael Mraka) +- AUTHORS: updated (Jan Silhan) +- debuginfo-install: don't consider src packages as candidates for installation + (RhBug:1215154) (Lubomir Rintel) +- documentation warning about build deps in srpm (Michael Mraka) +- fixed builddep tests (Michael Mraka) +- builddep: enable source repos only when needed (Michael Mraka) +- fixed builldep documentation (Michael Mraka) +- mark appropriate dnfpluginscore.lib as API (Michael Mraka) +- fixed builddep configure test (Michael Mraka) +- moved enable_{source|debug}_repos() to dnfpluginscore.lib (Michael Mraka) +- builddep: add feature to get builddeps from remote packages (RhBug:1074585) + (Igor Gnatenko) +- doc: repoquery: doesn't print 'No match for argument:...' garbage (Jan + Silhan) +- updated repoquery documentation (Michael Mraka) +- implemented repoquery --latest-limit (Michael Mraka) +- implemented repoquery --unsatisfied (Michael Mraka) +- builddep: Support defining macros for parsing spec files (David Michael) +- removed redundant argument (Michael Mraka) +- doc: update repoquery docs with --resolve (Tim Lauridsen) +- repoquery: add --resolve option (RhBug:1156487) (Tim Lauridsen) +- spec: dnf version upper boundaries (Jan Silhan) +- spec: added plugin command provides (Related:RhBug:1208773) (Jan Silhan) +- make --repo cumulative (Michael Mraka) +- rename --repoid to --repo (Michael Mraka) +- don't delete local repo packages after download (RhBug:1186948) (Michael + Mraka) +- doc: replaced last references pointing to akozumpl (Jan Silhan) + +* Wed Apr 08 2015 Michal Luscon 0.1.6-3 +- doc: release notes 0.1.6 (Michal Luscon) +- initialize to use tito (Michal Luscon) +- prepare repo for tito build system (Michal Luscon) +- migrate raw_input() to Python3 (RhBug:1208399) (Miroslav Suchý) +- require dnf 0.6.5+ which contains duplicated/installonly queries (Michael Mraka) +- implemented --duplicated and --installonly (Michael Mraka) +- create --destdir if not exist (Michael Mraka) +- repoquery: Added -s/--source switch, test case and documentation for querying source rpm name (Parag Nemade) +- repoquery: Added documentation and test case for file switch (Parag Nemade) +- spec: ship man pages in dnf-plugins-core metapackage (Jan Silhan) +- debuginfo-install: support cases where src.rpm name != binary package name (Petr Spacek) +- spec: added empty %%files directive to generate rpm (Jan Silhan) +- spec: adapt to pykickstart f23 package split (Jan Silhan) +- spec: requires >= dnf version not = (Jan Silhan) +- spec: python3 source code by default in f23+ (RhBug:1194725,1198442) (Jan Silhan) +- use dnfpluginscore.lib.urlopen() (RhBug:1193047) (Miroslav Suchý) +- implemented functionality of yum-config-manager (Michael Mraka) +- repoquery: Added --file switch to show who owns the given file (RhBug:1196952) (Parag Nemade) +- debuginfo-install: accept packages names specified as NEVRA (RhBug:1171046) (Petr Spacek) +- repoquery: accept package names specified as NEVRA (RhBug:1179366) (Petr Spacek) +- download: fix typo in 'No source rpm definded' (Petr Spacek) +- download: accept package names ending with .src too (Petr Spacek) +- download: Do not disable user-enabled repos (thanks Spacekpe) (Jan Silhan) +- Add README to tests/ directory (Petr Spacek) +- AUTHORS: updated (Jan Silhan) +- download: fix package download on Python 3 (Petr Spacek) + +* Tue Mar 10 2015 Jan Silhan - 0.1.6-2 +- man pages moved into dnf-plugins-core subpackage + +* Fri Mar 6 2015 Jan Silhan - 0.1.6-1 +- fixed python(3)-dnf dependency in f23 + +* Thu Feb 5 2015 Jan Silhan - 0.1.5-1 +- updated package url (Michael Mraka) +- also dnf_version could be specified on rpmbuild commandline (Michael Mraka) +- simple script to build test package (Michael Mraka) +- let gitrev be specified on rpmbuild commandline (Michael Mraka) +- assign default GITREV value (Michael Mraka) +- standard way to find out latest commit (Michael Mraka) +- debuginfo-install: fix handling of subpackages with non-zero epoch (Petr Spacek) +- debuginfo-install: Make laywers happier by assigning copyright to Red Hat (Petr Spacek) +- debuginfo-install: remove dead code uncovered by variable renaming (Petr Spacek) +- debuginfo-install: clearly separate source and debug package names (Petr Spacek) +- debuginfo-install: use descriptive parameter name in _is_available() (Petr Spacek) +- repoquery: add -l option to list files contained in the package (Petr Spacek) +- 1187773 - replace undefined variable (Miroslav Suchý) +- download: fixed unicode location error (RhBug:1178239) (Jan Silhan) +- builddep recognizes nosrc.rpm pkgs (RhBug:1166126) (Jan Silhan) +- builddep: added nosignatures flag to rpm transaction set (Jan Silhan) +- builddep: more verbose output of non-matching packages (RhBug:1155211) (Jan Silhan) +- package: archive script is the same as in dnf (Jan Silhan) +- spec: exclude __pycache__ dir (Igor Gnatenko) + +* Fri Dec 5 2014 Jan Silhan - 0.1.4-1 +- revert of commit 80ae3f4 (Jan Silhan) +- transifex update (Jan Silhan) +- spec: binded to current dnf version (Jan Silhan) +- generate_completion_cache: use sqlite instead of text files (Igor Gnatenko) +- logging: renamed log file (Related:RhBug:1074715) (Jan Silhan) +- Add reposync. (RhBug:1139738) (Ales Kozumplik) +- download: fix traceback if rpm package has no defined sourcerpm (RhBug: 1144003) (Tim Lauridsen) +- lint: ignore warnings of a test accessing protected attribute. (Ales Kozumplik) +- repoquery lint: logger is not used. (Ales Kozumplik) +- repoquery: support querying of weak deps. (Ales Kozumplik) +- needs_restarting: fix typo (Miroslav Suchý) +- copr: migrate copr plugin form urlgrabber to python-request (Miroslav Suchý) +- Add needs-restarting command. (Ales Kozumplik) + +* Thu Sep 4 2014 Jan Silhan - 0.1.3-1 +- repoquery: output times in UTC. (Ales Kozumplik) +- repoquery: missing help messages. (Ales Kozumplik) +- repoquery: add --info. (RhBug:1135984) (Ales Kozumplik) +- add Jan to AUTHORS. (Ales Kozumplik) +- spec: extended package description with plugin names and commands (Related:RhBug:1132335) (Jan Silhan) +- copr: check for 'ok' in 'output' for json data (RhBug:1134378) (Igor Gnatenko) +- README: changed references to new repo location (Jan Silhan) +- transifex update (Jan Silhan) +- copr: convert key to unicode before guessing lenght (Miroslav Suchý) +- Add pnemade to AUTHORS (Ales Kozumplik) +- debuginfo-install: Use logger as module level variable and not instance attribute since dnf-0.6.0 release (RhBug:1130559) (Parag Nemade) +- copr: Use logger as module level variable and not instance attribute since dnf-0.6.0 release (RhBug:1130559) (Parag Nemade) +- copr: implement help command (Igor Gnatenko) +- debuginfo-install: fix indenting (Igor Gnatenko) +- debuginfo-install: use srpm basename for debuginfo (Igor Gnatenko) + +* Mon Jul 28 2014 Aleš Kozumplík - 0.1.2-1 +- BashCompletionCache: error strings are unicoded (RhBug:1118809) (Jan Silhan) +- transifex update (Jan Silhan) +- debuginfo-install: remove some pylint warnings (Igor Gnatenko) +- debuginfo-install: fix installing when installed version not found in repos, optimize performance (RhBug: 1108321) (Ig +- fix: copr plugin message for repo without builds (RhBug:1116389) (Adam Samalik) +- logging: remove messages about initialization. (Ales Kozumplik) + +* Thu Jul 3 2014 Aleš Kozumplík - 0.1.1-2 +- packaging: add protected_packages.py to the package. (Ales Kozumplik) + +* Thu Jul 3 2014 Aleš Kozumplík - 0.1.1-1 +- protected_packages: prevent removal of the running kernel. (RhBug:1049310) (Ales Kozumplik) +- packaging: create and own /etc/dnf/protected.d. (Ales Kozumplik) +- doc: add documentation for protected_packages. (Ales Kozumplik) +- doc: rename: generate-completion-cache -> generate_completion_cache. (Ales Kozumplik) +- add protected_packages (RhBug:1111855) (Ales Kozumplik) +- build: add python-requests to requires (RHBZ: 1104088) (Miroslav Suchý) +- doc: typo: fix double 'plugin' in release notes. (Ales Kozumplik) + +* Wed Jun 4 2014 Aleš Kozumplík - 0.1.0-1 +- pylint: fix all pylint builddep problems. (Ales Kozumplik) +- builddep: better error reporting on deps that actually don't exist. (Ales Kozumplik) +- builddep: load available repos. (RhBug:1103906) (Ales Kozumplik) +- tests: stop argparse from printing to stdout when tests run. (Ales Kozumplik) +- packaging: all the manual pages with a glob. (Ales Kozumplik) +- fix: packaging problem with query.py. (Ales Kozumplik) +- doc: add reference documentation for repoquery. (Ales Kozumplik) +- repoquery: support --provides, --requires etc. (Ales Kozumplik) +- repoquery: make the CLI more compatible with Yum's repoquery. (Ales Kozumplik) +- repoquery: some cleanups in the plugin and the tests. (Ales Kozumplik) +- rename: query->repoquery. (RhBug:1045078) (Ales Kozumplik) +- add pylint script for dnf-core-plugins. (Ales Kozumplik) +- tests: repoquery: fix unit tests. (Ales Kozumplik) +- add query tool (Tim Lauridsen) + +* Wed May 28 2014 Aleš Kozumplík - 0.0.8-1 +- build: add sphinx to build requires. (Ales Kozumplik) +- doc: packaging: add license block to each .rst. (Ales Kozumplik) +- tests: stray print() in test_download.py. (Ales Kozumplik) +- doc: put each synopsis on new line (Miroslav Suchý) +- doc: cosmetic: project name in the documentation. (Ales Kozumplik) +- doc: cleanups, form, style. (Ales Kozumplik) +- doc: add documentation and man pages (Tim Lauridsen) +- copr: remove repofile if failed to enable repo (Igor Gnatenko) +- copr: honor -y and --assumeno (Miroslav Suchý) +- py3: absolute imports and unicode literals everywhere. (Ales Kozumplik) +- debuginfo-install: doesn't install latest pkgs (RhBug: 1096507) (Igor Gnatenko) +- debuginfo-install: fix description (Igor Gnatenko) +- debuginfo-install: fix logger debug messages (Igor Gnatenko) +- build: install the download plugin (Tim Lauridsen) +- download: update the download plugin with --source, --destdir & --resolve options (Tim Lauridsen) +- Add a special ArgumentParser to parsing plugin cmd arguments and options (Tim Lauridsen) +- tests: add __init__.py to make tests a module and use abs imports (Tim Lauridsen) +- build: simplify plugins/CMakeLists.txt. (Ales Kozumplik) +- dnf.cli.commands.err_mini_usage() changed name. (Ales Kozumplik) +- kickstart: do not include kickstart errors into own messages. (Radek Holy) + +* Wed Apr 23 2014 Aleš Kozumplík - 0.0.7-1 +- build: gettext is also needed as a buildreq (Tim Lauridsen) +- copr: use usage & summary class attributes, to work with dnf 0.5.0 use shared lib dnfpluginscore for translation wrapp +- build: add cmake as buildreq (Tim Lauridsen) +- generate-completion-cache: fix shared lib name (Tim Lauridsen) +- make .spec use gitrev in the source file add helper script for building source archive (Tim Lauridsen) +- Added transifex config (Tim Lauridsen) +- tests: use cli logger in kickstart test (Tim Lauridsen) +- Added translation .pot file Added da translation files so we have something to build & install (Tim Lauridsen) +- Added CMake files Added CMake build to .spec & and added translation files handling (Tim Lauridsen) +- make plugins use shared lib added translation wrappers added missing usage & summary PEP8 fixes (Tim Lauridsen) +- added shared dnfpluginscore lib (Tim Lauridsen) +- copr: C:139, 0: Unnecessary parens after 'print' keyword (superfluous-parens) (Miroslav Suchý) +- copr: W: 23, 0: Unused import gettext (unused-import) (Miroslav Suchý) +- copr: C: 33, 0: No space allowed before : (Miroslav Suchý) +- copr: some python3 migration (Miroslav Suchý) +- copr: get rid of dnf i18n imports (Miroslav Suchý) +- remove dnf.yum.i18n imports. (Ales Kozumplik) +- copr: Fix the playground upgrade command. (Tadej Janež) +- copr: implement search function (Igor Gnatenko) +- better format output (Miroslav Suchý) +- implement playground plugin (Miroslav Suchý) +- move removing of repo into method (Miroslav Suchý) +- check root only for actions which really need root (Miroslav Suchý) +- move repo downloading into separate method (Miroslav Suchý) +- define copr url as class attribute (Miroslav Suchý) +- better wording of warning (Miroslav Suchý) +- move question to function argument (Miroslav Suchý) +- move guessing chroot into function (Miroslav Suchý) +- copr: use common lib use Command.usage & summary cleanup imports & PEP8 fixes (Tim Lauridsen) +- builddep: added usage & summary & fix some PEP8 issues (Tim Lauridsen) +- kickstart: use new public Command.usage & Command.summary api (Tim Lauridsen) +- fix resource leak in builddep.py. (Ales Kozumplik) +- refactor: command plugins use demands mechanism. (Ales Kozumplik) +- noroot: move to the new 'demands' mechanism to check the need of root. (Ales Kozumplik) +- tests: fix locale independence. (Radek Holy) +- [copr] correctly specify chroot when it should be guessed (Miroslav Suchý) + +* Mon Mar 17 2014 Aleš Kozumplík - 0.0.6-1 +- clenaup: remove commented out code (Miroslav Suchý) +- copr: list: print description (Igor Gnatenko) +- builddep: rpm error messages sink. (Ales Kozumplik) +- builddep: improve error handling on an command argument (RhBug:1074436) (Ales Kozumplik) +- copr: handling case when no argument is passed on cli (Miroslav Suchý) +- copr: delete excess argument (Igor Gnatenko) +- add copr plugin (Miroslav Suchý) +- debuginfo-install: check for root with dnf api (Igor Gnatenko) +- packaging: fix bogus dates. (Ales Kozumplik) + +* Wed Feb 26 2014 Aleš Kozumplík - 0.0.5-2 +- packaging: add debuginfo-install.py (Ales Kozumplik) + +* Wed Feb 26 2014 Aleš Kozumplík - 0.0.5-1 +- packaging: add builddep.py to the RPM. (Ales Kozumplik) + +* Tue Feb 25 2014 Radek Holý - 0.0.4-1 +- refactor: use Base.install instead of installPkgs in kickstart plugin. (Radek Holy) +- refactor: move kickstart arguments parsing to standalone method. (Radek Holy) +- tests: test effects instead of mock calls. (Radek Holy) +- Add debuginfo-install plugin. (RhBug:1045770) (Igor Gnatenko) +- builddep: needs to be run under root. (RhBug:1065851) (Ales Kozumplik) + +* Thu Feb 6 2014 Aleš Kozumplík - 0.0.3-1 +- tests: import mock through support so its simpler for the test cases. (Ales Kozumplik) +- packaging: fix typos in the spec. (Ales Kozumplik) +- [completion_cache] Cache installed packages, update the cache less frequently (Elad Alfassa) +- Add bash completion to dnf (Elad Alfassa) +- packaging: missing buildrequire (Ales Kozumplik) + +* Mon Jan 13 2014 Aleš Kozumplík - 0.0.2-1 +- First release. + +* Wed Jan 8 2014 Cristian Ciupitu - 0.0.1-4 +- Spec updates. + +* Tue Jan 7 2014 Aleš Kozumplík - 0.0.1-3 +- Spec updates. + +* Mon Jan 6 2014 Aleš Kozumplík - 0.0.1-2 +- Spec updates. + +* Fri Dec 20 2013 Aleš Kozumplík - 0.0.1-1 +- The initial package version.