[packages/dnf5] - updated to 5.4.6.0
qboosh
qboosh at pld-linux.org
Wed Sep 30 21:25:45 CEST 2026
commit 212404bb583dfa280a225a8e4c191d5f86d38715
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date: Wed Sep 30 21:26:09 2026 +0200
- updated to 5.4.6.0
0001-cmake-Move-sdbus-c-check-to-one-place.patch | 89 ---
...emon-sdbus-cpp-v.-2-requires-strong-types.patch | 403 ------------
...mon-sdbus-Variant-constructor-is-explicit.patch | 425 -------------
...fdaemon-Explicit-sdbus-Variant-conversion.patch | 374 -----------
...dnfdaemon-Make-signal-handlers-compatible.patch | 122 ----
...egister-interface-methods-for-sdbus-cpp-2.patch | 687 ---------------------
...lient-Use-correct-data-type-for-callbacks.patch | 34 -
0008-dnfdaemon-Properly-leave-event-loop.patch | 26 -
...mon-client-Separate-context-and-callbacks.patch | 359 -----------
dnf5-tests.patch | 11 +
dnf5.spec | 306 +++++----
systemdunitdir.patch | 36 +-
x32.patch | 8 +-
13 files changed, 231 insertions(+), 2649 deletions(-)
---
diff --git a/dnf5.spec b/dnf5.spec
index 14f8e41..d93f529 100644
--- a/dnf5.spec
+++ b/dnf5.spec
@@ -13,6 +13,8 @@
%bcond_without plugin_appstream # appstream plugin
%bcond_without plugin_expired_pgp_keys # expired_pgp_keys plugin
%bcond_without python_plugins_loader # python plugin loader
+# dnf5 plugins
+%bcond_without plugin_manifest # dn5 manifest_cmd plugin
%bcond_without comps # comps groups and environment support
%bcond_without modulemd # modulemd modules support
@@ -24,21 +26,22 @@
%bcond_without python3 # Python 3 bindings
%bcond_with ruby # Ruby bindings
-%define libmodulemd_ver 2.5.0
-%define librepo_ver 1.18.0
-%define libsolv_ver 0.7.31
+%define libmodulemd_ver 2.11.2
+%define librepo_ver 1.20.0
+%define libsolv_ver 0.7.36
+%define rpm_ver 1:4.19.0
%define sqlite_ver 3.35.0
%define zchunk_ver 0.9.11
Summary: Command-line package manager
Summary(pl.UTF-8): Zarządca pakietów obsługiwany z linii poleceń
Name: dnf5
-Version: 5.2.10.0
-Release: 8
+Version: 5.4.6.0
+Release: 1
License: GPL v2+
Group: Applications/System
Source0: https://github.com/rpm-software-management/dnf5/archive/%{version}/%{name}-%{version}.tar.gz
-# Source0-md5: 118b176708e1c463ce56f371725c8905
+# Source0-md5: 078b624d31fb53e3994451083344f0f1
Source10: pld.repo
Source11: pld-source.repo
Source12: pld-debuginfo.repo
@@ -50,69 +53,34 @@ Patch2: systemdunitdir.patch
Patch3: perl-long-long.patch
Patch4: system-arch-from-rpmrc.patch
Patch5: x32.patch
-# sdbus-cpp 2.x
-Patch100: 0001-cmake-Move-sdbus-c-check-to-one-place.patch
-Patch101: 0002-dnfdaemon-sdbus-cpp-v.-2-requires-strong-types.patch
-Patch102: 0003-dnfdaemon-sdbus-Variant-constructor-is-explicit.patch
-Patch103: 0004-dnfdaemon-Explicit-sdbus-Variant-conversion.patch
-Patch104: 0005-dnfdaemon-Make-signal-handlers-compatible.patch
-Patch105: 0006-dnfdaemon-Register-interface-methods-for-sdbus-cpp-2.patch
-Patch106: 0007-dnfdaemon-client-Use-correct-data-type-for-callbacks.patch
-Patch107: 0008-dnfdaemon-Properly-leave-event-loop.patch
-Patch108: 0009-daemon-client-Separate-context-and-callbacks.patch
+Patch6: %{name}-tests.patch
URL: https://github.com/rpm-software-management/dnf5
BuildRequires: AppStream-devel >= 0.16
+BuildRequires: acl-devel
BuildRequires: bash-completion-devel >= 1:2.0
BuildRequires: check-devel
-BuildRequires: cmake >= 3.21
+BuildRequires: cmake >= 3.22
+%if %{with dnf5_plugins}
+BuildRequires: curl-devel >= 7.62.0
+%endif
BuildRequires: doxygen
BuildRequires: gettext-tools
+BuildRequires: glib2-devel >= 1:2.46.0
BuildRequires: json-c-devel
-BuildRequires: libfmt-devel
-BuildRequires: librepo-devel >= %{librepo_ver}
-BuildRequires: libsolv-devel >= %{libsolv_ver}
-BuildRequires: openssl-devel
-BuildRequires: rpm-build >= 4.6
-BuildRequires: rpm-devel >= 1:4.17.0
-BuildRequires: rpmbuild(macros) >= 2.047
-BuildRequires: sqlite3-devel >= %{sqlite_ver}
-BuildRequires: toml11
-%if %{with tests}
-BuildRequires: /usr/bin/gpg
-BuildRequires: cppunit-devel
-BuildRequires: createrepo_c
-%endif
%{?with_comps:BuildRequires: libcomps-devel}
+BuildRequires: libfmt-devel
%{?with_modulemd:BuildRequires: libmodulemd-devel >= %{libmodulemd_ver}}
-%{?with_zchunk:BuildRequires: zchunk-devel >= %{zchunk_ver}}
-%if %{with systemd}
-BuildRequires: sdbus-cpp-devel >= 0.8.1
-BuildRequires: systemd-devel
-%endif
-%if %{with docs}
-BuildRequires: python3-Sphinx
-BuildRequires: python3-breathe
-BuildRequires: python3-sphinx_rtd_theme
-BuildRequires: sphinx-pdg
+%if %{with plugin_manifest}
+BuildRequires: libpkgmanifest-devel
%endif
+BuildRequires: librepo-devel >= %{librepo_ver}
%if %{with libdnf_cli}
BuildRequires: libsmartcols-devel
%endif
-%if %{with dnf5_plugins}
-BuildRequires: curl-devel >= 7.62.0
-%endif
-%if %{with dnf5daemon_server}
-BuildRequires: sdbus-cpp-devel >= 0.9.0
-%endif
-%if %{with perl} || %{with ruby} || %{with python3}
-BuildRequires: swig
-%if %{with perl}
-BuildRequires: swig-perl
-%endif
-%if %{with python3}
-BuildRequires: swig-python
-%endif
-%endif
+BuildRequires: libsolv-devel >= %{libsolv_ver}
+BuildRequires: libstdc++-devel >= 6:8
+%{?with_comps:BuildRequires: libxml2-devel >= 2.0}
+BuildRequires: openssl-devel
%if %{with perl}
BuildRequires: perl-devel
%if %{with tests}
@@ -121,20 +89,54 @@ BuildRequires: perl-base
BuildRequires: perl-modules
%endif
%endif
+%if %{with python3}
+BuildRequires: python3-devel >= 1:3.2
+%endif
+BuildRequires: rpm-build >= 4.6
+BuildRequires: rpm-devel >= %{rpm_ver}
+BuildRequires: rpmbuild(macros) >= 2.047
%if %{with ruby}
BuildRequires: ruby-devel
%if %{with tests}
BuildRequires: rubygem-test-unit
%endif
%endif
+%if %{with dnf5daemon_server} || %{with systemd}
+BuildRequires: sdbus-cpp-devel >= 2
+%endif
+BuildRequires: sqlite3-devel >= %{sqlite_ver}
+%if %{with perl} || %{with ruby} || %{with python3}
+BuildRequires: swig >= 4.3
+%endif
+%if %{with perl}
+BuildRequires: swig-perl
+%endif
%if %{with python3}
-BuildRequires: python3-devel >= 1:3.2
+BuildRequires: swig-python
+%endif
+%if %{with systemd}
+BuildRequires: systemd-devel
+%endif
+BuildRequires: toml11
+%{?with_zchunk:BuildRequires: zchunk-devel >= %{zchunk_ver}}
+%if %{with tests}
+BuildRequires: /usr/bin/gpg
+BuildRequires: cppunit-devel
+BuildRequires: createrepo_c
+%endif
+%if %{with docs}
+BuildRequires: python3-Sphinx
+BuildRequires: python3-breathe
+BuildRequires: python3-sphinx_rtd_theme
+BuildRequires: sphinx-pdg
%endif
Requires: coreutils
Requires: libdnf5%{?_isa} = %{version}-%{release}
Requires: libdnf5-cli%{?_isa} = %{version}-%{release}
Provides: dnf = %{version}-%{release}
Provides: yum = %{version}-%{release}
+Obsoletes: bash-completion-dnf < 5
+Obsoletes: bash-completion-dbf5 < 5.4
Obsoletes: dnf < 5
Obsoletes: yum < 5
Conflicts: python3-dnf-plugins-core < 4.7.0
@@ -152,21 +154,6 @@ w spójny sposób proces instalacji, aktualizacji, konfigurowania i
usuwania programów. Obsługuje pakiety RPM, moduły modulemd oraz groupy
i środowiska comps.
-%package -n bash-completion-dnf5
-Summary: Bash completion for dnf5 command
-Summary(pl.UTF-8): Bashowe uzupełnianie parametrów dla polecenia dnf5
-Group: Applications/Shells
-Requires: %{name} = %{version}-%{release}
-Requires: bash-completion >= 1:2.0
-Obsoletes: bash-completion-dnf < 5
-BuildArch: noarch
-
-%description -n bash-completion-dnf5
-Bash completion for dnf command.
-
-%description -n bash-completion-dnf5 -l pl.UTF-8
-Bashowe uzupełnianie parametrów dla polecenia dnf.
-
%package devel
Summary: Header files for dnf5 plugins development
Summary(pl.UTF-8): Pliki nagłówkowe do tworzenia wtyczek dnf5
@@ -187,9 +174,12 @@ Summary: Package management library
Summary(pl.UTF-8): Biblioteka do zarządzania pakietami
License: LGPL v2.1+
Group: Libraries
-#Requires: libmodulemd{?_isa} >= {libmodulemd_ver}
+%if %{with modulemd}
+Requires: libmodulemd%{?_isa} >= %{libmodulemd_ver}
+%endif
Requires: librepo%{?_isa} >= %{librepo_ver}
Requires: libsolv%{?_isa} >= %{libsolv_ver}
+Requires: rpm-lib%{?_isa} >= %{rpm_ver}
Requires: sqlite3-libs%{?_isa} >= %{sqlite_ver}
%description -n libdnf5
@@ -203,8 +193,17 @@ Summary: Development files for libdnf5
Summary(pl.UTF-8): Pliki programistyczne biblioteki libdnf5
License: LGPL v2.1+
Group: Development/Libraries
+Requires: acl-devel%{?_isa}
+Requires: libfmt-devel%{?_isa}
Requires: libdnf5%{?_isa} = %{version}-%{release}
+%if %{with modulemd}
+Requires: libmodulemd-devel%{?_isa} >= %{libmodulemd_ver}
+%endif
+Requires: librepo-devel%{?_isa} >= %{librepo_ver}
Requires: libsolv-devel%{?_isa} >= %{libsolv_ver}
+Requires: libstdc++-devel >= 6:8
+Requires: rpm-devel%{?_isa} >= %{rpm_ver}
+Requires: sqlite3-devel%{?_isa} >= %{sqlite_ver}
%description -n libdnf5-devel
Development files for libdnf5.
@@ -232,6 +231,9 @@ Summary(pl.UTF-8): Pliki programistyczne biblioteki libdnf5-cli
License: LGPL v2.1+
Group: Development/Libraries
Requires: libdnf5-cli%{?_isa} = %{version}-%{release}
+Requires: libfmt-devel
+Requires: libsmartcols-devel
+Requires: libstdc++-devel >= 6:8
%description -n libdnf5-cli-devel
Development files for libdnf5-cli.
@@ -363,6 +365,40 @@ Libdnf5 plugin for detecting and removing expired PGP keys.
%description -n libdnf5-plugin-expired-pgp-keys -l pl.UTF-8
Wtyczka libdnf5 do wykrywania i usuwania przedawnionych kluczy PGP.
+%package -n libdnf5-plugin-local
+Summary: Libdnf5 plugin that copies all downloaded packages to a local repository
+Summary(pl.UTF-8): Wtyczka libdnf5 kopiująca wszystkie pobierane pakiety do lokalnego repozytorium
+License: LGPL v2.1+
+Group: Libraries
+Requires: libdnf5%{?_isa} = %{version}-%{release}
+Requires: createrepo_c
+
+%description -n libdnf5-plugin-local
+Libdnf5 plugin that automatically copies all downloaded packages to
+a repository on the local filesystem and generates repo metadata.
+
+%description -n libdnf5-plugin-local -l pl.UTF-8
+Wtyczka libdnf5 automatycznie kopiująca wszystkie pobierane pakiety do
+repozytorium w lokalnym systemie plików i generująca dla niego
+metadane.
+
+%package -n libdnf5-plugin-systemd-inhibit
+Summary: Libdnf5 plugin that prevents system shutdown during a package transaction
+Summary(pl.UTF-8): Wtyczka libdnf5 zapobiegająca wyłączeniu maszyny w trakcie transakcji na pakietach
+License: LGPL-2.1-or-later
+Requires: libdnf5%{?_isa} = %{version}-%{release}
+BuildRequires: pkgconfig(sdbus-c++) >= 0.8.1
+
+%description -n libdnf5-plugin-systemd-inhibit
+Libdnf5 plugin that acquires a systemd inhibitor lock during a package
+transaction to prevent system shutdown or reboot while packages are
+being installed, removed, or updated.
+
+%description -n libdnf5-plugin-systemd-inhibit -l pl.UTF-8
+Wtyczka libdnf5 utrzymująca blokadę systemd w trakcie transakcji na
+pakietach, aby zapobiec wyłączeniu lub restartowi maszyny w trakcie
+instalacji, usuwania lub aktualizacji pakietów.
+
%package -n python3-libdnf5-python-plugins-loader
Summary: Libdnf5 plugin that allows loading Python plugins
Summary(pl.UTF-8): Wtyczka libdnf5 pozwalająca wczytywać wtyczki w Pythonie
@@ -448,23 +484,30 @@ Alternatywny interfejs linii poleceń "dnf upgrade", nadający się do
automatycznego, regularnego uruchamiania ze stoperów systemd, zadań
crona itp.
+%package plugin-manifest
+Summary: DNF5 plugin for working with RPM package manifest files
+Summary(pl.UTF-8): Wtyczka DNF5 do pracy z plikami manifestów pakietów RPM
+License: LGPL v2.1+
+Group: Applications/System
+Requires: dnf5%{?_isa} = %{version}-%{release}
+Requires: libdnf5%{?_isa} = %{version}-%{release}
+Requires: libdnf5-cli%{?_isa} = %{version}-%{release}
+
+%description plugin-manifest
+DNF5 plugin for working with RPM package manifest files.
+
+%description plugin-manifest -l pl.UTF-8
+Wtyczka DNF5 do pracy z plikami manifestów pakietów RPM.
+
%prep
%setup -q
-%patch -P 0 -p1
-%patch -P 1 -p1
-%patch -P 2 -p1
-%patch -P 3 -p1
-%patch -P 4 -p1
-%patch -P 5 -p1
-%patch -P 100 -p1
-%patch -P 101 -p1
-%patch -P 102 -p1
-%patch -P 103 -p1
-%patch -P 104 -p1
-%patch -P 105 -p1
-%patch -P 106 -p1
-%patch -P 107 -p1
-%patch -P 108 -p1
+%patch -P0 -p1
+%patch -P1 -p1
+%patch -P2 -p1
+%patch -P3 -p1
+%patch -P4 -p1
+%patch -P5 -p1
+%patch -P6 -p1
%{__mv} dnf5-plugins/automatic_plugin/config/{usr/,}lib
@@ -472,9 +515,15 @@ crona itp.
%{__sed} -E -i -e '1s,#!\s*/usr/bin/sh(\s|$),#!/bin/sh\1,' \
dnf5-plugins/automatic_plugin/bin/dnf-automatic
+# fails due to unused functions in json-c headers
+%{__sed} -i -e 's/-Werror)/-Werror -Wno-error=unused-function)/' CMakeLists.txt
+
%build
+# .pc files generation expects relative CMAKE_INSTALL_LIBDIR
%cmake -B build \
+ -DCMAKE_INSTALL_LIBDIR=%{_lib} \
-DPERL_INSTALLDIRS=vendor \
+ -DSYSTEMD_DIR=%{systemdunitdir} \
-DENABLE_SOLV_FOCUSNEW=ON \
-DWITH_COMPS=%{__ON_OFF comps} \
-DWITH_DNF5=%{__ON_OFF dnf5} \
@@ -487,6 +536,7 @@ crona itp.
-DWITH_PERL5=%{__ON_OFF perl} \
-DWITH_PLUGIN_ACTIONS=%{__ON_OFF plugin_actions} \
-DWITH_PLUGIN_APPSTREAM=%{__ON_OFF plugin_appstream} \
+ -DWITH_PLUGIN_MANIFEST=%{__ON_OFF plugin_manifest} \
-DWITH_PLUGIN_RHSM=OFF \
-DWITH_PYTHON_PLUGINS_LOADER=%{__ON_OFF python_plugins_loader} \
-DWITH_PYTHON3=%{__ON_OFF python3} \
@@ -555,20 +605,26 @@ cp -p %{SOURCE10} %{SOURCE11} %{SOURCE12} %{SOURCE13} $RPM_BUILD_ROOT%{_sysconfd
%{__sed} 's|@ARCH@|%{ftp_alt2_arch}|g' < %{SOURCE14} > $RPM_BUILD_ROOT%{_sysconfdir}/dnf/repos.d/pld-%{ftp_alt2_arch}.repo
%endif
-%{__mv} $RPM_BUILD_ROOT%{_localedir}/zh_{Hans,CN}
+# empty variants of zh_CN, zh_TW
+%{__rm} -r $RPM_BUILD_ROOT%{_localedir}/{zh_Hans,zh_Hant}
%find_lang dnf5
+# only empty files so far (in 5.4.6.0)
+#find_lang dnf5-plugin-automatic
%find_lang dnf5-plugin-builddep
%find_lang dnf5-plugin-changelog
%find_lang dnf5-plugin-config-manager
%find_lang dnf5-plugin-copr
%find_lang dnf5-plugin-needs-restarting
%find_lang dnf5-plugin-repoclosure
+# only empty files so far (in 5.4.6.0)
+#find_lang dnf5-plugin-reposync
%find_lang dnf5daemon-client
%find_lang dnf5daemon-server
%find_lang libdnf5
%find_lang libdnf5-cli
%find_lang libdnf5-plugin-actions
+%find_lang libdnf5-plugin-expired-pgp-keys
%clean
rm -rf $RPM_BUILD_ROOT
@@ -620,6 +676,25 @@ rm -rf $RPM_BUILD_ROOT
%dir %{_prefix}/lib/sysimage/libdnf5/offline
%ghost %verify(not md5 mtime size) %{_prefix}/lib/sysimage/libdnf5/*.toml
%ghost %verify(not md5 mtime size) %{_prefix}/lib/sysimage/libdnf5/transaction_history.sqlite*
+%{bash_compdir}/dnf
+%{bash_compdir}/dnf5
+%{zsh_compdir}/_dnf5
+%{_mandir}/man5/dnf*.conf.5*
+%{_mandir}/man5/dnf*.conf-todo.5*
+%{_mandir}/man5/dnf*.conf-deprecated.5*
+%{_mandir}/man5/dnf*.conf-vendorpolicy.5*
+%{_mandir}/man5/dnf*.conf-vendorpolicy-v1_0.5*
+%{_mandir}/man5/dnf*.conf-vendorpolicy-v1_1.5*
+%{_mandir}/man7/dnf*-aliases.7*
+%{_mandir}/man7/dnf*-caching.7*
+%{_mandir}/man7/dnf*-comps.7*
+%{_mandir}/man7/dnf*-filtering.7*
+%{_mandir}/man7/dnf*-forcearch.7*
+%{_mandir}/man7/dnf*-installroot.7*
+%{_mandir}/man7/dnf*-modularity.7*
+%{_mandir}/man7/dnf*-specs.7*
+%{_mandir}/man7/dnf*-system-state.7*
+%{_mandir}/man7/dnf*-changes-from-dnf4.7*
%{_mandir}/man8/dnf.8*
%{_mandir}/man8/dnf5.8*
%{_mandir}/man8/dnf*-advisory.8*
@@ -627,6 +702,7 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man8/dnf*-check.8*
%{_mandir}/man8/dnf*-clean.8*
%{_mandir}/man8/dnf*-distro-sync.8*
+%{_mandir}/man8/dnf*-do.8*
%{_mandir}/man8/dnf*-downgrade.8*
%{_mandir}/man8/dnf*-download.8*
%{_mandir}/man8/dnf*-environment.8*
@@ -647,35 +723,19 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man8/dnf*-repo.8*
%{_mandir}/man8/dnf*-repoquery.8*
%{_mandir}/man8/dnf*-search.8*
+%{_mandir}/man8/dnf*-status.8*
%{_mandir}/man8/dnf*-swap.8*
%{_mandir}/man8/dnf*-upgrade.8*
%{_mandir}/man8/dnf*-versionlock.8*
-%{_mandir}/man7/dnf*-aliases.7*
-%{_mandir}/man7/dnf*-caching.7*
-%{_mandir}/man7/dnf*-comps.7*
-%{_mandir}/man7/dnf*-filtering.7*
-%{_mandir}/man7/dnf*-forcearch.7*
-%{_mandir}/man7/dnf*-installroot.7*
-%{_mandir}/man7/dnf*-modularity.7*
-%{_mandir}/man7/dnf*-specs.7*
-%{_mandir}/man7/dnf*-system-state.7*
-%{_mandir}/man7/dnf*-changes-from-dnf4.7*
-%{_mandir}/man5/dnf*.conf.5*
-%{_mandir}/man5/dnf*.conf-todo.5*
-%{_mandir}/man5/dnf*.conf-deprecated.5*
%{systemdunitdir}/dnf5-makecache.service
%{systemdunitdir}/dnf5-makecache.timer
%if %{with systemd}
%{systemdunitdir}/dnf5-offline-transaction.service
%{systemdunitdir}/dnf5-offline-transaction-cleanup.service
%{systemdunitdir}/system-update.target.wants/dnf5-offline-transaction.service
+%{_tmpfilesdir}/libdnf5.conf
%endif
-%files -n bash-completion-dnf5
-%defattr(644,root,root,755)
-%{bash_compdir}/dnf
-%{bash_compdir}/dnf5
-
%files devel
%defattr(644,root,root,755)
%{_includedir}/dnf5
@@ -708,7 +768,7 @@ rm -rf $RPM_BUILD_ROOT
%files -n libdnf5-cli -f libdnf5-cli.lang
%defattr(644,root,root,755)
-%{_libdir}/libdnf5-cli.so.2
+%{_libdir}/libdnf5-cli.so.3
%files -n libdnf5-cli-devel
%defattr(644,root,root,755)
@@ -772,10 +832,21 @@ rm -rf $RPM_BUILD_ROOT
%{_libdir}/libdnf5/plugins/appstream.so
%endif
+%files -n libdnf5-plugin-local
+%defattr(644,root,root,755)
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/dnf/libdnf5-plugins/local.conf
+%{_libdir}/libdnf5/plugins/local.so
+%{_mandir}/man8/libdnf5-local.8*
+
+%files -n libdnf5-plugin-systemd-inhibit
+%defattr(644,root,root,755)
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/dnf/libdnf5-plugins/00-systemd-inhibit.conf
+%{_libdir}/libdnf5/plugins/systemd-inhibit.so
+
%if %{with plugin_expired_pgp_keys}
-%files -n libdnf5-plugin-expired-pgp-keys
+%files -n libdnf5-plugin-expired-pgp-keys -f libdnf5-plugin-expired-pgp-keys.lang
%defattr(644,root,root,755)
-%{_sysconfdir}/dnf/libdnf5-plugins/expired-pgp-keys.conf
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/dnf/libdnf5-plugins/expired-pgp-keys.conf
%{_libdir}/libdnf5/plugins/expired-pgp-keys.so
%{_mandir}/man8/libdnf5-expired-pgp-keys.8*
%endif
@@ -783,6 +854,7 @@ rm -rf $RPM_BUILD_ROOT
%if %{with python_plugins_loader}
%files -n python3-libdnf5-python-plugins-loader
%defattr(644,root,root,755)
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/dnf/libdnf5-plugins/python_plugins_loader.conf
%{_libdir}/libdnf5/plugins/python_plugins_loader.*
%dir %{py3_sitescriptdir}/libdnf_plugins/
%doc %{py3_sitescriptdir}/libdnf_plugins/README
@@ -799,10 +871,12 @@ rm -rf $RPM_BUILD_ROOT
%files -n dnf5daemon-server -f dnf5daemon-server.lang
%defattr(644,root,root,755)
%attr(755,root,root) %{_sbindir}/dnf5daemon-server
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/dnf/dnf5daemon-server.conf
%{_datadir}/dbus-1/system.d/org.rpm.dnf.v0.conf
%{_datadir}/dbus-1/system-services/org.rpm.dnf.v0.service
%{_datadir}/dbus-1/interfaces/org.rpm.dnf.v0.*.xml
%{_datadir}/polkit-1/actions/org.rpm.dnf.v0.policy
+%{_datadir}/polkit-1/rules.d/org.rpm.dnf.v0.rules
%{systemdunitdir}/dnf5daemon-server.service
%{_mandir}/man8/dnf5daemon-server.8*
%{_mandir}/man8/dnf5daemon-dbus-api.8*
@@ -810,6 +884,7 @@ rm -rf $RPM_BUILD_ROOT
%if %{with dnf5_plugins}
%files plugins -f dnf5-plugin-builddep.lang -f dnf5-plugin-changelog.lang -f dnf5-plugin-config-manager.lang -f dnf5-plugin-copr.lang -f dnf5-plugin-needs-restarting.lang -f dnf5-plugin-repoclosure.lang
+# -f dnf5-plugin-reposync.lang
%defattr(644,root,root,755)
%{_libdir}/dnf5/plugins/builddep_cmd_plugin.so
%{_libdir}/dnf5/plugins/changelog_cmd_plugin.so
@@ -817,6 +892,7 @@ rm -rf $RPM_BUILD_ROOT
%{_libdir}/dnf5/plugins/copr_cmd_plugin.so
%{_libdir}/dnf5/plugins/needs_restarting_cmd_plugin.so
%{_libdir}/dnf5/plugins/repoclosure_cmd_plugin.so
+%{_libdir}/dnf5/plugins/repomanage_cmd_plugin.so
%{_libdir}/dnf5/plugins/reposync_cmd_plugin.so
%{_datadir}/dnf5/aliases.d/compatibility-plugins.conf
%{_datadir}/dnf5/aliases.d/compatibility-reposync.conf
@@ -826,14 +902,17 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man8/dnf*-copr.8*
%{_mandir}/man8/dnf*-needs-restarting.8*
%{_mandir}/man8/dnf*-repoclosure.8*
+%{_mandir}/man8/dnf*-repomanage.8*
%{_mandir}/man8/dnf*-reposync.8*
%files plugin-automatic
+# -f dnf5-plugin-automatic.lang
%defattr(644,root,root,755)
%attr(755,root,root) %{_bindir}/dnf-automatic
#%ghost %{_sysconfdir}/motd.d/dnf5-automatic
%ghost %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/dnf/dnf5-plugins/automatic.conf
%{_libdir}/dnf5/plugins/automatic_cmd_plugin.so
+%{_datadir}/dbus-1/system.d/org.rpm.dnf.v0.Automatic.conf
%{_datadir}/dnf5/dnf5-plugins/automatic.conf
%{_mandir}/man8/dnf*-automatic.8*
%{systemdunitdir}/dnf5-automatic.service
@@ -841,3 +920,10 @@ rm -rf $RPM_BUILD_ROOT
%{systemdunitdir}/dnf-automatic.service
%{systemdunitdir}/dnf-automatic.timer
%endif
+
+%if %{with plugin_manifest}
+%files plugin-manifest
+%defattr(644,root,root,755)
+%{_libdir}/dnf5/plugins/manifest_cmd_plugin.so
+%{_mandir}/man8/dnf*-manifest.8*
+%endif
diff --git a/0001-cmake-Move-sdbus-c-check-to-one-place.patch b/0001-cmake-Move-sdbus-c-check-to-one-place.patch
deleted file mode 100644
index f0379b8..0000000
--- a/0001-cmake-Move-sdbus-c-check-to-one-place.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From 1e1a0627a5102f13f5e4515823ef2305bd4e9763 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha at redhat.com>
-Date: Fri, 17 May 2024 12:11:06 +0200
-Subject: [PATCH 01/24] cmake: Move sdbus-c++ check to one place
-
-Also set SDBUS_CPP_VERSION_2 macro in case sdbus-c++ was found in
-version 2. This enables conditional compilation according the version of
-the library found.
----
- cmake/sdbus_cpp.cmake | 10 ++++++++++
- dnf5-plugins/needs_restarting_plugin/CMakeLists.txt | 2 +-
- dnf5/CMakeLists.txt | 2 +-
- dnf5daemon-client/CMakeLists.txt | 3 +--
- dnf5daemon-server/CMakeLists.txt | 2 +-
- 5 files changed, 14 insertions(+), 5 deletions(-)
- create mode 100644 cmake/sdbus_cpp.cmake
-
-diff --git a/cmake/sdbus_cpp.cmake b/cmake/sdbus_cpp.cmake
-new file mode 100644
-index 00000000..77aced9e
---- /dev/null
-+++ b/cmake/sdbus_cpp.cmake
-@@ -0,0 +1,10 @@
-+# Attempt to find sdbus-c++ version 2 (preferred)
-+pkg_check_modules(SDBUS_CPP REQUIRED sdbus-c++>=1)
-+
-+if(SDBUS_CPP_VERSION LESS 2)
-+ message(STATUS "Using sdbus-c++ version 1")
-+else()
-+ # Define macro for version 2 if found
-+ add_definitions(-DSDBUS_CPP_VERSION_2)
-+ message(STATUS "Using sdbus-c++ version 2")
-+endif()
-diff --git a/dnf5-plugins/needs_restarting_plugin/CMakeLists.txt b/dnf5-plugins/needs_restarting_plugin/CMakeLists.txt
-index 651d9f3d..cf290146 100644
---- a/dnf5-plugins/needs_restarting_plugin/CMakeLists.txt
-+++ b/dnf5-plugins/needs_restarting_plugin/CMakeLists.txt
-@@ -7,7 +7,7 @@ add_library(needs_restarting_cmd_plugin MODULE needs_restarting.cpp needs_restar
- # disable the 'lib' prefix in order to create needs_restarting_cmd_plugin.so
- set_target_properties(needs_restarting_cmd_plugin PROPERTIES PREFIX "")
-
--pkg_check_modules(SDBUS_CPP REQUIRED sdbus-c++)
-+include(sdbus_cpp)
-
- target_link_libraries(needs_restarting_cmd_plugin PRIVATE dnf5 libdnf5 libdnf5-cli ${SDBUS_CPP_LIBRARIES})
-
-diff --git a/dnf5/CMakeLists.txt b/dnf5/CMakeLists.txt
-index c127f626..d1438d30 100644
---- a/dnf5/CMakeLists.txt
-+++ b/dnf5/CMakeLists.txt
-@@ -45,7 +45,7 @@ install(TARGETS dnf5 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
- pkg_check_modules(RPM REQUIRED rpm>=4.17.0)
-
- if(WITH_SYSTEMD)
-- pkg_check_modules(SDBUS_CPP REQUIRED sdbus-c++)
-+ include(sdbus_cpp)
- pkg_check_modules(LIBSYSTEMD REQUIRED libsystemd)
- add_definitions(-DWITH_SYSTEMD)
- target_link_libraries(dnf5 PRIVATE ${RPM_LIBRARIES} ${SDBUS_CPP_LIBRARIES} ${LIBSYSTEMD_LIBRARIES})
-diff --git a/dnf5daemon-client/CMakeLists.txt b/dnf5daemon-client/CMakeLists.txt
-index 79e4cb41..195a825f 100644
---- a/dnf5daemon-client/CMakeLists.txt
-+++ b/dnf5daemon-client/CMakeLists.txt
-@@ -13,8 +13,7 @@ include_directories(.)
- # TODO(mblaha) workaround for dnf5daemon-client using server's headers, fix
- include_directories(..)
-
--pkg_check_modules(SDBUS_CPP REQUIRED sdbus-c++>=0.9.0)
--
-+include(sdbus_cpp)
- pkg_check_modules(JSONC REQUIRED json-c)
- include_directories(${JSONC_INCLUDE_DIRS})
-
-diff --git a/dnf5daemon-server/CMakeLists.txt b/dnf5daemon-server/CMakeLists.txt
-index d683a09a..3cfc65c3 100644
---- a/dnf5daemon-server/CMakeLists.txt
-+++ b/dnf5daemon-server/CMakeLists.txt
-@@ -12,7 +12,7 @@ add_definitions(-DGETTEXT_DOMAIN=\"${GETTEXT_DOMAIN}\")
- include_directories(.)
-
- pkg_check_modules(JSONC REQUIRED json-c)
--pkg_check_modules(SDBUS_CPP REQUIRED sdbus-c++>=0.9.0)
-+include(sdbus_cpp)
- find_package(Threads)
-
- include_directories(${JSONC_INCLUDE_DIRS})
---
-2.48.1
-
diff --git a/0002-dnfdaemon-sdbus-cpp-v.-2-requires-strong-types.patch b/0002-dnfdaemon-sdbus-cpp-v.-2-requires-strong-types.patch
deleted file mode 100644
index 9cb4ed6..0000000
--- a/0002-dnfdaemon-sdbus-cpp-v.-2-requires-strong-types.patch
+++ /dev/null
@@ -1,403 +0,0 @@
-From cdf99383de790a1c7497f297094c156b9b862d86 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha at redhat.com>
-Date: Fri, 7 Jun 2024 11:52:55 +0200
-Subject: [PATCH 02/24] dnfdaemon: sdbus-cpp v. 2 requires strong types
-
-- Use InterfaceName type instead of char * for interface names
-- Use SignalName type instead of char * for signal names
-- Use ServiceName instead of char * for bus names
-- Use Error::Name type instead of char * for errors
----
- .../needs_restarting.cpp | 9 +-
- dnf5/commands/offline/offline.cpp | 9 +-
- dnf5daemon-server/callbacks.cpp | 9 +-
- dnf5daemon-server/callbacks.hpp | 11 ++-
- dnf5daemon-server/dbus.hpp | 83 ++++++++++---------
- dnf5daemon-server/services/rpm/rpm.cpp | 3 +-
- dnf5daemon-server/session.cpp | 10 +--
- dnf5daemon-server/session.hpp | 6 +-
- dnf5daemon-server/session_manager.cpp | 5 +-
- include/libdnf5/sdbus_compat.hpp | 39 +++++++++
- 10 files changed, 118 insertions(+), 66 deletions(-)
- create mode 100644 include/libdnf5/sdbus_compat.hpp
-
-diff --git a/dnf5-plugins/needs_restarting_plugin/needs_restarting.cpp b/dnf5-plugins/needs_restarting_plugin/needs_restarting.cpp
-index e8f695ba..6d9de330 100644
---- a/dnf5-plugins/needs_restarting_plugin/needs_restarting.cpp
-+++ b/dnf5-plugins/needs_restarting_plugin/needs_restarting.cpp
-@@ -25,6 +25,7 @@ along with libdnf. If not, see <https://www.gnu.org/licenses/>.
- #include <libdnf5/conf/option_string.hpp>
- #include <libdnf5/rpm/package.hpp>
- #include <libdnf5/rpm/package_query.hpp>
-+#include <libdnf5/sdbus_compat.hpp>
- #include <libdnf5/utils/bgettext/bgettext-mark-domain.h>
- #include <utils/string.hpp>
-
-@@ -33,10 +34,10 @@ along with libdnf. If not, see <https://www.gnu.org/licenses/>.
- #include <iostream>
- #include <vector>
-
--const std::string SYSTEMD_DESTINATION_NAME{"org.freedesktop.systemd1"};
--const std::string SYSTEMD_OBJECT_PATH{"/org/freedesktop/systemd1"};
--const std::string SYSTEMD_MANAGER_INTERFACE{"org.freedesktop.systemd1.Manager"};
--const std::string SYSTEMD_UNIT_INTERFACE{"org.freedesktop.systemd1.Unit"};
-+const SDBUS_SERVICE_NAME_TYPE SYSTEMD_DESTINATION_NAME{"org.freedesktop.systemd1"};
-+const sdbus::ObjectPath SYSTEMD_OBJECT_PATH{"/org/freedesktop/systemd1"};
-+const SDBUS_INTERFACE_NAME_TYPE SYSTEMD_MANAGER_INTERFACE{"org.freedesktop.systemd1.Manager"};
-+const SDBUS_INTERFACE_NAME_TYPE SYSTEMD_UNIT_INTERFACE{"org.freedesktop.systemd1.Unit"};
-
- namespace dnf5 {
-
-diff --git a/dnf5/commands/offline/offline.cpp b/dnf5/commands/offline/offline.cpp
-index 11ae1dad..fa1240e2 100644
---- a/dnf5/commands/offline/offline.cpp
-+++ b/dnf5/commands/offline/offline.cpp
-@@ -29,6 +29,7 @@ along with libdnf. If not, see <https://www.gnu.org/licenses/>.
- #include <libdnf5/base/goal.hpp>
- #include <libdnf5/conf/const.hpp>
- #include <libdnf5/conf/option_path.hpp>
-+#include <libdnf5/sdbus_compat.hpp>
- #include <libdnf5/transaction/offline.hpp>
- #include <libdnf5/utils/bgettext/bgettext-lib.h>
- #include <libdnf5/utils/bgettext/bgettext-mark-domain.h>
-@@ -48,10 +49,10 @@ using namespace libdnf5::cli;
-
- const std::string & ID_TO_IDENTIFY_BOOTS = libdnf5::offline::OFFLINE_STARTED_ID;
-
--const std::string SYSTEMD_DESTINATION_NAME{"org.freedesktop.systemd1"};
--const std::string SYSTEMD_OBJECT_PATH{"/org/freedesktop/systemd1"};
--const std::string SYSTEMD_MANAGER_INTERFACE{"org.freedesktop.systemd1.Manager"};
--const std::string SYSTEMD_UNIT_INTERFACE{"org.freedesktop.systemd1.Unit"};
-+const SDBUS_SERVICE_NAME_TYPE SYSTEMD_DESTINATION_NAME{"org.freedesktop.systemd1"};
-+const sdbus::ObjectPath SYSTEMD_OBJECT_PATH{"/org/freedesktop/systemd1"};
-+const SDBUS_INTERFACE_NAME_TYPE SYSTEMD_MANAGER_INTERFACE{"org.freedesktop.systemd1.Manager"};
-+const SDBUS_INTERFACE_NAME_TYPE SYSTEMD_UNIT_INTERFACE{"org.freedesktop.systemd1.Unit"};
- const std::string SYSTEMD_SERVICE_NAME{"dnf5-offline-transaction.service"};
-
- int call(const std::string & command, const std::vector<std::string> & args) {
-diff --git a/dnf5daemon-server/callbacks.cpp b/dnf5daemon-server/callbacks.cpp
-index cefb9397..aa0ebb7e 100644
---- a/dnf5daemon-server/callbacks.cpp
-+++ b/dnf5daemon-server/callbacks.cpp
-@@ -35,7 +35,8 @@ DbusCallback::DbusCallback(Session & session) : session(session) {
- dbus_object = session.get_dbus_object();
- }
-
--sdbus::Signal DbusCallback::create_signal(std::string interface, std::string signal_name) {
-+sdbus::Signal DbusCallback::create_signal(
-+ const SDBUS_INTERFACE_NAME_TYPE & interface, const SDBUS_SIGNAL_NAME_TYPE & signal_name) {
- auto signal = dbus_object->createSignal(interface, signal_name);
- signal.setDestination(session.get_sender());
- signal << session.get_object_path();
-@@ -45,7 +46,7 @@ sdbus::Signal DbusCallback::create_signal(std::string interface, std::string sig
- std::chrono::time_point<std::chrono::steady_clock> DbusCallback::prev_print_time = std::chrono::steady_clock::now();
-
-
--sdbus::Signal DownloadCB::create_signal_download(const std::string & signal_name, void * user_data) {
-+sdbus::Signal DownloadCB::create_signal_download(const SDBUS_SIGNAL_NAME_TYPE & signal_name, void * user_data) {
- auto signal = create_signal(dnfdaemon::INTERFACE_BASE, signal_name);
- if (user_data) {
- auto * data = reinterpret_cast<DownloadUserData *>(user_data);
-@@ -121,7 +122,9 @@ bool KeyImportRepoCB::repokey_import(const libdnf5::rpm::KeyInfo & key_info) {
-
-
- sdbus::Signal DbusTransactionCB::create_signal_pkg(
-- std::string interface, std::string signal_name, const std::string & nevra) {
-+ const SDBUS_INTERFACE_NAME_TYPE & interface,
-+ const SDBUS_SIGNAL_NAME_TYPE & signal_name,
-+ const std::string & nevra) {
- auto signal = create_signal(interface, signal_name);
- signal << nevra;
- return signal;
-diff --git a/dnf5daemon-server/callbacks.hpp b/dnf5daemon-server/callbacks.hpp
-index 97ab8a1e..f165479d 100644
---- a/dnf5daemon-server/callbacks.hpp
-+++ b/dnf5daemon-server/callbacks.hpp
-@@ -25,6 +25,7 @@ along with libdnf. If not, see <https://www.gnu.org/licenses/>.
- #include <libdnf5/repo/repo_callbacks.hpp>
- #include <libdnf5/rpm/rpm_signature.hpp>
- #include <libdnf5/rpm/transaction_callbacks.hpp>
-+#include <libdnf5/sdbus_compat.hpp>
- #include <sdbus-c++/sdbus-c++.h>
-
- #include <chrono>
-@@ -49,7 +50,8 @@ protected:
- Session & session;
- sdbus::IObject * dbus_object;
-
-- virtual sdbus::Signal create_signal(std::string interface, std::string signal_name);
-+ virtual sdbus::Signal create_signal(
-+ const SDBUS_INTERFACE_NAME_TYPE & interface, const SDBUS_SIGNAL_NAME_TYPE & signal_name);
- static bool is_time_to_print() {
- auto now = std::chrono::steady_clock::now();
- auto delta = now - prev_print_time;
-@@ -76,7 +78,7 @@ public:
- int mirror_failure(void * user_cb_data, const char * msg, const char * url, const char * metadata) override;
-
- private:
-- sdbus::Signal create_signal_download(const std::string & signal_name, void * user_data);
-+ sdbus::Signal create_signal_download(const SDBUS_SIGNAL_NAME_TYPE & signal_name, void * user_data);
- };
-
-
-@@ -146,7 +148,10 @@ public:
- void finish();
-
- private:
-- sdbus::Signal create_signal_pkg(std::string interface, std::string signal_name, const std::string & nevra);
-+ sdbus::Signal create_signal_pkg(
-+ const SDBUS_INTERFACE_NAME_TYPE & interface,
-+ const SDBUS_SIGNAL_NAME_TYPE & signal_name,
-+ const std::string & nevra);
- };
-
- } // namespace dnf5daemon
-diff --git a/dnf5daemon-server/dbus.hpp b/dnf5daemon-server/dbus.hpp
-index 61482b90..68df8db1 100644
---- a/dnf5daemon-server/dbus.hpp
-+++ b/dnf5daemon-server/dbus.hpp
-@@ -20,6 +20,7 @@ along with libdnf. If not, see <https://www.gnu.org/licenses/>.
- #ifndef DNF5DAEMON_SERVER_DBUS_HPP
- #define DNF5DAEMON_SERVER_DBUS_HPP
-
-+#include <libdnf5/sdbus_compat.hpp>
- #include <sdbus-c++/sdbus-c++.h>
-
- #include <map>
-@@ -51,46 +52,46 @@ using AdvisoryReference = sdbus::Struct<std::string, std::string, std::string, s
-
- // constants
-
--const char * const DBUS_NAME = "org.rpm.dnf.v0";
--const char * const DBUS_OBJECT_PATH = "/org/rpm/dnf/v0";
-+const SDBUS_SERVICE_NAME_TYPE DBUS_NAME{"org.rpm.dnf.v0"};
-+const sdbus::ObjectPath DBUS_OBJECT_PATH{"/org/rpm/dnf/v0"};
-
- // interfaces
--const char * const INTERFACE_BASE = "org.rpm.dnf.v0.Base";
--const char * const INTERFACE_REPO = "org.rpm.dnf.v0.rpm.Repo";
--const char * const INTERFACE_RPM = "org.rpm.dnf.v0.rpm.Rpm";
--const char * const INTERFACE_GOAL = "org.rpm.dnf.v0.Goal";
--const char * const INTERFACE_GROUP = "org.rpm.dnf.v0.comps.Group";
--const char * const INTERFACE_ADVISORY = "org.rpm.dnf.v0.Advisory";
--const char * const INTERFACE_OFFLINE = "org.rpm.dnf.v0.Offline";
--const char * const INTERFACE_SESSION_MANAGER = "org.rpm.dnf.v0.SessionManager";
-+const SDBUS_INTERFACE_NAME_TYPE INTERFACE_BASE{"org.rpm.dnf.v0.Base"};
-+const SDBUS_INTERFACE_NAME_TYPE INTERFACE_REPO{"org.rpm.dnf.v0.rpm.Repo"};
-+const SDBUS_INTERFACE_NAME_TYPE INTERFACE_RPM{"org.rpm.dnf.v0.rpm.Rpm"};
-+const SDBUS_INTERFACE_NAME_TYPE INTERFACE_GOAL{"org.rpm.dnf.v0.Goal"};
-+const SDBUS_INTERFACE_NAME_TYPE INTERFACE_GROUP{"org.rpm.dnf.v0.comps.Group"};
-+const SDBUS_INTERFACE_NAME_TYPE INTERFACE_ADVISORY{"org.rpm.dnf.v0.Advisory"};
-+const SDBUS_INTERFACE_NAME_TYPE INTERFACE_OFFLINE{"org.rpm.dnf.v0.Offline"};
-+const SDBUS_INTERFACE_NAME_TYPE INTERFACE_SESSION_MANAGER{"org.rpm.dnf.v0.SessionManager"};
-
- // signals
--const char * const SIGNAL_DOWNLOAD_ADD_NEW = "download_add_new";
--const char * const SIGNAL_DOWNLOAD_PROGRESS = "download_progress";
--const char * const SIGNAL_DOWNLOAD_END = "download_end";
--const char * const SIGNAL_DOWNLOAD_MIRROR_FAILURE = "download_mirror_failure";
--
--const char * const SIGNAL_REPO_KEY_IMPORT_REQUEST = "repo_key_import_request";
--
--const char * const SIGNAL_TRANSACTION_BEFORE_BEGIN = "transaction_before_begin";
--const char * const SIGNAL_TRANSACTION_AFTER_COMPLETE = "transaction_after_complete";
--const char * const SIGNAL_TRANSACTION_TRANSACTION_START = "transaction_transaction_start";
--const char * const SIGNAL_TRANSACTION_TRANSACTION_PROGRESS = "transaction_transaction_progress";
--const char * const SIGNAL_TRANSACTION_TRANSACTION_STOP = "transaction_transaction_stop";
--const char * const SIGNAL_TRANSACTION_VERIFY_START = "transaction_verify_start";
--const char * const SIGNAL_TRANSACTION_VERIFY_PROGRESS = "transaction_verify_progress";
--const char * const SIGNAL_TRANSACTION_VERIFY_STOP = "transaction_verify_stop";
--const char * const SIGNAL_TRANSACTION_ACTION_START = "transaction_action_start";
--const char * const SIGNAL_TRANSACTION_ACTION_PROGRESS = "transaction_action_progress";
--const char * const SIGNAL_TRANSACTION_ACTION_STOP = "transaction_action_stop";
--const char * const SIGNAL_TRANSACTION_SCRIPT_START = "transaction_script_start";
--const char * const SIGNAL_TRANSACTION_SCRIPT_STOP = "transaction_script_stop";
--const char * const SIGNAL_TRANSACTION_SCRIPT_ERROR = "transaction_script_error";
--const char * const SIGNAL_TRANSACTION_UNPACK_ERROR = "transaction_unpack_error";
--const char * const SIGNAL_TRANSACTION_ELEM_PROGRESS = "transaction_elem_progress";
--const char * const SIGNAL_TRANSACTION_FINISHED = "transaction_finished";
--
--const char * const SIGNAL_WRITE_TO_FD_FINISHED = "write_to_fd_finished";
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_DOWNLOAD_ADD_NEW{"download_add_new"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_DOWNLOAD_PROGRESS{"download_progress"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_DOWNLOAD_END{"download_end"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_DOWNLOAD_MIRROR_FAILURE{"download_mirror_failure"};
-+
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_REPO_KEY_IMPORT_REQUEST{"repo_key_import_request"};
-+
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_BEFORE_BEGIN{"transaction_before_begin"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_AFTER_COMPLETE{"transaction_after_complete"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_TRANSACTION_START{"transaction_transaction_start"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_TRANSACTION_PROGRESS{"transaction_transaction_progress"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_TRANSACTION_STOP{"transaction_transaction_stop"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_VERIFY_START{"transaction_verify_start"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_VERIFY_PROGRESS{"transaction_verify_progress"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_VERIFY_STOP{"transaction_verify_stop"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_ACTION_START{"transaction_action_start"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_ACTION_PROGRESS{"transaction_action_progress"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_ACTION_STOP{"transaction_action_stop"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_SCRIPT_START{"transaction_script_start"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_SCRIPT_STOP{"transaction_script_stop"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_SCRIPT_ERROR{"transaction_script_error"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_UNPACK_ERROR{"transaction_unpack_error"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_ELEM_PROGRESS{"transaction_elem_progress"};
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_TRANSACTION_FINISHED{"transaction_finished"};
-+
-+const SDBUS_SIGNAL_NAME_TYPE SIGNAL_WRITE_TO_FD_FINISHED{"write_to_fd_finished"};
-
- // polkit actions
- const char * const POLKIT_REPOCONF_WRITE = "org.rpm.dnf.v0.rpm.Repo.conf_write";
-@@ -99,11 +100,11 @@ const char * const POLKIT_CONFIRM_KEY_IMPORT = "org.rpm.dnf.v0.rpm.Repo.confirm_
- const char * const POLKIT_CONFIG_OVERRIDE = "org.rpm.dnf.v0.base.Config.override";
-
- // errors
--const char * const ERROR = "org.rpm.dnf.v0.Error";
--const char * const ERROR_REPOCONF = "org.rpm.dnf.v0.rpm.Repo.ConfError";
--const char * const ERROR_REPO_ID_UNKNOWN = "org.rpm.dnf.v0.rpm.Repo.NoMatchingIdError";
--const char * const ERROR_RESOLVE = "org.rpm.dnf.v0.rpm.Rpm.ResolveError";
--const char * const ERROR_TRANSACTION = "org.rpm.dnf.v0.rpm.Rpm.TransactionError";
-+const SDBUS_ERROR_NAME_TYPE ERROR{"org.rpm.dnf.v0.Error"};
-+const SDBUS_ERROR_NAME_TYPE ERROR_REPOCONF{"org.rpm.dnf.v0.rpm.Repo.ConfError"};
-+const SDBUS_ERROR_NAME_TYPE ERROR_REPO_ID_UNKNOWN{"org.rpm.dnf.v0.rpm.Repo.NoMatchingIdError"};
-+const SDBUS_ERROR_NAME_TYPE ERROR_RESOLVE{"org.rpm.dnf.v0.rpm.Rpm.ResolveError"};
-+const SDBUS_ERROR_NAME_TYPE ERROR_TRANSACTION{"org.rpm.dnf.v0.rpm.Rpm.TransactionError"};
-
- } // namespace dnfdaemon
-
-diff --git a/dnf5daemon-server/services/rpm/rpm.cpp b/dnf5daemon-server/services/rpm/rpm.cpp
-index 2a8ff695..83cf253e 100644
---- a/dnf5daemon-server/services/rpm/rpm.cpp
-+++ b/dnf5daemon-server/services/rpm/rpm.cpp
-@@ -467,7 +467,8 @@ void Rpm::list_fd(sdbus::MethodCall & call, const std::string & transfer_id) {
-
- // signal client that the transfer has finished and the output file descriptor is closed
- auto dbus_object = get_session().get_dbus_object();
-- auto signal = dbus_object->createSignal(call.getInterfaceName(), dnfdaemon::SIGNAL_WRITE_TO_FD_FINISHED);
-+ auto signal = dbus_object->createSignal(
-+ SDBUS_INTERFACE_NAME_TYPE{call.getInterfaceName()}, dnfdaemon::SIGNAL_WRITE_TO_FD_FINISHED);
- signal << error_msg.empty();
- signal << transfer_id;
- signal << error_msg;
-diff --git a/dnf5daemon-server/session.cpp b/dnf5daemon-server/session.cpp
-index 06911587..e5363521 100644
---- a/dnf5daemon-server/session.cpp
-+++ b/dnf5daemon-server/session.cpp
-@@ -133,8 +133,8 @@ void Session::setup_base() {
- Session::Session(
- sdbus::IConnection & connection,
- dnfdaemon::KeyValueMap session_configuration,
-- std::string object_path,
-- std::string sender)
-+ const sdbus::ObjectPath & object_path,
-+ const std::string & sender)
- : connection(connection),
- session_configuration(session_configuration),
- object_path(object_path),
-@@ -264,9 +264,9 @@ bool Session::read_all_repos() {
- bool Session::check_authorization(
- const std::string & actionid, const std::string & sender, bool allow_user_interaction) {
- // create proxy for PolicyKit1 object
-- const std::string destination_name = "org.freedesktop.PolicyKit1";
-- const std::string object_path = "/org/freedesktop/PolicyKit1/Authority";
-- const std::string interface_name = "org.freedesktop.PolicyKit1.Authority";
-+ const SDBUS_SERVICE_NAME_TYPE destination_name{"org.freedesktop.PolicyKit1"};
-+ const sdbus::ObjectPath object_path{"/org/freedesktop/PolicyKit1/Authority"};
-+ const SDBUS_INTERFACE_NAME_TYPE interface_name{"org.freedesktop.PolicyKit1.Authority"};
- auto polkit_proxy = sdbus::createProxy(connection, destination_name, object_path);
- polkit_proxy->finishRegistration();
-
-diff --git a/dnf5daemon-server/session.hpp b/dnf5daemon-server/session.hpp
-index 046c89d0..9a90be8a 100644
---- a/dnf5daemon-server/session.hpp
-+++ b/dnf5daemon-server/session.hpp
-@@ -56,8 +56,8 @@ public:
- Session(
- sdbus::IConnection & connection,
- dnfdaemon::KeyValueMap session_configuration,
-- std::string object_path,
-- std::string sender);
-+ const sdbus::ObjectPath & object_path,
-+ const std::string & sender);
- ~Session();
-
- template <typename ItemType>
-@@ -69,7 +69,7 @@ public:
- return dnfdaemon::key_value_map_get<ItemType>(session_configuration, key);
- }
-
-- const sdbus::ObjectPath & get_object_path() const { return object_path; };
-+ const sdbus::ObjectPath & get_object_path() { return object_path; };
- sdbus::IConnection & get_connection() { return connection; };
- libdnf5::Base * get_base() { return base.get(); };
- ThreadsManager & get_threads_manager() { return threads_manager; };
-diff --git a/dnf5daemon-server/session_manager.cpp b/dnf5daemon-server/session_manager.cpp
-index f5d184b1..8ea9d2c8 100644
---- a/dnf5daemon-server/session_manager.cpp
-+++ b/dnf5daemon-server/session_manager.cpp
-@@ -70,7 +70,8 @@ void SessionManager::dbus_register() {
- dbus_object->finishRegistration();
-
- // register signal handler for NameOwnerChanged
-- name_changed_proxy = sdbus::createProxy(*connection, "org.freedesktop.DBus", "/org/freedesktop/DBus");
-+ name_changed_proxy = sdbus::createProxy(
-+ *connection, SDBUS_SERVICE_NAME_TYPE{"org.freedesktop.DBus"}, sdbus::ObjectPath{"/org/freedesktop/DBus"});
- name_changed_proxy->registerSignalHandler(
- "org.freedesktop.DBus", "NameOwnerChanged", [this](sdbus::Signal signal) -> void {
- threads_manager.handle_signal(*this, &SessionManager::on_name_owner_changed, signal);
-@@ -130,7 +131,7 @@ sdbus::MethodReply SessionManager::open_session(sdbus::MethodCall & call) {
- call >> configuration;
-
- // generate UUID-like session id
-- const std::string sessionid = dnfdaemon::DBUS_OBJECT_PATH + std::string("/") + gen_session_id();
-+ const sdbus::ObjectPath sessionid{dnfdaemon::DBUS_OBJECT_PATH + std::string("/") + gen_session_id()};
- // store newly created session
- {
- std::lock_guard<std::mutex> lock(sessions_mutex);
-diff --git a/include/libdnf5/sdbus_compat.hpp b/include/libdnf5/sdbus_compat.hpp
-new file mode 100644
-index 00000000..029182dd
---- /dev/null
-+++ b/include/libdnf5/sdbus_compat.hpp
-@@ -0,0 +1,39 @@
-+/*
-+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 <https://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef DNF5DAEMON_SERVER_SDBUS_COMPAT_HPP
-+#define DNF5DAEMON_SERVER_SDBUS_COMPAT_HPP
-+
-+#ifdef SDBUS_CPP_VERSION_2
-+
-+#define SDBUS_INTERFACE_NAME_TYPE sdbus::InterfaceName
-+#define SDBUS_SIGNAL_NAME_TYPE sdbus::SignalName
-+#define SDBUS_SERVICE_NAME_TYPE sdbus::ServiceName
-+#define SDBUS_ERROR_NAME_TYPE sdbus::Error::Name
-+
-+#else
-+
-+#define SDBUS_INTERFACE_NAME_TYPE std::string
-+#define SDBUS_SIGNAL_NAME_TYPE std::string
-+#define SDBUS_SERVICE_NAME_TYPE std::string
-+#define SDBUS_ERROR_NAME_TYPE std::string
-+
-+#endif
-+
-+#endif
---
-2.48.1
-
diff --git a/0003-dnfdaemon-sdbus-Variant-constructor-is-explicit.patch b/0003-dnfdaemon-sdbus-Variant-constructor-is-explicit.patch
deleted file mode 100644
index 19773d8..0000000
--- a/0003-dnfdaemon-sdbus-Variant-constructor-is-explicit.patch
+++ /dev/null
@@ -1,425 +0,0 @@
-From af00463e6449f796dad0e4a4da2cb86a6373eb72 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha at redhat.com>
-Date: Fri, 17 May 2024 13:01:30 +0200
-Subject: [PATCH 03/24] dnfdaemon: sdbus::Variant constructor is explicit
-
-In version 2 the sdbus::Variant constuctor was made explicit.
----
- .../commands/advisory/advisory_subcommand.cpp | 26 +++++++-------
- dnf5daemon-client/commands/command.cpp | 4 +--
- .../commands/group/group_list.cpp | 14 ++++----
- .../commands/install/install.cpp | 4 +--
- .../commands/repolist/repolist.cpp | 8 ++---
- .../commands/repoquery/repoquery.cpp | 14 ++++----
- .../system-upgrade/system-upgrade.cpp | 2 +-
- dnf5daemon-client/context.cpp | 6 ++--
- dnf5daemon-server/advisory.cpp | 34 +++++++++----------
- dnf5daemon-server/services/goal/goal.cpp | 16 ++++-----
- .../services/offline/offline.cpp | 16 ++++-----
- dnf5daemon-server/session.cpp | 2 +-
- 12 files changed, 73 insertions(+), 73 deletions(-)
-
-diff --git a/dnf5daemon-client/commands/advisory/advisory_subcommand.cpp b/dnf5daemon-client/commands/advisory/advisory_subcommand.cpp
-index 9c612869..9fe38858 100644
---- a/dnf5daemon-client/commands/advisory/advisory_subcommand.cpp
-+++ b/dnf5daemon-client/commands/advisory/advisory_subcommand.cpp
-@@ -57,9 +57,9 @@ void AdvisorySubCommand::set_argument_parser() {
-
- dnfdaemon::KeyValueMap AdvisorySubCommand::session_config() {
- dnfdaemon::KeyValueMap cfg = {};
-- cfg["load_system_repo"] = true;
-- cfg["load_available_repos"] = true;
-- cfg["optional_metadata_types"] = std::vector<std::string>{libdnf5::METADATA_TYPE_UPDATEINFO};
-+ cfg["load_system_repo"] = sdbus::Variant(true);
-+ cfg["load_available_repos"] = sdbus::Variant(true);
-+ cfg["optional_metadata_types"] = sdbus::Variant(std::vector<std::string>{libdnf5::METADATA_TYPE_UPDATEINFO});
- return cfg;
- }
-
-@@ -69,7 +69,7 @@ void AdvisorySubCommand::run() {
- // convert arguments to dbus call options
- dnfdaemon::KeyValueMap options = {};
-
-- options["names"] = advisory_names->get_value();
-+ options["names"] = sdbus::Variant(advisory_names->get_value());
-
- // by default return available advisories
- std::string availability = "available";
-@@ -80,7 +80,7 @@ void AdvisorySubCommand::run() {
- } else if (updates->get_value()) {
- availability = "updates";
- }
-- options["availability"] = availability; // string
-+ options["availability"] = sdbus::Variant(availability); // string
-
- // advisory types
- std::vector<std::string> advisory_types{};
-@@ -96,16 +96,16 @@ void AdvisorySubCommand::run() {
- if (advisory_newpackage->get_value()) {
- advisory_types.emplace_back("newpackage");
- }
-- options["types"] = advisory_types; // vector<string>
-+ options["types"] = sdbus::Variant(advisory_types); // vector<string>
-
-- options["contains_pkgs"] = contains_pkgs->get_value(); // vector<string>
-- options["severities"] = advisory_severities->get_value(); // vector<string>
-- options["reference_bzs"] = advisory_bzs->get_value(); // vector<string>
-- options["reference_cves"] = advisory_cves->get_value(); // vector<string>
-- options["with_bz"] = with_bz->get_value(); // bool
-- options["with_cve"] = with_cve->get_value(); // bool
-+ options["contains_pkgs"] = sdbus::Variant(contains_pkgs->get_value()); // vector<string>
-+ options["severities"] = sdbus::Variant(advisory_severities->get_value()); // vector<string>
-+ options["reference_bzs"] = sdbus::Variant(advisory_bzs->get_value()); // vector<string>
-+ options["reference_cves"] = sdbus::Variant(advisory_cves->get_value()); // vector<string>
-+ options["with_bz"] = sdbus::Variant(with_bz->get_value()); // bool
-+ options["with_cve"] = sdbus::Variant(with_cve->get_value()); // bool
-
-- options["advisory_attrs"] = advisory_attrs;
-+ options["advisory_attrs"] = sdbus::Variant(advisory_attrs);
-
- // call the server
- dnfdaemon::KeyValueMapList raw_advisories;
-diff --git a/dnf5daemon-client/commands/command.cpp b/dnf5daemon-client/commands/command.cpp
-index 67a4e8ea..6f9f55ac 100644
---- a/dnf5daemon-client/commands/command.cpp
-+++ b/dnf5daemon-client/commands/command.cpp
-@@ -42,7 +42,7 @@ void TransactionCommand::run_transaction(bool offline) {
- dnfdaemon::KeyValueMap options = {};
-
- // resolve the transaction
-- options["allow_erasing"] = ctx.allow_erasing.get_value();
-+ options["allow_erasing"] = sdbus::Variant(ctx.allow_erasing.get_value());
- std::vector<dnfdaemon::DbusTransactionItem> transaction;
- unsigned int result_int;
- ctx.session_proxy->callMethod("resolve")
-@@ -80,7 +80,7 @@ void TransactionCommand::run_transaction(bool offline) {
-
- // do the transaction
- options.clear();
-- options["offline"] = offline;
-+ options["offline"] = sdbus::Variant(offline);
- ctx.session_proxy->callMethod("do_transaction")
- .onInterface(dnfdaemon::INTERFACE_GOAL)
- .withTimeout(static_cast<uint64_t>(-1))
-diff --git a/dnf5daemon-client/commands/group/group_list.cpp b/dnf5daemon-client/commands/group/group_list.cpp
-index 8bd7e194..e99c0c90 100644
---- a/dnf5daemon-client/commands/group/group_list.cpp
-+++ b/dnf5daemon-client/commands/group/group_list.cpp
-@@ -72,7 +72,7 @@ void GroupListCommand::run() {
- patterns.emplace_back(option->get_value());
- }
- }
-- options["patterns"] = patterns;
-+ options["patterns"] = sdbus::Variant(patterns);
-
- std::vector<std::string> attributes{"groupid", "name", "installed"};
- if (command == "info") {
-@@ -81,10 +81,10 @@ void GroupListCommand::run() {
- attributes.reserve(attributes.size() + more_attributes.size());
- std::move(std::begin(more_attributes), std::end(more_attributes), std::back_inserter(attributes));
- }
-- options["attributes"] = attributes;
-+ options["attributes"] = sdbus::Variant(attributes);
-
- if (hidden->get_value() || !patterns.empty()) {
-- options["with_hidden"] = true;
-+ options["with_hidden"] = sdbus::Variant(true);
- }
-
- std::string scope = "all";
-@@ -93,14 +93,14 @@ void GroupListCommand::run() {
- } else if (available->get_value()) {
- scope = "available";
- }
-- options["scope"] = scope;
-+ options["scope"] = sdbus::Variant(scope);
-
- if (!contains_pkgs->get_value().empty()) {
-- options["contains_pkgs"] = contains_pkgs->get_value();
-+ options["contains_pkgs"] = sdbus::Variant(contains_pkgs->get_value());
- }
-
-- options["match_group_id"] = true;
-- options["match_group_name"] = true;
-+ options["match_group_id"] = sdbus::Variant(true);
-+ options["match_group_name"] = sdbus::Variant(true);
-
- dnfdaemon::KeyValueMapList raw_groups;
- ctx.session_proxy->callMethod("list")
-diff --git a/dnf5daemon-client/commands/install/install.cpp b/dnf5daemon-client/commands/install/install.cpp
-index 4dba94f5..0db5acec 100644
---- a/dnf5daemon-client/commands/install/install.cpp
-+++ b/dnf5daemon-client/commands/install/install.cpp
-@@ -80,10 +80,10 @@ void InstallCommand::run() {
- dnfdaemon::KeyValueMap options = {};
- // pass the `skip_*` value to the server only when explicitly set by command line option
- if (skip_broken_option.get_priority() >= libdnf5::Option::Priority::COMMANDLINE) {
-- options["skip_broken"] = skip_broken_option.get_value();
-+ options["skip_broken"] = sdbus::Variant(skip_broken_option.get_value());
- }
- if (skip_unavailable_option.get_priority() >= libdnf5::Option::Priority::COMMANDLINE) {
-- options["skip_unavailable"] = skip_unavailable_option.get_value();
-+ options["skip_unavailable"] = sdbus::Variant(skip_unavailable_option.get_value());
- }
-
- ctx.session_proxy->callMethod("install")
-diff --git a/dnf5daemon-client/commands/repolist/repolist.cpp b/dnf5daemon-client/commands/repolist/repolist.cpp
-index 6798bb64..a729b39e 100644
---- a/dnf5daemon-client/commands/repolist/repolist.cpp
-+++ b/dnf5daemon-client/commands/repolist/repolist.cpp
-@@ -107,17 +107,17 @@ void RepolistCommand::run() {
-
- // prepare options from command line arguments
- dnfdaemon::KeyValueMap options = {};
-- options["enable_disable"] = enable_disable_option->get_value();
-+ options["enable_disable"] = sdbus::Variant(enable_disable_option->get_value());
- std::vector<std::string> patterns;
- if (!patterns_options->empty()) {
-- options["enable_disable"] = "all";
-+ options["enable_disable"] = sdbus::Variant("all");
- patterns.reserve(patterns_options->size());
- for (auto & pattern : *patterns_options) {
- auto option = dynamic_cast<libdnf5::OptionString *>(pattern.get());
- patterns.emplace_back(option->get_value());
- }
- }
-- options["patterns"] = patterns;
-+ options["patterns"] = sdbus::Variant(patterns);
-
- std::vector<std::string> attrs{"id", "name", "enabled"};
- if (command == "repoinfo") {
-@@ -147,7 +147,7 @@ void RepolistCommand::run() {
- "mirrors"};
- attrs.insert(attrs.end(), repoinfo_attrs.begin(), repoinfo_attrs.end());
- }
-- options["repo_attrs"] = attrs;
-+ options["repo_attrs"] = sdbus::Variant(attrs);
-
- // call list() method on repo interface via dbus
- dnfdaemon::KeyValueMapList repositories;
-diff --git a/dnf5daemon-client/commands/repoquery/repoquery.cpp b/dnf5daemon-client/commands/repoquery/repoquery.cpp
-index 10d39e89..f1f0ed75 100644
---- a/dnf5daemon-client/commands/repoquery/repoquery.cpp
-+++ b/dnf5daemon-client/commands/repoquery/repoquery.cpp
-@@ -102,9 +102,9 @@ void RepoqueryCommand::set_argument_parser() {
-
- dnfdaemon::KeyValueMap RepoqueryCommand::session_config() {
- dnfdaemon::KeyValueMap cfg = {};
-- cfg["load_system_repo"] = installed_option->get_value();
-- cfg["load_available_repos"] =
-- (available_option->get_priority() >= libdnf5::Option::Priority::COMMANDLINE || !installed_option->get_value());
-+ cfg["load_system_repo"] = sdbus::Variant(installed_option->get_value());
-+ cfg["load_available_repos"] = sdbus::Variant(
-+ (available_option->get_priority() >= libdnf5::Option::Priority::COMMANDLINE || !installed_option->get_value()));
- return cfg;
- }
-
-@@ -125,13 +125,13 @@ std::vector<DbusPackageWrapper> json_to_packages(std::string & json_stream) {
- json_object_object_foreach(json_pkg, key, val) {
- switch (json_object_get_type(val)) {
- case json_type_boolean:
-- dbuspkg[key] = static_cast<bool>(json_object_get_boolean(val));
-+ dbuspkg[key] = sdbus::Variant(static_cast<bool>(json_object_get_boolean(val)));
- break;
- case json_type_int:
-- dbuspkg[key] = static_cast<uint64_t>(json_object_get_int64(val));
-+ dbuspkg[key] = sdbus::Variant(static_cast<uint64_t>(json_object_get_int64(val)));
- break;
- default:
-- dbuspkg[key] = json_object_get_string(val);
-+ dbuspkg[key] = sdbus::Variant(json_object_get_string(val));
- }
- }
- packages.emplace_back(DbusPackageWrapper(dbuspkg));
-@@ -180,7 +180,7 @@ void RepoqueryCommand::run() {
- patterns.emplace_back(option->get_value());
- }
- }
-- options["patterns"] = patterns;
-+ options["patterns"] = sdbus::Variant(patterns);
- if (info_option->get_value()) {
- options.insert(std::pair<std::string, std::vector<std::string>>(
- "package_attrs",
-diff --git a/dnf5daemon-client/commands/system-upgrade/system-upgrade.cpp b/dnf5daemon-client/commands/system-upgrade/system-upgrade.cpp
-index 9e09e812..4aa41c6d 100644
---- a/dnf5daemon-client/commands/system-upgrade/system-upgrade.cpp
-+++ b/dnf5daemon-client/commands/system-upgrade/system-upgrade.cpp
-@@ -67,7 +67,7 @@ void SystemUpgradeCommand::run() {
-
- dnfdaemon::KeyValueMap options = {};
- if (no_downgrade_option.get_value()) {
-- options["mode"] = "upgrade";
-+ options["mode"] = sdbus::Variant("upgrade");
- }
-
- ctx.session_proxy->callMethod("system_upgrade")
-diff --git a/dnf5daemon-client/context.cpp b/dnf5daemon-client/context.cpp
-index 2624b4dd..bcfd1bfa 100644
---- a/dnf5daemon-client/context.cpp
-+++ b/dnf5daemon-client/context.cpp
-@@ -47,12 +47,12 @@ void Context::init_session(sdbus::IConnection & connection) {
- for (auto & opt : setopts) {
- config[opt.first] = opt.second;
- }
-- cfg["config"] = config;
-+ cfg["config"] = sdbus::Variant(config);
-
- if (!releasever.get_value().empty()) {
-- cfg["releasever"] = releasever.get_value();
-+ cfg["releasever"] = sdbus::Variant(releasever.get_value());
- }
-- cfg["locale"] = setlocale(LC_MESSAGES, nullptr);
-+ cfg["locale"] = sdbus::Variant(setlocale(LC_MESSAGES, nullptr));
-
- session_manager_proxy->callMethod("open_session")
- .onInterface(dnfdaemon::INTERFACE_SESSION_MANAGER)
-diff --git a/dnf5daemon-server/advisory.cpp b/dnf5daemon-server/advisory.cpp
-index 7bab9961..f6a6c9bf 100644
---- a/dnf5daemon-server/advisory.cpp
-+++ b/dnf5daemon-server/advisory.cpp
-@@ -71,12 +71,12 @@ KeyValueMapList collections_to_list(
- auto name = pkg.get_name();
- auto arch = pkg.get_arch();
-
-- package["n"] = name;
-- package["e"] = pkg.get_epoch();
-- package["v"] = pkg.get_version();
-- package["r"] = pkg.get_release();
-- package["a"] = arch;
-- package["nevra"] = pkg.get_nevra();
-+ package["n"] = sdbus::Variant(name);
-+ package["e"] = sdbus::Variant(pkg.get_epoch());
-+ package["v"] = sdbus::Variant(pkg.get_version());
-+ package["r"] = sdbus::Variant(pkg.get_release());
-+ package["a"] = sdbus::Variant(arch);
-+ package["nevra"] = sdbus::Variant(pkg.get_nevra());
-
- std::string na{std::move(name)};
- na.append(".");
-@@ -84,12 +84,12 @@ KeyValueMapList collections_to_list(
- auto it = installed_versions.find(na);
- if (it == installed_versions.end()) {
- // advisory package is not installed => not related to system
-- package["applicability"] = "unrelated";
-+ package["applicability"] = sdbus::Variant("unrelated");
- } else if (libdnf5::rpm::evrcmp(it->second, pkg) < 0) {
- // installed version is lower than one in advisory
-- package["applicability"] = "available";
-+ package["applicability"] = sdbus::Variant("available");
- } else {
-- package["applicability"] = "installed";
-+ package["applicability"] = sdbus::Variant("installed");
- }
-
- packages.emplace_back(std::move(package));
-@@ -99,18 +99,18 @@ KeyValueMapList collections_to_list(
- auto libdnf_modules = col.get_modules();
- for (const auto & mdl : libdnf_modules) {
- KeyValueMap col_module;
-- col_module["n"] = mdl.get_name();
-- col_module["s"] = mdl.get_stream();
-- col_module["v"] = mdl.get_version();
-- col_module["c"] = mdl.get_context();
-- col_module["a"] = mdl.get_arch();
-- col_module["nsvca"] = mdl.get_nsvca();
-+ col_module["n"] = sdbus::Variant(mdl.get_name());
-+ col_module["s"] = sdbus::Variant(mdl.get_stream());
-+ col_module["v"] = sdbus::Variant(mdl.get_version());
-+ col_module["c"] = sdbus::Variant(mdl.get_context());
-+ col_module["a"] = sdbus::Variant(mdl.get_arch());
-+ col_module["nsvca"] = sdbus::Variant(mdl.get_nsvca());
- modules.emplace_back(std::move(col_module));
- }
-
- KeyValueMap collection;
-- collection["packages"] = std::move(packages);
-- collection["modules"] = std::move(modules);
-+ collection["packages"] = sdbus::Variant(std::move(packages));
-+ collection["modules"] = sdbus::Variant(std::move(modules));
- collections.emplace_back(std::move(collection));
- }
- return collections;
-diff --git a/dnf5daemon-server/services/goal/goal.cpp b/dnf5daemon-server/services/goal/goal.cpp
-index 1803ea5e..27cc93db 100644
---- a/dnf5daemon-server/services/goal/goal.cpp
-+++ b/dnf5daemon-server/services/goal/goal.cpp
-@@ -249,20 +249,20 @@ sdbus::MethodReply Goal::get_transaction_problems(sdbus::MethodCall & call) {
- goal_resolve_log_list.reserve(resolve_logs.size());
- for (const auto & log : resolve_logs) {
- dnfdaemon::KeyValueMap goal_resolve_log_item;
-- goal_resolve_log_item["action"] = static_cast<uint32_t>(log.get_action());
-- goal_resolve_log_item["problem"] = static_cast<uint32_t>(log.get_problem());
-+ goal_resolve_log_item["action"] = sdbus::Variant(static_cast<uint32_t>(log.get_action()));
-+ goal_resolve_log_item["problem"] = sdbus::Variant(static_cast<uint32_t>(log.get_problem()));
- if (log.get_job_settings()) {
- dnfdaemon::KeyValueMap goal_job_settings;
-- goal_job_settings["to_repo_ids"] = log.get_job_settings()->get_to_repo_ids();
-- goal_resolve_log_item["goal_job_settings"] = goal_job_settings;
-+ goal_job_settings["to_repo_ids"] = sdbus::Variant(log.get_job_settings()->get_to_repo_ids());
-+ goal_resolve_log_item["goal_job_settings"] = sdbus::Variant(goal_job_settings);
- }
- if (log.get_spec()) {
-- goal_resolve_log_item["spec"] = *log.get_spec();
-+ goal_resolve_log_item["spec"] = sdbus::Variant(*log.get_spec());
- }
- if (log.get_additional_data().size() > 0) {
- // convert std::set<std::string> to std::vector<std::string>
-- goal_resolve_log_item["additional_data"] =
-- std::vector<std::string>{log.get_additional_data().begin(), log.get_additional_data().end()};
-+ goal_resolve_log_item["additional_data"] = sdbus::Variant(
-+ std::vector<std::string>{log.get_additional_data().begin(), log.get_additional_data().end()});
- }
- if (log.get_solver_problems()) {
- using DbusRule = sdbus::Struct<uint32_t, std::vector<std::string>>;
-@@ -274,7 +274,7 @@ sdbus::MethodReply Goal::get_transaction_problems(sdbus::MethodCall & call) {
- }
- dbus_problems.push_back(std::move(dbus_problem));
- }
-- goal_resolve_log_item["solver_problems"] = std::move(dbus_problems);
-+ goal_resolve_log_item["solver_problems"] = sdbus::Variant(std::move(dbus_problems));
- }
- goal_resolve_log_list.push_back(std::move(goal_resolve_log_item));
- }
-diff --git a/dnf5daemon-server/services/offline/offline.cpp b/dnf5daemon-server/services/offline/offline.cpp
-index 27e6d793..c9ff03fc 100644
---- a/dnf5daemon-server/services/offline/offline.cpp
-+++ b/dnf5daemon-server/services/offline/offline.cpp
-@@ -103,14 +103,14 @@ sdbus::MethodReply Offline::get_status(sdbus::MethodCall & call) {
- libdnf5::offline::OfflineTransactionState state{state_path};
- if (!state.get_read_exception()) {
- const auto & state_data = state.get_data();
-- transaction_state["status"] = state_data.get_status();
-- transaction_state["cachedir"] = state_data.get_cachedir();
-- transaction_state["target_releasever"] = state_data.get_target_releasever();
-- transaction_state["system_releasever"] = state_data.get_system_releasever();
-- transaction_state["verb"] = state_data.get_verb();
-- transaction_state["cmd_line"] = state_data.get_cmd_line();
-- transaction_state["poweroff_after"] = state_data.get_poweroff_after();
-- transaction_state["module_platform_id"] = state_data.get_module_platform_id();
-+ transaction_state["status"] = sdbus::Variant(state_data.get_status());
-+ transaction_state["cachedir"] = sdbus::Variant(state_data.get_cachedir());
-+ transaction_state["target_releasever"] = sdbus::Variant(state_data.get_target_releasever());
-+ transaction_state["system_releasever"] = sdbus::Variant(state_data.get_system_releasever());
-+ transaction_state["verb"] = sdbus::Variant(state_data.get_verb());
-+ transaction_state["cmd_line"] = sdbus::Variant(state_data.get_cmd_line());
-+ transaction_state["poweroff_after"] = sdbus::Variant(state_data.get_poweroff_after());
-+ transaction_state["module_platform_id"] = sdbus::Variant(state_data.get_module_platform_id());
- }
-
- auto reply = call.createReply();
-diff --git a/dnf5daemon-server/session.cpp b/dnf5daemon-server/session.cpp
-index e5363521..2ff8ffea 100644
---- a/dnf5daemon-server/session.cpp
-+++ b/dnf5daemon-server/session.cpp
-@@ -272,7 +272,7 @@ bool Session::check_authorization(
-
- // call CheckAuthorization method
- sdbus::Struct<bool, bool, std::map<std::string, std::string>> auth_result;
-- sdbus::Struct<std::string, dnfdaemon::KeyValueMap> subject{"system-bus-name", {{"name", sender}}};
-+ sdbus::Struct<std::string, dnfdaemon::KeyValueMap> subject{"system-bus-name", {{"name", sdbus::Variant(sender)}}};
- std::map<std::string, std::string> details{};
- // allow polkit to ask user to enter root password
- uint flags = allow_user_interaction ? 1 : 0;
---
-2.48.1
-
diff --git a/0004-dnfdaemon-Explicit-sdbus-Variant-conversion.patch b/0004-dnfdaemon-Explicit-sdbus-Variant-conversion.patch
deleted file mode 100644
index aa3c516..0000000
--- a/0004-dnfdaemon-Explicit-sdbus-Variant-conversion.patch
+++ /dev/null
@@ -1,374 +0,0 @@
-From 4714a43af45942a033caff85b8b1d5d9983c7035 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha at redhat.com>
-Date: Fri, 17 May 2024 13:03:42 +0200
-Subject: [PATCH 04/24] dnfdaemon: Explicit sdbus::Variant conversion
-
-In version 2, conversion of sdbus::Variant to the underlying type is
-explicit.
----
- .../needs_restarting.cpp | 6 +--
- dnf5/commands/offline/offline.cpp | 3 +-
- .../wrappers/dbus_advisory_wrapper.hpp | 44 ++++++++--------
- .../wrappers/dbus_environment_wrapper.cpp | 2 +-
- .../wrappers/dbus_environment_wrapper.hpp | 9 ++--
- .../wrappers/dbus_goal_wrapper.cpp | 2 +-
- .../wrappers/dbus_group_wrapper.cpp | 4 +-
- .../wrappers/dbus_group_wrapper.hpp | 16 +++---
- .../wrappers/dbus_package_wrapper.hpp | 42 +++++++--------
- .../wrappers/dbus_repo_wrapper.cpp | 2 +-
- .../wrappers/dbus_repo_wrapper.hpp | 52 +++++++++----------
- 11 files changed, 92 insertions(+), 90 deletions(-)
-
-diff --git a/dnf5-plugins/needs_restarting_plugin/needs_restarting.cpp b/dnf5-plugins/needs_restarting_plugin/needs_restarting.cpp
-index 6d9de330..846a95f5 100644
---- a/dnf5-plugins/needs_restarting_plugin/needs_restarting.cpp
-+++ b/dnf5-plugins/needs_restarting_plugin/needs_restarting.cpp
-@@ -119,8 +119,8 @@ time_t NeedsRestartingCommand::get_boot_time(Context & ctx) {
- connection = sdbus::createSystemBusConnection();
- auto proxy = sdbus::createProxy(SYSTEMD_DESTINATION_NAME, SYSTEMD_OBJECT_PATH);
-
-- const uint64_t systemd_boot_time_us =
-- proxy->getProperty("UnitsLoadStartTimestamp").onInterface(SYSTEMD_MANAGER_INTERFACE);
-+ const auto systemd_boot_time_us =
-+ uint64_t{proxy->getProperty("UnitsLoadStartTimestamp").onInterface(SYSTEMD_MANAGER_INTERFACE)};
-
- const time_t systemd_boot_time = static_cast<long>(systemd_boot_time_us) / (1000L * 1000L);
-
-@@ -275,7 +275,7 @@ void NeedsRestartingCommand::services_need_restarting(Context & ctx) {
- // FragmentPath is the path to the unit file that defines the service
- const auto fragment_path = unit_proxy->getProperty("FragmentPath").onInterface(SYSTEMD_UNIT_INTERFACE);
- const auto start_timestamp_us =
-- unit_proxy->getProperty("ActiveEnterTimestamp").onInterface(SYSTEMD_UNIT_INTERFACE);
-+ uint64_t{unit_proxy->getProperty("ActiveEnterTimestamp").onInterface(SYSTEMD_UNIT_INTERFACE)};
-
- unit_file_to_service.insert(std::make_pair(fragment_path, Service{unit_name, start_timestamp_us}));
- }
-diff --git a/dnf5/commands/offline/offline.cpp b/dnf5/commands/offline/offline.cpp
-index fa1240e2..eb937c0f 100644
---- a/dnf5/commands/offline/offline.cpp
-+++ b/dnf5/commands/offline/offline.cpp
-@@ -322,7 +322,8 @@ void OfflineRebootCommand::run() {
- .storeResultsTo(unit_object_path);
-
- auto unit_proxy = sdbus::createProxy(SYSTEMD_DESTINATION_NAME, unit_object_path);
-- const std::vector<std::string> & wants = unit_proxy->getProperty("Wants").onInterface(SYSTEMD_UNIT_INTERFACE);
-+ const auto & wants =
-+ std::vector<std::string>{unit_proxy->getProperty("Wants").onInterface(SYSTEMD_UNIT_INTERFACE)};
- if (std::find(wants.begin(), wants.end(), SYSTEMD_SERVICE_NAME) == wants.end()) {
- throw libdnf5::cli::CommandExitError(
- 1, M_("{} is not wanted by system-update.target."), SYSTEMD_SERVICE_NAME);
-diff --git a/dnf5daemon-client/wrappers/dbus_advisory_wrapper.hpp b/dnf5daemon-client/wrappers/dbus_advisory_wrapper.hpp
-index 150d6cc9..d8a62fc6 100644
---- a/dnf5daemon-client/wrappers/dbus_advisory_wrapper.hpp
-+++ b/dnf5daemon-client/wrappers/dbus_advisory_wrapper.hpp
-@@ -55,13 +55,13 @@ private:
- class DbusAdvisoryPackageWrapper {
- public:
- DbusAdvisoryPackageWrapper(const dnfdaemon::KeyValueMap & rawdata, DbusAdvisoryWrapper * advisory);
-- std::string get_name() const { return rawdata.at("n"); }
-- std::string get_epoch() const { return rawdata.at("e"); }
-- std::string get_version() const { return rawdata.at("v"); }
-- std::string get_release() const { return rawdata.at("r"); }
-- std::string get_arch() const { return rawdata.at("a"); }
-+ std::string get_name() const { return std::string{rawdata.at("n")}; }
-+ std::string get_epoch() const { return std::string{rawdata.at("e")}; }
-+ std::string get_version() const { return std::string{rawdata.at("v")}; }
-+ std::string get_release() const { return std::string{rawdata.at("r")}; }
-+ std::string get_arch() const { return std::string{rawdata.at("a")}; }
- std::string get_nevra() const { return libdnf5::rpm::to_nevra_string(*this); }
-- std::string get_applicability() const { return rawdata.at("applicability"); }
-+ std::string get_applicability() const { return std::string{rawdata.at("applicability")}; }
-
- DbusAdvisoryWrapper get_advisory() const;
-
-@@ -74,11 +74,11 @@ private:
- class DbusAdvisoryModuleWrapper {
- public:
- DbusAdvisoryModuleWrapper(const dnfdaemon::KeyValueMap & rawdata, DbusAdvisoryWrapper * advisory);
-- std::string get_name() const { return rawdata.at("n"); }
-- std::string get_stream() const { return rawdata.at("s"); }
-- std::string get_version() const { return rawdata.at("v"); }
-- std::string get_context() const { return rawdata.at("c"); }
-- std::string get_arch() const { return rawdata.at("a"); }
-+ std::string get_name() const { return std::string{rawdata.at("n")}; }
-+ std::string get_stream() const { return std::string{rawdata.at("s")}; }
-+ std::string get_version() const { return std::string{rawdata.at("v")}; }
-+ std::string get_context() const { return std::string{rawdata.at("c")}; }
-+ std::string get_arch() const { return std::string{rawdata.at("a")}; }
- std::string get_nsvca() const {
- return get_name() + ":" + get_stream() + ":" + get_version() + ":" + get_context() + ":" + get_arch();
- }
-@@ -107,17 +107,17 @@ class DbusAdvisoryWrapper {
- public:
- explicit DbusAdvisoryWrapper(const dnfdaemon::KeyValueMap & rawdata);
-
-- std::string get_advisoryid() const { return rawdata.at("advisoryid"); }
-- std::string get_name() const { return rawdata.at("name"); }
-- std::string get_severity() const { return rawdata.at("severity"); }
-- std::string get_type() const { return rawdata.at("type"); }
-- uint64_t get_buildtime() const { return rawdata.at("buildtime"); }
-- std::string get_vendor() const { return rawdata.at("vendor"); }
-- std::string get_description() const { return rawdata.at("description"); }
-- std::string get_title() const { return rawdata.at("title"); }
-- std::string get_status() const { return rawdata.at("status"); }
-- std::string get_rights() const { return rawdata.at("rights"); }
-- std::string get_message() const { return rawdata.at("message"); }
-+ std::string get_advisoryid() const { return std::string{rawdata.at("advisoryid")}; }
-+ std::string get_name() const { return std::string{rawdata.at("name")}; }
-+ std::string get_severity() const { return std::string{rawdata.at("severity")}; }
-+ std::string get_type() const { return std::string{rawdata.at("type")}; }
-+ uint64_t get_buildtime() const { return uint64_t{rawdata.at("buildtime")}; }
-+ std::string get_vendor() const { return std::string{rawdata.at("vendor")}; }
-+ std::string get_description() const { return std::string{rawdata.at("description")}; }
-+ std::string get_title() const { return std::string{rawdata.at("title")}; }
-+ std::string get_status() const { return std::string{rawdata.at("status")}; }
-+ std::string get_rights() const { return std::string{rawdata.at("rights")}; }
-+ std::string get_message() const { return std::string{rawdata.at("message")}; }
- std::vector<DbusAdvisoryReferenceWrapper> get_references() const { return references; }
- std::vector<DbusAdvisoryCollectionWrapper> get_collections() const { return collections; }
-
-diff --git a/dnf5daemon-client/wrappers/dbus_environment_wrapper.cpp b/dnf5daemon-client/wrappers/dbus_environment_wrapper.cpp
-index e46935af..d885b064 100644
---- a/dnf5daemon-client/wrappers/dbus_environment_wrapper.cpp
-+++ b/dnf5daemon-client/wrappers/dbus_environment_wrapper.cpp
-@@ -24,7 +24,7 @@ namespace dnfdaemon::client {
- DbusEnvironmentWrapper::DbusEnvironmentWrapper(const dnfdaemon::KeyValueMap & rawdata) : rawdata(rawdata) {};
-
- std::set<std::string> DbusEnvironmentWrapper::get_repos() const {
-- std::vector<std::string> repos_vector = rawdata.at("repos");
-+ auto repos_vector = std::vector<std::string>(rawdata.at("repos"));
- std::set<std::string> repos_set(repos_vector.begin(), repos_vector.end());
- return repos_set;
- };
-diff --git a/dnf5daemon-client/wrappers/dbus_environment_wrapper.hpp b/dnf5daemon-client/wrappers/dbus_environment_wrapper.hpp
-index 16e4a52d..aa8d9e17 100644
---- a/dnf5daemon-client/wrappers/dbus_environment_wrapper.hpp
-+++ b/dnf5daemon-client/wrappers/dbus_environment_wrapper.hpp
-@@ -24,6 +24,7 @@ along with libdnf. If not, see <https://www.gnu.org/licenses/>.
- #include <dnf5daemon-server/utils.hpp>
-
- #include <set>
-+#include <string>
- #include <vector>
-
- namespace dnfdaemon::client {
-@@ -32,10 +33,10 @@ class DbusEnvironmentWrapper {
- public:
- explicit DbusEnvironmentWrapper(const dnfdaemon::KeyValueMap & rawdata);
-
-- std::string get_environmentid() const { return rawdata.at("environmentid"); }
-- std::string get_name() const { return rawdata.at("name"); }
-- std::string get_description() const { return rawdata.at("description"); }
-- std::string get_order() const { return rawdata.at("order"); }
-+ std::string get_environmentid() const { return std::string{rawdata.at("environmentid")}; }
-+ std::string get_name() const { return std::string{rawdata.at("name")}; }
-+ std::string get_description() const { return std::string{rawdata.at("description")}; }
-+ std::string get_order() const { return std::string{rawdata.at("order")}; }
- // TODO(mblaha) proper installed value
- bool get_installed() const { return false; }
- std::set<std::string> get_repos() const;
-diff --git a/dnf5daemon-client/wrappers/dbus_goal_wrapper.cpp b/dnf5daemon-client/wrappers/dbus_goal_wrapper.cpp
-index 044c13ac..f50bd652 100644
---- a/dnf5daemon-client/wrappers/dbus_goal_wrapper.cpp
-+++ b/dnf5daemon-client/wrappers/dbus_goal_wrapper.cpp
-@@ -59,7 +59,7 @@ DbusGoalWrapper::DbusGoalWrapper(std::vector<dnfdaemon::DbusTransactionItem> tra
- auto ti_replaces = ti_attrs.find("replaces");
- if (ti_replaces != ti_attrs.end()) {
- std::vector<DbusPackageWrapper> replaces;
-- std::vector<int> replaces_id = ti_replaces->second;
-+ std::vector<int> replaces_id = std::vector<int>(ti_replaces->second);
- for (const auto & pkg_id : replaces_id) {
- auto replaced_pkg_idx = transaction_packages_by_id.find(pkg_id);
- if (replaced_pkg_idx != transaction_packages_by_id.end()) {
-diff --git a/dnf5daemon-client/wrappers/dbus_group_wrapper.cpp b/dnf5daemon-client/wrappers/dbus_group_wrapper.cpp
-index 13faed85..2a0898b2 100644
---- a/dnf5daemon-client/wrappers/dbus_group_wrapper.cpp
-+++ b/dnf5daemon-client/wrappers/dbus_group_wrapper.cpp
-@@ -24,7 +24,7 @@ namespace dnfdaemon::client {
- DbusGroupWrapper::DbusGroupWrapper(const dnfdaemon::KeyValueMap & rawdata) : rawdata(rawdata) {
- auto packages_iter = rawdata.find("packages");
- if (packages_iter != rawdata.end()) {
-- dnfdaemon::KeyValueMapList raw_packages = packages_iter->second;
-+ auto raw_packages = dnfdaemon::KeyValueMapList(packages_iter->second);
- for (auto & raw_package : raw_packages) {
- packages.push_back(DbusGroupPackageWrapper(raw_package));
- }
-@@ -32,7 +32,7 @@ DbusGroupWrapper::DbusGroupWrapper(const dnfdaemon::KeyValueMap & rawdata) : raw
- };
-
- std::set<std::string> DbusGroupWrapper::get_repos() const {
-- std::vector<std::string> repos_vector = rawdata.at("repos");
-+ std::vector<std::string> repos_vector = std::vector<std::string>(rawdata.at("repos"));
- std::set<std::string> repos_set(repos_vector.begin(), repos_vector.end());
- return repos_set;
- };
-diff --git a/dnf5daemon-client/wrappers/dbus_group_wrapper.hpp b/dnf5daemon-client/wrappers/dbus_group_wrapper.hpp
-index 87bdda6f..c6245fdd 100644
---- a/dnf5daemon-client/wrappers/dbus_group_wrapper.hpp
-+++ b/dnf5daemon-client/wrappers/dbus_group_wrapper.hpp
-@@ -34,7 +34,7 @@ public:
- class DbusGroupPackageWrapper {
- public:
- explicit DbusGroupPackageWrapper(dnfdaemon::KeyValueMap & rawdata) : rawdata(rawdata) {}
-- std::string get_name() const { return rawdata.at("name"); }
-+ std::string get_name() const { return std::string{rawdata.at("name")}; }
- libdnf5::comps::PackageType get_type() const {
- return static_cast<libdnf5::comps::PackageType>(key_value_map_get<int>(rawdata, "type"));
- }
-@@ -45,13 +45,13 @@ public:
-
- explicit DbusGroupWrapper(const dnfdaemon::KeyValueMap & rawdata);
-
-- std::string get_groupid() const { return rawdata.at("groupid"); }
-- std::string get_name() const { return rawdata.at("name"); }
-- std::string get_description() const { return rawdata.at("description"); }
-- std::string get_order() const { return rawdata.at("order"); }
-- std::string get_langonly() const { return rawdata.at("langonly"); }
-- bool get_installed() const { return rawdata.at("installed"); }
-- bool get_uservisible() const { return rawdata.at("uservisible"); }
-+ std::string get_groupid() const { return std::string{rawdata.at("groupid")}; }
-+ std::string get_name() const { return std::string{rawdata.at("name")}; }
-+ std::string get_description() const { return std::string{rawdata.at("description")}; }
-+ std::string get_order() const { return std::string{rawdata.at("order")}; }
-+ std::string get_langonly() const { return std::string{rawdata.at("langonly")}; }
-+ bool get_installed() const { return bool{rawdata.at("installed")}; }
-+ bool get_uservisible() const { return bool{rawdata.at("uservisible")}; }
- std::set<std::string> get_repos() const;
- std::vector<DbusGroupPackageWrapper> get_packages() const { return packages; }
-
-diff --git a/dnf5daemon-client/wrappers/dbus_package_wrapper.hpp b/dnf5daemon-client/wrappers/dbus_package_wrapper.hpp
-index a59d3836..398fd8de 100644
---- a/dnf5daemon-client/wrappers/dbus_package_wrapper.hpp
-+++ b/dnf5daemon-client/wrappers/dbus_package_wrapper.hpp
-@@ -32,30 +32,30 @@ class DbusPackageWrapper {
- public:
- explicit DbusPackageWrapper(const dnfdaemon::KeyValueMap & rawdata) : rawdata(rawdata) {};
-
-- int get_id() { return rawdata.at("id"); }
-- std::string get_name() const { return rawdata.at("name"); }
-+ int get_id() { return int{rawdata.at("id")}; }
-+ std::string get_name() const { return std::string{rawdata.at("name")}; }
- std::string get_na() const { return get_name() + "." + get_arch(); }
-- std::string get_epoch() const { return rawdata.at("epoch"); }
-- std::string get_version() const { return rawdata.at("version"); }
-- std::string get_release() const { return rawdata.at("release"); }
-- std::string get_arch() const { return rawdata.at("arch"); }
-- std::string get_repo_id() const { return rawdata.at("repo_id"); }
-- std::string get_from_repo_id() const { return rawdata.at("from_repo_id"); }
-- std::string get_nevra() const { return rawdata.at("nevra"); }
-- std::string get_full_nevra() const { return rawdata.at("full_nevra"); }
-- std::string get_evr() const { return rawdata.at("evr"); }
-- bool is_installed() const { return rawdata.at("is_installed"); }
-- uint64_t get_install_size() const { return rawdata.at("install_size"); }
-- uint64_t get_download_size() const { return rawdata.at("download_size"); }
-- std::string get_sourcerpm() const { return rawdata.at("sourcerpm"); }
-- std::string get_summary() const { return rawdata.at("summary"); }
-- std::string get_url() const { return rawdata.at("url"); }
-- std::string get_license() const { return rawdata.at("license"); }
-- std::string get_description() const { return rawdata.at("description"); }
-+ std::string get_epoch() const { return std::string{rawdata.at("epoch")}; }
-+ std::string get_version() const { return std::string{rawdata.at("version")}; }
-+ std::string get_release() const { return std::string{rawdata.at("release")}; }
-+ std::string get_arch() const { return std::string{rawdata.at("arch")}; }
-+ std::string get_repo_id() const { return std::string{rawdata.at("repo_id")}; }
-+ std::string get_from_repo_id() const { return std::string{rawdata.at("from_repo_id")}; }
-+ std::string get_nevra() const { return std::string{rawdata.at("nevra")}; }
-+ std::string get_full_nevra() const { return std::string{rawdata.at("full_nevra")}; }
-+ std::string get_evr() const { return std::string{rawdata.at("evr")}; }
-+ bool is_installed() const { return bool{rawdata.at("is_installed")}; }
-+ uint64_t get_install_size() const { return uint64_t{rawdata.at("install_size")}; }
-+ uint64_t get_download_size() const { return uint64_t{rawdata.at("download_size")}; }
-+ std::string get_sourcerpm() const { return std::string{rawdata.at("sourcerpm")}; }
-+ std::string get_summary() const { return std::string{rawdata.at("summary")}; }
-+ std::string get_url() const { return std::string{rawdata.at("url")}; }
-+ std::string get_license() const { return std::string{rawdata.at("license")}; }
-+ std::string get_description() const { return std::string{rawdata.at("description")}; }
- libdnf5::transaction::TransactionItemReason get_reason() const {
-- return libdnf5::transaction::transaction_item_reason_from_string(rawdata.at("reason"));
-+ return libdnf5::transaction::transaction_item_reason_from_string(std::string{rawdata.at("reason")});
- }
-- std::string get_vendor() const { return rawdata.at("vendor"); }
-+ std::string get_vendor() const { return std::string{rawdata.at("vendor")}; }
-
- private:
- dnfdaemon::KeyValueMap rawdata;
-diff --git a/dnf5daemon-client/wrappers/dbus_repo_wrapper.cpp b/dnf5daemon-client/wrappers/dbus_repo_wrapper.cpp
-index a5c5dd19..00530340 100644
---- a/dnf5daemon-client/wrappers/dbus_repo_wrapper.cpp
-+++ b/dnf5daemon-client/wrappers/dbus_repo_wrapper.cpp
-@@ -26,7 +26,7 @@ std::vector<std::pair<std::string, std::string>> DbusRepoWrapper::get_distro_tag
- // serialized to vector<string>.
- // convert [tag1, val1, tag2, val2,...] back to [(tag1, val1), (tag2, val2),...]
- std::vector<std::pair<std::string, std::string>> dt{};
-- std::vector<std::string> tags_raw = rawdata.at("distro_tags");
-+ auto tags_raw = std::vector<std::string>(rawdata.at("distro_tags"));
- if (!tags_raw.empty()) {
- for (size_t i = 0; i < (tags_raw.size() - 1); i += 2) {
- dt.emplace_back(tags_raw[i], tags_raw[i + 1]);
-diff --git a/dnf5daemon-client/wrappers/dbus_repo_wrapper.hpp b/dnf5daemon-client/wrappers/dbus_repo_wrapper.hpp
-index 254928ad..a4788ac8 100644
---- a/dnf5daemon-client/wrappers/dbus_repo_wrapper.hpp
-+++ b/dnf5daemon-client/wrappers/dbus_repo_wrapper.hpp
-@@ -31,33 +31,33 @@ class DbusRepoWrapper : public libdnf5::cli::output::IRepoInfo {
- public:
- explicit DbusRepoWrapper(dnfdaemon::KeyValueMap & rawdata) : rawdata(rawdata) {};
-
-- std::string get_id() const { return rawdata.at("id"); }
-- std::string get_name() const { return rawdata.at("name"); }
-- std::string get_type() const { return rawdata.at("type"); }
-- bool is_enabled() const { return rawdata.at("enabled"); }
-- int get_priority() const { return rawdata.at("priority"); }
-- int get_cost() const { return rawdata.at("cost"); }
-- std::vector<std::string> get_baseurl() const { return rawdata.at("baseurl"); }
-- std::string get_metalink() const { return rawdata.at("metalink"); }
-- std::string get_mirrorlist() const { return rawdata.at("mirrorlist"); }
-- int get_metadata_expire() const { return rawdata.at("metadata_expire"); }
-- std::vector<std::string> get_excludepkgs() const { return rawdata.at("excludepkgs"); }
-- std::vector<std::string> get_includepkgs() const { return rawdata.at("includepkgs"); }
-- bool get_skip_if_unavailable() const { return rawdata.at("skip_if_unavailable"); }
-- std::vector<std::string> get_gpgkey() const { return rawdata.at("gpgkey"); }
-- bool get_gpgcheck() const { return rawdata.at("pkg_gpgcheck"); }
-- bool get_pkg_gpgcheck() const { return rawdata.at("pkg_gpgcheck"); }
-- bool get_repo_gpgcheck() const { return rawdata.at("repo_gpgcheck"); }
-- std::string get_repo_file_path() const { return rawdata.at("repofile"); }
-- std::string get_revision() const { return rawdata.at("revision"); }
-- std::vector<std::string> get_content_tags() const { return rawdata.at("content_tags"); }
-+ std::string get_id() const { return std::string{rawdata.at("id")}; }
-+ std::string get_name() const { return std::string{rawdata.at("name")}; }
-+ std::string get_type() const { return std::string{rawdata.at("type")}; }
-+ bool is_enabled() const { return bool{rawdata.at("enabled")}; }
-+ int get_priority() const { return int{rawdata.at("priority")}; }
-+ int get_cost() const { return int{rawdata.at("cost")}; }
-+ std::vector<std::string> get_baseurl() const { return std::vector<std::string>(rawdata.at("baseurl")); }
-+ std::string get_metalink() const { return std::string{rawdata.at("metalink")}; }
-+ std::string get_mirrorlist() const { return std::string{rawdata.at("mirrorlist")}; }
-+ int get_metadata_expire() const { return int{rawdata.at("metadata_expire")}; }
-+ std::vector<std::string> get_excludepkgs() const { return std::vector<std::string>(rawdata.at("excludepkgs")); }
-+ std::vector<std::string> get_includepkgs() const { return std::vector<std::string>(rawdata.at("includepkgs")); }
-+ bool get_skip_if_unavailable() const { return bool{rawdata.at("skip_if_unavailable")}; }
-+ std::vector<std::string> get_gpgkey() const { return std::vector<std::string>(rawdata.at("gpgkey")); }
-+ bool get_gpgcheck() const { return bool{rawdata.at("gpgcheck")}; }
-+ bool get_pkg_gpgcheck() const { return bool{rawdata.at("pkg_gpgcheck")}; }
-+ bool get_repo_gpgcheck() const { return bool{rawdata.at("repo_gpgcheck")}; }
-+ std::string get_repo_file_path() const { return std::string{rawdata.at("repofile")}; }
-+ std::string get_revision() const { return std::string{rawdata.at("revision")}; }
-+ std::vector<std::string> get_content_tags() const { return std::vector<std::string>(rawdata.at("content_tags")); }
- std::vector<std::pair<std::string, std::string>> get_distro_tags() const;
-- int64_t get_timestamp() const { return rawdata.at("cache_updated"); }
-- int get_max_timestamp() const { return rawdata.at("updated"); }
-- uint64_t get_size() const { return rawdata.at("size"); }
-- uint64_t get_pkgs() const { return rawdata.at("pkgs"); }
-- uint64_t get_available_pkgs() const { return rawdata.at("available_pkgs"); }
-- std::vector<std::string> get_mirrors() const { return rawdata.at("mirrors"); }
-+ int64_t get_timestamp() const { return int64_t{rawdata.at("cache_updated")}; }
-+ int get_max_timestamp() const { return int{rawdata.at("updated")}; }
-+ uint64_t get_size() const { return uint64_t{rawdata.at("size")}; }
-+ uint64_t get_pkgs() const { return uint64_t{rawdata.at("pkgs")}; }
-+ uint64_t get_available_pkgs() const { return uint64_t{rawdata.at("available_pkgs")}; }
-+ std::vector<std::string> get_mirrors() const { return std::vector<std::string>(rawdata.at("mirrors")); }
-
- private:
- dnfdaemon::KeyValueMap rawdata;
---
-2.48.1
-
diff --git a/0005-dnfdaemon-Make-signal-handlers-compatible.patch b/0005-dnfdaemon-Make-signal-handlers-compatible.patch
deleted file mode 100644
index da0b6b7..0000000
--- a/0005-dnfdaemon-Make-signal-handlers-compatible.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From 270094934dc6ecfce6136eb24c872757723c42ea Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha at redhat.com>
-Date: Fri, 17 May 2024 13:05:09 +0200
-Subject: [PATCH 05/24] dnfdaemon: Make signal handlers compatible
-
-sdbus-cpp version 2 requires signal handler to have signature
-(sdbus::Signal signal) -> void, which is also acceptable for version 1.
----
- dnf5daemon-client/callbacks.cpp | 48 ++++++++++++++++-----------------
- 1 file changed, 24 insertions(+), 24 deletions(-)
-
-diff --git a/dnf5daemon-client/callbacks.cpp b/dnf5daemon-client/callbacks.cpp
-index c0379d28..98b7d6a8 100644
---- a/dnf5daemon-client/callbacks.cpp
-+++ b/dnf5daemon-client/callbacks.cpp
-@@ -46,23 +46,23 @@ DownloadCB::DownloadCB(Context & context) : DbusCallback(context) {
- // register signal handlers
- auto proxy = context.session_proxy.get();
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_ADD_NEW, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_ADD_NEW, [this](sdbus::Signal signal) -> void {
- this->add_new_download(signal);
- });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_END, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_END, [this](sdbus::Signal signal) -> void {
- this->end(signal);
- });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_PROGRESS, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_PROGRESS, [this](sdbus::Signal signal) -> void {
- this->progress(signal);
- });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_MIRROR_FAILURE, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_MIRROR_FAILURE, [this](sdbus::Signal signal) -> void {
- this->mirror_failure(signal);
- });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_REPO_KEY_IMPORT_REQUEST, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_REPO_KEY_IMPORT_REQUEST, [this](sdbus::Signal signal) -> void {
- this->key_import(signal);
- });
- }
-@@ -242,55 +242,55 @@ TransactionCB::TransactionCB(Context & context) : DbusCallback(context) {
- // register signal handlers
- auto proxy = context.session_proxy.get();
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_VERIFY_START, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_VERIFY_START, [this](sdbus::Signal signal) -> void {
- this->verify_start(signal);
- });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_RPM,
-- dnfdaemon::SIGNAL_TRANSACTION_VERIFY_PROGRESS,
-- [this](sdbus::Signal & signal) -> void { this->verify_progress(signal); });
-+ dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_VERIFY_PROGRESS, [this](sdbus::Signal signal) -> void {
-+ this->verify_progress(signal);
-+ });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_VERIFY_STOP, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_VERIFY_STOP, [this](sdbus::Signal signal) -> void {
- this->verify_end(signal);
- });
- proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM,
- dnfdaemon::SIGNAL_TRANSACTION_TRANSACTION_START,
-- [this](sdbus::Signal & signal) -> void { this->transaction_start(signal); });
-+ [this](sdbus::Signal signal) -> void { this->transaction_start(signal); });
- proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM,
- dnfdaemon::SIGNAL_TRANSACTION_TRANSACTION_PROGRESS,
-- [this](sdbus::Signal & signal) -> void { this->transaction_progress(signal); });
-+ [this](sdbus::Signal signal) -> void { this->transaction_progress(signal); });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_RPM,
-- dnfdaemon::SIGNAL_TRANSACTION_TRANSACTION_STOP,
-- [this](sdbus::Signal & signal) -> void { this->transaction_end(signal); });
-+ dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_TRANSACTION_STOP, [this](sdbus::Signal signal) -> void {
-+ this->transaction_end(signal);
-+ });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_ACTION_START, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_ACTION_START, [this](sdbus::Signal signal) -> void {
- this->action_start(signal);
- });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_RPM,
-- dnfdaemon::SIGNAL_TRANSACTION_ACTION_PROGRESS,
-- [this](sdbus::Signal & signal) -> void { this->action_progress(signal); });
-+ dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_ACTION_PROGRESS, [this](sdbus::Signal signal) -> void {
-+ this->action_progress(signal);
-+ });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_ACTION_STOP, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_ACTION_STOP, [this](sdbus::Signal signal) -> void {
- this->action_end(signal);
- });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_START, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_START, [this](sdbus::Signal signal) -> void {
- this->script_start(signal);
- });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_STOP, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_STOP, [this](sdbus::Signal signal) -> void {
- this->script_stop(signal);
- });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_ERROR, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_ERROR, [this](sdbus::Signal signal) -> void {
- this->script_error(signal);
- });
- proxy->registerSignalHandler(
-- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_FINISHED, [this](sdbus::Signal & signal) -> void {
-+ dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_FINISHED, [this](sdbus::Signal signal) -> void {
- this->finished(signal);
- });
- }
---
-2.48.1
-
diff --git a/0006-dnfdaemon-Register-interface-methods-for-sdbus-cpp-2.patch b/0006-dnfdaemon-Register-interface-methods-for-sdbus-cpp-2.patch
deleted file mode 100644
index f057e95..0000000
--- a/0006-dnfdaemon-Register-interface-methods-for-sdbus-cpp-2.patch
+++ /dev/null
@@ -1,687 +0,0 @@
-From fb9cea1132b03fc22439d0e3f0d38e5240697ea7 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha at redhat.com>
-Date: Fri, 7 Jun 2024 14:16:57 +0200
-Subject: [PATCH 06/24] dnfdaemon: Register interface methods for sdbus-cpp-2
-
-sdbus-cpp-2 uses different approach to registering methods and signals
-on the interface.
----
- dnf5daemon-client/context.cpp | 4 +
- .../services/advisory/advisory.cpp | 15 ++
- dnf5daemon-server/services/base/base.cpp | 62 ++++++
- dnf5daemon-server/services/comps/group.cpp | 23 ++-
- dnf5daemon-server/services/goal/goal.cpp | 61 +++++-
- .../services/offline/offline.cpp | 48 +++++
- dnf5daemon-server/services/repo/repo.cpp | 47 +++++
- dnf5daemon-server/services/rpm/rpm.cpp | 178 ++++++++++++++++++
- dnf5daemon-server/session.cpp | 6 +
- dnf5daemon-server/session_manager.cpp | 33 +++-
- 10 files changed, 473 insertions(+), 4 deletions(-)
-
-diff --git a/dnf5daemon-client/context.cpp b/dnf5daemon-client/context.cpp
-index bcfd1bfa..f2bb40ca 100644
---- a/dnf5daemon-client/context.cpp
-+++ b/dnf5daemon-client/context.cpp
-@@ -37,7 +37,9 @@ void Context::init_session(sdbus::IConnection & connection) {
- // open dnf5daemon-server session
- auto cfg = static_cast<DaemonCommand *>(get_selected_command())->session_config();
- auto session_manager_proxy = sdbus::createProxy(connection, dnfdaemon::DBUS_NAME, dnfdaemon::DBUS_OBJECT_PATH);
-+#ifndef SDBUS_CPP_VERSION_2
- session_manager_proxy->finishRegistration();
-+#endif
-
- // set up the install root end setopts
- std::map<std::string, std::string> empty_options{};
-@@ -63,7 +65,9 @@ void Context::init_session(sdbus::IConnection & connection) {
- // register progress bars callbacks
- download_cb = std::make_unique<DownloadCB>(*this);
- transaction_cb = std::make_unique<TransactionCB>(*this);
-+#ifndef SDBUS_CPP_VERSION_2
- session_proxy->finishRegistration();
-+#endif
- }
-
-
-diff --git a/dnf5daemon-server/services/advisory/advisory.cpp b/dnf5daemon-server/services/advisory/advisory.cpp
-index 65e7e217..45434026 100644
---- a/dnf5daemon-server/services/advisory/advisory.cpp
-+++ b/dnf5daemon-server/services/advisory/advisory.cpp
-@@ -31,6 +31,20 @@ namespace dnfdaemon {
-
- void Advisory::dbus_register() {
- auto dbus_object = session.get_dbus_object();
-+#ifdef SDBUS_CPP_VERSION_2
-+ dbus_object
-+ ->addVTable(sdbus::MethodVTableItem{
-+ sdbus::MethodName{"list"},
-+ sdbus::Signature{"a{sv}"},
-+ {"options"},
-+ sdbus::Signature{"aa{sv}"},
-+ {"advisories"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Advisory::list, call, session.session_locale);
-+ },
-+ {}})
-+ .forInterface(INTERFACE_ADVISORY);
-+#else
- dbus_object->registerMethod(
- INTERFACE_ADVISORY,
- "list",
-@@ -41,6 +55,7 @@ void Advisory::dbus_register() {
- [this](sdbus::MethodCall call) -> void {
- session.get_threads_manager().handle_method(*this, &Advisory::list, call, session.session_locale);
- });
-+#endif
- }
-
- libdnf5::advisory::AdvisoryQuery Advisory::advisory_query_from_options(
-diff --git a/dnf5daemon-server/services/base/base.cpp b/dnf5daemon-server/services/base/base.cpp
-index d1a35650..301c1c41 100644
---- a/dnf5daemon-server/services/base/base.cpp
-+++ b/dnf5daemon-server/services/base/base.cpp
-@@ -45,6 +45,67 @@ static const std::unordered_set<std::string> ALLOWED_CACHE_TYPES = {
-
- void Base::dbus_register() {
- auto dbus_object = session.get_dbus_object();
-+#ifdef SDBUS_CPP_VERSION_2
-+ dbus_object
-+ ->addVTable(
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"read_all_repos"},
-+ sdbus::Signature{""},
-+ {},
-+ sdbus::Signature{"b"},
-+ {"success"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(
-+ *this, &Base::read_all_repos, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"clean"},
-+ sdbus::Signature{"s"},
-+ {"cache_type"},
-+ sdbus::Signature{"bs"},
-+ {"success", "error_msg"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Base::clean, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"reset"},
-+ sdbus::Signature{""},
-+ {},
-+ sdbus::Signature{"bs"},
-+ {"success", "error_msg"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Base::reset, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_DOWNLOAD_ADD_NEW,
-+ sdbus::Signature{"ossx"},
-+ {"session_object_path", "download_id", "description", "total_to_download"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_DOWNLOAD_PROGRESS,
-+ sdbus::Signature{"osxx"},
-+ {"session_object_path", "download_id", "total_to_download", "downloaded"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_DOWNLOAD_END,
-+ sdbus::Signature{"osus"},
-+ {"session_object_path", "download_id", "transfer_status", "message"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_DOWNLOAD_MIRROR_FAILURE,
-+ sdbus::Signature{"ossss"},
-+ {"session_object_path", "download_id", "message", "url", "metadata"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_REPO_KEY_IMPORT_REQUEST,
-+ sdbus::Signature{"osasssx"},
-+ {"session_object_path", "key_id", "user_ids", "key_fingerprint", "key_url", "timestamp"},
-+ {}})
-+ .forInterface(dnfdaemon::INTERFACE_BASE);
-+#else
- dbus_object->registerMethod(
- dnfdaemon::INTERFACE_BASE, "read_all_repos", "", {}, "b", {"success"}, [this](sdbus::MethodCall call) -> void {
- session.get_threads_manager().handle_method(*this, &Base::read_all_repos, call, session.session_locale);
-@@ -95,6 +156,7 @@ void Base::dbus_register() {
- dnfdaemon::SIGNAL_REPO_KEY_IMPORT_REQUEST,
- "osasssx",
- {"session_object_path", "key_id", "user_ids", "key_fingerprint", "key_url", "timestamp"});
-+#endif
- }
-
- sdbus::MethodReply Base::read_all_repos(sdbus::MethodCall & call) {
-diff --git a/dnf5daemon-server/services/comps/group.cpp b/dnf5daemon-server/services/comps/group.cpp
-index 178c4406..3164cac5 100644
---- a/dnf5daemon-server/services/comps/group.cpp
-+++ b/dnf5daemon-server/services/comps/group.cpp
-@@ -118,10 +118,31 @@ dnfdaemon::KeyValueMap group_to_map(libdnf5::comps::Group & libdnf_group, const
-
- void Group::dbus_register() {
- auto dbus_object = session.get_dbus_object();
-+#ifdef SDBUS_CPP_VERSION_2
-+ dbus_object
-+ ->addVTable(sdbus::MethodVTableItem{
-+ sdbus::MethodName{"list"},
-+ sdbus::Signature{"a{sv}"},
-+ {"options"},
-+ sdbus::Signature{"aa{sv}"},
-+ {"groups"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Group::list, call, session.session_locale);
-+ },
-+ {}})
-+ .forInterface(dnfdaemon::INTERFACE_GROUP);
-+#else
- dbus_object->registerMethod(
-- dnfdaemon::INTERFACE_GROUP, "list", "a{sv}", "aa{sv}", [this](sdbus::MethodCall call) -> void {
-+ dnfdaemon::INTERFACE_GROUP,
-+ "list",
-+ "a{sv}",
-+ {"options"},
-+ "aa{sv}",
-+ {"groups"},
-+ [this](sdbus::MethodCall call) -> void {
- session.get_threads_manager().handle_method(*this, &Group::list, call, session.session_locale);
- });
-+#endif
- }
-
- sdbus::MethodReply Group::list(sdbus::MethodCall & call) {
-diff --git a/dnf5daemon-server/services/goal/goal.cpp b/dnf5daemon-server/services/goal/goal.cpp
-index 27cc93db..5dce8975 100644
---- a/dnf5daemon-server/services/goal/goal.cpp
-+++ b/dnf5daemon-server/services/goal/goal.cpp
-@@ -60,8 +60,64 @@ static std::string dbus_transaction_item_type_to_string(dnfdaemon::DbusTransacti
-
- void Goal::dbus_register() {
- auto dbus_object = session.get_dbus_object();
-- // TODO(mblaha) Adjust resolve method to accommodate also groups, environments,
-- // and modules as part of the transaction
-+#ifdef SDBUS_CPP_VERSION_2
-+ dbus_object
-+ ->addVTable(
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"resolve"},
-+ sdbus::Signature{"a{sv}"},
-+ {"options"},
-+ sdbus::Signature{"a(sssa{sv}a{sv})u"},
-+ {"transaction_items", "result"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Goal::resolve, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"get_transaction_problems_string"},
-+ {},
-+ {},
-+ sdbus::Signature{"as"},
-+ {"problems"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(
-+ *this, &Goal::get_transaction_problems_string, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"get_transaction_problems"},
-+ {},
-+ {},
-+ sdbus::Signature{"aa{sv}"},
-+ {"problems"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(
-+ *this, &Goal::get_transaction_problems, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"do_transaction"},
-+ sdbus::Signature{"a{sv}"},
-+ {"options"},
-+ {},
-+ {},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(
-+ *this, &Goal::do_transaction, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"cancel"},
-+ sdbus::Signature{""},
-+ {},
-+ sdbus::Signature{"bs"},
-+ {"success", "error_msg"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Goal::cancel, call, session.session_locale);
-+ },
-+ {}})
-+ .forInterface(dnfdaemon::INTERFACE_GOAL);
-+#else
- dbus_object->registerMethod(
- dnfdaemon::INTERFACE_GOAL,
- "resolve",
-@@ -118,6 +174,7 @@ void Goal::dbus_register() {
- dnfdaemon::INTERFACE_GOAL, "reset", "", {}, "", {}, [this](sdbus::MethodCall call) -> void {
- session.get_threads_manager().handle_method(*this, &Goal::reset, call, session.session_locale);
- });
-+#endif
- }
-
- sdbus::MethodReply Goal::resolve(sdbus::MethodCall & call) {
-diff --git a/dnf5daemon-server/services/offline/offline.cpp b/dnf5daemon-server/services/offline/offline.cpp
-index c9ff03fc..48968f86 100644
---- a/dnf5daemon-server/services/offline/offline.cpp
-+++ b/dnf5daemon-server/services/offline/offline.cpp
-@@ -52,6 +52,53 @@ Offline::Scheduled Offline::offline_transaction_scheduled() {
-
- void Offline::dbus_register() {
- auto dbus_object = session.get_dbus_object();
-+#ifdef SDBUS_CPP_VERSION_2
-+ dbus_object
-+ ->addVTable(
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"cancel"},
-+ {},
-+ {},
-+ sdbus::Signature{"bs"},
-+ {"success", "error_msg"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Offline::cancel, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"get_status"},
-+ {},
-+ {},
-+ sdbus::Signature{"ba{sv}"},
-+ {"is_pending", "transaction_status"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(
-+ *this, &Offline::get_status, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"clean"},
-+ {},
-+ {},
-+ sdbus::Signature{"bs"},
-+ {"success", "error_msg"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Offline::clean, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"set_finish_action"},
-+ sdbus::Signature{"s"},
-+ {"action"},
-+ sdbus::Signature{"bs"},
-+ {"success", "error_msg"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(
-+ *this, &Offline::set_finish_action, call, session.session_locale);
-+ },
-+ {}})
-+ .forInterface(dnfdaemon::INTERFACE_OFFLINE);
-+#else
- dbus_object->registerMethod(
- dnfdaemon::INTERFACE_OFFLINE,
- "cancel",
-@@ -93,6 +140,7 @@ void Offline::dbus_register() {
- session.get_threads_manager().handle_method(
- *this, &Offline::set_finish_action, call, session.session_locale);
- });
-+#endif
- }
-
- sdbus::MethodReply Offline::get_status(sdbus::MethodCall & call) {
-diff --git a/dnf5daemon-server/services/repo/repo.cpp b/dnf5daemon-server/services/repo/repo.cpp
-index 8d082009..e8f2d838 100644
---- a/dnf5daemon-server/services/repo/repo.cpp
-+++ b/dnf5daemon-server/services/repo/repo.cpp
-@@ -262,6 +262,52 @@ bool keyval_repo_compare(const dnfdaemon::KeyValueMap & first, const dnfdaemon::
-
- void Repo::dbus_register() {
- auto dbus_object = session.get_dbus_object();
-+
-+#ifdef SDBUS_CPP_VERSION_2
-+ dbus_object
-+ ->addVTable(
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"list"},
-+ sdbus::Signature{"a{sv}"},
-+ {"options"},
-+ sdbus::Signature{"aa{sv}"},
-+ {"repositories"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Repo::list, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"confirm_key"},
-+ sdbus::Signature{"sb"},
-+ {"key_id", "confirmed"},
-+ sdbus::Signature{""},
-+ {},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Repo::confirm_key, call);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"enable"},
-+ sdbus::Signature{"as"},
-+ {"repo_ids"},
-+ sdbus::Signature{""},
-+ {},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Repo::enable, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"disable"},
-+ sdbus::Signature{"as"},
-+ {"repo_ids"},
-+ sdbus::Signature{""},
-+ {},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Repo::disable, call, session.session_locale);
-+ },
-+ {}})
-+ .forInterface(dnfdaemon::INTERFACE_REPO);
-+#else
- dbus_object->registerMethod(
- dnfdaemon::INTERFACE_REPO,
- "list",
-@@ -290,6 +336,7 @@ void Repo::dbus_register() {
- dnfdaemon::INTERFACE_REPO, "disable", "as", {"repo_ids"}, "", {}, [this](sdbus::MethodCall call) -> void {
- session.get_threads_manager().handle_method(*this, &Repo::disable, call, session.session_locale);
- });
-+#endif
- }
-
- sdbus::MethodReply Repo::confirm_key(sdbus::MethodCall & call) {
-diff --git a/dnf5daemon-server/services/rpm/rpm.cpp b/dnf5daemon-server/services/rpm/rpm.cpp
-index 83cf253e..aa8f5393 100644
---- a/dnf5daemon-server/services/rpm/rpm.cpp
-+++ b/dnf5daemon-server/services/rpm/rpm.cpp
-@@ -33,6 +33,183 @@ along with libdnf. If not, see <https://www.gnu.org/licenses/>.
-
- void Rpm::dbus_register() {
- auto dbus_object = session.get_dbus_object();
-+#ifdef SDBUS_CPP_VERSION_2
-+ dbus_object
-+ ->addVTable(
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"distro_sync"},
-+ sdbus::Signature{"asa{sv}"},
-+ {"pkg_specs", "options"},
-+ {},
-+ {},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Rpm::distro_sync, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"downgrade"},
-+ sdbus::Signature{"asa{sv}"},
-+ {"pkg_specs", "options"},
-+ {},
-+ {},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Rpm::downgrade, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"list"},
-+ sdbus::Signature{"a{sv}"},
-+ {"options"},
-+ sdbus::Signature{"aa{sv}"},
-+ {"packages"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Rpm::list, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"list_fd"},
-+ sdbus::Signature{"a{sv}h"},
-+ {"options", "file_descriptor"},
-+ sdbus::Signature{"s"},
-+ {"transfer_id"},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method_fd(*this, &Rpm::list_fd, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"install"},
-+ sdbus::Signature{"asa{sv}"},
-+ {"pkg_specs", "options"},
-+ {},
-+ {},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Rpm::install, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"upgrade"},
-+ sdbus::Signature{"asa{sv}"},
-+ {"pkg_specs", "options"},
-+ {},
-+ {},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Rpm::upgrade, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"reinstall"},
-+ sdbus::Signature{"asa{sv}"},
-+ {"pkg_specs", "options"},
-+ {},
-+ {},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Rpm::reinstall, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"remove"},
-+ sdbus::Signature{"asa{sv}"},
-+ {"pkg_specs", "options"},
-+ {},
-+ {},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(*this, &Rpm::remove, call, session.session_locale);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"system_upgrade"},
-+ sdbus::Signature{"a{sv}"},
-+ {"options"},
-+ {},
-+ {},
-+ [this](sdbus::MethodCall call) -> void {
-+ session.get_threads_manager().handle_method(
-+ *this, &Rpm::system_upgrade, call, session.session_locale);
-+ },
-+ {}},
-+
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_BEFORE_BEGIN,
-+ sdbus::Signature{"ot"},
-+ {"session_object_path", "total"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_AFTER_COMPLETE,
-+ sdbus::Signature{"ob"},
-+ {"session_object_path", "success"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_ELEM_PROGRESS,
-+ sdbus::Signature{"ostt"},
-+ {"session_object_path", "nevra", "processed", "total"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_ACTION_START,
-+ sdbus::Signature{"osut"},
-+ {"session_object_path", "nevra", "action", "total"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_ACTION_PROGRESS,
-+ sdbus::Signature{"ostt"},
-+ {"session_object_path", "nevra", "processed", "total"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_ACTION_STOP,
-+ sdbus::Signature{"ost"},
-+ {"session_object_path", "nevra", "total"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_START,
-+ sdbus::Signature{"osu"},
-+ {"session_object_path", "nevra", "scriptlet_type"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_STOP,
-+ sdbus::Signature{"osut"},
-+ {"session_object_path", "nevra", "scriptlet_type", "return_code"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_ERROR,
-+ sdbus::Signature{"osut"},
-+ {"session_object_path", "nevra", "scriptlet_type", "return_code"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_VERIFY_START,
-+ sdbus::Signature{"ot"},
-+ {"session_object_path", "total"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_VERIFY_PROGRESS,
-+ sdbus::Signature{"ott"},
-+ {"session_object_path", "processed", "total"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_VERIFY_STOP,
-+ sdbus::Signature{"ot"},
-+ {"session_object_path", "total"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_TRANSACTION_START,
-+ sdbus::Signature{"ot"},
-+ {"session_object_path", "total"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_TRANSACTION_PROGRESS,
-+ sdbus::Signature{"ott"},
-+ {"session_object_path", "processed", "total"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_TRANSACTION_STOP,
-+ sdbus::Signature{"ot"},
-+ {"session_object_path", "total"},
-+ {}},
-+ sdbus::SignalVTableItem{
-+ dnfdaemon::SIGNAL_TRANSACTION_UNPACK_ERROR,
-+ sdbus::Signature{"os"},
-+ {"session_object_path", "nevra"},
-+ {}})
-+ .forInterface(dnfdaemon::INTERFACE_RPM);
-+#else
- dbus_object->registerMethod(
- dnfdaemon::INTERFACE_RPM,
- "distro_sync",
-@@ -192,6 +369,7 @@ void Rpm::dbus_register() {
- {"session_object_path", "total"});
- dbus_object->registerSignal(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_UNPACK_ERROR, "os", {"session_object_path", "nevra"});
-+#endif
- }
-
- std::vector<std::string> get_filter_patterns(dnfdaemon::KeyValueMap options, const std::string & option) {
-diff --git a/dnf5daemon-server/session.cpp b/dnf5daemon-server/session.cpp
-index 2ff8ffea..ad677c38 100644
---- a/dnf5daemon-server/session.cpp
-+++ b/dnf5daemon-server/session.cpp
-@@ -159,7 +159,10 @@ Session::Session(
- for (auto & s : services) {
- s->dbus_register();
- }
-+
-+#ifndef SDBUS_CPP_VERSION_2
- dbus_object->finishRegistration();
-+#endif
- }
-
- Session::~Session() {
-@@ -268,7 +271,10 @@ bool Session::check_authorization(
- const sdbus::ObjectPath object_path{"/org/freedesktop/PolicyKit1/Authority"};
- const SDBUS_INTERFACE_NAME_TYPE interface_name{"org.freedesktop.PolicyKit1.Authority"};
- auto polkit_proxy = sdbus::createProxy(connection, destination_name, object_path);
-+
-+#ifndef SDBUS_CPP_VERSION_2
- polkit_proxy->finishRegistration();
-+#endif
-
- // call CheckAuthorization method
- sdbus::Struct<bool, bool, std::map<std::string, std::string>> auth_result;
-diff --git a/dnf5daemon-server/session_manager.cpp b/dnf5daemon-server/session_manager.cpp
-index 8ea9d2c8..e6494199 100644
---- a/dnf5daemon-server/session_manager.cpp
-+++ b/dnf5daemon-server/session_manager.cpp
-@@ -47,6 +47,31 @@ SessionManager::~SessionManager() {
-
- void SessionManager::dbus_register() {
- dbus_object = sdbus::createObject(*connection, dnfdaemon::DBUS_OBJECT_PATH);
-+#ifdef SDBUS_CPP_VERSION_2
-+ dbus_object
-+ ->addVTable(
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"open_session"},
-+ sdbus::Signature{"a{sv}"},
-+ {"options"},
-+ sdbus::Signature{"o"},
-+ {"session_object_path"},
-+ [this](sdbus::MethodCall call) -> void {
-+ threads_manager.handle_method(*this, &SessionManager::open_session, call);
-+ },
-+ {}},
-+ sdbus::MethodVTableItem{
-+ sdbus::MethodName{"close_session"},
-+ sdbus::Signature{"o"},
-+ {"session_object_path"},
-+ sdbus::Signature{"b"},
-+ {"success"},
-+ [this](sdbus::MethodCall call) -> void {
-+ threads_manager.handle_method(*this, &SessionManager::close_session, call);
-+ },
-+ {}})
-+ .forInterface(dnfdaemon::INTERFACE_SESSION_MANAGER);
-+#else
- dbus_object->registerMethod(
- dnfdaemon::INTERFACE_SESSION_MANAGER,
- "open_session",
-@@ -69,14 +94,20 @@ void SessionManager::dbus_register() {
- });
- dbus_object->finishRegistration();
-
-+#endif
-+
- // register signal handler for NameOwnerChanged
- name_changed_proxy = sdbus::createProxy(
- *connection, SDBUS_SERVICE_NAME_TYPE{"org.freedesktop.DBus"}, sdbus::ObjectPath{"/org/freedesktop/DBus"});
- name_changed_proxy->registerSignalHandler(
-- "org.freedesktop.DBus", "NameOwnerChanged", [this](sdbus::Signal signal) -> void {
-+ SDBUS_INTERFACE_NAME_TYPE{"org.freedesktop.DBus"},
-+ SDBUS_SIGNAL_NAME_TYPE{"NameOwnerChanged"},
-+ [this](sdbus::Signal signal) -> void {
- threads_manager.handle_signal(*this, &SessionManager::on_name_owner_changed, signal);
- });
-+#ifndef SDBUS_CPP_VERSION_2
- name_changed_proxy->finishRegistration();
-+#endif
- }
-
-
---
-2.48.1
-
diff --git a/0007-dnfdaemon-client-Use-correct-data-type-for-callbacks.patch b/0007-dnfdaemon-client-Use-correct-data-type-for-callbacks.patch
deleted file mode 100644
index 4c717f6..0000000
--- a/0007-dnfdaemon-client-Use-correct-data-type-for-callbacks.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From c5df756b2e1a5c82801a24b9a296e5881ec80a70 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha at redhat.com>
-Date: Thu, 2 Jan 2025 14:38:41 +0100
-Subject: [PATCH 07/24] dnfdaemon-client: Use correct data type for callbacks
-
----
- dnf5daemon-client/callbacks.cpp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/dnf5daemon-client/callbacks.cpp b/dnf5daemon-client/callbacks.cpp
-index 98b7d6a8..056c0009 100644
---- a/dnf5daemon-client/callbacks.cpp
-+++ b/dnf5daemon-client/callbacks.cpp
-@@ -134,7 +134,7 @@ void DownloadCB::end(sdbus::Signal & signal) {
- return;
- }
-
-- int status_i;
-+ unsigned int status_i;
- std::string msg;
- signal >> status_i;
- signal >> msg;
-@@ -364,7 +364,7 @@ void TransactionCB::transaction_end(sdbus::Signal & signal) {
- void TransactionCB::action_start(sdbus::Signal & signal) {
- if (signature_valid(signal)) {
- std::string nevra;
-- int action_i;
-+ unsigned int action_i;
- uint64_t total;
- signal >> nevra;
- signal >> action_i;
---
-2.48.1
-
diff --git a/0008-dnfdaemon-Properly-leave-event-loop.patch b/0008-dnfdaemon-Properly-leave-event-loop.patch
deleted file mode 100644
index 7609ee9..0000000
--- a/0008-dnfdaemon-Properly-leave-event-loop.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 60e5a6bbf4172079fb72aadbc3021a3de3cf937e Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha at redhat.com>
-Date: Fri, 3 Jan 2025 15:45:12 +0100
-Subject: [PATCH 08/24] dnfdaemon: Properly leave event loop
-
-Exit the event loop and properly join the serving thread.
----
- dnf5daemon-client/main.cpp | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/dnf5daemon-client/main.cpp b/dnf5daemon-client/main.cpp
-index bab0243b..e759bd33 100644
---- a/dnf5daemon-client/main.cpp
-+++ b/dnf5daemon-client/main.cpp
-@@ -292,6 +292,8 @@ int main(int argc, char * argv[]) {
-
- // Run selected command
- command->run();
-+
-+ connection->leaveEventLoop();
- } catch (libdnf5::cli::ArgumentParserError & ex) {
- std::cerr << ex.what() << _(". Add \"--help\" for more information about the arguments.") << std::endl;
- return static_cast<int>(libdnf5::cli::ExitCode::ARGPARSER_ERROR);
---
-2.48.1
-
diff --git a/0009-daemon-client-Separate-context-and-callbacks.patch b/0009-daemon-client-Separate-context-and-callbacks.patch
deleted file mode 100644
index 8f3e4e7..0000000
--- a/0009-daemon-client-Separate-context-and-callbacks.patch
+++ /dev/null
@@ -1,359 +0,0 @@
-From 4eb8ef299690ab4795f73d06bdf5883dc0a34f02 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha at redhat.com>
-Date: Fri, 3 Jan 2025 15:35:29 +0100
-Subject: [PATCH 09/24] daemon-client: Separate context and callbacks
-
-To address race conditions between the lifetime of the context and
-callbacks, it is safer to manage them separately.
-
-With sdbus-cpp version 2, I observed various failures in
-dnf5daemon-client, typically following this pattern:
-
-- The main thread has already completed its work and is in the process
- of destructing the Context class.
-
-- Meanwhile, the D-Bus event loop thread is still handling messages, and
- the handler attempts to access the context instance that is currently
- being destroyed.
----
- dnf5daemon-client/callbacks.cpp | 67 +++++++++++++++++++++------------
- dnf5daemon-client/callbacks.hpp | 24 +++++++++---
- dnf5daemon-client/context.cpp | 3 --
- dnf5daemon-client/context.hpp | 6 +--
- dnf5daemon-client/main.cpp | 20 +++++++---
- 5 files changed, 79 insertions(+), 41 deletions(-)
-
-diff --git a/dnf5daemon-client/callbacks.cpp b/dnf5daemon-client/callbacks.cpp
-index 056c0009..96fbf40d 100644
---- a/dnf5daemon-client/callbacks.cpp
-+++ b/dnf5daemon-client/callbacks.cpp
-@@ -33,38 +33,50 @@ along with libdnf. If not, see <https://www.gnu.org/licenses/>.
-
- namespace dnfdaemon::client {
-
-+DbusCallback::DbusCallback(Context & context, sdbus::IConnection & connection)
-+ : session_object_path(context.get_session_object_path()) {
-+ session_proxy = sdbus::createProxy(connection, dnfdaemon::DBUS_NAME, session_object_path);
-+}
-
- bool DbusCallback::signature_valid(sdbus::Signal & signal) {
- // check that signal is emitted by the correct session object
- sdbus::ObjectPath object_path;
- signal >> object_path;
-- return object_path == context.get_session_object_path();
-+ return object_path == session_object_path;
- }
-
-
--DownloadCB::DownloadCB(Context & context) : DbusCallback(context) {
-+DownloadCB::DownloadCB(Context & context, sdbus::IConnection & connection)
-+ : DbusCallback(context, connection),
-+ assume_yes(context.get_assumeyes_option()),
-+ assume_no(context.get_assumeno_option()),
-+ default_yes(context.get_defaultyes_option()) {}
-+
-+void DownloadCB::register_signals() {
- // register signal handlers
-- auto proxy = context.session_proxy.get();
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_ADD_NEW, [this](sdbus::Signal signal) -> void {
- this->add_new_download(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_END, [this](sdbus::Signal signal) -> void {
- this->end(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_PROGRESS, [this](sdbus::Signal signal) -> void {
- this->progress(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_DOWNLOAD_MIRROR_FAILURE, [this](sdbus::Signal signal) -> void {
- this->mirror_failure(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_BASE, dnfdaemon::SIGNAL_REPO_KEY_IMPORT_REQUEST, [this](sdbus::Signal signal) -> void {
- this->key_import(signal);
- });
-+#ifndef SDBUS_CPP_VERSION_2
-+ session_proxy->finishRegistration();
-+#endif
- }
-
-
-@@ -224,11 +236,11 @@ void DownloadCB::key_import(sdbus::Signal & signal) {
- std::cerr << " From : " + url << std::endl;
-
- // ask user for the key import confirmation
-- auto confirmed = libdnf5::cli::utils::userconfirm::userconfirm(context);
-+ auto confirmed = libdnf5::cli::utils::userconfirm::userconfirm(*this);
-
- // signal the confirmation back to the server
- try {
-- context.session_proxy->callMethod("confirm_key")
-+ session_proxy->callMethod("confirm_key")
- .onInterface(dnfdaemon::INTERFACE_REPO)
- .withTimeout(static_cast<uint64_t>(-1))
- .withArguments(key_id, confirmed);
-@@ -238,61 +250,66 @@ void DownloadCB::key_import(sdbus::Signal & signal) {
- }
- }
-
--TransactionCB::TransactionCB(Context & context) : DbusCallback(context) {
-+TransactionCB::TransactionCB(Context & context, sdbus::IConnection & connection) : DbusCallback(context, connection) {}
-+
-+
-+void TransactionCB::register_signals() {
- // register signal handlers
-- auto proxy = context.session_proxy.get();
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_VERIFY_START, [this](sdbus::Signal signal) -> void {
- this->verify_start(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_VERIFY_PROGRESS, [this](sdbus::Signal signal) -> void {
- this->verify_progress(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_VERIFY_STOP, [this](sdbus::Signal signal) -> void {
- this->verify_end(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM,
- dnfdaemon::SIGNAL_TRANSACTION_TRANSACTION_START,
- [this](sdbus::Signal signal) -> void { this->transaction_start(signal); });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM,
- dnfdaemon::SIGNAL_TRANSACTION_TRANSACTION_PROGRESS,
- [this](sdbus::Signal signal) -> void { this->transaction_progress(signal); });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_TRANSACTION_STOP, [this](sdbus::Signal signal) -> void {
- this->transaction_end(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_ACTION_START, [this](sdbus::Signal signal) -> void {
- this->action_start(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_ACTION_PROGRESS, [this](sdbus::Signal signal) -> void {
- this->action_progress(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_ACTION_STOP, [this](sdbus::Signal signal) -> void {
- this->action_end(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_START, [this](sdbus::Signal signal) -> void {
- this->script_start(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_STOP, [this](sdbus::Signal signal) -> void {
- this->script_stop(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_SCRIPT_ERROR, [this](sdbus::Signal signal) -> void {
- this->script_error(signal);
- });
-- proxy->registerSignalHandler(
-+ session_proxy->registerSignalHandler(
- dnfdaemon::INTERFACE_RPM, dnfdaemon::SIGNAL_TRANSACTION_FINISHED, [this](sdbus::Signal signal) -> void {
- this->finished(signal);
- });
-+#ifndef SDBUS_CPP_VERSION_2
-+ session_proxy->finishRegistration();
-+#endif
- }
-
- void TransactionCB::new_progress_bar(uint64_t total, const std::string & description) {
-diff --git a/dnf5daemon-client/callbacks.hpp b/dnf5daemon-client/callbacks.hpp
-index 7a4fbdac..9ccfe8af 100644
---- a/dnf5daemon-client/callbacks.hpp
-+++ b/dnf5daemon-client/callbacks.hpp
-@@ -22,6 +22,7 @@ along with libdnf. If not, see <https://www.gnu.org/licenses/>.
-
- #include <libdnf5-cli/progressbar/download_progress_bar.hpp>
- #include <libdnf5-cli/progressbar/multi_progress_bar.hpp>
-+#include <libdnf5/conf/option_bool.hpp>
- #include <sdbus-c++/sdbus-c++.h>
-
- #include <string>
-@@ -32,19 +33,20 @@ class Context;
-
- class DbusCallback {
- public:
-- explicit DbusCallback(Context & context) : context(context) {};
-+ explicit DbusCallback(Context & context, sdbus::IConnection & connection);
- virtual ~DbusCallback() = default;
-+ virtual void register_signals() = 0;
-
- protected:
-- Context & context;
--
- bool signature_valid(sdbus::Signal & signal);
-+ sdbus::ObjectPath session_object_path;
-+ std::unique_ptr<sdbus::IProxy> session_proxy;
- };
-
-
- class DownloadCB final : public DbusCallback {
- public:
-- explicit DownloadCB(Context & context);
-+ explicit DownloadCB(Context & context, sdbus::IConnection & connection);
- virtual ~DownloadCB() = default;
-
- void add_new_download(sdbus::Signal & signal);
-@@ -57,6 +59,13 @@ public:
- void set_number_widget_visible(bool value);
- void set_show_total_bar_limit(std::size_t limit);
-
-+ // methods required by cli::utils::userconfirm::userconfirm
-+ libdnf5::OptionBool get_assumeno_option() const { return assume_no; }
-+ libdnf5::OptionBool get_assumeyes_option() const { return assume_yes; }
-+ libdnf5::OptionBool get_defaultyes_option() const { return default_yes; }
-+
-+ void register_signals() override;
-+
- private:
- libdnf5::cli::progressbar::DownloadProgressBar * find_progress_bar(const std::string & download_id);
- void print();
-@@ -67,12 +76,15 @@ private:
- std::unique_ptr<libdnf5::cli::progressbar::MultiProgressBar> multi_progress_bar;
- // map {download_id: progressbar}
- std::unordered_map<std::string, libdnf5::cli::progressbar::DownloadProgressBar *> progress_bars;
-+ libdnf5::OptionBool assume_yes{false};
-+ libdnf5::OptionBool assume_no{false};
-+ libdnf5::OptionBool default_yes{false};
- };
-
-
- class TransactionCB final : public DbusCallback {
- public:
-- explicit TransactionCB(Context & context);
-+ explicit TransactionCB(Context & context, sdbus::IConnection & connection);
- virtual ~TransactionCB() = default;
-
- void verify_start(sdbus::Signal & signal);
-@@ -95,6 +107,8 @@ public:
-
- void finished(sdbus::Signal & signal);
-
-+ void register_signals() override;
-+
- private:
- libdnf5::cli::progressbar::MultiProgressBar multi_progress_bar;
- libdnf5::cli::progressbar::DownloadProgressBar * active_progress_bar{nullptr};
-diff --git a/dnf5daemon-client/context.cpp b/dnf5daemon-client/context.cpp
-index f2bb40ca..5acc0996 100644
---- a/dnf5daemon-client/context.cpp
-+++ b/dnf5daemon-client/context.cpp
-@@ -62,9 +62,6 @@ void Context::init_session(sdbus::IConnection & connection) {
- .storeResultsTo(session_object_path);
-
- session_proxy = sdbus::createProxy(connection, dnfdaemon::DBUS_NAME, session_object_path);
-- // register progress bars callbacks
-- download_cb = std::make_unique<DownloadCB>(*this);
-- transaction_cb = std::make_unique<TransactionCB>(*this);
- #ifndef SDBUS_CPP_VERSION_2
- session_proxy->finishRegistration();
- #endif
-diff --git a/dnf5daemon-client/context.hpp b/dnf5daemon-client/context.hpp
-index 8c4d9578..412796fd 100644
---- a/dnf5daemon-client/context.hpp
-+++ b/dnf5daemon-client/context.hpp
-@@ -45,7 +45,7 @@ public:
-
- /// Initialize dbus connection and server session
- void init_session(sdbus::IConnection & connection);
-- sdbus::ObjectPath & get_session_object_path() { return session_object_path; };
-+ sdbus::ObjectPath get_session_object_path() { return session_object_path; };
-
- // signal handlers
- void on_repositories_ready(const bool & result);
-@@ -68,12 +68,12 @@ public:
- libdnf5::OptionString releasever{""};
-
- void reset_download_cb();
-+ void set_download_cb(DownloadCB * download_cb) { this->download_cb = download_cb; }
-
- private:
- sdbus::ObjectPath session_object_path;
- dnfdaemon::RepoStatus repositories_status;
-- std::unique_ptr<DownloadCB> download_cb;
-- std::unique_ptr<TransactionCB> transaction_cb;
-+ DownloadCB * download_cb{nullptr};
- };
-
- } // namespace dnfdaemon::client
-diff --git a/dnf5daemon-client/main.cpp b/dnf5daemon-client/main.cpp
-index e759bd33..120216d7 100644
---- a/dnf5daemon-client/main.cpp
-+++ b/dnf5daemon-client/main.cpp
-@@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License
- along with libdnf. If not, see <https://www.gnu.org/licenses/>.
- */
-
-+#include "callbacks.hpp"
- #include "commands/advisory/advisory.hpp"
- #include "commands/clean/clean.hpp"
- #include "commands/distro-sync/distro-sync.hpp"
-@@ -231,8 +232,6 @@ static void set_locale() {
-
-
- int main(int argc, char * argv[]) {
-- std::unique_ptr<sdbus::IConnection> connection;
--
- set_locale();
-
- dnfdaemon::client::Context context;
-@@ -272,6 +271,7 @@ int main(int argc, char * argv[]) {
- try {
- command->pre_configure();
-
-+ std::unique_ptr<sdbus::IConnection> connection;
- try {
- connection = sdbus::createSystemBusConnection();
- } catch (const sdbus::Error & ex) {
-@@ -290,10 +290,20 @@ int main(int argc, char * argv[]) {
- return static_cast<int>(libdnf5::cli::ExitCode::ERROR);
- }
-
-- // Run selected command
-- command->run();
-+ {
-+ auto download_cb = std::make_unique<dnfdaemon::client::DownloadCB>(context, *connection);
-+ auto transaction_cb = std::make_unique<dnfdaemon::client::TransactionCB>(context, *connection);
-+ download_cb->register_signals();
-+ transaction_cb->register_signals();
-+
-+ context.set_download_cb(download_cb.get());
-
-- connection->leaveEventLoop();
-+ // Run selected command
-+ command->run();
-+ context.set_download_cb(nullptr);
-+
-+ connection->leaveEventLoop();
-+ }
- } catch (libdnf5::cli::ArgumentParserError & ex) {
- std::cerr << ex.what() << _(". Add \"--help\" for more information about the arguments.") << std::endl;
- return static_cast<int>(libdnf5::cli::ExitCode::ARGPARSER_ERROR);
---
-2.48.1
-
diff --git a/dnf5-tests.patch b/dnf5-tests.patch
new file mode 100644
index 0000000..dd7758a
--- /dev/null
+++ b/dnf5-tests.patch
@@ -0,0 +1,11 @@
+--- dnf5-5.4.6.0/test/libdnf5/utils/test_subprocess.cpp.orig 2026-09-24 20:44:28.000000000 +0200
++++ dnf5-5.4.6.0/test/libdnf5/utils/test_subprocess.cpp 2026-09-27 20:35:45.741468499 +0200
+@@ -82,7 +82,7 @@ void UtilsSubprocessTest::test_exit_code
+ void UtilsSubprocessTest::test_signal_termination() {
+ // Test that signal termination is captured as negative return code
+ // SIGTERM is signal 15, so we expect returncode to be -15
+- const auto result = libdnf5::utils::subprocess::run("/usr/bin/env", {"/usr/bin/env", "sh", "-c", "kill -TERM $$"});
++ const auto result = libdnf5::utils::subprocess::run("/usr/bin/env", {"/usr/bin/env", "bash", "-c", "kill -TERM $$"});
+
+ CPPUNIT_ASSERT_EQUAL(-15, result.returncode);
+ }
diff --git a/systemdunitdir.patch b/systemdunitdir.patch
index 8672a77..9473276 100644
--- a/systemdunitdir.patch
+++ b/systemdunitdir.patch
@@ -1,29 +1,33 @@
---- dnf5-5.2.10.0/CMakeLists.txt~ 2025-02-06 09:25:15.000000000 +0100
-+++ dnf5-5.2.10.0/CMakeLists.txt 2025-02-14 23:41:34.466659638 +0100
-@@ -7,7 +7,7 @@
+--- dnf5-5.4.6.0/CMakeLists.txt.orig 2026-09-24 20:44:28.000000000 +0200
++++ dnf5-5.4.6.0/CMakeLists.txt 2026-09-27 11:47:55.913038688 +0200
+@@ -7,7 +7,7 @@ project(dnf5 LANGUAGES CXX C VERSION ${V
cmake_policy(VERSION ${CMAKE_VERSION})
- set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake")
--set (SYSTEMD_DIR "/usr/lib/systemd/system")
-+set (SYSTEMD_DIR "/lib/systemd/system")
+ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+-set(SYSTEMD_DIR "/usr/lib/systemd/system" CACHE PATH "Directory for systemd unit files")
++set(SYSTEMD_DIR "/lib/systemd/system" CACHE PATH "Directory for systemd unit files")
+ set(TMPFILES_DIR "/usr/lib/tmpfiles.d" CACHE PATH "Directory for systemd tmpfiles.d files")
message("Building ${PROJECT_NAME} version ${PROJECT_VERSION}")
+--- dnf5-5.4.6.0/dnf5daemon-server/dbus/CMakeLists.txt.orig 2026-09-24 20:44:28.000000000 +0200
++++ dnf5-5.4.6.0/dnf5daemon-server/dbus/CMakeLists.txt 2026-09-27 11:46:46.506748027 +0200
+@@ -3,7 +3,7 @@ if(ENABLE_HTML_ONLY)
+ return()
+ endif()
---- dnf5-5.2.10.0/dnf5daemon-server/dbus/CMakeLists.txt~ 2025-02-06 09:25:15.000000000 +0100
-+++ dnf5-5.2.10.0/dnf5daemon-server/dbus/CMakeLists.txt 2025-02-15 00:25:52.869992755 +0100
-@@ -1,4 +1,4 @@
-set(SYSTEMD_UNIT_DIR /usr/lib/systemd/system)
+set(SYSTEMD_UNIT_DIR /lib/systemd/system)
set(DBUS_SHARE_DIR /usr/share/dbus-1)
set(DBUS_CONFIG_DIR ${DBUS_SHARE_DIR}/system.d)
---- dnf5-5.2.10.0/dnf5-plugins/automatic_plugin/CMakeLists.txt~ 2025-02-06 09:25:15.000000000 +0100
-+++ dnf5-5.2.10.0/dnf5-plugins/automatic_plugin/CMakeLists.txt 2025-02-15 00:27:58.546659401 +0100
-@@ -13,6 +13,7 @@
-
+--- dnf5-5.4.6.0/dnf5-plugins/automatic_plugin/CMakeLists.txt.orig 2026-09-24 20:44:28.000000000 +0200
++++ dnf5-5.4.6.0/dnf5-plugins/automatic_plugin/CMakeLists.txt 2026-09-27 11:47:47.469751096 +0200
+@@ -18,7 +18,7 @@ target_link_libraries(automatic_cmd_plug
install(TARGETS automatic_cmd_plugin LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/dnf5/plugins/)
- install(DIRECTORY "config/usr/" DESTINATION "${CMAKE_INSTALL_PREFIX}")
-+install(DIRECTORY "config/lib/" DESTINATION "/lib")
+ install(DIRECTORY "config/usr/share" DESTINATION "${CMAKE_INSTALL_PREFIX}")
+ if (WITH_SYSTEMD)
+- install(DIRECTORY "config/usr/lib" DESTINATION "${CMAKE_INSTALL_PREFIX}")
++ install(DIRECTORY "config/lib" DESTINATION "/")
+ endif()
install(PROGRAMS bin/dnf-automatic TYPE BIN)
-
diff --git a/x32.patch b/x32.patch
index 4676c92..21dfb55 100644
--- a/x32.patch
+++ b/x32.patch
@@ -1,9 +1,9 @@
---- dnf5-5.2.10.0/libdnf5/rpm/arch_private.hpp~ 2025-02-06 09:25:15.000000000 +0100
-+++ dnf5-5.2.10.0/libdnf5/rpm/arch_private.hpp 2025-02-16 14:55:32.906658823 +0100
-@@ -65,6 +65,7 @@
- {"sparc", {"sparc", "sparc64", "sparc64v", "sparcv8", "sparcv9", "sparcv9v", nullptr}},
+--- dnf5-5.4.6.0/libdnf5/rpm/arch_private.hpp.orig 2026-09-24 20:44:28.000000000 +0200
++++ dnf5-5.4.6.0/libdnf5/rpm/arch_private.hpp 2026-09-27 12:05:49.643888455 +0200
+@@ -66,6 +66,7 @@ static const struct {
{"x86_64", {"x86_64", "amd64", "ia32e", nullptr}},
{"loongarch64", {"loongarch64", nullptr}},
+ {"e2k", {"e2k", "e2kv4", "e2kv5", "e2v6"}},
+ {"x32", {"x32", nullptr}},
{nullptr, {nullptr}}};
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/dnf5.git/commitdiff/212404bb583dfa280a225a8e4c191d5f86d38715
More information about the pld-cvs-commit
mailing list