import dnf-4.7.0-13.el8
This commit is contained in:
parent
4eb717f5b9
commit
b6ce084ba7
@ -0,0 +1,47 @@
|
|||||||
|
From 66a37245e82c60b972ee35879f9c29c27466a27b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
|
||||||
|
Date: Mon, 25 Jul 2022 12:44:17 +0200
|
||||||
|
Subject: [PATCH] Don't include resolved advisories for obsoletes with sec.
|
||||||
|
filters (RhBug:2101421)
|
||||||
|
|
||||||
|
This makes the obsoletes security filters consistent with upgrade
|
||||||
|
security filters.
|
||||||
|
|
||||||
|
This API is used from check-update and from Info and List commands.
|
||||||
|
- For check-update we don't want to include resolved advisories to have
|
||||||
|
identical result to the actual update. That is bz2101421 use case.
|
||||||
|
- For Info and List commands the --obsoletes switch: "List packages
|
||||||
|
installed on the system that are obsoleted by packages in any known
|
||||||
|
repository." Given this specification in makes sense not to
|
||||||
|
consider resolved advisories when we also use security filters.
|
||||||
|
|
||||||
|
There is still a general case when someone uses the API or any potential
|
||||||
|
future use and I think it is best to have the behavior unified for
|
||||||
|
"upgrades" and "obsoletes".
|
||||||
|
|
||||||
|
= changelog =
|
||||||
|
msg: Don't include resolved advisories for obsoletes filtering with security filters
|
||||||
|
type: bugfix
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2101421
|
||||||
|
|
||||||
|
Tests: https://github.com/rpm-software-management/ci-dnf-stack/pull/1134
|
||||||
|
---
|
||||||
|
dnf/base.py | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/dnf/base.py b/dnf/base.py
|
||||||
|
index e606d9fa..e623d98e 100644
|
||||||
|
--- a/dnf/base.py
|
||||||
|
+++ b/dnf/base.py
|
||||||
|
@@ -1565,7 +1565,7 @@ class Base(object):
|
||||||
|
obsoletes = query_for_repo(
|
||||||
|
self.sack.query()).filter(obsoletes_by_priority=inst)
|
||||||
|
# reduce a query to security upgrades if they are specified
|
||||||
|
- obsoletes = self._merge_update_filters(obsoletes, warning=False)
|
||||||
|
+ obsoletes = self._merge_update_filters(obsoletes, warning=False, upgrade=True)
|
||||||
|
obsoletesTuples = []
|
||||||
|
for new in obsoletes:
|
||||||
|
obsoleted_reldeps = new.obsoletes
|
||||||
|
--
|
||||||
|
2.37.1
|
||||||
|
|
@ -0,0 +1,35 @@
|
|||||||
|
From 553a2c585db50599d5028ea6bb6462281bb88d02 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Mracek <jmracek@redhat.com>
|
||||||
|
Date: Mon, 11 Jul 2022 12:27:14 +0200
|
||||||
|
Subject: [PATCH] Set default value for variable to prevent crash
|
||||||
|
(RhBug:2091636)
|
||||||
|
|
||||||
|
It ensure that read of file ended successfully.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=2091636
|
||||||
|
---
|
||||||
|
dnf/conf/substitutions.py | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/dnf/conf/substitutions.py b/dnf/conf/substitutions.py
|
||||||
|
index 703e4a4f..1281bdf0 100644
|
||||||
|
--- a/dnf/conf/substitutions.py
|
||||||
|
+++ b/dnf/conf/substitutions.py
|
||||||
|
@@ -53,6 +53,7 @@ class Substitutions(dict):
|
||||||
|
continue
|
||||||
|
for fsvar in fsvars:
|
||||||
|
filepath = os.path.join(dir_fsvars, fsvar)
|
||||||
|
+ val = None
|
||||||
|
if os.path.isfile(filepath):
|
||||||
|
try:
|
||||||
|
with open(filepath) as fp:
|
||||||
|
@@ -61,4 +62,5 @@ class Substitutions(dict):
|
||||||
|
val = val[:-1]
|
||||||
|
except (OSError, IOError):
|
||||||
|
continue
|
||||||
|
- self[fsvar] = val
|
||||||
|
+ if val is not None:
|
||||||
|
+ self[fsvar] = val
|
||||||
|
--
|
||||||
|
2.37.1
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
From 96a5bd61ab3b35f00f0b52bcd6428c7aea7d1ca5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Kolarik <jkolarik@redhat.com>
|
||||||
|
Date: Wed, 7 Sep 2022 14:27:07 +0200
|
||||||
|
Subject: [PATCH] Add doc related to --destdir and --downloadonly options
|
||||||
|
(RhBug:2100811)
|
||||||
|
|
||||||
|
= changelog =
|
||||||
|
type: bugfix
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2100811
|
||||||
|
---
|
||||||
|
doc/command_ref.rst | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/doc/command_ref.rst b/doc/command_ref.rst
|
||||||
|
index 42aec72c..7a02448c 100644
|
||||||
|
--- a/doc/command_ref.rst
|
||||||
|
+++ b/doc/command_ref.rst
|
||||||
|
@@ -190,6 +190,10 @@ Options
|
||||||
|
``--downloadonly``
|
||||||
|
Download the resolved package set without performing any rpm transaction (install/upgrade/erase).
|
||||||
|
|
||||||
|
+ Packages are removed after the next successful transaction. This applies also when used together
|
||||||
|
+ with ``--destdir`` option as the directory is considered as a part of the DNF cache. To persist
|
||||||
|
+ the packages, use the ``download`` command instead.
|
||||||
|
+
|
||||||
|
``-e <error level>, --errorlevel=<error level>``
|
||||||
|
Error output level. This is an integer value between 0 (no error output) and
|
||||||
|
10 (shows all error messages), default is 3. Deprecated, use ``-v`` instead.
|
||||||
|
--
|
||||||
|
2.37.1
|
||||||
|
|
@ -0,0 +1,79 @@
|
|||||||
|
From aa724a639a641943ecf39038fd694abc2037e66d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Kolarik <jkolarik@redhat.com>
|
||||||
|
Date: Mon, 22 Aug 2022 10:38:30 +0200
|
||||||
|
Subject: [PATCH] Expose plugin unload method to API (RhBug:2047251)
|
||||||
|
|
||||||
|
= changelog =
|
||||||
|
type: bugfix
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2047251
|
||||||
|
---
|
||||||
|
dnf/base.py | 5 +++++
|
||||||
|
dnf/plugin.py | 1 +
|
||||||
|
doc/api_base.rst | 4 ++++
|
||||||
|
tests/api/test_dnf_base.py | 7 +++++++
|
||||||
|
4 files changed, 17 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/dnf/base.py b/dnf/base.py
|
||||||
|
index e623d98e..4ddfae15 100644
|
||||||
|
--- a/dnf/base.py
|
||||||
|
+++ b/dnf/base.py
|
||||||
|
@@ -316,6 +316,11 @@ class Base(object):
|
||||||
|
"""Run plugins configure() method."""
|
||||||
|
self._plugins._run_config()
|
||||||
|
|
||||||
|
+ def unload_plugins(self):
|
||||||
|
+ # :api
|
||||||
|
+ """Run plugins unload() method."""
|
||||||
|
+ self._plugins._unload()
|
||||||
|
+
|
||||||
|
def update_cache(self, timer=False):
|
||||||
|
# :api
|
||||||
|
|
||||||
|
diff --git a/dnf/plugin.py b/dnf/plugin.py
|
||||||
|
index 06066e79..87c1f08f 100644
|
||||||
|
--- a/dnf/plugin.py
|
||||||
|
+++ b/dnf/plugin.py
|
||||||
|
@@ -164,6 +164,7 @@ class Plugins(object):
|
||||||
|
self._caller('transaction')
|
||||||
|
|
||||||
|
def _unload(self):
|
||||||
|
+ logger.debug(_('Plugins were unloaded'))
|
||||||
|
del sys.modules[DYNAMIC_PACKAGE]
|
||||||
|
|
||||||
|
def unload_removed_plugins(self, transaction):
|
||||||
|
diff --git a/doc/api_base.rst b/doc/api_base.rst
|
||||||
|
index 03396b69..35cbeef5 100644
|
||||||
|
--- a/doc/api_base.rst
|
||||||
|
+++ b/doc/api_base.rst
|
||||||
|
@@ -97,6 +97,10 @@
|
||||||
|
|
||||||
|
Configure plugins by running their configure() method.
|
||||||
|
|
||||||
|
+ .. method:: unload_plugins()
|
||||||
|
+
|
||||||
|
+ Unload all plugins.
|
||||||
|
+
|
||||||
|
.. method:: fill_sack([load_system_repo=True, load_available_repos=True])
|
||||||
|
|
||||||
|
Setup the package sack. If `load_system_repo` is ``True``, load information about packages in the local RPMDB into the sack. Else no package is considered installed during dependency solving. If `load_available_repos` is ``True``, load information about packages from the available repositories into the sack.
|
||||||
|
diff --git a/tests/api/test_dnf_base.py b/tests/api/test_dnf_base.py
|
||||||
|
index 33598189..e84e272b 100644
|
||||||
|
--- a/tests/api/test_dnf_base.py
|
||||||
|
+++ b/tests/api/test_dnf_base.py
|
||||||
|
@@ -95,6 +95,13 @@ class DnfBaseApiTest(TestCase):
|
||||||
|
|
||||||
|
self.base.configure_plugins()
|
||||||
|
|
||||||
|
+ def test_unload_plugins(self):
|
||||||
|
+ # Base.unload_plugins()
|
||||||
|
+ self.assertHasAttr(self.base, "unload_plugins")
|
||||||
|
+
|
||||||
|
+ self.base.init_plugins()
|
||||||
|
+ self.base.unload_plugins()
|
||||||
|
+
|
||||||
|
def test_update_cache(self):
|
||||||
|
# Base.update_cache(self, timer=False)
|
||||||
|
self.assertHasAttr(self.base, "update_cache")
|
||||||
|
--
|
||||||
|
2.37.1
|
||||||
|
|
@ -0,0 +1,105 @@
|
|||||||
|
From 7ba2cd6a86945e0ec6f9ed866e2ef6b6759ee092 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Kolarik <jkolarik@redhat.com>
|
||||||
|
Date: Thu, 25 Aug 2022 08:06:34 +0200
|
||||||
|
Subject: [PATCH] Add support for group upgrade rollback (RhBug:2016070)
|
||||||
|
|
||||||
|
= changelog =
|
||||||
|
type: bugfix
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2016070
|
||||||
|
---
|
||||||
|
dnf/db/group.py | 8 +++++++-
|
||||||
|
dnf/transaction_sr.py | 24 ++++++++++++++++++++++++
|
||||||
|
2 files changed, 31 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/dnf/db/group.py b/dnf/db/group.py
|
||||||
|
index 4dc8cb06..312e3b98 100644
|
||||||
|
--- a/dnf/db/group.py
|
||||||
|
+++ b/dnf/db/group.py
|
||||||
|
@@ -34,14 +34,16 @@ class PersistorBase(object):
|
||||||
|
self._installed = {}
|
||||||
|
self._removed = {}
|
||||||
|
self._upgraded = {}
|
||||||
|
+ self._downgraded = {}
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
- return len(self._installed) + len(self._removed) + len(self._upgraded)
|
||||||
|
+ return len(self._installed) + len(self._removed) + len(self._upgraded) + len(self._downgraded)
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
self._installed = {}
|
||||||
|
self._removed = {}
|
||||||
|
self._upgraded = {}
|
||||||
|
+ self._downgraded = {}
|
||||||
|
|
||||||
|
def _get_obj_id(self, obj):
|
||||||
|
raise NotImplementedError
|
||||||
|
@@ -62,6 +64,10 @@ class PersistorBase(object):
|
||||||
|
self._upgraded[self._get_obj_id(obj)] = obj
|
||||||
|
self._add_to_history(obj, libdnf.transaction.TransactionItemAction_UPGRADE)
|
||||||
|
|
||||||
|
+ def downgrade(self, obj):
|
||||||
|
+ self._downgraded[self._get_obj_id(obj)] = obj
|
||||||
|
+ self._add_to_history(obj, libdnf.transaction.TransactionItemAction_DOWNGRADE)
|
||||||
|
+
|
||||||
|
def new(self, obj_id, name, translated_name, pkg_types):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py
|
||||||
|
index dae8d300..5d403a3e 100644
|
||||||
|
--- a/dnf/transaction_sr.py
|
||||||
|
+++ b/dnf/transaction_sr.py
|
||||||
|
@@ -416,6 +416,16 @@ class TransactionReplay(object):
|
||||||
|
if swdb_group is not None:
|
||||||
|
self._base.history.group.upgrade(swdb_group)
|
||||||
|
|
||||||
|
+ def _swdb_group_downgrade(self, group_id, pkg_types, pkgs):
|
||||||
|
+ if not self._base.history.group.get(group_id):
|
||||||
|
+ self._raise_or_warn(self._ignore_installed, _("Group id '%s' is not installed.") % group_id)
|
||||||
|
+ return
|
||||||
|
+
|
||||||
|
+ swdb_group = self._create_swdb_group(group_id, pkg_types, pkgs)
|
||||||
|
+
|
||||||
|
+ if swdb_group is not None:
|
||||||
|
+ self._base.history.group.downgrade(swdb_group)
|
||||||
|
+
|
||||||
|
def _swdb_group_remove(self, group_id, pkg_types, pkgs):
|
||||||
|
if not self._base.history.group.get(group_id):
|
||||||
|
self._raise_or_warn(self._ignore_installed, _("Group id '%s' is not installed.") % group_id)
|
||||||
|
@@ -482,6 +492,16 @@ class TransactionReplay(object):
|
||||||
|
if swdb_env is not None:
|
||||||
|
self._base.history.env.upgrade(swdb_env)
|
||||||
|
|
||||||
|
+ def _swdb_environment_downgrade(self, env_id, pkg_types, groups):
|
||||||
|
+ if not self._base.history.env.get(env_id):
|
||||||
|
+ self._raise_or_warn(self._ignore_installed, _("Environment id '%s' is not installed.") % env_id)
|
||||||
|
+ return
|
||||||
|
+
|
||||||
|
+ swdb_env = self._create_swdb_environment(env_id, pkg_types, groups)
|
||||||
|
+
|
||||||
|
+ if swdb_env is not None:
|
||||||
|
+ self._base.history.env.downgrade(swdb_env)
|
||||||
|
+
|
||||||
|
def _swdb_environment_remove(self, env_id, pkg_types, groups):
|
||||||
|
if not self._base.history.env.get(env_id):
|
||||||
|
self._raise_or_warn(self._ignore_installed, _("Environment id '%s' is not installed.") % env_id)
|
||||||
|
@@ -535,6 +555,8 @@ class TransactionReplay(object):
|
||||||
|
self._swdb_group_install(group_id, pkg_types, group_data["packages"])
|
||||||
|
elif action == "Upgrade":
|
||||||
|
self._swdb_group_upgrade(group_id, pkg_types, group_data["packages"])
|
||||||
|
+ elif 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"])
|
||||||
|
else:
|
||||||
|
@@ -564,6 +586,8 @@ class TransactionReplay(object):
|
||||||
|
self._swdb_environment_install(env_id, pkg_types, env_data["groups"])
|
||||||
|
elif action == "Upgrade":
|
||||||
|
self._swdb_environment_upgrade(env_id, pkg_types, env_data["groups"])
|
||||||
|
+ elif 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"])
|
||||||
|
else:
|
||||||
|
--
|
||||||
|
2.37.1
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From 46562dc76e50d86eed99a102af74a1187a4303e4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nicola Sella <nsella@redhat.com>
|
||||||
|
Date: Thu, 11 Aug 2022 13:56:11 +0200
|
||||||
|
Subject: [PATCH] Fix upgrade from file to noarch pkg (RhBug:2006018)
|
||||||
|
|
||||||
|
= changelog =
|
||||||
|
msg: Fix upgrade pkg from file when installed pkg is noarch and upgrades
|
||||||
|
to a different arch
|
||||||
|
type: bugfix
|
||||||
|
resolves: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=2006018
|
||||||
|
---
|
||||||
|
dnf/base.py | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/dnf/base.py b/dnf/base.py
|
||||||
|
index 4ddfae15..aba411ea 100644
|
||||||
|
--- a/dnf/base.py
|
||||||
|
+++ b/dnf/base.py
|
||||||
|
@@ -2109,7 +2109,11 @@ class Base(object):
|
||||||
|
sltr.set(pkg=[pkg])
|
||||||
|
self._goal.upgrade(select=sltr)
|
||||||
|
return 1
|
||||||
|
- q = installed.filter(name=pkg.name, arch=[pkg.arch, "noarch"])
|
||||||
|
+ # do not filter by arch if the package is noarch
|
||||||
|
+ if pkg.arch == "noarch":
|
||||||
|
+ q = installed.filter(name=pkg.name)
|
||||||
|
+ else:
|
||||||
|
+ q = installed.filter(name=pkg.name, arch=[pkg.arch, "noarch"])
|
||||||
|
if not q:
|
||||||
|
msg = _("Package %s not installed, cannot update it.")
|
||||||
|
logger.warning(msg, pkg.name)
|
||||||
|
--
|
||||||
|
2.37.1
|
||||||
|
|
@ -0,0 +1,62 @@
|
|||||||
|
From 7a265cf17fe3531e45dde8ae622c496bef1e17ae Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Kolarik <jkolarik@redhat.com>
|
||||||
|
Date: Wed, 10 Aug 2022 16:24:08 +0200
|
||||||
|
Subject: [PATCH] Allow passing plugin parameters with dashes in names
|
||||||
|
(RhBug:1980712)
|
||||||
|
|
||||||
|
= changelog =
|
||||||
|
type: bugfix
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1980712
|
||||||
|
---
|
||||||
|
dnf/plugin.py | 20 +++++++++++++++++---
|
||||||
|
1 file changed, 17 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/dnf/plugin.py b/dnf/plugin.py
|
||||||
|
index 87c1f08f..b083727d 100644
|
||||||
|
--- a/dnf/plugin.py
|
||||||
|
+++ b/dnf/plugin.py
|
||||||
|
@@ -225,17 +225,17 @@ def _get_plugins_files(paths, disable_plugins, enable_plugins):
|
||||||
|
matched = True
|
||||||
|
enable_pattern_tested = False
|
||||||
|
for pattern_skip in disable_plugins:
|
||||||
|
- if fnmatch.fnmatch(plugin_name, pattern_skip):
|
||||||
|
+ if _plugin_name_matches_pattern(plugin_name, pattern_skip):
|
||||||
|
pattern_disable_found.add(pattern_skip)
|
||||||
|
matched = False
|
||||||
|
for pattern_enable in enable_plugins:
|
||||||
|
- if fnmatch.fnmatch(plugin_name, pattern_enable):
|
||||||
|
+ if _plugin_name_matches_pattern(plugin_name, pattern_enable):
|
||||||
|
matched = True
|
||||||
|
pattern_enable_found.add(pattern_enable)
|
||||||
|
enable_pattern_tested = True
|
||||||
|
if not enable_pattern_tested:
|
||||||
|
for pattern_enable in enable_plugins:
|
||||||
|
- if fnmatch.fnmatch(plugin_name, pattern_enable):
|
||||||
|
+ if _plugin_name_matches_pattern(plugin_name, pattern_enable):
|
||||||
|
pattern_enable_found.add(pattern_enable)
|
||||||
|
if matched:
|
||||||
|
plugins.append(fn)
|
||||||
|
@@ -250,6 +250,20 @@ def _get_plugins_files(paths, disable_plugins, enable_plugins):
|
||||||
|
return plugins
|
||||||
|
|
||||||
|
|
||||||
|
+def _plugin_name_matches_pattern(plugin_name, pattern):
|
||||||
|
+ """
|
||||||
|
+ Checks plugin name matches the pattern.
|
||||||
|
+
|
||||||
|
+ The alternative plugin name using dashes instead of underscores is tried
|
||||||
|
+ in case of original name is not matched.
|
||||||
|
+
|
||||||
|
+ (see https://bugzilla.redhat.com/show_bug.cgi?id=1980712)
|
||||||
|
+ """
|
||||||
|
+
|
||||||
|
+ try_names = set((plugin_name, plugin_name.replace('_', '-')))
|
||||||
|
+ return any(fnmatch.fnmatch(name, pattern) for name in try_names)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
def register_command(command_class):
|
||||||
|
# :api
|
||||||
|
"""A class decorator for automatic command registration."""
|
||||||
|
--
|
||||||
|
2.37.1
|
||||||
|
|
@ -0,0 +1,97 @@
|
|||||||
|
From 9700b8fabd102fcf289281c3c04238da90d7b28e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Kolarik <jkolarik@redhat.com>
|
||||||
|
Date: Tue, 13 Sep 2022 14:35:10 +0200
|
||||||
|
Subject: [PATCH] Fix plugins unit tests + unload plugins upon their deletion
|
||||||
|
|
||||||
|
=changelog=
|
||||||
|
type: bugfix
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2134309
|
||||||
|
---
|
||||||
|
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 b083727d..d2f46ce3 100644
|
||||||
|
--- a/dnf/plugin.py
|
||||||
|
+++ b/dnf/plugin.py
|
||||||
|
@@ -98,6 +98,9 @@ class Plugins(object):
|
||||||
|
self.plugin_cls = []
|
||||||
|
self.plugins = []
|
||||||
|
|
||||||
|
+ def __del__(self):
|
||||||
|
+ self._unload()
|
||||||
|
+
|
||||||
|
def _caller(self, method):
|
||||||
|
for plugin in self.plugins:
|
||||||
|
try:
|
||||||
|
@@ -164,8 +167,9 @@ class Plugins(object):
|
||||||
|
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 e84e272b..19754b07 100644
|
||||||
|
--- a/tests/api/test_dnf_base.py
|
||||||
|
+++ b/tests/api/test_dnf_base.py
|
||||||
|
@@ -7,10 +7,23 @@ from __future__ import unicode_literals
|
||||||
|
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 @@ class DnfBaseApiTest(TestCase):
|
||||||
|
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 @@ class DnfBaseApiTest(TestCase):
|
||||||
|
# Base.unload_plugins()
|
||||||
|
self.assertHasAttr(self.base, "unload_plugins")
|
||||||
|
|
||||||
|
+ self.base._conf = conf_with_empty_plugins()
|
||||||
|
+
|
||||||
|
self.base.init_plugins()
|
||||||
|
self.base.unload_plugins()
|
||||||
|
|
||||||
|
--
|
||||||
|
2.37.3
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
From c9251d182be0bfa66345220cffe0842b44a061a8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Kolarik <jkolarik@redhat.com>
|
||||||
|
Date: Wed, 31 Aug 2022 07:49:39 +0200
|
||||||
|
Subject: [PATCH] Move system-upgrade plugin to core (RhBug:2054235)
|
||||||
|
|
||||||
|
Just doc fix.
|
||||||
|
|
||||||
|
= changelog =
|
||||||
|
type: bugfix
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2054235
|
||||||
|
---
|
||||||
|
doc/command_ref.rst | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/doc/command_ref.rst b/doc/command_ref.rst
|
||||||
|
index 7a02448c..bee6a109 100644
|
||||||
|
--- a/doc/command_ref.rst
|
||||||
|
+++ b/doc/command_ref.rst
|
||||||
|
@@ -182,8 +182,7 @@ Options
|
||||||
|
``--downloaddir=<path>, --destdir=<path>``
|
||||||
|
Redirect downloaded packages to provided directory. The option has to be used together with the \-\
|
||||||
|
:ref:`-downloadonly <downloadonly-label>` command line option, with the
|
||||||
|
- ``download``, ``modulesync`` or ``reposync`` commands (dnf-plugins-core) or with the ``system-upgrade`` command
|
||||||
|
- (dnf-plugins-extras).
|
||||||
|
+ ``download``, ``modulesync``, ``reposync`` or ``system-upgrade`` commands (dnf-plugins-core).
|
||||||
|
|
||||||
|
.. _downloadonly-label:
|
||||||
|
|
||||||
|
--
|
||||||
|
2.37.3
|
||||||
|
|
@ -0,0 +1,58 @@
|
|||||||
|
From a32b2f7d596247124ad6ff5ab71bc83bf78f0518 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Kolarik <jkolarik@redhat.com>
|
||||||
|
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
|
||||||
|
---
|
||||||
|
dnf/transaction_sr.py | 20 ++++++++++++--------
|
||||||
|
1 file changed, 12 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py
|
||||||
|
index 5d403a3e..b389f152 100644
|
||||||
|
--- a/dnf/transaction_sr.py
|
||||||
|
+++ b/dnf/transaction_sr.py
|
||||||
|
@@ -553,12 +553,14 @@ class TransactionReplay(object):
|
||||||
|
|
||||||
|
if action == "Install":
|
||||||
|
self._swdb_group_install(group_id, pkg_types, group_data["packages"])
|
||||||
|
- elif action == "Upgrade":
|
||||||
|
- self._swdb_group_upgrade(group_id, pkg_types, group_data["packages"])
|
||||||
|
- elif 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"])
|
||||||
|
+ # 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 == "Downgrade" or action == "Downgraded":
|
||||||
|
+ self._swdb_group_downgrade(group_id, pkg_types, group_data["packages"])
|
||||||
|
else:
|
||||||
|
errors.append(TransactionError(
|
||||||
|
_('Unexpected value of group action "{action}" for group "{group}".')
|
||||||
|
@@ -584,12 +586,14 @@ class TransactionReplay(object):
|
||||||
|
|
||||||
|
if action == "Install":
|
||||||
|
self._swdb_environment_install(env_id, pkg_types, env_data["groups"])
|
||||||
|
- elif action == "Upgrade":
|
||||||
|
- self._swdb_environment_upgrade(env_id, pkg_types, env_data["groups"])
|
||||||
|
- elif 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"])
|
||||||
|
+ # 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 == "Downgrade" or action == "Downgraded":
|
||||||
|
+ self._swdb_environment_downgrade(env_id, pkg_types, env_data["groups"])
|
||||||
|
else:
|
||||||
|
errors.append(TransactionError(
|
||||||
|
_('Unexpected value of environment action "{action}" for environment "{env}".')
|
||||||
|
--
|
||||||
|
2.37.3
|
||||||
|
|
@ -66,7 +66,7 @@ It supports RPMs, modules and comps groups & environments.
|
|||||||
|
|
||||||
Name: dnf
|
Name: dnf
|
||||||
Version: 4.7.0
|
Version: 4.7.0
|
||||||
Release: 11%{?dist}
|
Release: 13%{?dist}
|
||||||
Summary: %{pkg_summary}
|
Summary: %{pkg_summary}
|
||||||
# For a breakdown of the licensing, see PACKAGE-LICENSING
|
# For a breakdown of the licensing, see PACKAGE-LICENSING
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -102,6 +102,17 @@ Patch0023: 0023-Base.reset-plug-temporary-leak-of-libsolv-s-page-fil.patch
|
|||||||
Patch0024: 0024-doc-Describe-how-gpg-keys-are-stored-for-repo_ggpche.patch
|
Patch0024: 0024-doc-Describe-how-gpg-keys-are-stored-for-repo_ggpche.patch
|
||||||
Patch0025: 0025-Add-only-relevant-pkgs-to-upgrade-transaction-RhBug-.patch
|
Patch0025: 0025-Add-only-relevant-pkgs-to-upgrade-transaction-RhBug-.patch
|
||||||
Patch0026: 0026-Use-installed_all-because-installed_query-is-filtere.patch
|
Patch0026: 0026-Use-installed_all-because-installed_query-is-filtere.patch
|
||||||
|
Patch0027: 0027-Don-t-include-resolved-advisories-for-obsoletes-with.patch
|
||||||
|
Patch0028: 0028-Set-default-value-for-variable-to-prevent-crash-RhBu.patch
|
||||||
|
Patch0029: 0029-Add-doc-related-to-destdir-and-downloadonly-options-.patch
|
||||||
|
Patch0030: 0030-Expose-plugin-unload-method-to-API-RhBug-2047251.patch
|
||||||
|
Patch0031: 0031-Add-support-for-group-upgrade-rollback-RhBug-2016070.patch
|
||||||
|
Patch0032: 0032-Fix-upgrade-from-file-to-noarch-pkg-RhBug-2006018.patch
|
||||||
|
Patch0033: 0033-Allow-passing-plugin-parameters-with-dashes-in-names.patch
|
||||||
|
Patch0034: 0034-Fix-plugins-unit-tests-unload-plugins-upon-their-del.patch
|
||||||
|
Patch0035: 0035-Move-system-upgrade-plugin-to-core-RhBug-2054235.patch
|
||||||
|
Patch0036: 0036-Add-support-for-rollback-of-group-upgrade-rollback-R.patch
|
||||||
|
|
||||||
|
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
BuildRequires: cmake
|
BuildRequires: cmake
|
||||||
@ -401,6 +412,20 @@ popd
|
|||||||
%{python3_sitelib}/%{name}/automatic/
|
%{python3_sitelib}/%{name}/automatic/
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Oct 26 2022 Nicola Sella <nsella@redhat.com> - 4.7.0.13
|
||||||
|
- Add support for rollback of group upgrade rollback (RhBug:2016070)
|
||||||
|
- Move system-upgrade plugin to core (RhBug:2054235)
|
||||||
|
- Fix plugins unit tests + unload plugins upon their deletion (RhBug:2134309)
|
||||||
|
|
||||||
|
* Tue Sep 13 2022 Lukas Hrazky <lhrazky@redhat.com> - 4.7.0-12
|
||||||
|
- Allow passing plugin parameters with dashes in names (RhBug:1980712)
|
||||||
|
- Fix upgrade from file to noarch pkg (RhBug:2006018)
|
||||||
|
- Add support for group upgrade rollback (RhBug:2016070)
|
||||||
|
- Expose plugin unload method to API (RhBug:2047251)
|
||||||
|
- Add doc related to --destdir and --downloadonly options (RhBug:2100811)
|
||||||
|
- Set default value for variable to prevent crash (RhBug:2091636)
|
||||||
|
- Don't include resolved advisories for obsoletes with sec. filters (RhBug:2101421)
|
||||||
|
|
||||||
* Tue Jul 19 2022 Lukas Hrazky <lhrazky@redhat.com> - 4.7.0-11
|
* Tue Jul 19 2022 Lukas Hrazky <lhrazky@redhat.com> - 4.7.0-11
|
||||||
- [doc] Describe how gpg keys are stored for `repo_ggpcheck`
|
- [doc] Describe how gpg keys are stored for `repo_ggpcheck`
|
||||||
- Add only relevant pkgs to upgrade transaction (RhBug:2097757)
|
- Add only relevant pkgs to upgrade transaction (RhBug:2097757)
|
||||||
|
Loading…
Reference in New Issue
Block a user