diff --git a/backport-add-support-for-rollback-of-group-upgrade-rollback.patch b/backport-add-support-for-rollback-of-group-upgrade-rollback.patch deleted file mode 100644 index a5282dd..0000000 --- a/backport-add-support-for-rollback-of-group-upgrade-rollback.patch +++ /dev/null @@ -1,50 +0,0 @@ -From e027e02efe57706de5867d42505ea01fb8d494de Mon Sep 17 00:00:00 2001 -From: Jan Kolarik -Date: Tue, 13 Sep 2022 13:55:35 +0200 -Subject: [PATCH] Add support for rollback of group upgrade rollback - (RhBug:2016070) - -= changelog = -type: bugfix -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2016070 - -Conflict:NA -Reference:https://github.com/rpm-software-management/dnf/commit/e027e02efe57706de5867d42505ea01fb8d494de ---- - dnf/transaction_sr.py | 12 ++++++++---- - 1 file changed, 8 insertions(+), 4 deletions(-) - -diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py -index 5d403a3..cf74b80 100644 ---- a/dnf/transaction_sr.py -+++ b/dnf/transaction_sr.py -@@ -553,9 +553,11 @@ class TransactionReplay(object): - - if action == "Install": - self._swdb_group_install(group_id, pkg_types, group_data["packages"]) -- elif action == "Upgrade": -+ # Groups are not versioned, but a reverse transaction could be applied, -+ # therefore we treat both actions the same way -+ elif action == "Upgrade" or action == "Upgraded": - self._swdb_group_upgrade(group_id, pkg_types, group_data["packages"]) -- elif action == "Downgraded": -+ elif action == "Downgrade" or action == "Downgraded": - self._swdb_group_downgrade(group_id, pkg_types, group_data["packages"]) - elif action == "Removed": - self._swdb_group_remove(group_id, pkg_types, group_data["packages"]) -@@ -584,9 +586,11 @@ class TransactionReplay(object): - - if action == "Install": - self._swdb_environment_install(env_id, pkg_types, env_data["groups"]) -- elif action == "Upgrade": -+ # Environments are not versioned, but a reverse transaction could be applied, -+ # therefore we treat both actions the same way -+ elif action == "Upgrade" or action == "Upgraded": - self._swdb_environment_upgrade(env_id, pkg_types, env_data["groups"]) -- elif action == "Downgraded": -+ elif action == "Downgrade" or action == "Downgraded": - self._swdb_environment_downgrade(env_id, pkg_types, env_data["groups"]) - elif action == "Removed": - self._swdb_environment_remove(env_id, pkg_types, env_data["groups"]) --- -2.27.0 diff --git a/backport-cli-allow-=in-setopt-values.patch b/backport-cli-allow-=in-setopt-values.patch deleted file mode 100644 index 1e606ed..0000000 --- a/backport-cli-allow-=in-setopt-values.patch +++ /dev/null @@ -1,28 +0,0 @@ -From e386cd384dffcbd91741357340f19967e79903cb Mon Sep 17 00:00:00 2001 -From: Anatoli Babenia -Date: Thu, 18 Aug 2022 09:35:51 +0300 -Subject: [PATCH] cli: Allow `=` in `setopt` values - -Reference:https://github.com/rpm-software-management/dnf/commit/e386cd384dffcbd91741357340f19967e79903cb -Conflict:NA ---- - dnf/cli/option_parser.py | 5 +---- - 1 file changed, 1 insertion(+), 4 deletions(-) - -diff --git a/dnf/cli/option_parser.py b/dnf/cli/option_parser.py -index 41ff16451d..042d5fbbee 100644 ---- a/dnf/cli/option_parser.py -+++ b/dnf/cli/option_parser.py -@@ -110,10 +110,7 @@ class _SetoptsCallback(argparse.Action): - """ Parse setopts arguments and put them into main_ - and repo_.""" - def __call__(self, parser, namespace, values, opt_str): -- vals = values.split('=') -- if len(vals) > 2: -- logger.warning(_("Setopt argument has multiple values: %s"), values) -- return -+ vals = values.split('=', maxsplit=1) - if len(vals) < 2: - logger.warning(_("Setopt argument has no value: %s"), values) - return --- diff --git a/backport-fix-AttributeError-when-IO-busy-and-press-ctrl-c.patch b/backport-fix-AttributeError-when-IO-busy-and-press-ctrl-c.patch deleted file mode 100644 index d9ee612..0000000 --- a/backport-fix-AttributeError-when-IO-busy-and-press-ctrl-c.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 759e7a5586f279efd41b65b2f84e0dd3bcf77fbd Mon Sep 17 00:00:00 2001 -From: chenhaixing123 -Date: Wed, 22 Feb 2023 17:27:04 +0800 -Subject: [PATCH] fix AttributeError when IO busy and press ctrl c - -Conflict:The content of "index" and "@@" are adapted -Reference:https://github.com/rpm-software-management/dnf/pull/1899/commits/759e7a5586f279efd41b65b2f84e0dd3bcf77fbd ---- - dnf/conf/config.py | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/dnf/conf/config.py b/dnf/conf/config.py -index 32516d1..e08ca72 100644 ---- a/dnf/conf/config.py -+++ b/dnf/conf/config.py -@@ -251,8 +251,9 @@ class MainConf(BaseConfig): - self.tempfiles = [] - - def __del__(self): -- for file_name in self.tempfiles: -- os.unlink(file_name) -+ if hasattr(self, 'tempfiles'): -+ for file_name in self.tempfiles: -+ os.unlink(file_name) - - @property - def get_reposdir(self): --- -2.27.0 \ No newline at end of file diff --git a/backport-fix-plugins-unit-tests-unload-plugins-upon-their-deletion.patch b/backport-fix-plugins-unit-tests-unload-plugins-upon-their-deletion.patch deleted file mode 100644 index c8f2b6d..0000000 --- a/backport-fix-plugins-unit-tests-unload-plugins-upon-their-deletion.patch +++ /dev/null @@ -1,93 +0,0 @@ -From 9ee057a4ccf3170deeb4626aa2387085d2ec6d5b Mon Sep 17 00:00:00 2001 -From: Jan Kolarik -Date: Tue, 13 Sep 2022 14:35:10 +0200 -Subject: [PATCH] Fix plugins unit tests + unload plugins upon their deletion - -Conflict:NA -Reference:https://github.com/rpm-software-management/dnf/commit/7ef317db99efeddb66905134292b0fe05e2ed58c ---- - dnf/plugin.py | 8 ++++++-- - tests/api/test_dnf_base.py | 24 +++++++++++++++++++----- - 2 files changed, 25 insertions(+), 7 deletions(-) - -diff --git a/dnf/plugin.py b/dnf/plugin.py -index b083727deb..d2f46ce340 100644 ---- a/dnf/plugin.py -+++ b/dnf/plugin.py -@@ -98,6 +98,9 @@ def __init__(self): - self.plugin_cls = [] - self.plugins = [] - -+ def __del__(self): -+ self._unload() -+ - def _caller(self, method): - for plugin in self.plugins: - try: -@@ -164,8 +167,9 @@ def run_transaction(self): - self._caller('transaction') - - def _unload(self): -- logger.debug(_('Plugins were unloaded')) -- del sys.modules[DYNAMIC_PACKAGE] -+ if DYNAMIC_PACKAGE in sys.modules: -+ logger.log(dnf.logging.DDEBUG, 'Plugins were unloaded.') -+ del sys.modules[DYNAMIC_PACKAGE] - - def unload_removed_plugins(self, transaction): - """ -diff --git a/tests/api/test_dnf_base.py b/tests/api/test_dnf_base.py -index e84e272b77..19754b072e 100644 ---- a/tests/api/test_dnf_base.py -+++ b/tests/api/test_dnf_base.py -@@ -7,10 +7,23 @@ - import dnf - import dnf.conf - -+import tests.support -+ - from .common import TestCase - from .common import TOUR_4_4 - - -+def conf_with_empty_plugins(): -+ """ -+ Use empty configuration to avoid importing plugins from default paths -+ which would lead to crash of other tests. -+ """ -+ conf = tests.support.FakeConf() -+ conf.plugins = True -+ conf.pluginpath = [] -+ return conf -+ -+ - class DnfBaseApiTest(TestCase): - def setUp(self): - self.base = dnf.Base(dnf.conf.Conf()) -@@ -75,13 +88,12 @@ def test_transaction(self): - self.assertHasType(self.base.transaction, dnf.db.group.RPMTransaction) - - def test_init_plugins(self): -- # Base.init_plugins(disabled_glob=(), enable_plugins=(), cli=None) -+ # Base.init_plugins() - self.assertHasAttr(self.base, "init_plugins") - -- # disable plugins to avoid calling dnf.plugin.Plugins._load() multiple times -- # which causes the tests to crash -- self.base.conf.plugins = False -- self.base.init_plugins(disabled_glob=(), enable_plugins=(), cli=None) -+ self.base._conf = conf_with_empty_plugins() -+ -+ self.base.init_plugins() - - def test_pre_configure_plugins(self): - # Base.pre_configure_plugins() -@@ -99,6 +111,8 @@ def test_unload_plugins(self): - # Base.unload_plugins() - self.assertHasAttr(self.base, "unload_plugins") - -+ self.base._conf = conf_with_empty_plugins() -+ - self.base.init_plugins() - self.base.unload_plugins() - \ No newline at end of file diff --git a/backport-ignore-processing-variable-files-with-unsupported-encoding.patch b/backport-ignore-processing-variable-files-with-unsupported-encoding.patch deleted file mode 100644 index d3aa1c5..0000000 --- a/backport-ignore-processing-variable-files-with-unsupported-encoding.patch +++ /dev/null @@ -1,52 +0,0 @@ -From e2fbdc660fb4ef83905e127fd801025461c24710 Mon Sep 17 00:00:00 2001 -From: Jan Kolarik -Date: Wed, 23 Nov 2022 08:44:41 +0000 -Subject: [PATCH] Ignore processing variable files with unsupported encoding - (RhBug:2141215) - -This issue could be seen for example when there are some temporary files stored by text editors in the `/etc/dnf/vars` folder. These files could be in the binary format and causes `UnicodeDecodeError` exception to be thrown during processing of the var files. - -= changelog = -type: bugfix -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2141215 - -Conflict:The content of "index" and "@@" are adapted -Reference:https://github.com/rpm-software-management/dnf/commit/e2fbdc660fb4ef83905e127fd801025461c24710 ---- - dnf/conf/substitutions.py | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/dnf/conf/substitutions.py b/dnf/conf/substitutions.py -index 1281bdf..9d7442b 100644 ---- a/dnf/conf/substitutions.py -+++ b/dnf/conf/substitutions.py -@@ -18,13 +18,15 @@ - # Red Hat, Inc. - # - -+import logging - import os - import re - --import dnf --import dnf.exceptions -+from dnf.i18n import _ - - ENVIRONMENT_VARS_RE = re.compile(r'^DNF_VAR_[A-Za-z0-9_]+$') -+logger = logging.getLogger('dnf') -+ - - class Substitutions(dict): - # :api -@@ -60,7 +62,8 @@ class Substitutions(dict): - val = fp.readline() - if val and val[-1] == '\n': - val = val[:-1] -- except (OSError, IOError): -+ except (OSError, IOError, UnicodeDecodeError) as e: -+ logger.warning(_("Error when parsing a variable from file '{0}': {1}").format(filepath, e)) - continue - if val is not None: - self[fsvar] = val --- -2.27.0 \ No newline at end of file diff --git a/backport-pass-whole-url-in-relativeUrl-to-packageTarget-for-rpm-url-download.patch b/backport-pass-whole-url-in-relativeUrl-to-packageTarget-for-rpm-url-download.patch deleted file mode 100644 index 44d5c37..0000000 --- a/backport-pass-whole-url-in-relativeUrl-to-packageTarget-for-rpm-url-download.patch +++ /dev/null @@ -1,64 +0,0 @@ -From d7bfd194129b496851ed07ac7efd07c6ddc0ab49 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= -Date: Wed, 7 Sep 2022 14:40:32 +0200 -Subject: [PATCH] Pass whole URL in relativeUrl to PackageTarget for RPM URL - download - -The PackageTarget supports baseUrl and relativeUrl on the API, but then -the relativeUrl is just a path fragment with no definition on whether it -should be encoded. It's being passed unencoded paths from other places, -and so there's a conditional encode (only if not full URL) in libdnf. - -But full URLs are actually supported in relativeUrl (in that case -baseUrl should be empty) and in that case the URL is expected to be -encoded and is not encoded for the second time. - -Hence, pass the full URL to relativeUrl instead of splitting it. We also -need to decode the file name we store, as on the filesystem the RPM file -name is also decoded. - -= changelog = -msg: Don't double-encode RPM URLs passed on CLI -type: bugfix -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103015 - -Conflict:NA -Reference:https://github.com/rpm-software-management/dnf/commit/d7bfd194129b496851ed07ac7efd07c6ddc0ab49 ---- - dnf/repo.py | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/dnf/repo.py b/dnf/repo.py -index 1822cf0..8751de3 100644 ---- a/dnf/repo.py -+++ b/dnf/repo.py -@@ -47,6 +47,7 @@ import string - import sys - import time - import traceback -+import urllib - - _PACKAGES_RELATIVE_DIR = "packages" - _MIRRORLIST_FILENAME = "mirrorlist" -@@ -295,7 +296,7 @@ class RemoteRPMPayload(PackagePayload): - self.local_path = os.path.join(self.pkgdir, self.__str__().lstrip("/")) - - def __str__(self): -- return os.path.basename(self.remote_location) -+ return os.path.basename(urllib.parse.unquote(self.remote_location)) - - def _progress_cb(self, cbdata, total, done): - self.remote_size = total -@@ -308,8 +309,8 @@ class RemoteRPMPayload(PackagePayload): - - def _librepo_target(self): - return libdnf.repo.PackageTarget( -- self.conf._config, os.path.basename(self.remote_location), -- self.pkgdir, 0, None, 0, os.path.dirname(self.remote_location), -+ self.conf._config, self.remote_location, -+ self.pkgdir, 0, None, 0, None, - True, 0, 0, self.callbacks) - - @property --- -2.27.0 diff --git a/dnf-4.10.0-sw.patch b/dnf-4.10.0-sw.patch old mode 100755 new mode 100644 diff --git a/dnf-4.14.0.tar.gz b/dnf-4.14.0.tar.gz deleted file mode 100644 index c548819..0000000 Binary files a/dnf-4.14.0.tar.gz and /dev/null differ diff --git a/dnf-4.16.2.tar.gz b/dnf-4.16.2.tar.gz new file mode 100644 index 0000000..50f5e68 Binary files /dev/null and b/dnf-4.16.2.tar.gz differ diff --git a/dnf.spec b/dnf.spec index 95a246a..1c62fda 100644 --- a/dnf.spec +++ b/dnf.spec @@ -2,10 +2,10 @@ %global relate_libdnf_version 0.66.0 Name: dnf -Version: 4.14.0 -Release: 15 +Version: 4.16.2 +Release: 1 Summary: A software package manager that manages packages on Linux distributions. -License: GPLv2+ and GPLv2 and GPL +License: GPL-2.0-or-later AND GPL-1.0-only URL: https://github.com/rpm-software-management/dnf Source0: https://github.com/rpm-software-management/dnf/archive/%{version}/%{name}-%{version}.tar.gz @@ -19,26 +19,15 @@ Patch9006: get-lockfile-exists-before-unlick.patch %ifarch sw_64 Patch6000: dnf-4.10.0-sw.patch %endif + %if 0%(test `uname -m` == "loongarch64" && echo 1) Patch6001: 0001-Add-loongarch-architecture-support.patch %endif -Patch6002: backport-fix-plugins-unit-tests-unload-plugins-upon-their-deletion.patch -Patch6003: backport-pass-whole-url-in-relativeUrl-to-packageTarget-for-rpm-url-download.patch -Patch6004: backport-add-support-for-rollback-of-group-upgrade-rollback.patch -Patch6005: backport-ignore-processing-variable-files-with-unsupported-encoding.patch -Patch6006: backport-fix-AttributeError-when-IO-busy-and-press-ctrl-c.patch -Patch6007: backport-cli-allow-=in-setopt-values.patch BuildArch: noarch BuildRequires: cmake gettext systemd bash-completion python3-sphinx Requires: python3-%{name} = %{version}-%{release} libreport-filesystem Recommends: (%{_bindir}/sqlite3 if bash-completion) (python3-dbus if NetworkManager) -Provides: dnf-command(alias) dnf-command(autoremove) dnf-command(check-update) dnf-command(clean) -Provides: dnf-command(distro-sync) dnf-command(downgrade) dnf-command(group) dnf-command(history) -Provides: dnf-command(info) dnf-command(install) dnf-command(list) dnf-command(makecache) -Provides: dnf-command(mark) dnf-command(provides) dnf-command(reinstall) dnf-command(remove) -Provides: dnf-command(repolist) dnf-command(repoquery) dnf-command(repository-packages) -Provides: dnf-command(search) dnf-command(updateinfo) dnf-command(upgrade) dnf-command(upgrade-to) Conflicts: python2-dnf-plugins-core < 4.0.6 python3-dnf-plugins-core < 4.0.6 %description @@ -66,6 +55,12 @@ Requires: python3-gpg %{name}-data = %{version}-%{release} libmodule Requires: python3-hawkey >= 0.66.0 python3-libdnf >= %{relate_libdnf_version} Requires: python3-libcomps >= 0.1.8 python3-rpm >= 4.14.0 Recommends: python3-unbound +Provides: dnf-command(alias) dnf-command(autoremove) dnf-command(check-update) dnf-command(clean) +Provides: dnf-command(distro-sync) dnf-command(downgrade) dnf-command(group) dnf-command(history) +Provides: dnf-command(info) dnf-command(install) dnf-command(list) dnf-command(makecache) +Provides: dnf-command(mark) dnf-command(provides) dnf-command(reinstall) dnf-command(remove) +Provides: dnf-command(repolist) dnf-command(repoquery) dnf-command(repository-packages) +Provides: dnf-command(search) dnf-command(updateinfo) dnf-command(upgrade) dnf-command(upgrade-to) Obsoletes: python2-%{name} %description -n python3-%{name} @@ -83,7 +78,7 @@ Common data and configuration files for DNF %package automatic Summary: %{pkg_summary} - automated upgrades BuildRequires: systemd -Requires: %{name} = %{version}-%{release} +Requires: python3-%{name} = %{version}-%{release} %{?systemd_requires} %description automatic @@ -133,6 +128,7 @@ mkdir -p %{buildroot}%{_localstatedir}/log/ mkdir -p %{buildroot}%{_var}/cache/dnf/ touch %{buildroot}%{_localstatedir}/log/%{name}.log ln -sr %{buildroot}%{_bindir}/dnf-3 %{buildroot}%{_bindir}/dnf +ln -sr %{buildroot}%{_bindir}/dnf-3 %{buildroot}%{_bindir}/dnf4 mv %{buildroot}%{_bindir}/dnf-automatic-3 %{buildroot}%{_bindir}/dnf-automatic rm -vf %{buildroot}%{_bindir}/dnf-automatic-* mv -f %{buildroot}%{_sysconfdir}/%{name}/%{name}-strict.conf %{buildroot}%{_sysconfdir}/%{name}/%{name}.conf @@ -189,10 +185,11 @@ popd %{_sysconfdir}/yum.conf %{_sysconfdir}/yum/pluginconf.d %{_sysconfdir}/yum/protected.d -%config(noreplace) %{_sysconfdir}/%{name}/protected.d/yum.conf +%config %{_sysconfdir}/%{name}/protected.d/yum.conf %files -n python3-%{name} %{_bindir}/%{name}-3 +%{_bindir}/%{name}4 %exclude %{python3_sitelib}/%{name}/automatic %{python3_sitelib}/%{name}/ %dir %{py3pluginpath} @@ -210,7 +207,8 @@ popd %dir %{_sysconfdir}/%{name}/aliases.d %exclude %{_sysconfdir}/%{name}/aliases.d/zypper.conf %config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf -%config(noreplace) %{_sysconfdir}/%{name}/protected.d/%{name}.conf +%config %{_sysconfdir}/%{name}/protected.d/%{name}.conf +%config(noreplace) %{_sysconfdir}/%{name}/protected.d/python3-%{name}.conf %config(noreplace) %{_sysconfdir}/logrotate.d/%{name} %ghost %attr(644,-,-) %{_localstatedir}/log/hawkey.log %ghost %attr(644,-,-) %{_localstatedir}/log/%{name}.log @@ -252,6 +250,12 @@ popd %{_mandir}/man8/%{name}-automatic.8* %changelog +* Sat Jul 29 2023 zhangrui - 4.16.2-1 +- Type:bugfix +- CVE:NA +- SUG:NA +- DESC:upgrade dnf to 4.16.2 + * Fri Jul 14 2023 chenhaixing - 4.14.0-15 - Type:bugfix - CVE:NA