Auto sync2gitlab import of dnf-4.7.0-10.el8.src.rpm

This commit is contained in:
James Antill 2022-06-06 18:20:02 -04:00
parent f0fd84c36a
commit f7ab817f6d
24 changed files with 21731 additions and 201 deletions

View File

@ -1,4 +1,4 @@
From 6eff0fe7850624791f049a17a41d779915f30f94 Mon Sep 17 00:00:00 2001 From 423c987b6b14ec0a6277181ac7c038b50033296d Mon Sep 17 00:00:00 2001
From: Pavla Kratochvilova <pkratoch@redhat.com> From: Pavla Kratochvilova <pkratoch@redhat.com>
Date: Wed, 19 May 2021 12:58:30 +0200 Date: Wed, 19 May 2021 12:58:30 +0200
Subject: [PATCH] Set top-level directory for unittest Subject: [PATCH] Set top-level directory for unittest
@ -10,7 +10,7 @@ the sys.path and the tests fail. This fixes the issue.
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 77a4894..b7f4031 100644 index b15cc62b..dedc46fd 100644
--- a/tests/CMakeLists.txt --- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt
@@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
@ -22,5 +22,5 @@ index 77a4894..b7f4031 100644
# For libdnf built with sanitizers, has no effect otherwise. # For libdnf built with sanitizers, has no effect otherwise.
-- --
libgit2 1.0.1 2.35.1

View File

@ -1,4 +1,4 @@
From 8823feb5f42f8c579fdab80d9e22112b88d0ad2b Mon Sep 17 00:00:00 2001 From 8522c4651678097157fd9f133a451c892021d30b Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com> From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 4 May 2021 22:03:30 +0200 Date: Tue, 4 May 2021 22:03:30 +0200
Subject: [PATCH] dnf/rpm/miscutils.py: fix usage of _() Subject: [PATCH] dnf/rpm/miscutils.py: fix usage of _()
@ -11,7 +11,7 @@ Specifically:
1 file changed, 2 insertions(+), 1 deletion(-) 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py
index 235aaf2..7e33d4c 100644 index 235aaf28..7e33d4c4 100644
--- a/dnf/rpm/miscutils.py --- a/dnf/rpm/miscutils.py
+++ b/dnf/rpm/miscutils.py +++ b/dnf/rpm/miscutils.py
@@ -22,6 +22,7 @@ import subprocess @@ -22,6 +22,7 @@ import subprocess
@ -32,5 +32,5 @@ index 235aaf2..7e33d4c 100644
return 0 return 0
else: else:
-- --
libgit2 1.0.1 2.35.1

View File

@ -1,4 +1,4 @@
From 134b095b0833956cadfc02a9a1e7ca1344cd5aaa Mon Sep 17 00:00:00 2001 From f109c57ab18d8b1a80e707df3c3f7ad8930bdd42 Mon Sep 17 00:00:00 2001
From: Demi Marie Obenour <demi@invisiblethingslab.com> From: Demi Marie Obenour <demi@invisiblethingslab.com>
Date: Tue, 27 Apr 2021 21:07:19 -0400 Date: Tue, 27 Apr 2021 21:07:19 -0400
Subject: [PATCH] Pass the package to rpmkeys stdin Subject: [PATCH] Pass the package to rpmkeys stdin
@ -10,7 +10,7 @@ always be the constant "-: digests signatures OK\n".
1 file changed, 6 insertions(+), 4 deletions(-) 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py
index 7e33d4c..5f2621c 100644 index 7e33d4c4..5f2621c2 100644
--- a/dnf/rpm/miscutils.py --- a/dnf/rpm/miscutils.py
+++ b/dnf/rpm/miscutils.py +++ b/dnf/rpm/miscutils.py
@@ -29,7 +29,8 @@ from shutil import which @@ -29,7 +29,8 @@ from shutil import which
@ -52,5 +52,5 @@ index 7e33d4c..5f2621c 100644
else: else:
raise ValueError('Unexpected return value %r from hdr.sprintf when checking signature.' % siginfo) raise ValueError('Unexpected return value %r from hdr.sprintf when checking signature.' % siginfo)
-- --
libgit2 1.0.1 2.35.1

View File

@ -1,4 +1,4 @@
From a21880fbac479968546304beeeae3ed3bb899373 Mon Sep 17 00:00:00 2001 From 9798e9ee85f1ba39c816fa08fd3d6168cc8b29e8 Mon Sep 17 00:00:00 2001
From: Demi Marie Obenour <demi@invisiblethingslab.com> From: Demi Marie Obenour <demi@invisiblethingslab.com>
Date: Fri, 9 Apr 2021 13:03:03 -0400 Date: Fri, 9 Apr 2021 13:03:03 -0400
Subject: [PATCH] Use rpmkeys alone to verify signature Subject: [PATCH] Use rpmkeys alone to verify signature
@ -7,14 +7,14 @@ This avoids having to actually parse the package to check its signature,
which reduces attack surface. If the output of rpmkeys cannot be which reduces attack surface. If the output of rpmkeys cannot be
parsed, we assume the package is corrupt (the most likely cause). parsed, we assume the package is corrupt (the most likely cause).
--- ---
dnf/rpm/miscutils.py | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------ dnf/rpm/miscutils.py | 126 ++++++++++++++++++++++---------------------
1 file changed, 66 insertions(+), 60 deletions(-) 1 file changed, 66 insertions(+), 60 deletions(-)
diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py
index 5f2621c..9d5b286 100644 index 5f2621c2..9d5b2860 100644
--- a/dnf/rpm/miscutils.py --- a/dnf/rpm/miscutils.py
+++ b/dnf/rpm/miscutils.py +++ b/dnf/rpm/miscutils.py
@@ -13,90 +13,96 @@ @@ -13,47 +13,84 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
# Copyright 2003 Duke University # Copyright 2003 Duke University
@ -124,9 +124,7 @@ index 5f2621c..9d5b286 100644
def checkSig(ts, package): def checkSig(ts, package):
"""Takes a transaction set and a package, check it's sigs, """Takes a transaction set and a package, check it's sigs,
return 0 if they are all fine @@ -63,40 +100,9 @@ def checkSig(ts, package):
return 1 if the gpg key can't be found
return 2 if the header is in someway damaged
return 3 if the key is not trusted return 3 if the key is not trusted
return 4 if the pkg is not gpg or pgp signed""" return 4 if the pkg is not gpg or pgp signed"""
@ -172,5 +170,5 @@ index 5f2621c..9d5b286 100644
+ os.close(fdno) + os.close(fdno)
return value return value
-- --
libgit2 1.0.1 2.35.1

View File

@ -1,7 +1,8 @@
From b05f4589e4afb69240ae2001246a5ffb5d6b1b90 Mon Sep 17 00:00:00 2001 From 185330e5d5f5e07f40ed08c706fd997abffd5e78 Mon Sep 17 00:00:00 2001
From: Aleš Matěj <amatej@redhat.com> From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
Date: Thu, 3 Jun 2021 11:23:31 +0200 Date: Thu, 3 Jun 2021 11:23:31 +0200
Subject: [PATCH] Lower _pkgverify_level to signature for signature checking with rpmkeys Subject: [PATCH] Lower _pkgverify_level to signature for signature checking
with rpmkeys
We don't want to be veryfing digests as well when checking signatures. We don't want to be veryfing digests as well when checking signatures.
It would break legacy package installation in FIPS mode due to MD5 It would break legacy package installation in FIPS mode due to MD5
@ -13,7 +14,7 @@ Follow up for https://github.com/rpm-software-management/dnf/pull/1753
1 file changed, 3 insertions(+), 4 deletions(-) 1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py
index 9d5b286..46ef475 100644 index 9d5b2860..46ef4754 100644
--- a/dnf/rpm/miscutils.py --- a/dnf/rpm/miscutils.py
+++ b/dnf/rpm/miscutils.py +++ b/dnf/rpm/miscutils.py
@@ -66,11 +66,10 @@ def _verifyPackageUsingRpmkeys(package, installroot): @@ -66,11 +66,10 @@ def _verifyPackageUsingRpmkeys(package, installroot):
@ -32,5 +33,5 @@ index 9d5b286..46ef475 100644
with subprocess.Popen( with subprocess.Popen(
args=args, args=args,
-- --
libgit2 1.0.1 2.35.1

View File

@ -1,14 +1,14 @@
From 6766d3af1993d48f5548746e68268e674e52bd1d Mon Sep 17 00:00:00 2001 From 6766d3af1993d48f5548746e68268e674e52bd1d Mon Sep 17 00:00:00 2001
From: Gary Leydon <gary.leydon@yale.edu> From: Gary Leydon <gary.leydon@yale.edu>
Date: Fri, 21 May 2021 14:13:59 -0400 Date: Fri, 21 May 2021 14:13:59 -0400
Subject: [PATCH 1/3] add default colors to documentation Subject: [PATCH] add default colors to documentation
--- ---
doc/conf_ref.rst | 24 ++++++++++++------------ doc/conf_ref.rst | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-) 1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst
index ec5bac2ab..fcaa0319f 100644 index ec5bac2a..fcaa0319 100644
--- a/doc/conf_ref.rst --- a/doc/conf_ref.rst
+++ b/doc/conf_ref.rst +++ b/doc/conf_ref.rst
@@ -498,72 +498,72 @@ configuration file by your distribution to override the DNF defaults. @@ -498,72 +498,72 @@ configuration file by your distribution to override the DNF defaults.
@ -97,104 +97,5 @@ index ec5bac2ab..fcaa0319f 100644
============== ==============
-- --
2.31.1 2.35.1
From 276e3b1d19bfad2a72f75ecbcce478e4f1e575db Mon Sep 17 00:00:00 2001
From: Gary Leydon <gary.leydon@yale.edu>
Date: Fri, 21 May 2021 14:16:21 -0400
Subject: [PATCH 2/3] add author
---
AUTHORS | 1 +
1 file changed, 1 insertion(+)
diff --git a/AUTHORS b/AUTHORS
index 1981dc4e7..f8c9eb832 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -95,3 +95,4 @@ DNF CONTRIBUTORS
Vladan Kudlac <vladankudlac@gmail.com>
Will Woods <wwoods@redhat.com>
Furkan Karcıoğlu <krc440002@gmail.com>
+ Gary Leydon <gary.leydon@yale.edu>
--
2.31.1
From 5cfe87de2ecd645c2aa8b210bd98171e8dd72fe5 Mon Sep 17 00:00:00 2001
From: Gary Leydon <gary.leydon@yale.edu>
Date: Thu, 27 May 2021 11:52:42 -0400
Subject: [PATCH 3/3] update colors according to
libdnf/libdnf/conf/ConfigMain.cpp
---
doc/conf_ref.rst | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst
index fcaa0319f..016bd00c2 100644
--- a/doc/conf_ref.rst
+++ b/doc/conf_ref.rst
@@ -498,13 +498,13 @@ configuration file by your distribution to override the DNF defaults.
:ref:`color <color-label>`
Color of available packages that are older than installed packages.
- The option is used during list operations. Default is dim,cyan.
+ The option is used during list operations. Default is magenta.
``color_list_available_install``
:ref:`color <color-label>`
Color of packages that are available for installation and none of their versions in installed.
- The option is used during list operations. Default is normal.
+ The option is used during list operations. Default is bold,cyan.
``color_list_available_reinstall``
:ref:`color <color-label>`
@@ -534,36 +534,36 @@ configuration file by your distribution to override the DNF defaults.
:ref:`color <color-label>`
Color of installed packages that are older than any version among available packages.
- The option is used during list operations. Default is bold.
+ The option is used during list operations. Default is yellow.
``color_list_installed_reinstall``
:ref:`color <color-label>`
Color of installed packages that are among available packages and can be reinstalled.
- The option is used during list operations. Default is normal.
+ The option is used during list operations. Default is cyan.
``color_search_match``
:ref:`color <color-label>`
- Color of patterns matched in search output. Default is bold.
+ Color of patterns matched in search output. Default is bold,magenta.
``color_update_installed``
:ref:`color <color-label>`
- Color of removed packages. Default is normal.
+ Color of removed packages. Default is red.
This option is used during displaying transactions.
``color_update_local``
:ref:`color <color-label>`
Color of local packages that are installed from the @commandline repository.
- This option is used during displaying transactions. Default is bold.
+ This option is used during displaying transactions. Default is green.
``color_update_remote``
:ref:`color <color-label>`
Color of packages that are installed/upgraded/downgraded from remote repositories.
- This option is used during displaying transactions. Default is normal.
+ This option is used during displaying transactions. Default is bold,green.
==============
--
2.31.1

21
0007-add-author.patch Normal file
View File

@ -0,0 +1,21 @@
From 276e3b1d19bfad2a72f75ecbcce478e4f1e575db Mon Sep 17 00:00:00 2001
From: Gary Leydon <gary.leydon@yale.edu>
Date: Fri, 21 May 2021 14:16:21 -0400
Subject: [PATCH] add author
---
AUTHORS | 1 +
1 file changed, 1 insertion(+)
diff --git a/AUTHORS b/AUTHORS
index 1981dc4e..f8c9eb83 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -95,3 +95,4 @@ DNF CONTRIBUTORS
Vladan Kudlac <vladankudlac@gmail.com>
Will Woods <wwoods@redhat.com>
Furkan Karcıoğlu <krc440002@gmail.com>
+ Gary Leydon <gary.leydon@yale.edu>
--
2.35.1

View File

@ -0,0 +1,75 @@
From 5cfe87de2ecd645c2aa8b210bd98171e8dd72fe5 Mon Sep 17 00:00:00 2001
From: Gary Leydon <gary.leydon@yale.edu>
Date: Thu, 27 May 2021 11:52:42 -0400
Subject: [PATCH] update colors according to libdnf/libdnf/conf/ConfigMain.cpp
---
doc/conf_ref.rst | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst
index fcaa0319..016bd00c 100644
--- a/doc/conf_ref.rst
+++ b/doc/conf_ref.rst
@@ -498,13 +498,13 @@ configuration file by your distribution to override the DNF defaults.
:ref:`color <color-label>`
Color of available packages that are older than installed packages.
- The option is used during list operations. Default is dim,cyan.
+ The option is used during list operations. Default is magenta.
``color_list_available_install``
:ref:`color <color-label>`
Color of packages that are available for installation and none of their versions in installed.
- The option is used during list operations. Default is normal.
+ The option is used during list operations. Default is bold,cyan.
``color_list_available_reinstall``
:ref:`color <color-label>`
@@ -534,36 +534,36 @@ configuration file by your distribution to override the DNF defaults.
:ref:`color <color-label>`
Color of installed packages that are older than any version among available packages.
- The option is used during list operations. Default is bold.
+ The option is used during list operations. Default is yellow.
``color_list_installed_reinstall``
:ref:`color <color-label>`
Color of installed packages that are among available packages and can be reinstalled.
- The option is used during list operations. Default is normal.
+ The option is used during list operations. Default is cyan.
``color_search_match``
:ref:`color <color-label>`
- Color of patterns matched in search output. Default is bold.
+ Color of patterns matched in search output. Default is bold,magenta.
``color_update_installed``
:ref:`color <color-label>`
- Color of removed packages. Default is normal.
+ Color of removed packages. Default is red.
This option is used during displaying transactions.
``color_update_local``
:ref:`color <color-label>`
Color of local packages that are installed from the @commandline repository.
- This option is used during displaying transactions. Default is bold.
+ This option is used during displaying transactions. Default is green.
``color_update_remote``
:ref:`color <color-label>`
Color of packages that are installed/upgraded/downgraded from remote repositories.
- This option is used during displaying transactions. Default is normal.
+ This option is used during displaying transactions. Default is bold,green.
==============
--
2.35.1

View File

@ -14,12 +14,12 @@ dictionary instead of packages errors dictionary as intended.
I turned the property to method which I consider more clear. I turned the property to method which I consider more clear.
--- ---
dnf/base.py | 8 ++++---- dnf/base.py | 8 ++++----
dnf/repo.py | 9 ++++----- dnf/repo.py | 9 ++++-----
2 files changed, 8 insertions(+), 9 deletions(-) 2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/dnf/base.py b/dnf/base.py diff --git a/dnf/base.py b/dnf/base.py
index 0949ddf..b0a378c 100644 index 0949ddf8..b0a378c2 100644
--- a/dnf/base.py --- a/dnf/base.py
+++ b/dnf/base.py +++ b/dnf/base.py
@@ -1165,8 +1165,8 @@ class Base(object): @@ -1165,8 +1165,8 @@ class Base(object):
@ -45,7 +45,7 @@ index 0949ddf..b0a378c 100644
remote_size += \ remote_size += \
sum(errors._bandwidth_used(pload) for pload in payloads) sum(errors._bandwidth_used(pload) for pload in payloads)
diff --git a/dnf/repo.py b/dnf/repo.py diff --git a/dnf/repo.py b/dnf/repo.py
index b5c9849..b454e98 100644 index b5c9849e..b454e981 100644
--- a/dnf/repo.py --- a/dnf/repo.py
+++ b/dnf/repo.py +++ b/dnf/repo.py
@@ -112,7 +112,7 @@ def _download_payloads(payloads, drpm): @@ -112,7 +112,7 @@ def _download_payloads(payloads, drpm):
@ -77,5 +77,5 @@ index b5c9849..b454e98 100644
return {'': [self._fatal]} return {'': [self._fatal]}
return {} return {}
-- --
libgit2 1.0.1 2.35.1

View File

@ -11,7 +11,7 @@ off to download as much packages from repository as possible.
2 files changed, 5 insertions(+), 5 deletions(-) 2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/dnf/base.py b/dnf/base.py diff --git a/dnf/base.py b/dnf/base.py
index b0a378c..c258a5a 100644 index b0a378c2..c258a5a7 100644
--- a/dnf/base.py --- a/dnf/base.py
+++ b/dnf/base.py +++ b/dnf/base.py
@@ -1151,7 +1151,7 @@ class Base(object): @@ -1151,7 +1151,7 @@ class Base(object):
@ -42,10 +42,10 @@ index b0a378c..c258a5a 100644
if errors._irrecoverable(): if errors._irrecoverable():
raise dnf.exceptions.DownloadError(errors._irrecoverable()) raise dnf.exceptions.DownloadError(errors._irrecoverable())
diff --git a/dnf/repo.py b/dnf/repo.py diff --git a/dnf/repo.py b/dnf/repo.py
index b454e98..bb42230 100644 index b454e981..bb422309 100644
--- a/dnf/repo.py --- a/dnf/repo.py
+++ b/dnf/repo.py +++ b/dnf/repo.py
@@ -84,17 +84,17 @@ def _pkg2payload(pkg, progress, *factories): @@ -84,7 +84,7 @@ def _pkg2payload(pkg, progress, *factories):
raise ValueError(_('no matching payload factory for %s') % pkg) raise ValueError(_('no matching payload factory for %s') % pkg)
@ -54,9 +54,7 @@ index b454e98..bb42230 100644
# download packages # download packages
def _download_sort_key(payload): def _download_sort_key(payload):
return not hasattr(payload, 'delta') return not hasattr(payload, 'delta')
@@ -94,7 +94,7 @@ def _download_payloads(payloads, drpm):
drpm.err.clear()
targets = [pload._librepo_target()
for pload in sorted(payloads, key=_download_sort_key)] for pload in sorted(payloads, key=_download_sort_key)]
errs = _DownloadErrors() errs = _DownloadErrors()
try: try:
@ -66,5 +64,5 @@ index b454e98..bb42230 100644
errs._fatal = str(e) errs._fatal = str(e)
drpm.wait() drpm.wait()
-- --
libgit2 1.0.1 2.35.1

View File

@ -1,7 +1,8 @@
From f0f037db8219b1e74be4ed86f5eea53b63ca1d88 Mon Sep 17 00:00:00 2001 From f0f037db8219b1e74be4ed86f5eea53b63ca1d88 Mon Sep 17 00:00:00 2001
From: Lukáš Hrázký <lhrazky@redhat.com> From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= <lhrazky@redhat.com>
Date: Tue, 20 Jul 2021 15:29:59 +0200 Date: Tue, 20 Jul 2021 15:29:59 +0200
Subject: [PATCH] comps: Make the install_or_skip() method not catch CompsError anymore Subject: [PATCH] comps: Make the install_or_skip() method not catch CompsError
anymore
According to its docstring, the original intention of the method was to According to its docstring, the original intention of the method was to
not fail on installing an already installed group/environment. not fail on installing an already installed group/environment.
@ -32,7 +33,7 @@ related: https://bugzilla.redhat.com/show_bug.cgi?id=1943206
4 files changed, 16 insertions(+), 20 deletions(-) 4 files changed, 16 insertions(+), 20 deletions(-)
diff --git a/dnf/base.py b/dnf/base.py diff --git a/dnf/base.py b/dnf/base.py
index c258a5a..babca31 100644 index c258a5a7..babca31d 100644
--- a/dnf/base.py --- a/dnf/base.py
+++ b/dnf/base.py +++ b/dnf/base.py
@@ -1668,9 +1668,7 @@ class Base(object): @@ -1668,9 +1668,7 @@ class Base(object):
@ -58,7 +59,7 @@ index c258a5a..babca31 100644
return 0 return 0
if strict: if strict:
diff --git a/dnf/cli/commands/group.py b/dnf/cli/commands/group.py diff --git a/dnf/cli/commands/group.py b/dnf/cli/commands/group.py
index cf54279..fd723c4 100644 index cf542799..fd723c48 100644
--- a/dnf/cli/commands/group.py --- a/dnf/cli/commands/group.py
+++ b/dnf/cli/commands/group.py +++ b/dnf/cli/commands/group.py
@@ -244,9 +244,9 @@ class GroupCommand(commands.Command): @@ -244,9 +244,9 @@ class GroupCommand(commands.Command):
@ -74,7 +75,7 @@ index cf54279..fd723c4 100644
def _mark_remove(self, patterns): def _mark_remove(self, patterns):
q = CompsQuery(self.base.comps, self.base.history, q = CompsQuery(self.base.comps, self.base.history,
diff --git a/dnf/comps.py b/dnf/comps.py diff --git a/dnf/comps.py b/dnf/comps.py
index 8976533..461eb27 100644 index 89765337..461eb274 100644
--- a/dnf/comps.py --- a/dnf/comps.py
+++ b/dnf/comps.py +++ b/dnf/comps.py
@@ -93,15 +93,15 @@ def _fn_display_order(group): @@ -93,15 +93,15 @@ def _fn_display_order(group):
@ -112,7 +113,7 @@ index 8976533..461eb27 100644
comps_env = self.comps._environment_by_id(env_id) comps_env = self.comps._environment_by_id(env_id)
if not comps_env: if not comps_env:
diff --git a/doc/api_base.rst b/doc/api_base.rst diff --git a/doc/api_base.rst b/doc/api_base.rst
index 20d7945..03396b6 100644 index 20d7945e..03396b69 100644
--- a/doc/api_base.rst --- a/doc/api_base.rst
+++ b/doc/api_base.rst +++ b/doc/api_base.rst
@@ -179,7 +179,7 @@ @@ -179,7 +179,7 @@
@ -134,5 +135,5 @@ index 20d7945..03396b6 100644
.. method:: environment_remove(env_id) .. method:: environment_remove(env_id)
-- --
libgit2 1.0.1 2.35.1

View File

@ -1,7 +1,8 @@
From 683b92811abcb6cbbc00353010ec18e2cf655912 Mon Sep 17 00:00:00 2001 From 683b92811abcb6cbbc00353010ec18e2cf655912 Mon Sep 17 00:00:00 2001
From: Jaroslav Mracek <jmracek@redhat.com> From: Jaroslav Mracek <jmracek@redhat.com>
Date: Mon, 6 Sep 2021 12:40:59 +0200 Date: Mon, 6 Sep 2021 12:40:59 +0200
Subject: [PATCH] [doc] Improve description of multilib_policy=all (RhBug:1996681,1995630) Subject: [PATCH] [doc] Improve description of multilib_policy=all
(RhBug:1996681,1995630)
https://bugzilla.redhat.com/show_bug.cgi?id=1996681 https://bugzilla.redhat.com/show_bug.cgi?id=1996681
https://bugzilla.redhat.com/show_bug.cgi?id=1995630 https://bugzilla.redhat.com/show_bug.cgi?id=1995630
@ -10,7 +11,7 @@ https://bugzilla.redhat.com/show_bug.cgi?id=1995630
1 file changed, 3 insertions(+), 1 deletion(-) 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst
index 016bd00..83b14ec 100644 index 016bd00c..83b14ecd 100644
--- a/doc/conf_ref.rst --- a/doc/conf_ref.rst
+++ b/doc/conf_ref.rst +++ b/doc/conf_ref.rst
@@ -351,7 +351,9 @@ configuration file by your distribution to override the DNF defaults. @@ -351,7 +351,9 @@ configuration file by your distribution to override the DNF defaults.
@ -25,5 +26,5 @@ index 016bd00..83b14ec 100644
.. _obsoletes_conf_option-label: .. _obsoletes_conf_option-label:
-- --
libgit2 1.0.1 2.35.1

View File

@ -1,7 +1,8 @@
From db52d259645daf8ca0ae06e829787d36171f2d5b Mon Sep 17 00:00:00 2001 From db52d259645daf8ca0ae06e829787d36171f2d5b Mon Sep 17 00:00:00 2001
From: Jaroslav Rohel <jrohel@redhat.com> From: Jaroslav Rohel <jrohel@redhat.com>
Date: Wed, 20 Oct 2021 09:20:03 +0200 Date: Wed, 20 Oct 2021 09:20:03 +0200
Subject: [PATCH] Fix: Python dnf API does not respect cacheonly (RhBug:1862970) Subject: [PATCH] Fix: Python dnf API does not respect cacheonly
(RhBug:1862970)
`Repo` object has always been constructed with default synchronization `Repo` object has always been constructed with default synchronization
strategy. The configuration option `cacheonly` was ignored. DNF strategy. The configuration option `cacheonly` was ignored. DNF
@ -16,7 +17,7 @@ during demand processing.
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dnf/repo.py b/dnf/repo.py diff --git a/dnf/repo.py b/dnf/repo.py
index bb42230..1822cf0 100644 index bb422309..1822cf01 100644
--- a/dnf/repo.py --- a/dnf/repo.py
+++ b/dnf/repo.py +++ b/dnf/repo.py
@@ -434,7 +434,7 @@ class Repo(dnf.conf.RepoConf): @@ -434,7 +434,7 @@ class Repo(dnf.conf.RepoConf):
@ -29,5 +30,5 @@ index bb42230..1822cf0 100644
self._repo.setSubstitutions(parent_conf.substitutions) self._repo.setSubstitutions(parent_conf.substitutions)
self._substitutions = dnf.conf.substitutions.Substitutions() self._substitutions = dnf.conf.substitutions.Substitutions()
-- --
libgit2 1.0.1 2.35.1

View File

@ -8,7 +8,7 @@ Subject: [PATCH] Documentation: API notes for cacheonly
1 file changed, 3 insertions(+) 1 file changed, 3 insertions(+)
diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst
index 83b14ec..75bcdf7 100644 index 83b14ecd..75bcdf75 100644
--- a/doc/conf_ref.rst --- a/doc/conf_ref.rst
+++ b/doc/conf_ref.rst +++ b/doc/conf_ref.rst
@@ -129,6 +129,9 @@ configuration file by your distribution to override the DNF defaults. @@ -129,6 +129,9 @@ configuration file by your distribution to override the DNF defaults.
@ -22,5 +22,5 @@ index 83b14ec..75bcdf7 100644
``check_config_file_age`` ``check_config_file_age``
-- --
libgit2 1.0.1 2.35.1

View File

@ -9,7 +9,7 @@ Subject: [PATCH] Allow destdir option with modulesync command
2 files changed, 2 insertions(+), 2 deletions(-) 2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py
index 6576997..a315201 100644 index 65769978..a315201c 100644
--- a/dnf/cli/cli.py --- a/dnf/cli/cli.py
+++ b/dnf/cli/cli.py +++ b/dnf/cli/cli.py
@@ -810,7 +810,7 @@ class Cli(object): @@ -810,7 +810,7 @@ class Cli(object):
@ -22,7 +22,7 @@ index 6576997..a315201 100644
'or download or system-upgrade command.') 'or download or system-upgrade command.')
) )
diff --git a/doc/command_ref.rst b/doc/command_ref.rst diff --git a/doc/command_ref.rst b/doc/command_ref.rst
index f96c0ea..42aec72 100644 index f96c0eac..42aec72c 100644
--- a/doc/command_ref.rst --- a/doc/command_ref.rst
+++ b/doc/command_ref.rst +++ b/doc/command_ref.rst
@@ -182,7 +182,7 @@ Options @@ -182,7 +182,7 @@ Options
@ -35,5 +35,5 @@ index f96c0ea..42aec72 100644
.. _downloadonly-label: .. _downloadonly-label:
-- --
libgit2 1.1.0 2.35.1

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
From 27f26c607c44b8331b23c861241a8509c2452531 Mon Sep 17 00:00:00 2001 From 27f26c607c44b8331b23c861241a8509c2452531 Mon Sep 17 00:00:00 2001
From: sbluhm <stefan.bluhm@clacee.eu> From: sbluhm <stefan.bluhm@clacee.eu>
Date: Sun, 9 Jan 2022 14:30:19 +0100 Date: Sun, 9 Jan 2022 14:30:19 +0100
Subject: [PATCH 14/19] Add documentation for query api flags Subject: [PATCH] Add documentation for query api flags
= changelog = = changelog =
msg: Add documentation for query api flags msg: Add documentation for query api flags
@ -53,5 +53,5 @@ index 79719878..ac843fc9 100644
Returns a new instance of sack containing only installed packages (@System repo). Useful to get list of the installed RPMs after transaction. Returns a new instance of sack containing only installed packages (@System repo). Useful to get list of the installed RPMs after transaction.
-- --
2.31.1 2.35.1

View File

@ -1,7 +1,7 @@
From 9bd0423e1e543ed5f83924ec61aa253eced24cf8 Mon Sep 17 00:00:00 2001 From 9bd0423e1e543ed5f83924ec61aa253eced24cf8 Mon Sep 17 00:00:00 2001
From: Marek Blaha <mblaha@redhat.com> From: Marek Blaha <mblaha@redhat.com>
Date: Mon, 14 Mar 2022 09:49:52 +0100 Date: Mon, 14 Mar 2022 09:49:52 +0100
Subject: [PATCH 15/19] Fix processing of download errors (RhBug: 2024527) Subject: [PATCH] Fix processing of download errors (RhBug: 2024527)
Users with different than english locale are not able to update their Users with different than english locale are not able to update their
systems in case that some of updates are already downloaded in the dnf systems in case that some of updates are already downloaded in the dnf
@ -33,5 +33,5 @@ index 1822cf01..ec1a2537 100644
continue continue
pkg.repo._repo.expire() pkg.repo._repo.expire()
-- --
2.31.1 2.35.1

View File

@ -1,8 +1,8 @@
From 0da73ea1304005b796842d96679d6ea31cdeea3c Mon Sep 17 00:00:00 2001 From 0da73ea1304005b796842d96679d6ea31cdeea3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com> From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
Date: Tue, 1 Mar 2022 12:42:23 +0100 Date: Tue, 1 Mar 2022 12:42:23 +0100
Subject: [PATCH 16/19] Fix unittests that relied on checksum being at the end Subject: [PATCH] Fix unittests that relied on checksum being at the end of
of solvfiles solvfiles
--- ---
tests/test_fill_sack_from_repos_in_cache.py | 26 +++++++++++---------- tests/test_fill_sack_from_repos_in_cache.py | 26 +++++++++++----------
@ -77,5 +77,5 @@ index a8de287c..30d02cfe 100644
self.test_base.fill_sack_from_repos_in_cache(load_system_repo=False) self.test_base.fill_sack_from_repos_in_cache(load_system_repo=False)
-- --
2.31.1 2.35.1

View File

@ -1,8 +1,7 @@
From fe87499e6745795b1dc6225fa102a1242eb9ffc8 Mon Sep 17 00:00:00 2001 From fe87499e6745795b1dc6225fa102a1242eb9ffc8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= <lhrazky@redhat.com> From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= <lhrazky@redhat.com>
Date: Thu, 17 Feb 2022 18:46:22 +0100 Date: Thu, 17 Feb 2022 18:46:22 +0100
Subject: [PATCH 17/19] cli/commands/history: Fix history undo on a Reason Subject: [PATCH] cli/commands/history: Fix history undo on a Reason Change
Change
The previous reason needs to be fetched from the history db. It's The previous reason needs to be fetched from the history db. It's
inefficient to parse the nevra after it was serialized in a previous inefficient to parse the nevra after it was serialized in a previous
@ -61,5 +60,5 @@ index 293d93fc..21d04a1a 100644
# erase repo_id, because it's not possible to perform forward actions from the @System repo # erase repo_id, because it's not possible to perform forward actions from the @System repo
ti["repo_id"] = None ti["repo_id"] = None
-- --
2.31.1 2.35.1

View File

@ -1,7 +1,7 @@
From 55f6691d5663c59b675064b04e19288365e92d24 Mon Sep 17 00:00:00 2001 From 55f6691d5663c59b675064b04e19288365e92d24 Mon Sep 17 00:00:00 2001
From: Nicola Sella <nsella@redhat.com> From: Nicola Sella <nsella@redhat.com>
Date: Tue, 15 Mar 2022 16:26:10 +0100 Date: Tue, 15 Mar 2022 16:26:10 +0100
Subject: [PATCH 18/19] Fix remove when no repos are enabled (RhBz:2064341) Subject: [PATCH] Fix remove when no repos are enabled (RhBz:2064341)
msg: When no repositories are enabled, dnf group exits and does not msg: When no repositories are enabled, dnf group exits and does not
remove an installed group. remove an installed group.
@ -26,5 +26,5 @@ index fd723c48..c5c23230 100644
if cmd in ('install', 'upgrade'): if cmd in ('install', 'upgrade'):
commands._checkGPGKey(self.base, self.cli) commands._checkGPGKey(self.base, self.cli)
-- --
2.31.1 2.35.1

View File

@ -1,8 +1,8 @@
From 8f05ee29b7398fa6d18c7113a533f1d8726239df Mon Sep 17 00:00:00 2001 From 8f05ee29b7398fa6d18c7113a533f1d8726239df Mon Sep 17 00:00:00 2001
From: Jaroslav Rohel <jrohel@redhat.com> From: Jaroslav Rohel <jrohel@redhat.com>
Date: Tue, 12 Apr 2022 12:25:05 +0200 Date: Tue, 12 Apr 2022 12:25:05 +0200
Subject: [PATCH 19/19] [doc] Improve "proxy" configuration option Subject: [PATCH] [doc] Improve "proxy" configuration option documentation
documentation (RhBug:2072332) (RhBug:2072332)
--- ---
doc/conf_ref.rst | 4 ++-- doc/conf_ref.rst | 4 ++--
@ -26,5 +26,5 @@ index 75bcdf75..885a4560 100644
``proxy_username`` ``proxy_username``
:ref:`string <string-label>` :ref:`string <string-label>`
-- --
2.31.1 2.35.1

View File

@ -0,0 +1,318 @@
From 88a6289a4f72b11253c01a5a5d834b74d5abb6c3 Mon Sep 17 00:00:00 2001
From: Laszlo Ersek <lersek@redhat.com>
Date: Sun, 24 Apr 2022 09:08:28 +0200
Subject: [PATCH] Base.reset: plug (temporary) leak of libsolv's page file
descriptors
Consider the following call paths (mixed Python and C), extending from
livecd-creator down to libsolv:
main [livecd-tools/tools/livecd-creator]
install() [livecd-tools/imgcreate/creator.py]
fill_sack() [dnf/dnf/base.py]
_add_repo_to_sack() [dnf/dnf/base.py]
load_repo() [libdnf/python/hawkey/sack-py.cpp]
dnf_sack_load_repo() [libdnf/libdnf/dnf-sack.cpp]
write_main() [libdnf/libdnf/dnf-sack.cpp]
repo_add_solv() [libsolv/src/repo_solv.c]
repopagestore_read_or_setup_pages() [libsolv/src/repopage.c]
dup()
write_ext() [libdnf/libdnf/dnf-sack.cpp]
repo_add_solv() [libsolv/src/repo_solv.c]
repopagestore_read_or_setup_pages() [libsolv/src/repopage.c]
dup()
The dup() calls create the following file descriptors (output from
"lsof"):
> COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
> python3 6500 root 7r REG 8,1 25320727 395438 /var/tmp/imgcreate-mytcghah/install_root/var/cache/dnf/fedora.solv (deleted)
> python3 6500 root 8r REG 8,1 52531426 395450 /var/tmp/imgcreate-mytcghah/install_root/var/cache/dnf/fedora-filenames.solvx
These file descriptors are *owned* by the DnfSack object (which is derived
from GObject), as follows:
sack->priv->pool->repos[1]->repodata[1]->store.pagefd = 7
sack->priv->pool->repos[1]->repodata[2]->store.pagefd = 8
^ ^ ^ ^ ^ ^ ^
| | | | | | |
| | | | | | int
| | | | | Repopagestore [libsolv/src/repopage.h]
| | | | Repodata [libsolv/src/repodata.h]
| | | struct s_Repo [libsolv/src/repo.h]
| | struct s_Pool (aka Pool) [libsolv/src/pool.h]
| DnfSackPrivate [libdnf/libdnf/dnf-sack.cpp]
DnfSack [libdnf/libdnf/dnf-sack.h]
The file descriptors are *supposed* to be closed on the following call
path:
main [livecd-tools/tools/livecd-creator]
install() [livecd-tools/imgcreate/creator.py]
close() [livecd-tools/imgcreate/dnfinst.py]
close() [dnf/dnf/base.py]
reset() [dnf/dnf/base.py]
_sack = None
_goal = None
_transaction = None
...
dnf_sack_finalize() [libdnf/libdnf/dnf-sack.cpp]
pool_free() [libsolv/src/pool.c]
pool_freeallrepos() [libsolv/src/pool.c]
repo_freedata() [libsolv/src/repo.c]
repodata_freedata() [libsolv/src/repodata.c]
repopagestore_free() [libsolv/src/repopage.c]
close()
Namely, when dnf.Base.reset() [dnf/dnf/base.py] is called with (sack=True,
goal=True), the reference counts of the objects pointed to by the "_sack",
"_goal" and "_transaction" fields are supposed to reach zero, and then, as
part of the DnfSack object's finalization, the libsolv file descriptors
are supposed to be closed.
Now, while this *may* happen immediately in dnf.Base.reset(), it may as
well not. The reason is that there is a multitude of *circular references*
between DnfSack and the packages that it contains. When dnf.Base.reset()
is entered, we have the following picture:
_sack _goal
| |
v v
+----------------+ +-------------+
| DnfSack object | <--- | Goal object |
+----------------+ +-------------+
|^ |^ |^
|| || ||
|| || ||
+--||----||----||---+
| v| v| v| | <-- _transaction
| Pkg1 Pkg2 PkgN |
| |
| Transaction oject |
+-------------------+
That is, the reference count of the DnfSack object is (1 + 1 + N), where N
is the number of packages in the transaction. Details:
(a) The first reference comes from the "_sack" field, established like
this:
main [livecd-tools/tools/livecd-creator]
install() [livecd-tools/imgcreate/creator.py]
fill_sack() [dnf/dnf/base.py]
_build_sack() [dnf/dnf/sack.py]
Sack()
sack_init() [libdnf/python/hawkey/sack-py.cpp]
dnf_sack_new() [libdnf/libdnf/dnf-sack.cpp]
(b) The second reference on the DnfSack object comes from "_goal":
main [livecd-tools/tools/livecd-creator]
install() [livecd-tools/imgcreate/creator.py]
fill_sack() [dnf/dnf/base.py]
_goal = Goal(_sack)
goal_init() [libdnf/python/hawkey/goal-py.cpp]
Py_INCREF(_sack)
(c) Then there is one reference to "_sack" *per package* in the
transaction:
main [livecd-tools/tools/livecd-creator]
install() [livecd-tools/imgcreate/creator.py]
runInstall() [livecd-tools/imgcreate/dnfinst.py]
resolve() [dnf/dnf/base.py]
_goal2transaction() [dnf/dnf/base.py]
list_installs() [libdnf/python/hawkey/goal-py.cpp]
list_generic() [libdnf/python/hawkey/goal-py.cpp]
packagelist_to_pylist() [libdnf/python/hawkey/iutil-py.cpp]
new_package() [libdnf/python/hawkey/sack-py.cpp]
Py_BuildValue()
ts.add_install()
list_installs() creates a list of packages that need to be installed
by DNF. Inside the loop in packagelist_to_pylist(), which constructs
the elements of that list, Py_BuildValue() is called with the "O"
format specifier, and that increases the reference count on "_sack".
Subsequently, in the _goal2transaction() method, we iterate over the
package list created by list_installs(), and add each package to the
transaction (ts.add_install()). After _goal2transaction() returns,
this transaction is assigned to "self._transaction" in resolve(). This
is where the last N (back-)references on the DnfSack object come from.
(d) Now, to quote the defintion of the DnfSack object
("libdnf/docs/hawkey/tutorial-py.rst"):
> *Sack* is an abstraction for a collection of packages.
That's why the DnfSack object references all the Pkg1 through PkgN
packages.
So, when the dnf.Base.reset() method completes, the picture changes like
this:
_sack _goal
| |
-- [CUT] -- -- [CUT] --
| |
v | v
+----------------+ [C] +-------------+
| DnfSack object | <-[U]- | Goal object |
+----------------+ [T] +-------------+
|^ |^ |^ |
|| || ||
|| || || |
+--||----||----||---+ [C]
| v| v| v| | <--[U]-- _transaction
| Pkg1 Pkg2 PkgN | [T]
| | |
| Transaction oject |
+-------------------+
and we are left with N reference cycles (one between each package and the
same DnfSack object).
This set of cycles can only be cleaned up by Python's generational garbage
collector <https://stackify.com/python-garbage-collection/>. The GC will
collect the DnfSack object, and consequently close the libsolv page file
descriptors via dnf_sack_finalize() -- but garbage collection will happen
*only eventually*, unpredictably.
This means that the dnf.Base.reset() method breaks its interface contract:
> Make the Base object forget about various things.
because the libsolv file descriptors can (and frequently do, in practice)
survive dnf.Base.reset().
In general, as long as the garbage collector only tracks process-private
memory blocks, there's nothing wrong; however, file descriptors are
visible to the kernel. When dnf.Base.reset() *temporarily* leaks file
descriptors as explained above, then immediately subsequent operations
that depend on those file descriptors having been closed, can fail.
An example is livecd-creator's unmounting of:
/var/tmp/imgcreate-mytcghah/install_root/var/cache/dnf
which the kernel refuses, due to libsolv's still open file descriptors
pointing into that filesystem:
> umount: /var/tmp/imgcreate-mytcghah/install_root/var/cache/dnf: target
> is busy.
> Unable to unmount /var/tmp/imgcreate-mytcghah/install_root/var/cache/dnf
> normally, using lazy unmount
(Unfortunately, the whole lazy umount idea is misguided in livecd-tools;
it's a misfeature that should be removed, as it permits the corruption of
the loop-backed filesystem. Now that the real bug is being fixed in DNF,
lazy umount is not needed as a (broken) workaround in livecd-tools. But
that's a separate patch for livecd-tools:
<https://github.com/livecd-tools/livecd-tools/pull/227>.)
Plug the fd leak by forcing a garbage collection in dnf.Base.reset()
whenever we cut the "_sack", "_goal" and "_transaction" links -- that is,
when the "sack" and "goal" parameters are True.
Note that precisely due to the unpredictable behavior of the garbage
collector, reproducing the bug may prove elusive. In order to reproduce it
deterministically, through usage with livecd-creator, disabling automatic
garbage collection with the following patch (for livecd-tools) is
sufficient:
> diff --git a/tools/livecd-creator b/tools/livecd-creator
> index 291de10cbbf9..8d2c740c238b 100755
> --- a/tools/livecd-creator
> +++ b/tools/livecd-creator
> @@ -31,6 +31,8 @@ from dnf.exceptions import Error as DnfBaseError
> import imgcreate
> from imgcreate.errors import KickstartError
>
> +import gc
> +
> class Usage(Exception):
> def __init__(self, msg = None, no_error = False):
> Exception.__init__(self, msg, no_error)
> @@ -261,5 +263,6 @@ def do_nss_libs_hack():
> return hack
>
> if __name__ == "__main__":
> + gc.disable()
> hack = do_nss_libs_hack()
> sys.exit(main())
Also note that you need to use livecd-tools at git commit 4afde9352e82 or
later, for this fix to make any difference: said commit fixes a different
(independent) bug in livecd-tools that produces identical symptoms, but
from a different origin. In other words, if you don't have commit
4afde9352e82 in your livecd-tools install, then said bug in livecd-tools
will mask this DNF fix.
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
(cherry picked from commit 5ce5ed1ea08ad6e198c1c1642c4d9ea2db6eab86)
---
dnf/base.py | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/dnf/base.py b/dnf/base.py
index babca31d..852fcdd8 100644
--- a/dnf/base.py
+++ b/dnf/base.py
@@ -72,6 +72,7 @@ import dnf.transaction
import dnf.util
import dnf.yum.rpmtrans
import functools
+import gc
import hawkey
import itertools
import logging
@@ -568,6 +569,46 @@ class Base(object):
self._comps_trans = dnf.comps.TransactionBunch()
self._transaction = None
self._update_security_filters = []
+ if sack and goal:
+ # We've just done this, above:
+ #
+ # _sack _goal
+ # | |
+ # -- [CUT] -- -- [CUT] --
+ # | |
+ # v | v
+ # +----------------+ [C] +-------------+
+ # | DnfSack object | <-[U]- | Goal object |
+ # +----------------+ [T] +-------------+
+ # |^ |^ |^ |
+ # || || ||
+ # || || || |
+ # +--||----||----||---+ [C]
+ # | v| v| v| | <--[U]-- _transaction
+ # | Pkg1 Pkg2 PkgN | [T]
+ # | | |
+ # | Transaction oject |
+ # +-------------------+
+ #
+ # At this point, the DnfSack object would be released only
+ # eventually, by Python's generational garbage collector, due to the
+ # cyclic references DnfSack<->Pkg1 ... DnfSack<->PkgN.
+ #
+ # The delayed release is a problem: the DnfSack object may
+ # (indirectly) own "page file" file descriptors in libsolv, via
+ # libdnf. For example,
+ #
+ # sack->priv->pool->repos[1]->repodata[1]->store.pagefd = 7
+ # sack->priv->pool->repos[1]->repodata[2]->store.pagefd = 8
+ #
+ # These file descriptors are closed when the DnfSack object is
+ # eventually released, that is, when dnf_sack_finalize() (in libdnf)
+ # calls pool_free() (in libsolv).
+ #
+ # We need that to happen right now, as callers may want to unmount
+ # the filesystems which those file descriptors refer to immediately
+ # after reset() returns. Therefore, force a garbage collection here.
+ gc.collect()
def _closeRpmDB(self):
"""Closes down the instances of rpmdb that could be open."""
--
2.35.1

View File

@ -66,31 +66,39 @@ It supports RPMs, modules and comps groups & environments.
Name: dnf Name: dnf
Version: 4.7.0 Version: 4.7.0
Release: 9%{?dist} Release: 10%{?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+
URL: https://github.com/rpm-software-management/dnf URL: https://github.com/rpm-software-management/dnf
Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz
Patch1: 0001-Set-top-level-directory-for-unittest.patch
Patch2: 0002-dnfrpmmiscutilspy-fix-usage-of-_.patch # Patches are stored in the upstream repository in this branch:
Patch3: 0003-Pass-the-package-to-rpmkeys-stdin.patch # https://github.com/rpm-software-management/dnf/tree/rhel-8.7
Patch4: 0004-Use-rpmkeys-alone-to-verify-signature.patch # Use "git format-patch -N" to regenerate the patch files.
Patch5: 0005-Lower-_pkgverify_level-to-signature-for-signature-checking-with-rpmkeys.patch Patch0001: 0001-Set-top-level-directory-for-unittest.patch
Patch6: 0006-Add-default-colors-to-documentation.patch Patch0002: 0002-dnf-rpm-miscutils.py-fix-usage-of-_.patch
Patch7: 0007-Fix-reporting-irrecoverable-errors-on-packages-download.patch Patch0003: 0003-Pass-the-package-to-rpmkeys-stdin.patch
Patch8: 0008-Add-fail_fast-parameter-to-download_payloads-methods.patch Patch0004: 0004-Use-rpmkeys-alone-to-verify-signature.patch
Patch9: 0009-comps-Make-the-install_or_skip-method-not-catch-CompsError-anymore.patch Patch0005: 0005-Lower-_pkgverify_level-to-signature-for-signature-ch.patch
Patch10: 0010-doc-Improve-description-of-multilib_policyall-RhBug19966811995630.patch Patch0006: 0006-add-default-colors-to-documentation.patch
Patch11: 0011-Fix-Python-dnf-API-does-not-respect-cacheonly-RhBug1862970.patch Patch0007: 0007-add-author.patch
Patch12: 0012-Documentation-API-notes-for-cacheonly.patch Patch0008: 0008-update-colors-according-to-libdnf-libdnf-conf-Config.patch
Patch13: 0013-Allow-destdir-option-with-modulesync-command.patch Patch0009: 0009-Fix-reporting-irrecoverable-errors-on-packages-downl.patch
Patch14: 0014-Add-documentation-for-query-api-flags.patch Patch0010: 0010-Add-fail_fast-parameter-to-download_payloads-methods.patch
Patch15: 0015-Fix-processing-of-download-errors-RhBug-2024527.patch Patch0011: 0011-comps-Make-the-install_or_skip-method-not-catch-Comp.patch
Patch16: 0016-Fix-unittests-that-relied-on-checksum-being-at-the-e.patch Patch0012: 0012-doc-Improve-description-of-multilib_policy-all-RhBug.patch
Patch17: 0017-cli-commands-history-Fix-history-undo-on-a-Reason-Ch.patch Patch0013: 0013-Fix-Python-dnf-API-does-not-respect-cacheonly-RhBug-.patch
Patch18: 0018-Fix-remove-when-no-repos-are-enabled-RhBz-2064341.patch Patch0014: 0014-Documentation-API-notes-for-cacheonly.patch
Patch19: 0019-doc-Improve-proxy-configuration-option-documentation.patch Patch0015: 0015-Allow-destdir-option-with-modulesync-command.patch
Patch0016: 0016-Update-translations-RhBug-2017270.patch
Patch0017: 0017-Add-documentation-for-query-api-flags.patch
Patch0018: 0018-Fix-processing-of-download-errors-RhBug-2024527.patch
Patch0019: 0019-Fix-unittests-that-relied-on-checksum-being-at-the-e.patch
Patch0020: 0020-cli-commands-history-Fix-history-undo-on-a-Reason-Ch.patch
Patch0021: 0021-Fix-remove-when-no-repos-are-enabled-RhBz-2064341.patch
Patch0022: 0022-doc-Improve-proxy-configuration-option-documentation.patch
Patch0023: 0023-Base.reset-plug-temporary-leak-of-libsolv-s-page-fil.patch
BuildArch: noarch BuildArch: noarch
BuildRequires: cmake BuildRequires: cmake
@ -390,6 +398,11 @@ popd
%{python3_sitelib}/%{name}/automatic/ %{python3_sitelib}/%{name}/automatic/
%changelog %changelog
* Tue May 24 2022 Richard W.M. Jones <rjones@redhat.com> - 4.7.0-10
- Backport fix for leaks of libsolv's page file descriptors in Base object
resolves: rhbz#2087734
- Include instructions for regenerating patches.
* Wed May 04 2022 Lukas Hrazky <lhrazky@redhat.com> - 4.7.0-8 * Wed May 04 2022 Lukas Hrazky <lhrazky@redhat.com> - 4.7.0-8
- Add documentation for query api flags - Add documentation for query api flags
- Fix processing of download errors - Fix processing of download errors