Skip to content

Commit

Permalink
[groups-manager] Re-introduce yum-groups-manager functionality (RhBug…
Browse files Browse the repository at this point in the history
…: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
  • Loading branch information
m-blaha authored and lukash committed Dec 2, 2020
1 parent 2d427e6 commit 854deff
Show file tree
Hide file tree
Showing 8 changed files with 432 additions and 5 deletions.
22 changes: 17 additions & 5 deletions dnf-plugins-core.spec
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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}
Expand All @@ -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.

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand All @@ -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}
Expand Down Expand Up @@ -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.
Expand All @@ -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.*
Expand Down Expand Up @@ -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.*
Expand All @@ -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
Expand All @@ -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.*
Expand Down Expand Up @@ -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.*
Expand All @@ -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.*
Expand All @@ -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.*
Expand Down
2 changes: 2 additions & 0 deletions doc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions doc/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,7 @@ def version_readout():
('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),
Expand All @@ -268,6 +269,7 @@ def version_readout():
('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),
Expand Down
94 changes: 94 additions & 0 deletions doc/groups-manager.rst
Original file line number Diff line number Diff line change
@@ -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-name-spec>``
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=<path_to_comps.xml>``
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=<path_to_comps.xml>``
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=<path_to_comps.xml>``
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=<id>``
The id to lookup/use for the group. If you don't specify an ``<id>``, 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>, --name=<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=<description>``
The description to use for the group.

``--display-order=<display_order>``
Change the integer which controls the order groups are presented in, for example in ``dnf grouplist``.

``--translated-name=<lang:text>``
A translation of the group name in the given language. The syntax is ``lang:text``. Eg. ``en:my-group-name-in-english``

``--translated-description=<lang:text>``
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.
1 change: 1 addition & 0 deletions doc/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ This documents core plugins of DNF:
debuginfo-install
download
generate_completion_cache
groups-manager
leaves
local
migrate
Expand Down
1 change: 1 addition & 0 deletions libexec/dnf-utils.in
Original file line number Diff line number Diff line change
Expand Up @@ -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']
}

Expand Down
1 change: 1 addition & 0 deletions plugins/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 854deff

Please sign in to comment.