diff --git a/dnf5.spec b/dnf5.spec
index a74ab4f028..0337adc1c5 100644
--- a/dnf5.spec
+++ b/dnf5.spec
@@ -283,6 +283,7 @@ It supports RPM packages, modulemd modules, and comps groups & environments.
%{_mandir}/man8/dnf5-advisory.8.*
%{_mandir}/man8/dnf5-autoremove.8.*
%{_mandir}/man8/dnf5-check.8.*
+%{_mandir}/man8/dnf5-check-upgrade.8.*
%{_mandir}/man8/dnf5-clean.8.*
%{_mandir}/man8/dnf5-distro-sync.8.*
%{_mandir}/man8/dnf5-downgrade.8.*
@@ -291,12 +292,14 @@ It supports RPM packages, modulemd modules, and comps groups & environments.
%{_mandir}/man8/dnf5-group.8.*
# TODO(jkolarik): history is not ready yet
# %%{_mandir}/man8/dnf5-history.8.*
+%{_mandir}/man8/dnf5-info.8.*
%{_mandir}/man8/dnf5-install.8.*
%{_mandir}/man8/dnf5-leaves.8.*
+%{_mandir}/man8/dnf5-list.8.*
%{_mandir}/man8/dnf5-makecache.8.*
%{_mandir}/man8/dnf5-mark.8.*
-# TODO(jkolarik): module is not ready yet
-# %%{_mandir}/man8/dnf5-module.8.*
+%{_mandir}/man8/dnf5-module.8.*
+%{_mandir}/man8/dnf5-offline.8.*
%{_mandir}/man8/dnf5-provides.8.*
%{_mandir}/man8/dnf5-reinstall.8.*
%{_mandir}/man8/dnf5-remove.8.*
@@ -304,7 +307,9 @@ It supports RPM packages, modulemd modules, and comps groups & environments.
%{_mandir}/man8/dnf5-repoquery.8.*
%{_mandir}/man8/dnf5-search.8.*
%{_mandir}/man8/dnf5-swap.8.*
+%{_mandir}/man8/dnf5-system-upgrade.8.*
%{_mandir}/man8/dnf5-upgrade.8.*
+%{_mandir}/man8/dnf5-versionlock.8.*
%{_mandir}/man7/dnf5-aliases.7.*
%{_mandir}/man7/dnf5-caching.7.*
%{_mandir}/man7/dnf5-comps.7.*
@@ -700,6 +705,7 @@ config-manager, copr, and repoclosure commands.
%{_libdir}/dnf5/plugins/needs_restarting_cmd_plugin.so
%{_libdir}/dnf5/plugins/repoclosure_cmd_plugin.so
%{_mandir}/man8/dnf5-builddep.8.*
+%{_mandir}/man8/dnf5-changelog.8.*
%{_mandir}/man8/dnf5-copr.8.*
%{_mandir}/man8/dnf5-needs-restarting.8.*
%{_mandir}/man8/dnf5-repoclosure.8.*
@@ -727,6 +733,7 @@ automatically and regularly from systemd timers, cron jobs or similar.
%files plugin-automatic -f dnf5-plugin-automatic.lang
%ghost %{_sysconfdir}/motd.d/dnf5-automatic
%{_libdir}/dnf5/plugins/automatic_cmd_plugin.so
+%{_mandir}/man8/dnf5-automatic.8.*
%{_unitdir}/dnf5-automatic.service
%{_unitdir}/dnf5-automatic.timer
%{_unitdir}/dnf-automatic.service
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index aa15d89b80..0fe30c827a 100644
--- a/doc/CMakeLists.txt
+++ b/doc/CMakeLists.txt
@@ -58,6 +58,7 @@ if(WITH_MAN)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-advisory.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-autoremove.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-check.8 DESTINATION share/man/man8)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-check-upgrade.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-clean.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-distro-sync.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-downgrade.8 DESTINATION share/man/man8)
@@ -66,12 +67,14 @@ if(WITH_MAN)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-group.8 DESTINATION share/man/man8)
# TODO(jkolarik): history is not ready yet
# install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-history.8 DESTINATION share/man/man8)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-info.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-install.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-leaves.8 DESTINATION share/man/man8)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-list.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-makecache.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-mark.8 DESTINATION share/man/man8)
- # TODO(jkolarik): module is not ready yet
- # install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-module.8 DESTINATION share/man/man8)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-module.8 DESTINATION share/man/man8)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-offline.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-provides.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-reinstall.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-remove.8 DESTINATION share/man/man8)
@@ -79,7 +82,9 @@ if(WITH_MAN)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-repoquery.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-search.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-swap.8 DESTINATION share/man/man8)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-system-upgrade.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-upgrade.8 DESTINATION share/man/man8)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-versionlock.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-aliases.7 DESTINATION share/man/man7)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-caching.7 DESTINATION share/man/man7)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-comps.7 DESTINATION share/man/man7)
@@ -92,7 +97,9 @@ if(WITH_MAN)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-specs.7 DESTINATION share/man/man7)
# plugin commands
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-automatic.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-builddep.8 DESTINATION share/man/man8)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-changelog.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-copr.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-needs-restarting.8 DESTINATION share/man/man8)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/dnf5-repoclosure.8 DESTINATION share/man/man8)
diff --git a/doc/commands/check-upgrade.8.rst b/doc/commands/check-upgrade.8.rst
new file mode 100644
index 0000000000..4fc80d5af5
--- /dev/null
+++ b/doc/commands/check-upgrade.8.rst
@@ -0,0 +1,93 @@
+..
+ Copyright Contributors to the libdnf project.
+
+ This file is part of libdnf: https://github.com/rpm-software-management/libdnf/
+
+ Libdnf is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ Libdnf is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with libdnf. If not, see .
+
+.. _check-upgrade_command_ref-label:
+
+######################
+ Check-Upgrade Command
+######################
+
+Synopsis
+========
+
+``dnf5 check-upgrade [options] [...]``
+
+
+Description
+===========
+
+Non-interactively checks for available updates of specified packages. If no ````
+is provided, it verifies updates for the entire system.
+
+``DNF5`` will exit with code `100`` if updates are available and list them; `0` if no updates
+are available.
+
+
+Options
+=======
+
+``--changelogs``
+ | Print the package changelogs.
+
+``--advisories=ADVISORY_NAME,...``
+ | Consider only content contained in advisories with specified name.
+ | This is a list option.
+ | Expected values are advisory IDs, e.g. `FEDORA-2201-123`.
+
+``--advisory-severities=ADVISORY_SEVERITY,...``
+ | Consider only content contained in advisories with specified severity.
+ | This is a list option.
+ | Accepted values are: `critical`, `important`, `moderate`, `low`, `none`.
+
+``--bzs=BUGZILLA_ID,...``
+ | Consider only content contained in advisories that fix a ticket of given Bugzilla ID.
+ | This is a list option.
+ | Expected values are numeric IDs, e.g. `123123`.
+
+``--cves=CVE_ID,...``
+ | Consider only content contained in advisories that fix a ticket of given CVE (Common Vulnerabilities and Exposures) ID.
+ | This is a list option.
+ | Expected values are string IDs in CVE format, e.g. `CVE-2201-0123`.
+
+``--security``
+ | Consider only content contained in security advisories.
+
+``--bugfix``
+ | Consider only content contained in bugfix advisories.
+
+``--enhancement``
+ | Consider only content contained in enhancement advisories.
+
+``--newpackage``
+ | Consider only content contained in newpackage advisories.
+
+
+Examples
+========
+
+``dnf5 check-upgrade``
+ | Print a list of packages that have updates available.
+
+``dnf5 check-upgrade --changelogs``
+ | Print changelogs for all packages with pending updates.
+
+
+See Also
+========
+
+ | :manpage:`dnf5-specs(7)`, :ref:`Patterns specification `
diff --git a/doc/commands/check.8.rst b/doc/commands/check.8.rst
index a94ee7d56b..85e30fe4d6 100644
--- a/doc/commands/check.8.rst
+++ b/doc/commands/check.8.rst
@@ -18,9 +18,9 @@
.. _check_command_ref-label:
-####################
+##############
Check Command
-####################
+##############
Synopsis
========
diff --git a/doc/commands/index.rst b/doc/commands/index.rst
index 42266379a4..a08dd737b8 100644
--- a/doc/commands/index.rst
+++ b/doc/commands/index.rst
@@ -9,16 +9,20 @@ DNF5 Commands
advisory.8
autoremove.8
check.8
+ check-upgrade.8
clean.8
distro-sync.8
downgrade.8
download.8
environment.8
group.8
+ info.8
install.8
leaves.8
+ list.8
makecache.8
mark.8
+ module.8
offline.8
provides.8
reinstall.8
@@ -34,6 +38,3 @@ DNF5 Commands
..
# TODO(jkolarik): history not ready yet
history.8
-
- # TODO(jkolarik): module not ready yet
- module.8
diff --git a/doc/commands/info.8.rst b/doc/commands/info.8.rst
new file mode 100644
index 0000000000..5343ce17bb
--- /dev/null
+++ b/doc/commands/info.8.rst
@@ -0,0 +1,78 @@
+..
+ Copyright Contributors to the libdnf project.
+
+ This file is part of libdnf: https://github.com/rpm-software-management/libdnf/
+
+ Libdnf is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ Libdnf is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with libdnf. If not, see .
+
+.. _info_command_ref-label:
+
+#############
+ Info Command
+#############
+
+Synopsis
+========
+
+``dnf5 info [options] [...]``
+
+
+Description
+===========
+
+Prints detailed information about packages based on the provided parameters.
+
+
+Options
+=======
+
+``--showduplicates``
+ | Show all versions of the packages, not only the latest one.
+
+``--installed``
+ | List only installed packages.
+
+``--available``
+ | List only available packages.
+
+``--extras``
+ | List only extras: packages installed on the system that are not available in any known repository.
+
+``--obsoletes``
+ | List only packages installed on the system that are obsoleted by packages in any known repository.
+
+``--recent``
+ | List only packages recently added to the repositories.
+
+``--upgrades``
+ | List only available upgrades for installed packages.
+
+``--autoremove``
+ | List only packages that will be removed by the :ref:`autoremove command `.
+
+
+Examples
+========
+
+``dnf5 info``
+ | Display detailed information about installed and available packages.
+
+``dnf5 info --recent gnome*``
+ | Print information about recent packages whose names start with ``gnome``.
+
+
+See Also
+========
+
+ | :manpage:`dnf5-specs(7)`, :ref:`Patterns specification `
diff --git a/doc/commands/list.8.rst b/doc/commands/list.8.rst
new file mode 100644
index 0000000000..58079d1676
--- /dev/null
+++ b/doc/commands/list.8.rst
@@ -0,0 +1,81 @@
+..
+ Copyright Contributors to the libdnf project.
+
+ This file is part of libdnf: https://github.com/rpm-software-management/libdnf/
+
+ Libdnf is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ Libdnf is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with libdnf. If not, see .
+
+.. _list_command_ref-label:
+
+#############
+ List Command
+#############
+
+Synopsis
+========
+
+``dnf5 list [options] [...]``
+
+
+Description
+===========
+
+Prints lists of packages based on the provided parameters.
+
+
+Options
+=======
+
+``--showduplicates``
+ | Show all versions of the packages, not only the latest one.
+
+``--installed``
+ | List only installed packages.
+
+``--available``
+ | List only available packages.
+
+``--extras``
+ | List only extras: packages installed on the system that are not available in any known repository.
+
+``--obsoletes``
+ | List only packages installed on the system that are obsoleted by packages in any known repository.
+
+``--recent``
+ | List only packages recently added to the repositories.
+
+``--upgrades``
+ | List only available upgrades for installed packages.
+
+``--autoremove``
+ | List only packages that will be removed by the :ref:`autoremove command `.
+
+
+Examples
+========
+
+``dnf5 list``
+ | List installed and available packages.
+
+``dnf5 list --available --showduplicates``
+ | List all available packages, including all available versions.
+
+``dnf5 list kernel*``
+ | List installed and available packages whose names start with ``kernel``.
+
+
+See Also
+========
+
+ | :manpage:`dnf5-specs(7)`, :ref:`Patterns specification `
diff --git a/doc/commands/module.8.rst b/doc/commands/module.8.rst
index e0f7a02265..b58a7778d1 100644
--- a/doc/commands/module.8.rst
+++ b/doc/commands/module.8.rst
@@ -16,9 +16,6 @@
You should have received a copy of the GNU General Public License
along with libdnf. If not, see .
-..
- # TODO(jkolarik): Command not ready yet in upstream ...
-
.. _module_command_ref-label:
###############
@@ -28,13 +25,18 @@
Synopsis
========
-``dnf5 module [options] []``
+``dnf5 module [options] [..]``
Description
===========
-Optional ``module-spec`` arguments can be passed to select only specific modules.
+Modularity is an alternative way of building, organizing and delivering packages.
+
+Currently, only basic support is available for managing the modules,
+as they are no longer supported in mainstream RPM distributions.
+
+For more details see: https://docs.pagure.org/modularity/.
Subcommands
@@ -46,31 +48,44 @@ Subcommands
``info``
| Print details about module streams.
-``provides``
- | Print module and module profile the specified packages come from.
-
``enable``
| Enable module streams and make their packages available.
``disable``
| Disable modules including all their streams.
-``switch-to``
- | Enable different module streams, upgrade their profiles and distro-sync packages.
-
``reset``
| Reset module state so it's no longer enabled or disabled.
-``install``
- | Install module profiles, including their packages.
-
-``remove``
- | Remove installed module profiles including their packages.
-
Options
=======
+``--skip-broken``
+ | Used with ``enable`` command to resolve any dependency problems by removing items that are causing problems from the transaction.
+
+``--skip-unavailable``
+ | Used with ``enable``, ``disable`` and ``reset`` commands to allow skipping modular dependencies that are not possible to resolve.
+ | All remaining items will be processed.
+
+``--enabled``
+ | Show only enabled modules.
+
+``--disabled``
+ | Show only disabled modules.
+
Examples
========
+
+``dnf5 module list``
+ | List all module streams available for your system.
+
+``dnf5 module enable nodejs:8``
+ | Make packages from the Node.js 8 stream available for installation.
+
+
+See Also
+========
+
+ | :manpage:`dnf5-specs(7)`, :ref:`Patterns specification `
diff --git a/doc/commands/offline.8.rst b/doc/commands/offline.8.rst
index adcfc476ec..2352c257c1 100644
--- a/doc/commands/offline.8.rst
+++ b/doc/commands/offline.8.rst
@@ -37,6 +37,7 @@ Offline transactions can be initiated by specifying the ``--offline`` flag on an
Data for offline transactions is stored under the "system state" directory at ``/usr/lib/sysimage/libdnf5/offline``.
+
Subcommands
===========
@@ -52,6 +53,7 @@ Subcommands
``status``
Shows the status of the current offline transaction.
+
Options
=======
@@ -61,6 +63,7 @@ Options
``--poweroff``
Used with the ``reboot`` subcommand. The system will power off after the transaction is completed instead of restarting. If the transaction failed, the system will reboot instead of powering off even with this flag.
+
Examples
========
@@ -83,5 +86,5 @@ Examples
See Also
========
- | :manpage:`dnf5-system-upgrade(8)`, :ref:`System-upgrade command `
+ | :manpage:`dnf5-system-upgrade(8)`, :ref:`System-upgrade command `
| https://www.freedesktop.org/wiki/Software/systemd/SystemUpdates
diff --git a/doc/commands/system-upgrade.8.rst b/doc/commands/system-upgrade.8.rst
index 7a4a90714a..15e5ff517a 100644
--- a/doc/commands/system-upgrade.8.rst
+++ b/doc/commands/system-upgrade.8.rst
@@ -16,10 +16,10 @@
You should have received a copy of the GNU General Public License
along with libdnf. If not, see .
-.. _system_upgrade_command_ref-label:
+.. _system-upgrade_command_ref-label:
#######################
- System-upgrade Command
+ System-Upgrade Command
#######################
Synopsis
@@ -53,6 +53,7 @@ Subcommands
``reboot``
| See :manpage:`dnf5-offline(8)`, :ref:`Offline command `
+
Options
=======
diff --git a/doc/commands/versionlock.8.rst b/doc/commands/versionlock.8.rst
index 55e3bb31dc..7531651249 100644
--- a/doc/commands/versionlock.8.rst
+++ b/doc/commands/versionlock.8.rst
@@ -129,7 +129,6 @@ Example of versionlock file
value = "3"
-
See Also
========
diff --git a/doc/conf.py.in b/doc/conf.py.in
index b61171eacf..4bf7607944 100644
--- a/doc/conf.py.in
+++ b/doc/conf.py.in
@@ -115,18 +115,22 @@ man_pages = [
('commands/advisory.8', 'dnf5-advisory', 'Advisory Command', AUTHORS, 8),
('commands/autoremove.8', 'dnf5-autoremove', 'Autoremove Command', AUTHORS, 8),
('commands/check.8', 'dnf5-check', 'Check Command', AUTHORS, 8),
+ ('commands/check-upgrade.8', 'dnf5-check-upgrade', 'Check-Upgrade Command', AUTHORS, 8),
('commands/clean.8', 'dnf5-clean', 'Clean Command', AUTHORS, 8),
('commands/distro-sync.8', 'dnf5-distro-sync', 'Distro-Sync Command', AUTHORS, 8),
('commands/downgrade.8', 'dnf5-downgrade', 'Downgrade Command', AUTHORS, 8),
('commands/download.8', 'dnf5-download', 'Download Command', AUTHORS, 8),
('commands/environment.8', 'dnf5-environment', 'Environment Command', AUTHORS, 8),
('commands/group.8', 'dnf5-group', 'Group Command', AUTHORS, 8),
- ('commands/history.8', 'dnf5-history', 'History Command', AUTHORS, 8),
+ # TODO(jkolarik): ('commands/history.8', 'dnf5-history', 'History Command', AUTHORS, 8),
+ ('commands/info.8', 'dnf5-info', 'Info Command', AUTHORS, 8),
('commands/install.8', 'dnf5-install', 'Install Command', AUTHORS, 8),
('commands/leaves.8', 'dnf5-leaves', 'Leaves Command', AUTHORS, 8),
+ ('commands/list.8', 'dnf5-list', 'List Command', AUTHORS, 8),
('commands/makecache.8', 'dnf5-makecache', 'Makecache Command', AUTHORS, 8),
('commands/mark.8', 'dnf5-mark', ' Mark Command', AUTHORS, 8),
('commands/module.8', 'dnf5-module', ' Module Command', AUTHORS, 8),
+ ('commands/offline.8', 'dnf5-offline', ' Offline Command', AUTHORS, 8),
('commands/provides.8', 'dnf5-provides', 'Provides Command', AUTHORS, 8),
('commands/reinstall.8', 'dnf5-reinstall', 'Reinstall Command', AUTHORS, 8),
('commands/remove.8', 'dnf5-remove', 'Remove Command', AUTHORS, 8),
@@ -134,20 +138,23 @@ man_pages = [
('commands/repoquery.8', 'dnf5-repoquery', 'Repoquery Command', AUTHORS, 8),
('commands/search.8', 'dnf5-search', 'Search Command', AUTHORS, 8),
('commands/swap.8', 'dnf5-swap', 'Swap Command', AUTHORS, 8),
+ ('commands/system-upgrade.8', 'dnf5-system-upgrade', 'System-Upgrade Command', AUTHORS, 8),
('commands/upgrade.8', 'dnf5-upgrade', 'Upgrade Command', AUTHORS, 8),
+ ('commands/versionlock.8', 'dnf5-versionlock', 'Versionlock Command', AUTHORS, 8),
('dnf5_plugins/automatic.8', 'dnf5-automatic', 'Automatic Command', AUTHORS, 8),
('dnf5_plugins/builddep.8', 'dnf5-builddep', 'Builddep Command', AUTHORS, 8),
+ ('dnf5_plugins/changelog.8', 'dnf5-changelog', 'Changelog Command', AUTHORS, 8),
('dnf5_plugins/copr.8', 'dnf5-copr', 'Copr Command', AUTHORS, 8),
('dnf5_plugins/needs_restarting.8', 'dnf5-needs-restarting', 'Needs-restarting Command', AUTHORS, 8),
('dnf5_plugins/repoclosure.8', 'dnf5-repoclosure', 'Repoclosure Command', AUTHORS, 8),
- ('libdnf5_plugins/actions.8', 'libdnf5-actions', 'Actions plugin', AUTHORS, 8),
+ ('libdnf5_plugins/actions.8', 'libdnf5-actions', 'Actions Plugin', AUTHORS, 8),
('misc/aliases.7', 'dnf5-aliases', 'Aliases for command line arguments', AUTHORS, 7),
('misc/caching.7', 'dnf5-caching', 'Caching', AUTHORS, 7),
('misc/comps.7', 'dnf5-comps', 'Comps Groups And Environments', AUTHORS, 7),
- ('misc/filtering.7', 'dnf5-filtering', 'Packages Filtering', AUTHORS, 7),
+ # TODO(jkolarik): ('misc/filtering.7', 'dnf5-filtering', 'Packages Filtering', AUTHORS, 7),
('misc/forcearch.7', 'dnf5-forcearch', 'Forcearch Parameter', AUTHORS, 7),
('misc/installroot.7', 'dnf5-installroot', 'Installroot Parameter', AUTHORS, 7),
- ('misc/modularity.7', 'dnf5-modularity', 'Modularity Overview', AUTHORS, 7),
+ # TODO(jkolarik): ('misc/modularity.7', 'dnf5-modularity', 'Modularity Overview', AUTHORS, 7),
('misc/specs.7', 'dnf5-specs', 'Patterns Specification', AUTHORS, 7),
('dnf_daemon/dnf5daemon_client.8', 'dnf5daemon-client', 'Command-line interface for Dnf5daemon', AUTHORS, 8),
('dnf_daemon/dnf5daemon_server.8', 'dnf5daemon-server', 'Package management service with a DBus interface', AUTHORS, 8),
diff --git a/doc/dnf5.8.rst b/doc/dnf5.8.rst
index 6af3329ae3..da8eb840e6 100644
--- a/doc/dnf5.8.rst
+++ b/doc/dnf5.8.rst
@@ -55,6 +55,12 @@ For more details see the separate man page for the specific command, f.e. ``man
:ref:`autoremove `
| Remove unneeded packages.
+:ref:`check `
+ | Check for problems in the package database.
+
+:ref:`check-upgrade `
+ | Check for available package upgrades.
+
:ref:`clean `
| Remove or invalidate cached data.
@@ -73,18 +79,30 @@ For more details see the separate man page for the specific command, f.e. ``man
:ref:`group `
| Manage comps groups.
+:ref:`info `
+ | Provide detailed information about installed or available packages.
+
:ref:`install `
| Install packages.
:ref:`leaves `
| List groups of leaf packages.
+:ref:`list `
+ | List installed or available packages.
+
:ref:`makecache `
| Generate the metadata cache.
:ref:`mark `
| Change the reason of an installed package.
+:ref:`module `
+ | Manage modules.
+
+:ref:`offline `
+ | Manage offline transactions.
+
:ref:`provides `
| Find what package provides the given value.
@@ -106,18 +124,20 @@ For more details see the separate man page for the specific command, f.e. ``man
:ref:`swap `
| Remove software and install another in the single transaction.
+:ref:`system-upgrade `
+ | Upgrade the system to a new major release.
+
:ref:`upgrade `
| Upgrade packages.
+:ref:`versionlock `
+ | Protect packages from updates to newer versions.
+
..
# TODO(jkolarik): History command is not ready yet
:ref:`history `
| Manage transaction history.
- # TODO(jkolarik): Module command is not ready yet
- :ref:`module `
- | Manage modules.
-
Plugin commands
---------------
@@ -131,6 +151,9 @@ These are available after installing the ``dnf5-plugins`` package.
:ref:`builddep `
| Install missing dependencies for building an RPM package.
+:ref:`changelog `
+ | Show package changelogs.
+
:ref:`copr `
| Manage Copr repositories (add-ons provided by users/community/third-party).
@@ -140,6 +163,8 @@ These are available after installing the ``dnf5-plugins`` package.
:ref:`repoclosure `
| Display a list of unresolved dependencies for repositories.
+..
+ # TODO(jkolarik): config-manager plugin
Options
@@ -275,6 +300,12 @@ Following options are applicable in the general context for any ``dnf5`` command
``--show-new-leaves``
| Show newly installed leaf packages and packages that became leaves after a transaction.
+``--use-host-config``
+ | Use configuration files and variable definitions from the host system rather than the installroot.
+
+``--version``
+ | Display versions of installed dnf5 components.
+
``-y, --assumeyes``
| Automatically answer yes for all questions.
@@ -352,19 +383,24 @@ Files
See Also
========
-Commands in detail:
+Commands:
| :manpage:`dnf5-advisory(8)`, :ref:`Advisory command `
| :manpage:`dnf5-autoremove(8)`, :ref:`Autoremove command `
+ | :manpage:`dnf5-check(8)`, :ref:`Check command `
+ | :manpage:`dnf5-check-upgrade(8)`, :ref:`Check-Upgrade command `
| :manpage:`dnf5-clean(8)`, :ref:`Clean command `
| :manpage:`dnf5-distro-sync(8)`, :ref:`Distro-Sync command `
| :manpage:`dnf5-downgrade(8)`, :ref:`Downgrade command `
| :manpage:`dnf5-download(8)`, :ref:`Download command `
| :manpage:`dnf5-environment(8)`, :ref:`Environment command `
| :manpage:`dnf5-group(8)`, :ref:`Group command `
+ | :manpage:`dnf5-info(8)`, :ref:`Info command `
| :manpage:`dnf5-install(8)`, :ref:`Install command `
| :manpage:`dnf5-leaves(8)`, :ref:`Leaves command `
+ | :manpage:`dnf5-list(8)`, :ref:`List command `
| :manpage:`dnf5-makecache(8)`, :ref:`Makecache command `
| :manpage:`dnf5-mark(8)`, :ref:`Mark command `
+ | :manpage:`dnf5-module(8)`, :ref:`Module command `
| :manpage:`dnf5-offline(8)`, :ref:`Offline command `
| :manpage:`dnf5-provides(8)`, :ref:`Provides command `
| :manpage:`dnf5-reinstall(8)`, :ref:`Reinstall command `
@@ -373,22 +409,31 @@ Commands in detail:
| :manpage:`dnf5-repoquery(8)`, :ref:`Repoquery command `
| :manpage:`dnf5-search(8)`, :ref:`Search command `
| :manpage:`dnf5-swap(8)`, :ref:`Swap command `
- | :manpage:`dnf5-system-upgrade(8)`, :ref:`System-upgrade command `
+ | :manpage:`dnf5-system-upgrade(8)`, :ref:`System-Upgrade command `
| :manpage:`dnf5-upgrade(8)`, :ref:`Upgrade command `
+ | :manpage:`dnf5-versionlock(8)`, :ref:`Versionlock command `
..
# TODO(jkolarik): History command is not ready yet
| :manpage:`dnf5-history(8)`, :ref:`History command, `
- # TODO(jkolarik): Module command is not ready yet
- | :manpage:`dnf5-module(8)`, :ref:`Module command, `
-
-Plugins:
+Application Plugins:
+ | :manpage:`dnf5-automatic(8)`, :ref:`Automatic command `
| :manpage:`dnf5-builddep(8)`, :ref:`Builddep command `
+ | :manpage:`dnf5-changelog(8)`, :ref:`Changelog command `
| :manpage:`dnf5-copr(8)`, :ref:`Copr command `
- | :manpage:`dnf5-needs-restarting(8)`, :ref:`Needs-restarting command `
+ | :manpage:`dnf5-needs-restarting(8)`, :ref:`Needs-Restarting command `
| :manpage:`dnf5-repoclosure(8)`, :ref:`Repoclosure command `
+..
+ # TODO(jkolarik): config-manager plugin
+
+Library Plugins:
+ | :manpage:`libdnf5-actions(8)`, :ref:`Actions plugin `
+
+Configuration:
+ | :manpage:`dnf5-conf(5)`, :ref:`DNF5 Configuration Reference `
+
Miscellaneous:
| :manpage:`dnf5-aliases(7)`, :ref:`Aliases for command line arguments `
| :manpage:`dnf5-caching(7)`, :ref:`Caching `
@@ -396,7 +441,6 @@ Miscellaneous:
| :manpage:`dnf5-forcearch(7)`, :ref:`Forcearch parameter `
| :manpage:`dnf5-installroot(7)`, :ref:`Installroot parameter `
| :manpage:`dnf5-specs(7)`, :ref:`Patterns specification `
- | :manpage:`dnf5-conf(5)`, :ref:`DNF5 Configuration Reference `
..
# TODO(jkolarik): Filtering is not ready yet
diff --git a/doc/dnf5_plugins/automatic.8.rst b/doc/dnf5_plugins/automatic.8.rst
index f48c8b4a2b..22ffc27eae 100644
--- a/doc/dnf5_plugins/automatic.8.rst
+++ b/doc/dnf5_plugins/automatic.8.rst
@@ -19,15 +19,33 @@
.. _automatic_plugin_ref-label:
##################
- Automatic command
+ Automatic Command
##################
Synopsis
-==========
+========
``dnf5 automatic [options]``
+Description
+===========
+
+Alternative CLI to ``dnf upgrade`` with specific facilities to make it suitable to be executed automatically and regularly from systemd timers, cron jobs and similar.
+
+The operation of the tool is usually controlled by the configuration file or the function-specific timer units (see below). The command only accepts a single optional argument pointing to the config file, and some control arguments intended for use by the services that back the timer units. If no configuration file is passed from the command line, ``/etc/dnf/automatic.conf`` is used.
+
+The tool synchronizes package metadata as needed and then checks for updates available for the given system and then either exits, downloads the packages or downloads and applies the updates. The outcome of the operation is then reported by a selected mechanism, for instance via the standard output, email or MOTD messages.
+
+The systemd timer unit ``dnf-automatic.timer`` will behave as the configuration file specifies (see below) with regard to whether to download and apply updates. Some other timer units are provided which override the configuration file with some standard behaviours:
+
+- dnf-automatic-notifyonly
+- dnf-automatic-download
+- dnf-automatic-install
+
+Regardless of the configuration file settings, the first will only notify of available updates. The second will download, but not install them. The third will download and install them.
+
+
Options
=======
@@ -47,27 +65,8 @@ Options
Do not automatically install downloaded updates.
-
-Description
-=============
-
-Alternative CLI to ``dnf upgrade`` with specific facilities to make it suitable to be executed automatically and regularly from systemd timers, cron jobs and similar.
-
-The operation of the tool is usually controlled by the configuration file or the function-specific timer units (see below). The command only accepts a single optional argument pointing to the config file, and some control arguments intended for use by the services that back the timer units. If no configuration file is passed from the command line, ``/etc/dnf/automatic.conf`` is used.
-
-The tool synchronizes package metadata as needed and then checks for updates available for the given system and then either exits, downloads the packages or downloads and applies the updates. The outcome of the operation is then reported by a selected mechanism, for instance via the standard output, email or MOTD messages.
-
-The systemd timer unit ``dnf-automatic.timer`` will behave as the configuration file specifies (see below) with regard to whether to download and apply updates. Some other timer units are provided which override the configuration file with some standard behaviours:
-
-- dnf-automatic-notifyonly
-- dnf-automatic-download
-- dnf-automatic-install
-
-Regardless of the configuration file settings, the first will only notify of available updates. The second will download, but not install them. The third will download and install them.
-
-
Run dnf-automatic
-===================
+=================
You can select one that most closely fits your needs, customize ``/etc/dnf/automatic.conf`` for any specific behaviors, and enable the timer unit.
@@ -75,10 +74,11 @@ For example: ``systemctl enable --now dnf-automatic-notifyonly.timer``
Configuration File Format
-===========================
+=========================
The configuration file is separated into topical sections.
+
----------------------
``[commands]`` section
----------------------
@@ -123,7 +123,6 @@ Setting the mode of operation of the program.
Specify the command to run to trigger a reboot of the system. For example, to skip the 5-minute delay and wall message, use ``shutdown -r``
-
----------------------
``[emitters]`` section
----------------------
@@ -142,6 +141,7 @@ Choosing how the results should be reported.
How the system is called in the reports.
+
---------------------
``[command]`` section
---------------------
@@ -158,6 +158,7 @@ The command emitter configuration. Variables usable in format string arguments a
The data to pass to the command on stdin.
+
---------------------------
``[command_email]`` section
---------------------------
@@ -184,6 +185,7 @@ The command email emitter configuration. Variables usable in format string argum
The data to pass to the command on stdin.
+
-------------------
``[email]`` section
-------------------
@@ -225,6 +227,7 @@ The email emitter configuration.
Password to use for SMTP server authentication.
+
------------------
``[base]`` section
------------------
diff --git a/doc/dnf5_plugins/builddep.8.rst b/doc/dnf5_plugins/builddep.8.rst
index 15da8e2f65..1a0eb107c2 100644
--- a/doc/dnf5_plugins/builddep.8.rst
+++ b/doc/dnf5_plugins/builddep.8.rst
@@ -37,6 +37,7 @@ Install missing dependencies for building an RPM package.
than you would expect because dependencies were evaluated according macros
set on the package build host.
+
Options
=======
diff --git a/doc/dnf5_plugins/changelog.8.rst b/doc/dnf5_plugins/changelog.8.rst
new file mode 100644
index 0000000000..0c54475c6f
--- /dev/null
+++ b/doc/dnf5_plugins/changelog.8.rst
@@ -0,0 +1,58 @@
+..
+ Copyright Contributors to the libdnf project.
+
+ This file is part of libdnf: https://github.com/rpm-software-management/libdnf/
+
+ Libdnf is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ Libdnf is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with libdnf. If not, see .
+
+.. _changelog_plugin_ref-label:
+
+##################
+ Changelog Command
+##################
+
+Synopsis
+========
+
+``dnf5 changelog [options] [...]``
+
+
+Description
+===========
+
+Show package changelogs.
+
+
+Options
+=======
+
+``--since=DATE``
+ | Show only changelog entries since ``DATE``.
+ | `YYYY-MM-DD` date format is expected.
+
+``--count=VALUE``
+ | Limit the number of changelog entries shown per package to ``VALUE``.
+
+``--upgrades``
+ | Show only new changelog entries for packages that provide upgrades for already installed packages.
+
+
+Examples
+========
+
+``dnf5 changelog --since=2023-04-01``
+ | Display changelog entries since April 1, 2023 for all packages.
+
+``dnf5 changelog --count=5 bash``
+ | Display the 3 latest changelogs for the ``bash`` package.
diff --git a/doc/dnf5_plugins/index.rst b/doc/dnf5_plugins/index.rst
index eb877d5a5f..470cd5f3a6 100644
--- a/doc/dnf5_plugins/index.rst
+++ b/doc/dnf5_plugins/index.rst
@@ -10,8 +10,10 @@ DNF5 Plugins
automatic.8
builddep.8
+ changelog.8
copr.8
needs_restarting.8
repoclosure.8
..
+ # TODO(jkolarik): config-manager
diff --git a/doc/dnf5_plugins/needs_restarting.8.rst b/doc/dnf5_plugins/needs_restarting.8.rst
index cdab22fa57..387f21ad73 100644
--- a/doc/dnf5_plugins/needs_restarting.8.rst
+++ b/doc/dnf5_plugins/needs_restarting.8.rst
@@ -19,7 +19,7 @@
.. _needs_restarting_plugin_ref-label:
#########################
- Needs-restarting Command
+ Needs-Restarting Command
#########################
Synopsis
diff --git a/doc/dnf5_plugins/repoclosure.8.rst b/doc/dnf5_plugins/repoclosure.8.rst
index a1b0e7ce94..1244e292aa 100644
--- a/doc/dnf5_plugins/repoclosure.8.rst
+++ b/doc/dnf5_plugins/repoclosure.8.rst
@@ -36,7 +36,6 @@ The ``repoclosure`` command allows you to analyze package metadata from multiple
By default, ``repoclosure`` considers all enabled repositories when checking dependencies. However, you can customize the set of repositories by using standard DNF5 options such as ``--repo``, ``--enable-repo``, or ``--disable-repo``.
-
Options
=======
diff --git a/doc/index.rst b/doc/index.rst
index e21a467e46..001fc4d196 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -19,7 +19,6 @@ Welcome to DNF5's documentation!
misc/index
best_practices/index
templates/index
- migration_guide
changes
diff --git a/doc/libdnf5_plugins/actions.8.rst b/doc/libdnf5_plugins/actions.8.rst
index b2be069a81..19e9fe106b 100644
--- a/doc/libdnf5_plugins/actions.8.rst
+++ b/doc/libdnf5_plugins/actions.8.rst
@@ -18,9 +18,9 @@
.. _actions_plugin_ref-label:
-==============
-Actions Plugin
-==============
+###############
+ Actions Plugin
+###############
Description
===========
diff --git a/doc/misc/modularity.7.rst b/doc/misc/modularity.7.rst
index a665f18b94..808c9b382f 100644
--- a/doc/misc/modularity.7.rst
+++ b/doc/misc/modularity.7.rst
@@ -16,9 +16,6 @@
You should have received a copy of the GNU General Public License
along with libdnf. If not, see .
-..
- # TODO(jkolarik): Command not ready yet in upstream ...
-
.. _modularity_misc_ref-label:
####################
@@ -28,4 +25,104 @@
Description
===========
-Modularity is a new way of building, organizing and delivering packages.
+Modularity is an alternative way of building, organizing and delivering packages.
+For more details see: https://docs.pagure.org/modularity/.
+
+
+Definitions
+===========
+
+modulemd
+ Every repository can contain ``modules`` metadata with modulemd documents.
+ These documents hold metadata about modules such as ``Name``, ``Stream`` or list of packages.
+
+(non-modular) package
+ Package that doesn't belong to a module.
+
+modular package
+ Package that belongs to a module. It is listed in modulemd under the ``artifacts`` section.
+ Modular packages can be also identified by having ``%{modularitylabel}`` RPM header set.
+
+(module) stream
+ Stream is a collection of packages, a virtual repository. It is identified with
+ ``Name`` and ``Stream`` from modulemd separated with colon, for example "postgresql:9.6".
+
+ Module streams can be ``active`` or ``inactive``. ``active`` means the RPM
+ packages from this stream are included in the set of available packages.
+ Packages from ``inactive`` streams are filtered out. Streams are
+ ``active`` either if marked as ``default`` or if they are explicitly
+ ``enabled`` by a user action. Streams that satisfy dependencies of
+ ``default`` or ``enabled`` streams are also considered ``active``. Only
+ one stream of a particular module can be ``active`` at a given point in
+ time.
+
+
+Package filtering
+=================
+
+Without modules, packages with the highest version are used by default.
+
+Module streams can distribute packages with lower versions than available in the
+repositories available to the operating system. To make such packages available
+for installs and upgrades, the non-modular packages are filtered out when their
+name or provide matches against a modular package name from any enabled, default,
+or dependent stream. Modular source packages will not cause non-modular binary
+packages to be filtered out.
+
+
+Demodularized rpms
+==================
+
+Contains names of RPMs excluded from package filtering for particular module stream. When defined in the latest active
+module, non-modular RPMs with the same name or provide which were previously filtered out will reappear.
+
+
+Hotfix repositories
+===================
+
+In special cases, a user wants to cherry-pick individual packages provided outside module
+streams and make them available on along with packages from the active streams.
+Under normal circumstances, such packages are filtered out or rejected from getting on the system by
+Fail-safe mechanisms.
+To make the system use packages from a repository regardless of their modularity,
+specify ``module_hotfixes=true`` in the .repo file. This protects the repository from package filtering.
+
+Please note the hotfix packages do not override module packages, they only become
+part of available package set. It's the package ``Epoch``, ``Version`` and ``Release``
+what determines if the package is the latest.
+
+
+Fail-safe mechanisms
+====================
+
+
+Repositories with module metadata are unavailable
+=================================================
+
+When a repository with module metadata is unavailable, package filtering must keep working.
+Non-modular RPMs must remain unavailable and must never get on the system.
+
+This happens when:
+
+* user disables a repository via ``--disablerepo`` or uses ``--repoid``
+* user removes a .repo file from disk
+* repository is not available and has ``skip_if_unavailable=true``
+
+DNF keeps copies of the latest modulemd for every active stream
+and uses them if there's no modulemd available for the stream.
+This keeps package filtering working correctly.
+
+The copies are made any time a transaction is resolved and started.
+That includes RPM transactions as well as any ``dnf module `` operations.
+
+When the fail-safe data is used, dnf show such modules as part of @modulefailsafe repository.
+
+
+Orphaned modular packages
+=========================
+
+All packages that are built as a part of a module have ``%{modularitylabel}`` RPM header set.
+If such package becomes part of RPM transaction and cannot be associated with any available
+modulemd, DNF prevents from getting it on the system (package is available, but cannot be
+installed, upgraded, etc.). Packages from Hotfix repositories or Commandline repository are not
+affected by Fail-safe mechanisms.