Merge branch 'c8' into a8
This commit is contained in:
commit
dcf551790f
@ -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 @@
|
||||||
@ -21,6 +21,6 @@ index 77a4894..b7f4031 100644
|
|||||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
|
@ -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
|
||||||
@ -31,6 +31,6 @@ index 235aaf2..7e33d4c 100644
|
|||||||
if p.returncode != 0 or data != (package.encode('ascii', 'strict') + b': digests signatures OK\n'):
|
if p.returncode != 0 or data != (package.encode('ascii', 'strict') + b': digests signatures OK\n'):
|
||||||
return 0
|
return 0
|
||||||
else:
|
else:
|
||||||
--
|
--
|
||||||
libgit2 1.0.1
|
2.35.1
|
||||||
|
|
@ -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
|
||||||
@ -51,6 +51,6 @@ index 7e33d4c..5f2621c 100644
|
|||||||
value = 0
|
value = 0
|
||||||
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
|
||||||
|
|
||||||
|
@ -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"""
|
||||||
|
|
||||||
@ -171,6 +169,6 @@ index 5f2621c..9d5b286 100644
|
|||||||
+ finally:
|
+ finally:
|
||||||
+ os.close(fdno)
|
+ os.close(fdno)
|
||||||
return value
|
return value
|
||||||
--
|
--
|
||||||
libgit2 1.0.1
|
2.35.1
|
||||||
|
|
||||||
|
@ -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):
|
||||||
@ -31,6 +32,6 @@ index 9d5b286..46ef475 100644
|
|||||||
'-')
|
'-')
|
||||||
with subprocess.Popen(
|
with subprocess.Popen(
|
||||||
args=args,
|
args=args,
|
||||||
--
|
--
|
||||||
libgit2 1.0.1
|
2.35.1
|
||||||
|
|
@ -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
SOURCES/0007-add-author.patch
Normal file
21
SOURCES/0007-add-author.patch
Normal 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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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):
|
||||||
@ -76,6 +76,6 @@ index b5c9849..b454e98 100644
|
|||||||
if self._fatal:
|
if self._fatal:
|
||||||
return {'': [self._fatal]}
|
return {'': [self._fatal]}
|
||||||
return {}
|
return {}
|
||||||
--
|
--
|
||||||
libgit2 1.0.1
|
2.35.1
|
||||||
|
|
@ -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:
|
||||||
@ -65,6 +63,6 @@ index b454e98..bb42230 100644
|
|||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
errs._fatal = str(e)
|
errs._fatal = str(e)
|
||||||
drpm.wait()
|
drpm.wait()
|
||||||
--
|
--
|
||||||
libgit2 1.0.1
|
2.35.1
|
||||||
|
|
@ -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 @@
|
||||||
@ -133,6 +134,6 @@ index 20d7945..03396b6 100644
|
|||||||
|
|
||||||
.. method:: environment_remove(env_id)
|
.. method:: environment_remove(env_id)
|
||||||
|
|
||||||
--
|
--
|
||||||
libgit2 1.0.1
|
2.35.1
|
||||||
|
|
@ -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.
|
||||||
@ -24,6 +25,6 @@ index 016bd00..83b14ec 100644
|
|||||||
|
|
||||||
.. _obsoletes_conf_option-label:
|
.. _obsoletes_conf_option-label:
|
||||||
|
|
||||||
--
|
--
|
||||||
libgit2 1.0.1
|
2.35.1
|
||||||
|
|
@ -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):
|
||||||
@ -28,6 +29,6 @@ index bb42230..1822cf0 100644
|
|||||||
if parent_conf:
|
if parent_conf:
|
||||||
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
|
||||||
|
|
@ -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.
|
||||||
@ -21,6 +21,6 @@ index 83b14ec..75bcdf7 100644
|
|||||||
.. _check_config_file_age-label:
|
.. _check_config_file_age-label:
|
||||||
|
|
||||||
``check_config_file_age``
|
``check_config_file_age``
|
||||||
--
|
--
|
||||||
libgit2 1.0.1
|
2.35.1
|
||||||
|
|
@ -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
|
||||||
@ -34,6 +34,6 @@ index f96c0ea..42aec72 100644
|
|||||||
(dnf-plugins-extras).
|
(dnf-plugins-extras).
|
||||||
|
|
||||||
.. _downloadonly-label:
|
.. _downloadonly-label:
|
||||||
--
|
--
|
||||||
libgit2 1.1.0
|
2.35.1
|
||||||
|
|
@ -4,10 +4,10 @@ Date: Fri, 18 Mar 2022 13:14:01 +0100
|
|||||||
Subject: [PATCH] Update translations (RhBug: 2017270)
|
Subject: [PATCH] Update translations (RhBug: 2017270)
|
||||||
|
|
||||||
---
|
---
|
||||||
po/dnf.pot | 1164 ++++++++++++++------------
|
po/dnf.pot | 1166 ++++++++++++++------------
|
||||||
po/fr.po | 1527 +++++++++++++++++++---------------
|
po/fr.po | 1523 +++++++++++++++++++---------------
|
||||||
po/ja.po | 1739 +++++++++++++++++++++-----------------
|
po/ja.po | 1739 +++++++++++++++++++++-----------------
|
||||||
po/ko.po | 2289 +++++++++++++++++++++++++++------------------------
|
po/ko.po | 2291 +++++++++++++++++++++++++++------------------------
|
||||||
po/zh_CN.po | 1491 ++++++++++++++++++---------------
|
po/zh_CN.po | 1491 ++++++++++++++++++---------------
|
||||||
po/zh_TW.po | 1345 ++++++++++++++++--------------
|
po/zh_TW.po | 1345 ++++++++++++++++--------------
|
||||||
6 files changed, 5259 insertions(+), 4296 deletions(-)
|
6 files changed, 5259 insertions(+), 4296 deletions(-)
|
||||||
@ -2538,20 +2538,16 @@ index f7101537..62a8df83 100644
|
|||||||
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
|
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
|
||||||
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
|
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
|
||||||
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
|
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
|
||||||
-msgid "Unable to resolve argument {}"
|
|
||||||
+#: dnf/module/module_base.py:196
|
+#: dnf/module/module_base.py:196
|
||||||
+#, python-brace-format
|
+#, python-brace-format
|
||||||
+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
|
+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
|
||||||
msgstr ""
|
+msgstr ""
|
||||||
|
+
|
||||||
-#: dnf/module/module_base.py:160
|
|
||||||
-msgid "No match for package {}"
|
|
||||||
+#: dnf/module/module_base.py:228
|
+#: dnf/module/module_base.py:228
|
||||||
+#, python-brace-format
|
+#, python-brace-format
|
||||||
+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
|
+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
|
||||||
msgstr ""
|
+msgstr ""
|
||||||
|
+
|
||||||
-#: dnf/module/module_base.py:204
|
|
||||||
+#: dnf/module/module_base.py:267
|
+#: dnf/module/module_base.py:267
|
||||||
+msgid "No packages available to distrosync for package name '{}'"
|
+msgid "No packages available to distrosync for package name '{}'"
|
||||||
+msgstr ""
|
+msgstr ""
|
||||||
@ -2560,9 +2556,14 @@ index f7101537..62a8df83 100644
|
|||||||
+#: dnf/module/module_base.py:486 dnf/module/module_base.py:505
|
+#: dnf/module/module_base.py:486 dnf/module/module_base.py:505
|
||||||
+#: dnf/module/module_base.py:552 dnf/module/module_base.py:611
|
+#: dnf/module/module_base.py:552 dnf/module/module_base.py:611
|
||||||
+#: dnf/module/module_base.py:677 dnf/module/module_base.py:840
|
+#: dnf/module/module_base.py:677 dnf/module/module_base.py:840
|
||||||
+msgid "Unable to resolve argument {}"
|
msgid "Unable to resolve argument {}"
|
||||||
+msgstr ""
|
msgstr ""
|
||||||
+
|
|
||||||
|
-#: dnf/module/module_base.py:160
|
||||||
|
-msgid "No match for package {}"
|
||||||
|
-msgstr ""
|
||||||
|
-
|
||||||
|
-#: dnf/module/module_base.py:204
|
||||||
+#: dnf/module/module_base.py:321
|
+#: dnf/module/module_base.py:321
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
|
msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
|
||||||
@ -3575,17 +3576,14 @@ index 4e883335..bb2d3677 100644
|
|||||||
msgid ""
|
msgid ""
|
||||||
-"It is not possible to switch enabled streams of a module.\n"
|
-"It is not possible to switch enabled streams of a module.\n"
|
||||||
-"It is recommended to remove all installed content from the module, and reset the module using '{prog} module reset <module_name>' command. After you reset the module, you can install the other stream."
|
-"It is recommended to remove all installed content from the module, and reset the module using '{prog} module reset <module_name>' command. After you reset the module, you can install the other stream."
|
||||||
-msgstr ""
|
|
||||||
-"Il n’est pas possible de basculer les flux actifs d’un module.\n"
|
|
||||||
-"Il et recommandé de retirer tout contenu installé par le module, et de réinitialiser le mode en utilisant la commande « {prog} module reset <nom_du_module> ». Après la réinitialisation, vous pouvez installer les autres flux."
|
|
||||||
-
|
|
||||||
-#: dnf/cli/cli.py:210
|
|
||||||
+"It is not possible to switch enabled streams of a module unless explicitly "
|
+"It is not possible to switch enabled streams of a module unless explicitly "
|
||||||
+"enabled via configuration option module_stream_switch.\n"
|
+"enabled via configuration option module_stream_switch.\n"
|
||||||
+"It is recommended to rather remove all installed content from the module, "
|
+"It is recommended to rather remove all installed content from the module, "
|
||||||
+"and reset the module using '{prog} module reset <module_name>' command. "
|
+"and reset the module using '{prog} module reset <module_name>' command. "
|
||||||
+"After you reset the module, you can install the other stream."
|
+"After you reset the module, you can install the other stream."
|
||||||
+msgstr ""
|
msgstr ""
|
||||||
|
-"Il n’est pas possible de basculer les flux actifs d’un module.\n"
|
||||||
|
-"Il et recommandé de retirer tout contenu installé par le module, et de réinitialiser le mode en utilisant la commande « {prog} module reset <nom_du_module> ». Après la réinitialisation, vous pouvez installer les autres flux."
|
||||||
+"Il n’est pas possible de basculer les flux actifs d’un module sauf si cela "
|
+"Il n’est pas possible de basculer les flux actifs d’un module sauf si cela "
|
||||||
+"est explicitement activé par l’option de configuration "
|
+"est explicitement activé par l’option de configuration "
|
||||||
+"module_stream_switch.\n"
|
+"module_stream_switch.\n"
|
||||||
@ -3593,7 +3591,8 @@ index 4e883335..bb2d3677 100644
|
|||||||
+"de réinitialiser le mode en utilisant la commande « {prog} module reset "
|
+"de réinitialiser le mode en utilisant la commande « {prog} module reset "
|
||||||
+"<nom_du_module> ». Après la réinitialisation, vous pouvez installer les "
|
+"<nom_du_module> ». Après la réinitialisation, vous pouvez installer les "
|
||||||
+"autres flux."
|
+"autres flux."
|
||||||
+
|
|
||||||
|
-#: dnf/cli/cli.py:210
|
||||||
+#: dnf/cli/cli.py:212
|
+#: dnf/cli/cli.py:212
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{prog} will only download packages for the transaction."
|
msgid "{prog} will only download packages for the transaction."
|
||||||
@ -5879,15 +5878,15 @@ index 4e883335..bb2d3677 100644
|
|||||||
-"L’installation du module à partir du dépôt Fail-Safe n’est pas permise"
|
-"L’installation du module à partir du dépôt Fail-Safe n’est pas permise"
|
||||||
+"Le profil installé « {0} » n’est pas disponible dans le module « {1} » flux "
|
+"Le profil installé « {0} » n’est pas disponible dans le module « {1} » flux "
|
||||||
+"« {2} »"
|
+"« {2} »"
|
||||||
|
+
|
||||||
|
+#: dnf/module/module_base.py:267
|
||||||
|
+msgid "No packages available to distrosync for package name '{}'"
|
||||||
|
+msgstr "Aucun paquet distrosync disponible pour le nom de paquet « {} »"
|
||||||
|
|
||||||
-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
|
-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
|
||||||
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
|
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
|
||||||
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
|
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
|
||||||
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
|
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
|
||||||
+#: dnf/module/module_base.py:267
|
|
||||||
+msgid "No packages available to distrosync for package name '{}'"
|
|
||||||
+msgstr "Aucun paquet distrosync disponible pour le nom de paquet « {} »"
|
|
||||||
+
|
|
||||||
+#: dnf/module/module_base.py:310 dnf/module/module_base.py:461
|
+#: dnf/module/module_base.py:310 dnf/module/module_base.py:461
|
||||||
+#: dnf/module/module_base.py:486 dnf/module/module_base.py:505
|
+#: dnf/module/module_base.py:486 dnf/module/module_base.py:505
|
||||||
+#: dnf/module/module_base.py:552 dnf/module/module_base.py:611
|
+#: dnf/module/module_base.py:552 dnf/module/module_base.py:611
|
||||||
@ -6844,7 +6843,10 @@ index 6435271c..05bbda02 100644
|
|||||||
#, python-format
|
#, python-format
|
||||||
msgid "Package %s of lowest version already installed, cannot downgrade it."
|
msgid "Package %s of lowest version already installed, cannot downgrade it."
|
||||||
-msgstr "最下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできません。"
|
-msgstr "最下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできません。"
|
||||||
-
|
+msgstr ""
|
||||||
|
+"最下位バージョンのパッケージ %s はインストール済みなので、ダウングレードでき"
|
||||||
|
+"ません。"
|
||||||
|
|
||||||
-#: dnf/base.py:2242
|
-#: dnf/base.py:2242
|
||||||
-msgid "Action not handled: {}"
|
-msgid "Action not handled: {}"
|
||||||
-msgstr "動作は対処されていません: {}"
|
-msgstr "動作は対処されていません: {}"
|
||||||
@ -6858,10 +6860,7 @@ index 6435271c..05bbda02 100644
|
|||||||
-#: dnf/base.py:2269
|
-#: dnf/base.py:2269
|
||||||
-msgid "no package matched"
|
-msgid "no package matched"
|
||||||
-msgstr "一致したパッケージはありません。"
|
-msgstr "一致したパッケージはありません。"
|
||||||
+msgstr ""
|
-
|
||||||
+"最下位バージョンのパッケージ %s はインストール済みなので、ダウングレードでき"
|
|
||||||
+"ません。"
|
|
||||||
|
|
||||||
-#: dnf/base.py:2290
|
-#: dnf/base.py:2290
|
||||||
+#: dnf/base.py:2378
|
+#: dnf/base.py:2378
|
||||||
msgid "No security updates needed, but {} update available"
|
msgid "No security updates needed, but {} update available"
|
||||||
@ -7121,13 +7120,13 @@ index 6435271c..05bbda02 100644
|
|||||||
msgid "No packages marked for distribution synchronization."
|
msgid "No packages marked for distribution synchronization."
|
||||||
-msgstr "ディストリビューション同期対象のパッケージがありません"
|
-msgstr "ディストリビューション同期対象のパッケージがありません"
|
||||||
+msgstr "ディストリビューション同期対象のパッケージがありません。"
|
+msgstr "ディストリビューション同期対象のパッケージがありません。"
|
||||||
+
|
|
||||||
|
-#: dnf/cli/cli.py:428
|
||||||
+#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395
|
+#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395
|
||||||
+#, python-format
|
+#, python-format
|
||||||
+msgid "No package %s available."
|
+msgid "No package %s available."
|
||||||
+msgstr "利用可能なパッケージ %s はありません。"
|
+msgstr "利用可能なパッケージ %s はありません。"
|
||||||
|
+
|
||||||
-#: dnf/cli/cli.py:428
|
|
||||||
+#: dnf/cli/cli.py:434
|
+#: dnf/cli/cli.py:434
|
||||||
msgid "No packages marked for downgrade."
|
msgid "No packages marked for downgrade."
|
||||||
msgstr "ダウングレード対象のパッケージはありません。"
|
msgstr "ダウングレード対象のパッケージはありません。"
|
||||||
@ -7714,7 +7713,8 @@ index 6435271c..05bbda02 100644
|
|||||||
+msgstr ""
|
+msgstr ""
|
||||||
+"トランザクション %s をロールバックすることはできません。ロールバックすること"
|
+"トランザクション %s をロールバックすることはできません。ロールバックすること"
|
||||||
+"で、パッケージデータベースに矛盾が生じます。"
|
+"で、パッケージデータベースに矛盾が生じます。"
|
||||||
+
|
|
||||||
|
-#: dnf/cli/commands/history.py:222
|
||||||
+#: dnf/cli/commands/history.py:175
|
+#: dnf/cli/commands/history.py:175
|
||||||
+msgid "No transaction ID given"
|
+msgid "No transaction ID given"
|
||||||
+msgstr "トランザクション ID は指定されていません"
|
+msgstr "トランザクション ID は指定されていません"
|
||||||
@ -7737,8 +7737,7 @@ index 6435271c..05bbda02 100644
|
|||||||
+#, python-format
|
+#, python-format
|
||||||
+msgid "Transaction history is incomplete, after %u."
|
+msgid "Transaction history is incomplete, after %u."
|
||||||
+msgstr "%u の後のトランザクション履歴が不完全です。"
|
+msgstr "%u の後のトランザクション履歴が不完全です。"
|
||||||
|
+
|
||||||
-#: dnf/cli/commands/history.py:222
|
|
||||||
+#: dnf/cli/commands/history.py:256
|
+#: dnf/cli/commands/history.py:256
|
||||||
+msgid "No packages to list"
|
+msgid "No packages to list"
|
||||||
+msgstr "一覧表示するパッケージはありません"
|
+msgstr "一覧表示するパッケージはありません"
|
||||||
@ -9375,12 +9374,12 @@ index 6435271c..05bbda02 100644
|
|||||||
msgid "repo %s: imported key 0x%s."
|
msgid "repo %s: imported key 0x%s."
|
||||||
-msgstr "repo %s: インポート済みの鍵 0x%s。"
|
-msgstr "repo %s: インポート済みの鍵 0x%s。"
|
||||||
+msgstr "repo %s: インポート済みのキー 0x%s。"
|
+msgstr "repo %s: インポート済みのキー 0x%s。"
|
||||||
+
|
|
||||||
|
-#: dnf/db/group.py:293
|
||||||
+#: dnf/crypto.py:145
|
+#: dnf/crypto.py:145
|
||||||
+msgid "Verified using DNS record with DNSSEC signature."
|
+msgid "Verified using DNS record with DNSSEC signature."
|
||||||
+msgstr "DNSSEC 署名付きの DNS レコードを使用して検証しました。"
|
+msgstr "DNSSEC 署名付きの DNS レコードを使用して検証しました。"
|
||||||
|
+
|
||||||
-#: dnf/db/group.py:293
|
|
||||||
+#: dnf/crypto.py:147
|
+#: dnf/crypto.py:147
|
||||||
+msgid "NOT verified using DNS record."
|
+msgid "NOT verified using DNS record."
|
||||||
+msgstr "DNS レコードを使用して検証されませんでした。"
|
+msgstr "DNS レコードを使用して検証されませんでした。"
|
||||||
@ -9470,7 +9469,8 @@ index 6435271c..05bbda02 100644
|
|||||||
-msgstr "'{}' に指定したプロファイルはありません。プロファイルを指定してください。"
|
-msgstr "'{}' に指定したプロファイルはありません。プロファイルを指定してください。"
|
||||||
+msgstr ""
|
+msgstr ""
|
||||||
+"'{}' に指定したプロファイルはありません。プロファイルを指定してください。"
|
+"'{}' に指定したプロファイルはありません。プロファイルを指定してください。"
|
||||||
+
|
|
||||||
|
-#: dnf/module/module_base.py:33
|
||||||
+#: dnf/module/exceptions.py:27
|
+#: dnf/module/exceptions.py:27
|
||||||
+msgid "No such module: {}"
|
+msgid "No such module: {}"
|
||||||
+msgstr "次のようなモジュールはありません: {}"
|
+msgstr "次のようなモジュールはありません: {}"
|
||||||
@ -9502,8 +9502,7 @@ index 6435271c..05bbda02 100644
|
|||||||
+#: dnf/module/exceptions.py:70
|
+#: dnf/module/exceptions.py:70
|
||||||
+msgid "No stream specified for '{}', please specify stream"
|
+msgid "No stream specified for '{}', please specify stream"
|
||||||
+msgstr "'{}' に指定したストリームはありません。ストリームを指定してください"
|
+msgstr "'{}' に指定したストリームはありません。ストリームを指定してください"
|
||||||
|
+
|
||||||
-#: dnf/module/module_base.py:33
|
|
||||||
+#: dnf/module/exceptions.py:82
|
+#: dnf/module/exceptions.py:82
|
||||||
+msgid "No such profile: {}. No profiles available"
|
+msgid "No such profile: {}. No profiles available"
|
||||||
+msgstr ""
|
+msgstr ""
|
||||||
@ -9591,7 +9590,11 @@ index 6435271c..05bbda02 100644
|
|||||||
-msgstr "フェイルセーフレポジトリーからのモジュールインストールは許可されていません"
|
-msgstr "フェイルセーフレポジトリーからのモジュールインストールは許可されていません"
|
||||||
+msgstr ""
|
+msgstr ""
|
||||||
+"フェイルセーフレポジトリーからのモジュールインストールは許可されていません"
|
+"フェイルセーフレポジトリーからのモジュールインストールは許可されていません"
|
||||||
+
|
|
||||||
|
-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
|
||||||
|
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
|
||||||
|
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
|
||||||
|
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
|
||||||
+#: dnf/module/module_base.py:196
|
+#: dnf/module/module_base.py:196
|
||||||
+#, python-brace-format
|
+#, python-brace-format
|
||||||
+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
|
+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
|
||||||
@ -9607,11 +9610,7 @@ index 6435271c..05bbda02 100644
|
|||||||
+#: dnf/module/module_base.py:267
|
+#: dnf/module/module_base.py:267
|
||||||
+msgid "No packages available to distrosync for package name '{}'"
|
+msgid "No packages available to distrosync for package name '{}'"
|
||||||
+msgstr "パッケージ名 '{}' 向けに distrosync するパッケージはありません"
|
+msgstr "パッケージ名 '{}' 向けに distrosync するパッケージはありません"
|
||||||
|
+
|
||||||
-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
|
|
||||||
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
|
|
||||||
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
|
|
||||||
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
|
|
||||||
+#: dnf/module/module_base.py:310 dnf/module/module_base.py:461
|
+#: dnf/module/module_base.py:310 dnf/module/module_base.py:461
|
||||||
+#: dnf/module/module_base.py:486 dnf/module/module_base.py:505
|
+#: dnf/module/module_base.py:486 dnf/module/module_base.py:505
|
||||||
+#: dnf/module/module_base.py:552 dnf/module/module_base.py:611
|
+#: dnf/module/module_base.py:552 dnf/module/module_base.py:611
|
||||||
@ -9643,22 +9642,22 @@ index 6435271c..05bbda02 100644
|
|||||||
-msgstr "フェイルセーフレポジトリーからのモジュールアップグレードは許可されていません"
|
-msgstr "フェイルセーフレポジトリーからのモジュールアップグレードは許可されていません"
|
||||||
+msgstr ""
|
+msgstr ""
|
||||||
+"フェイルセーフレポジトリーからのモジュールアップグレードは許可されていません"
|
+"フェイルセーフレポジトリーからのモジュールアップグレードは許可されていません"
|
||||||
+
|
|
||||||
|
-#: dnf/module/module_base.py:367
|
||||||
+#: dnf/module/module_base.py:422
|
+#: dnf/module/module_base.py:422
|
||||||
+#, python-brace-format
|
+#, python-brace-format
|
||||||
+msgid ""
|
msgid ""
|
||||||
|
-"Only module name is required. Ignoring unneeded information in argument: "
|
||||||
|
-"'{}'"
|
||||||
+"Argument '{argument}' matches {stream_count} streams ('{streams}') of module "
|
+"Argument '{argument}' matches {stream_count} streams ('{streams}') of module "
|
||||||
+"'{module}', but none of the streams are enabled or default"
|
+"'{module}', but none of the streams are enabled or default"
|
||||||
+msgstr ""
|
+msgstr ""
|
||||||
+"引数 '{argument}' は、モジュール '{module}' の {stream_count} ストリーム "
|
+"引数 '{argument}' は、モジュール '{module}' の {stream_count} ストリーム "
|
||||||
+"('{streams}' と一致しますが、有効化されている、あるいはデフォルトのストリーム"
|
+"('{streams}' と一致しますが、有効化されている、あるいはデフォルトのストリーム"
|
||||||
+"はありません"
|
+"はありません"
|
||||||
|
+
|
||||||
-#: dnf/module/module_base.py:367
|
|
||||||
+#: dnf/module/module_base.py:509
|
+#: dnf/module/module_base.py:509
|
||||||
msgid ""
|
+msgid ""
|
||||||
-"Only module name is required. Ignoring unneeded information in argument: "
|
|
||||||
-"'{}'"
|
|
||||||
+"Only module name is required. Ignoring unneeded information in argument: '{}'"
|
+"Only module name is required. Ignoring unneeded information in argument: '{}'"
|
||||||
msgstr "モジュール名のみが必要です。引数で不必要な情報を無視します: '{}'"
|
msgstr "モジュール名のみが必要です。引数で不必要な情報を無視します: '{}'"
|
||||||
|
|
||||||
@ -9790,13 +9789,13 @@ index 6435271c..05bbda02 100644
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
+"互換性のないメジャーバージョン \"{major}\"。サポートされているメジャーバー"
|
+"互換性のないメジャーバージョン \"{major}\"。サポートされているメジャーバー"
|
||||||
+"ジョンは \"{major_supp}\" です。"
|
+"ジョンは \"{major_supp}\" です。"
|
||||||
+
|
|
||||||
|
-#: dnf/transaction_sr.py:244
|
||||||
+#: dnf/transaction_sr.py:224
|
+#: dnf/transaction_sr.py:224
|
||||||
+msgid ""
|
+msgid ""
|
||||||
+"Conflicting TransactionReplay arguments have been specified: filename, data"
|
+"Conflicting TransactionReplay arguments have been specified: filename, data"
|
||||||
+msgstr "競合する TransactionReplay 引数が指定されています。filename, data"
|
+msgstr "競合する TransactionReplay 引数が指定されています。filename, data"
|
||||||
|
+
|
||||||
-#: dnf/transaction_sr.py:244
|
|
||||||
+#: dnf/transaction_sr.py:265
|
+#: dnf/transaction_sr.py:265
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Unexpected type of \"{id}\", {exp} expected."
|
msgid "Unexpected type of \"{id}\", {exp} expected."
|
||||||
@ -10611,7 +10610,9 @@ index 449f6130..cf15d9cf 100644
|
|||||||
#, python-format
|
#, python-format
|
||||||
msgid "Package %s of lowest version already installed, cannot downgrade it."
|
msgid "Package %s of lowest version already installed, cannot downgrade it."
|
||||||
-msgstr "%s 패키지의 최하위 버전이 이미 설치되어 있으므로 다운 그레이드할 수 없습니다."
|
-msgstr "%s 패키지의 최하위 버전이 이미 설치되어 있으므로 다운 그레이드할 수 없습니다."
|
||||||
-
|
+msgstr ""
|
||||||
|
+"%s 꾸러미의 최하위 버전이 이미 설치되어 있으므로 다운그레이드 할 수 없습니다."
|
||||||
|
|
||||||
-#: dnf/base.py:2242
|
-#: dnf/base.py:2242
|
||||||
-msgid "Action not handled: {}"
|
-msgid "Action not handled: {}"
|
||||||
-msgstr "작업이 처리되지 않았습니다: {}"
|
-msgstr "작업이 처리되지 않았습니다: {}"
|
||||||
@ -10625,9 +10626,7 @@ index 449f6130..cf15d9cf 100644
|
|||||||
-#: dnf/base.py:2269
|
-#: dnf/base.py:2269
|
||||||
-msgid "no package matched"
|
-msgid "no package matched"
|
||||||
-msgstr "일치하는 패키지가 없습니다."
|
-msgstr "일치하는 패키지가 없습니다."
|
||||||
+msgstr ""
|
-
|
||||||
+"%s 꾸러미의 최하위 버전이 이미 설치되어 있으므로 다운그레이드 할 수 없습니다."
|
|
||||||
|
|
||||||
-#: dnf/base.py:2290
|
-#: dnf/base.py:2290
|
||||||
+#: dnf/base.py:2378
|
+#: dnf/base.py:2378
|
||||||
msgid "No security updates needed, but {} update available"
|
msgid "No security updates needed, but {} update available"
|
||||||
@ -10907,13 +10906,13 @@ index 449f6130..cf15d9cf 100644
|
|||||||
msgid "No packages marked for distribution synchronization."
|
msgid "No packages marked for distribution synchronization."
|
||||||
-msgstr "배포 동기화가 필요한 패키지가 없습니다."
|
-msgstr "배포 동기화가 필요한 패키지가 없습니다."
|
||||||
+msgstr "배포 동기화가 필요한 꾸러미가 없습니다."
|
+msgstr "배포 동기화가 필요한 꾸러미가 없습니다."
|
||||||
+
|
|
||||||
|
-#: dnf/cli/cli.py:428
|
||||||
+#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395
|
+#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395
|
||||||
+#, python-format
|
+#, python-format
|
||||||
+msgid "No package %s available."
|
+msgid "No package %s available."
|
||||||
+msgstr "가용한 꾸러미(package) %s가 없습니다."
|
+msgstr "가용한 꾸러미(package) %s가 없습니다."
|
||||||
|
+
|
||||||
-#: dnf/cli/cli.py:428
|
|
||||||
+#: dnf/cli/cli.py:434
|
+#: dnf/cli/cli.py:434
|
||||||
msgid "No packages marked for downgrade."
|
msgid "No packages marked for downgrade."
|
||||||
-msgstr "다운 그레이드 대상으로 표시된 패키지가 없습니다."
|
-msgstr "다운 그레이드 대상으로 표시된 패키지가 없습니다."
|
||||||
@ -11627,12 +11626,12 @@ index 449f6130..cf15d9cf 100644
|
|||||||
+msgstr ""
|
+msgstr ""
|
||||||
+"%s 연결을 되돌릴 수 없습니다. 이렇게 하면 꾸러미 데이타베이스가 일치하지 않"
|
+"%s 연결을 되돌릴 수 없습니다. 이렇게 하면 꾸러미 데이타베이스가 일치하지 않"
|
||||||
+"게 됩니다."
|
+"게 됩니다."
|
||||||
+
|
|
||||||
|
-#: dnf/cli/commands/history.py:222
|
||||||
+#: dnf/cli/commands/history.py:175
|
+#: dnf/cli/commands/history.py:175
|
||||||
+msgid "No transaction ID given"
|
+msgid "No transaction ID given"
|
||||||
+msgstr "지정된 연결 ID가 없습니다"
|
+msgstr "지정된 연결 ID가 없습니다"
|
||||||
|
+
|
||||||
-#: dnf/cli/commands/history.py:222
|
|
||||||
+#: dnf/cli/commands/history.py:179
|
+#: dnf/cli/commands/history.py:179
|
||||||
+#, python-brace-format
|
+#, python-brace-format
|
||||||
+msgid "Transaction ID \"{0}\" not found."
|
+msgid "Transaction ID \"{0}\" not found."
|
||||||
@ -11679,13 +11678,13 @@ index 449f6130..cf15d9cf 100644
|
|||||||
+#: dnf/cli/commands/history.py:312
|
+#: dnf/cli/commands/history.py:312
|
||||||
msgid "No transaction which manipulates package '{}' was found."
|
msgid "No transaction which manipulates package '{}' was found."
|
||||||
-msgstr "패키지 '{}'을 (를) 사용하는 트랜잭션이 없습니다."
|
-msgstr "패키지 '{}'을 (를) 사용하는 트랜잭션이 없습니다."
|
||||||
-
|
+msgstr "꾸러미 '{}'를 사용하는 연결이 없습니다."
|
||||||
|
|
||||||
-#: dnf/cli/commands/history.py:305
|
-#: dnf/cli/commands/history.py:305
|
||||||
-#, python-brace-format
|
-#, python-brace-format
|
||||||
-msgid "Transaction ID \"{id}\" not found."
|
-msgid "Transaction ID \"{id}\" not found."
|
||||||
-msgstr ""
|
-msgstr ""
|
||||||
+msgstr "꾸러미 '{}'를 사용하는 연결이 없습니다."
|
-
|
||||||
|
|
||||||
-#: dnf/cli/commands/history.py:313
|
-#: dnf/cli/commands/history.py:313
|
||||||
+#: dnf/cli/commands/history.py:357
|
+#: dnf/cli/commands/history.py:357
|
||||||
msgid "{} exists, overwrite?"
|
msgid "{} exists, overwrite?"
|
||||||
@ -11854,12 +11853,12 @@ index 449f6130..cf15d9cf 100644
|
|||||||
msgid "Package {} belongs to multiple modules, skipping"
|
msgid "Package {} belongs to multiple modules, skipping"
|
||||||
-msgstr "{} 패키지는 여러 모듈에 속합니다. 건너 뛰기"
|
-msgstr "{} 패키지는 여러 모듈에 속합니다. 건너 뛰기"
|
||||||
+msgstr "{} 꾸러미는 여러 모듈에 속합니다. 건너 뛰기"
|
+msgstr "{} 꾸러미는 여러 모듈에 속합니다. 건너 뛰기"
|
||||||
+
|
|
||||||
|
-#: dnf/cli/commands/module.py:277
|
||||||
+#: dnf/cli/commands/module.py:280
|
+#: dnf/cli/commands/module.py:280
|
||||||
+msgid "switch a module to a stream and distrosync rpm packages"
|
+msgid "switch a module to a stream and distrosync rpm packages"
|
||||||
+msgstr "모듈을 스트림과 distrosync rpm 꾸러미로 전환합니다"
|
+msgstr "모듈을 스트림과 distrosync rpm 꾸러미로 전환합니다"
|
||||||
|
+
|
||||||
-#: dnf/cli/commands/module.py:277
|
|
||||||
+#: dnf/cli/commands/module.py:302
|
+#: dnf/cli/commands/module.py:302
|
||||||
msgid "list modular packages"
|
msgid "list modular packages"
|
||||||
-msgstr "모듈 패키지 목록"
|
-msgstr "모듈 패키지 목록"
|
||||||
@ -13309,11 +13308,12 @@ index 449f6130..cf15d9cf 100644
|
|||||||
-msgstr "취약한 종속 패키지 설치 중"
|
-msgstr "취약한 종속 패키지 설치 중"
|
||||||
+msgstr "취약한 종속 꾸러미 설치 중"
|
+msgstr "취약한 종속 꾸러미 설치 중"
|
||||||
|
|
||||||
-#. TRANSLATORS: This is for a list of packages to be removed.
|
+# translation auto-copied from project subscription-manager, version 1.11.X,
|
||||||
# translation auto-copied from project subscription-manager, version 1.11.X,
|
+# document keys
|
||||||
# document keys
|
#. TRANSLATORS: This is for a list of packages to be removed.
|
||||||
|
-# translation auto-copied from project subscription-manager, version 1.11.X,
|
||||||
|
-# document keys
|
||||||
-#: dnf/cli/output.py:1147
|
-#: dnf/cli/output.py:1147
|
||||||
+#. TRANSLATORS: This is for a list of packages to be removed.
|
|
||||||
+#: dnf/cli/output.py:1060
|
+#: dnf/cli/output.py:1060
|
||||||
msgid "Removing"
|
msgid "Removing"
|
||||||
msgstr "삭제 중"
|
msgstr "삭제 중"
|
||||||
@ -14287,21 +14287,21 @@ index 449f6130..cf15d9cf 100644
|
|||||||
msgid "Upgrading module from Fail-Safe repository is not allowed"
|
msgid "Upgrading module from Fail-Safe repository is not allowed"
|
||||||
-msgstr "Fail-Safe 리포지토리에서 모듈을 업그레이드할 수 없습니다"
|
-msgstr "Fail-Safe 리포지토리에서 모듈을 업그레이드할 수 없습니다"
|
||||||
+msgstr "실패-방지 저장소에서 모듈을 향상 할 수 없습니다"
|
+msgstr "실패-방지 저장소에서 모듈을 향상 할 수 없습니다"
|
||||||
+
|
|
||||||
|
-#: dnf/module/module_base.py:367
|
||||||
+#: dnf/module/module_base.py:422
|
+#: dnf/module/module_base.py:422
|
||||||
+#, python-brace-format
|
+#, python-brace-format
|
||||||
+msgid ""
|
msgid ""
|
||||||
|
-"Only module name is required. Ignoring unneeded information in argument: "
|
||||||
|
-"'{}'"
|
||||||
+"Argument '{argument}' matches {stream_count} streams ('{streams}') of module "
|
+"Argument '{argument}' matches {stream_count} streams ('{streams}') of module "
|
||||||
+"'{module}', but none of the streams are enabled or default"
|
+"'{module}', but none of the streams are enabled or default"
|
||||||
+msgstr ""
|
+msgstr ""
|
||||||
+"인수 '{argument}'는 {stream_count} 스트림 ('{streams}')과 일치합니다 (모듈의 "
|
+"인수 '{argument}'는 {stream_count} 스트림 ('{streams}')과 일치합니다 (모듈의 "
|
||||||
+"'{module}'), 하지만 활성화 되었거나 지정된 스트림이 없습니다"
|
+"'{module}'), 하지만 활성화 되었거나 지정된 스트림이 없습니다"
|
||||||
|
+
|
||||||
-#: dnf/module/module_base.py:367
|
|
||||||
+#: dnf/module/module_base.py:509
|
+#: dnf/module/module_base.py:509
|
||||||
msgid ""
|
+msgid ""
|
||||||
-"Only module name is required. Ignoring unneeded information in argument: "
|
|
||||||
-"'{}'"
|
|
||||||
+"Only module name is required. Ignoring unneeded information in argument: '{}'"
|
+"Only module name is required. Ignoring unneeded information in argument: '{}'"
|
||||||
msgstr "모듈 이름만 필요합니다. '{}'인수에서 불필요한 정보를 무시합니다"
|
msgstr "모듈 이름만 필요합니다. '{}'인수에서 불필요한 정보를 무시합니다"
|
||||||
|
|
||||||
@ -17598,7 +17598,11 @@ index 7ede4ed8..af6396c3 100644
|
|||||||
msgid "Installing module from Fail-Safe repository is not allowed"
|
msgid "Installing module from Fail-Safe repository is not allowed"
|
||||||
-msgstr "不允许从失效保险仓库中安装模块"
|
-msgstr "不允许从失效保险仓库中安装模块"
|
||||||
+msgstr "不允许从自动防故障仓库安装模块"
|
+msgstr "不允许从自动防故障仓库安装模块"
|
||||||
+
|
|
||||||
|
-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
|
||||||
|
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
|
||||||
|
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
|
||||||
|
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
|
||||||
+#: dnf/module/module_base.py:196
|
+#: dnf/module/module_base.py:196
|
||||||
+#, python-brace-format
|
+#, python-brace-format
|
||||||
+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
|
+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
|
||||||
@ -17608,11 +17612,7 @@ index 7ede4ed8..af6396c3 100644
|
|||||||
+#, python-brace-format
|
+#, python-brace-format
|
||||||
+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
|
+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
|
||||||
+msgstr "在模块 '{1}' 流 '{2}' 中没有安装的配置文件 '{0}'"
|
+msgstr "在模块 '{1}' 流 '{2}' 中没有安装的配置文件 '{0}'"
|
||||||
|
+
|
||||||
-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
|
|
||||||
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
|
|
||||||
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
|
|
||||||
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
|
|
||||||
+#: dnf/module/module_base.py:267
|
+#: dnf/module/module_base.py:267
|
||||||
+msgid "No packages available to distrosync for package name '{}'"
|
+msgid "No packages available to distrosync for package name '{}'"
|
||||||
+msgstr "软件包名称 '{}' 没有可用的软件包用于 distrosync"
|
+msgstr "软件包名称 '{}' 没有可用的软件包用于 distrosync"
|
||||||
@ -17645,21 +17645,21 @@ index 7ede4ed8..af6396c3 100644
|
|||||||
msgid "Upgrading module from Fail-Safe repository is not allowed"
|
msgid "Upgrading module from Fail-Safe repository is not allowed"
|
||||||
-msgstr "不允许从失效保险仓库中升级模块"
|
-msgstr "不允许从失效保险仓库中升级模块"
|
||||||
+msgstr "不允许从自动防故障仓库升级模块"
|
+msgstr "不允许从自动防故障仓库升级模块"
|
||||||
+
|
|
||||||
|
-#: dnf/module/module_base.py:367
|
||||||
+#: dnf/module/module_base.py:422
|
+#: dnf/module/module_base.py:422
|
||||||
+#, python-brace-format
|
+#, python-brace-format
|
||||||
+msgid ""
|
msgid ""
|
||||||
|
-"Only module name is required. Ignoring unneeded information in argument: "
|
||||||
|
-"'{}'"
|
||||||
+"Argument '{argument}' matches {stream_count} streams ('{streams}') of module "
|
+"Argument '{argument}' matches {stream_count} streams ('{streams}') of module "
|
||||||
+"'{module}', but none of the streams are enabled or default"
|
+"'{module}', but none of the streams are enabled or default"
|
||||||
+msgstr ""
|
+msgstr ""
|
||||||
+"参数 '{argument}' 匹配模块 '{module}' 的 {stream_count} 流 ('{streams}') "
|
+"参数 '{argument}' 匹配模块 '{module}' 的 {stream_count} 流 ('{streams}') "
|
||||||
+",但是这些流都未被启用或为默认"
|
+",但是这些流都未被启用或为默认"
|
||||||
|
+
|
||||||
-#: dnf/module/module_base.py:367
|
|
||||||
+#: dnf/module/module_base.py:509
|
+#: dnf/module/module_base.py:509
|
||||||
msgid ""
|
+msgid ""
|
||||||
-"Only module name is required. Ignoring unneeded information in argument: "
|
|
||||||
-"'{}'"
|
|
||||||
+"Only module name is required. Ignoring unneeded information in argument: '{}'"
|
+"Only module name is required. Ignoring unneeded information in argument: '{}'"
|
||||||
msgstr "只需要模块名。正在忽略'{}'中的无用信息"
|
msgstr "只需要模块名。正在忽略'{}'中的无用信息"
|
||||||
|
|
||||||
@ -20863,15 +20863,15 @@ index b991c4f0..c43c0d5f 100644
|
|||||||
-#: dnf/module/module_base.py:367
|
-#: dnf/module/module_base.py:367
|
||||||
+#: dnf/module/module_base.py:422
|
+#: dnf/module/module_base.py:422
|
||||||
+#, python-brace-format
|
+#, python-brace-format
|
||||||
+msgid ""
|
msgid ""
|
||||||
|
-"Only module name is required. Ignoring unneeded information in argument: "
|
||||||
|
-"'{}'"
|
||||||
+"Argument '{argument}' matches {stream_count} streams ('{streams}') of module "
|
+"Argument '{argument}' matches {stream_count} streams ('{streams}') of module "
|
||||||
+"'{module}', but none of the streams are enabled or default"
|
+"'{module}', but none of the streams are enabled or default"
|
||||||
+msgstr ""
|
+msgstr ""
|
||||||
+
|
+
|
||||||
+#: dnf/module/module_base.py:509
|
+#: dnf/module/module_base.py:509
|
||||||
msgid ""
|
+msgid ""
|
||||||
-"Only module name is required. Ignoring unneeded information in argument: "
|
|
||||||
-"'{}'"
|
|
||||||
+"Only module name is required. Ignoring unneeded information in argument: '{}'"
|
+"Only module name is required. Ignoring unneeded information in argument: '{}'"
|
||||||
msgstr "只需要模組名稱。忽略引數中的非必要資訊:「{}」"
|
msgstr "只需要模組名稱。忽略引數中的非必要資訊:「{}」"
|
||||||
|
|
57
SOURCES/0017-Add-documentation-for-query-api-flags.patch
Normal file
57
SOURCES/0017-Add-documentation-for-query-api-flags.patch
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
From 27f26c607c44b8331b23c861241a8509c2452531 Mon Sep 17 00:00:00 2001
|
||||||
|
From: sbluhm <stefan.bluhm@clacee.eu>
|
||||||
|
Date: Sun, 9 Jan 2022 14:30:19 +0100
|
||||||
|
Subject: [PATCH] Add documentation for query api flags
|
||||||
|
|
||||||
|
= changelog =
|
||||||
|
msg: Add documentation for query api flags
|
||||||
|
type: enhancement
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2035577
|
||||||
|
---
|
||||||
|
AUTHORS | 1 +
|
||||||
|
doc/api_sack.rst | 14 +++++++++++++-
|
||||||
|
2 files changed, 14 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/AUTHORS b/AUTHORS
|
||||||
|
index f8c9eb83..0077c7ea 100644
|
||||||
|
--- a/AUTHORS
|
||||||
|
+++ b/AUTHORS
|
||||||
|
@@ -91,6 +91,7 @@ DNF CONTRIBUTORS
|
||||||
|
Petr Spacek <pspacek@redhat.com>
|
||||||
|
Rob Cutmore <robcutmore@gmail.com>
|
||||||
|
Satoshi Matsumoto <kaorimatz@gmail.com>
|
||||||
|
+ Stefan Bluhm <stefan.bluhm@clacee.eu>
|
||||||
|
Tomas Kasparek <tkasparek@redhat.com>
|
||||||
|
Vladan Kudlac <vladankudlac@gmail.com>
|
||||||
|
Will Woods <wwoods@redhat.com>
|
||||||
|
diff --git a/doc/api_sack.rst b/doc/api_sack.rst
|
||||||
|
index 79719878..ac843fc9 100644
|
||||||
|
--- a/doc/api_sack.rst
|
||||||
|
+++ b/doc/api_sack.rst
|
||||||
|
@@ -25,10 +25,22 @@
|
||||||
|
|
||||||
|
The package sack. Contains metadata information about all known packages, installed and available.
|
||||||
|
|
||||||
|
- .. method:: query()
|
||||||
|
+ .. method:: query(flags=hawkey.APPLY_EXCLUDES)
|
||||||
|
|
||||||
|
Return a :class:`Query<dnf.query.Query>` for querying packages contained in this sack.
|
||||||
|
|
||||||
|
+ :ref:`Package filtering <excluded_packages-label>` is applied when creating the query object. The behavior can be adapted using flags. Possible flags:
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ ============================== ===========================================================================
|
||||||
|
+ Flag Value meaning
|
||||||
|
+ ============================== ===========================================================================
|
||||||
|
+ hawkey.APPLY_EXCLUDES Apply all package filtering.
|
||||||
|
+ hawkey.IGNORE_EXCLUDES Ignore all package filtering.
|
||||||
|
+ hawkey.IGNORE_REGULAR_EXCLUDES Ignore regular excludes defined by configuration files or the command line.
|
||||||
|
+ hawkey.IGNORE_MODULAR_EXCLUDES Ignore modular filtering.
|
||||||
|
+ ============================== ===========================================================================
|
||||||
|
+
|
||||||
|
.. function:: rpmdb_sack(base)
|
||||||
|
|
||||||
|
Returns a new instance of sack containing only installed packages (@System repo). Useful to get list of the installed RPMs after transaction.
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
@ -0,0 +1,37 @@
|
|||||||
|
From 9bd0423e1e543ed5f83924ec61aa253eced24cf8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Marek Blaha <mblaha@redhat.com>
|
||||||
|
Date: Mon, 14 Mar 2022 09:49:52 +0100
|
||||||
|
Subject: [PATCH] Fix processing of download errors (RhBug: 2024527)
|
||||||
|
|
||||||
|
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
|
||||||
|
cache (e.g. using dnf-automatic).
|
||||||
|
|
||||||
|
The error string is taken from librepo target where it is stored
|
||||||
|
untranslated. Therefore we need to compare untranslated versions of the
|
||||||
|
string.
|
||||||
|
|
||||||
|
= changelog =
|
||||||
|
msg: Fix download errors handling in non-english locales
|
||||||
|
type: bugfix
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2024527
|
||||||
|
---
|
||||||
|
dnf/repo.py | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/dnf/repo.py b/dnf/repo.py
|
||||||
|
index 1822cf01..ec1a2537 100644
|
||||||
|
--- a/dnf/repo.py
|
||||||
|
+++ b/dnf/repo.py
|
||||||
|
@@ -108,7 +108,7 @@ def _download_payloads(payloads, drpm, fail_fast=True):
|
||||||
|
callbacks = tgt.getCallbacks()
|
||||||
|
payload = callbacks.package_pload
|
||||||
|
pkg = payload.pkg
|
||||||
|
- if err == _('Already downloaded'):
|
||||||
|
+ if err == 'Already downloaded':
|
||||||
|
errs._skipped.add(pkg)
|
||||||
|
continue
|
||||||
|
pkg.repo._repo.expire()
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
@ -0,0 +1,81 @@
|
|||||||
|
From 0da73ea1304005b796842d96679d6ea31cdeea3c Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
|
||||||
|
Date: Tue, 1 Mar 2022 12:42:23 +0100
|
||||||
|
Subject: [PATCH] Fix unittests that relied on checksum being at the end of
|
||||||
|
solvfiles
|
||||||
|
|
||||||
|
---
|
||||||
|
tests/test_fill_sack_from_repos_in_cache.py | 26 +++++++++++----------
|
||||||
|
1 file changed, 14 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/test_fill_sack_from_repos_in_cache.py b/tests/test_fill_sack_from_repos_in_cache.py
|
||||||
|
index a8de287c..30d02cfe 100644
|
||||||
|
--- a/tests/test_fill_sack_from_repos_in_cache.py
|
||||||
|
+++ b/tests/test_fill_sack_from_repos_in_cache.py
|
||||||
|
@@ -39,7 +39,7 @@ TEST_REPO_NAME = "test-repo"
|
||||||
|
|
||||||
|
|
||||||
|
class FillSackFromReposInCacheTest(unittest.TestCase):
|
||||||
|
- def _create_cache_for_repo(self, repopath, tmpdir):
|
||||||
|
+ def _create_cache_for_repo(self, repopath, tmpdir, repo_name=TEST_REPO_NAME):
|
||||||
|
conf = dnf.conf.MainConf()
|
||||||
|
conf.cachedir = os.path.join(tmpdir, "cache")
|
||||||
|
conf.installroot = tmpdir
|
||||||
|
@@ -49,7 +49,7 @@ class FillSackFromReposInCacheTest(unittest.TestCase):
|
||||||
|
|
||||||
|
base = dnf.Base(conf=conf)
|
||||||
|
|
||||||
|
- repoconf = dnf.repo.Repo(TEST_REPO_NAME, base.conf)
|
||||||
|
+ repoconf = dnf.repo.Repo(repo_name, base.conf)
|
||||||
|
repoconf.baseurl = repopath
|
||||||
|
repoconf.enable()
|
||||||
|
|
||||||
|
@@ -194,6 +194,8 @@ class FillSackFromReposInCacheTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_exception_with_checksum_mismatch_and_only_repomd(self):
|
||||||
|
self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/rpm"))
|
||||||
|
+ self._create_cache_for_repo(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/drpm"),
|
||||||
|
+ self.tmpdir, "drpm-repo")
|
||||||
|
|
||||||
|
# Remove xml metadata except repomd
|
||||||
|
# repomd.xml is not compressed and doesn't end with .gz
|
||||||
|
@@ -201,12 +203,11 @@ class FillSackFromReposInCacheTest(unittest.TestCase):
|
||||||
|
for f in repodata_without_repomd:
|
||||||
|
os.remove(f)
|
||||||
|
|
||||||
|
- # Modify checksum of solv file so it doesn't match with repomd
|
||||||
|
- solv = glob.glob(os.path.join(self.tmpdir, "cache/*.solv"))[0]
|
||||||
|
- with open(solv, "a") as opensolv:
|
||||||
|
- opensolv.write("appended text to change checksum")
|
||||||
|
+ # Replace solvfile of test-repo with solvfile from drpm-repo which has different data (different checksum)
|
||||||
|
+ shutil.move(os.path.join(self.tmpdir, "cache/drpm-repo.solv"),
|
||||||
|
+ os.path.join(self.tmpdir, "cache/test-repo.solv"))
|
||||||
|
|
||||||
|
- # Now we only have cache with solvx, modified solv file and just repomd
|
||||||
|
+ # Now we only have cache with solvx, mismatching solv file and just repomd
|
||||||
|
# Since we don't have original xml metadata we cannot regenerate solv -> fail (exception)
|
||||||
|
|
||||||
|
self.assertRaises(dnf.exceptions.RepoError,
|
||||||
|
@@ -214,13 +215,14 @@ class FillSackFromReposInCacheTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_checksum_mistmatch_regenerates_solv(self):
|
||||||
|
self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/rpm"))
|
||||||
|
+ self._create_cache_for_repo(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/drpm"),
|
||||||
|
+ self.tmpdir, "drpm-repo")
|
||||||
|
|
||||||
|
- # Modify checksum of solv file so it doesn't match with repomd
|
||||||
|
- solv = glob.glob(os.path.join(self.tmpdir, "cache/*.solv"))[0]
|
||||||
|
- with open(solv, "a") as opensolv:
|
||||||
|
- opensolv.write("appended text to change checksum")
|
||||||
|
+ # Replace solvfile of test-repo with solvfile from drpm-repo which has different data (different checksum)
|
||||||
|
+ shutil.move(os.path.join(self.tmpdir, "cache/drpm-repo.solv"),
|
||||||
|
+ os.path.join(self.tmpdir, "cache/test-repo.solv"))
|
||||||
|
|
||||||
|
- # Now we only have cache with solvx, modified solv file and xml metadata.
|
||||||
|
+ # Now we only have cache with solvx, mismatching solv file and xml metadata.
|
||||||
|
# Checksum mistmatch causes regeneration of solv file and repo works.
|
||||||
|
|
||||||
|
self.test_base.fill_sack_from_repos_in_cache(load_system_repo=False)
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
@ -0,0 +1,64 @@
|
|||||||
|
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>
|
||||||
|
Date: Thu, 17 Feb 2022 18:46:22 +0100
|
||||||
|
Subject: [PATCH] cli/commands/history: Fix history undo on a Reason Change
|
||||||
|
|
||||||
|
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
|
||||||
|
step, but that would need bigger code restructuring.
|
||||||
|
|
||||||
|
= changelog =
|
||||||
|
msg: Fix history undo on a Reason Change
|
||||||
|
type: bugfix
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2053014
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2010259
|
||||||
|
---
|
||||||
|
dnf.spec | 2 +-
|
||||||
|
dnf/cli/commands/history.py | 11 +++++++++++
|
||||||
|
2 files changed, 12 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/dnf.spec b/dnf.spec
|
||||||
|
index 02c8b577..36c3932e 100644
|
||||||
|
--- a/dnf.spec
|
||||||
|
+++ b/dnf.spec
|
||||||
|
@@ -2,7 +2,7 @@
|
||||||
|
%define __cmake_in_source_build 1
|
||||||
|
|
||||||
|
# default dependencies
|
||||||
|
-%global hawkey_version 0.61.1
|
||||||
|
+%global hawkey_version 0.66.0
|
||||||
|
%global libcomps_version 0.1.8
|
||||||
|
%global libmodulemd_version 2.9.3
|
||||||
|
%global rpm_version 4.14.0
|
||||||
|
diff --git a/dnf/cli/commands/history.py b/dnf/cli/commands/history.py
|
||||||
|
index 293d93fc..21d04a1a 100644
|
||||||
|
--- a/dnf/cli/commands/history.py
|
||||||
|
+++ b/dnf/cli/commands/history.py
|
||||||
|
@@ -223,6 +223,7 @@ class HistoryCommand(commands.Command):
|
||||||
|
"Reinstall": "Reinstalled",
|
||||||
|
"Obsoleted": "Install",
|
||||||
|
"Obsolete": "Obsoleted",
|
||||||
|
+ "Reason Change": "Reason Change",
|
||||||
|
}
|
||||||
|
|
||||||
|
data = serialize_transaction(trans)
|
||||||
|
@@ -235,6 +236,16 @@ class HistoryCommand(commands.Command):
|
||||||
|
if ti["action"] == "Install" and ti.get("reason", None) == "clean":
|
||||||
|
ti["reason"] = "dependency"
|
||||||
|
|
||||||
|
+ if ti["action"] == "Reason Change" and "nevra" in ti:
|
||||||
|
+ subj = hawkey.Subject(ti["nevra"])
|
||||||
|
+ nevra = subj.get_nevra_possibilities(forms=[hawkey.FORM_NEVRA])[0]
|
||||||
|
+ reason = self.output.history.swdb.resolveRPMTransactionItemReason(
|
||||||
|
+ nevra.name,
|
||||||
|
+ nevra.arch,
|
||||||
|
+ trans.tids()[0] - 1
|
||||||
|
+ )
|
||||||
|
+ ti["reason"] = libdnf.transaction.TransactionItemReasonToString(reason)
|
||||||
|
+
|
||||||
|
if ti.get("repo_id") == hawkey.SYSTEM_REPO_NAME:
|
||||||
|
# erase repo_id, because it's not possible to perform forward actions from the @System repo
|
||||||
|
ti["repo_id"] = None
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From 55f6691d5663c59b675064b04e19288365e92d24 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nicola Sella <nsella@redhat.com>
|
||||||
|
Date: Tue, 15 Mar 2022 16:26:10 +0100
|
||||||
|
Subject: [PATCH] Fix remove when no repos are enabled (RhBz:2064341)
|
||||||
|
|
||||||
|
msg: When no repositories are enabled, dnf group exits and does not
|
||||||
|
remove an installed group.
|
||||||
|
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2064341
|
||||||
|
type: bugfix
|
||||||
|
---
|
||||||
|
dnf/cli/commands/group.py | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/dnf/cli/commands/group.py b/dnf/cli/commands/group.py
|
||||||
|
index fd723c48..c5c23230 100644
|
||||||
|
--- a/dnf/cli/commands/group.py
|
||||||
|
+++ b/dnf/cli/commands/group.py
|
||||||
|
@@ -358,7 +358,8 @@ class GroupCommand(commands.Command):
|
||||||
|
else:
|
||||||
|
demands.available_repos = True
|
||||||
|
|
||||||
|
- commands._checkEnabledRepo(self.base)
|
||||||
|
+ if cmd not in ('remove'):
|
||||||
|
+ commands._checkEnabledRepo(self.base)
|
||||||
|
|
||||||
|
if cmd in ('install', 'upgrade'):
|
||||||
|
commands._checkGPGKey(self.base, self.cli)
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From 8f05ee29b7398fa6d18c7113a533f1d8726239df Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Rohel <jrohel@redhat.com>
|
||||||
|
Date: Tue, 12 Apr 2022 12:25:05 +0200
|
||||||
|
Subject: [PATCH] [doc] Improve "proxy" configuration option documentation
|
||||||
|
(RhBug:2072332)
|
||||||
|
|
||||||
|
---
|
||||||
|
doc/conf_ref.rst | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst
|
||||||
|
index 75bcdf75..885a4560 100644
|
||||||
|
--- a/doc/conf_ref.rst
|
||||||
|
+++ b/doc/conf_ref.rst
|
||||||
|
@@ -833,10 +833,10 @@ configuration.
|
||||||
|
``proxy``
|
||||||
|
:ref:`string <string-label>`
|
||||||
|
|
||||||
|
- URL of a proxy server to connect through. Set to an empty string to disable the proxy setting inherited from the main section and use direct connection instead. The expected format of this option is ``<scheme>://<ip-or-hostname>[:port]``.
|
||||||
|
+ URL of a proxy server to connect through. Set to an empty string in the repository configuration to disable proxy setting inherited from the main section. The expected format of this option is ``<scheme>://<ip-or-hostname>[:port]``.
|
||||||
|
(For backward compatibility, '_none_' can be used instead of the empty string.)
|
||||||
|
|
||||||
|
- Note: The curl environment variables (such as ``http_proxy``) are effective if this option is unset. See the ``curl`` man page for details.
|
||||||
|
+ Note: The curl environment variables (such as ``http_proxy``) are effective if this option is unset (or '_none_' is set in the repository configuration). See the ``curl`` man page for details.
|
||||||
|
|
||||||
|
``proxy_username``
|
||||||
|
:ref:`string <string-label>`
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
From 00f3016ec0d79186f08c2f0ebf450bdc3dab1311 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
|
||||||
|
Date: Thu, 23 Jun 2022 09:33:45 +0200
|
||||||
|
Subject: [PATCH] doc: Describe how gpg keys are stored for `repo_ggpcheck`
|
||||||
|
(RhBug:2020678)
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=2020678
|
||||||
|
---
|
||||||
|
doc/conf_ref.rst | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst
|
||||||
|
index 885a4560..decb49ff 100644
|
||||||
|
--- a/doc/conf_ref.rst
|
||||||
|
+++ b/doc/conf_ref.rst
|
||||||
|
@@ -906,6 +906,12 @@ configuration.
|
||||||
|
:ref:`boolean <boolean-label>`
|
||||||
|
|
||||||
|
Whether to perform GPG signature check on this repository's metadata. The default is False.
|
||||||
|
+ Note that GPG keys for this check are stored separately from GPG keys used in package signature
|
||||||
|
+ verification. Furthermore, they are also stored separately for each repository.
|
||||||
|
+
|
||||||
|
+ This means that dnf may ask to import the same key multiple times. For example, when a key was
|
||||||
|
+ already imported for package signature verification and this option is turned on, it may be needed
|
||||||
|
+ to import it again for the repository.
|
||||||
|
|
||||||
|
``retries``
|
||||||
|
:ref:`integer <integer-label>`
|
||||||
|
--
|
||||||
|
2.36.1
|
||||||
|
|
@ -0,0 +1,64 @@
|
|||||||
|
From 25bc75cbe63289864c09ab25144ee4af232bd8f4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
|
||||||
|
Date: Mon, 4 Jul 2022 09:43:25 +0200
|
||||||
|
Subject: [PATCH] Add only relevant pkgs to upgrade transaction (RhBug:2097757)
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=2097757
|
||||||
|
|
||||||
|
Without this patch dnf can create the following transaction during dnf upgrade --security when there is an advisory for B-2-2:
|
||||||
|
|
||||||
|
```
|
||||||
|
repo @System 0 testtags <inline>
|
||||||
|
#>=Pkg: A 1 1 x86_64
|
||||||
|
#>=Pkg: B 1 1 x86_64
|
||||||
|
#>=Req: A = 1-1
|
||||||
|
|
||||||
|
repo available 0 testtags <inline>
|
||||||
|
#>=Pkg: A 2 2 x86_64
|
||||||
|
#>=Pkg: B 2 2 x86_64
|
||||||
|
#>=Req: A = 2-2
|
||||||
|
system x86_64 rpm @System
|
||||||
|
job update oneof A-1-1.x86_64@@System B-2-2.x86_64@available [targeted,setevr,setarch]
|
||||||
|
result transaction,problems
|
||||||
|
```
|
||||||
|
|
||||||
|
Problem is that without forcebest nothing gets upgraded despite the available advisory and --security switch.
|
||||||
|
|
||||||
|
This can also be seen in CI test case: rpm-software-management/ci-dnf-stack#1130
|
||||||
|
---
|
||||||
|
dnf/base.py | 19 ++++++++++++++++++-
|
||||||
|
1 file changed, 18 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/dnf/base.py b/dnf/base.py
|
||||||
|
index 852fcdd8..82466831 100644
|
||||||
|
--- a/dnf/base.py
|
||||||
|
+++ b/dnf/base.py
|
||||||
|
@@ -2135,7 +2135,24 @@ class Base(object):
|
||||||
|
query.filterm(reponame=reponame)
|
||||||
|
query = self._merge_update_filters(query, pkg_spec=pkg_spec, upgrade=True)
|
||||||
|
if query:
|
||||||
|
- query = query.union(installed_query.latest())
|
||||||
|
+ # Given that we use libsolv's targeted transactions, we need to ensure that the transaction contains both
|
||||||
|
+ # the new targeted version and also the current installed version (for the upgraded package). This is
|
||||||
|
+ # because if it only contained the new version, libsolv would decide to reinstall the package even if it
|
||||||
|
+ # had just a different buildtime or vendor but the same version
|
||||||
|
+ # (https://github.com/openSUSE/libsolv/issues/287)
|
||||||
|
+ # - In general, the query already contains both the new and installed versions but not always.
|
||||||
|
+ # If repository-packages command is used, the installed packages are filtered out because they are from
|
||||||
|
+ # the @system repo. We need to add them back in.
|
||||||
|
+ # - However we need to add installed versions of just the packages that are being upgraded. We don't want
|
||||||
|
+ # to add all installed packages because it could increase the number of solutions for the transaction
|
||||||
|
+ # (especially without --best) and since libsolv prefers the smallest possible upgrade it could result
|
||||||
|
+ # in no upgrade even if there is one available. This is a problem in general but its critical with
|
||||||
|
+ # --security transactions (https://bugzilla.redhat.com/show_bug.cgi?id=2097757)
|
||||||
|
+ # - We want to add only the latest versions of installed packages, this is specifically for installonly
|
||||||
|
+ # packages. Otherwise if for example kernel-1 and kernel-3 were installed and present in the
|
||||||
|
+ # transaction libsolv could decide to install kernel-2 because it is an upgrade for kernel-1 even
|
||||||
|
+ # though we don't want it because there already is a newer version present.
|
||||||
|
+ query = query.union(installed_query.latest().filter(name=[pkg.name for pkg in query]))
|
||||||
|
sltr = dnf.selector.Selector(self.sack)
|
||||||
|
sltr.set(pkg=query)
|
||||||
|
self._goal.upgrade(select=sltr)
|
||||||
|
--
|
||||||
|
2.36.1
|
||||||
|
|
@ -0,0 +1,37 @@
|
|||||||
|
From fea1f456d3d5f3015ebcff4008959916bdaaf6d6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
|
||||||
|
Date: Mon, 4 Jul 2022 09:46:29 +0200
|
||||||
|
Subject: [PATCH] Use `installed_all` because `installed_query` is filtered
|
||||||
|
user input
|
||||||
|
|
||||||
|
`installed_query` could be missing packages. If we specify we want to
|
||||||
|
upgrade a specific nevra that is not yet installed, then `installed_query`
|
||||||
|
is empty because it is based on user input, but there could be other
|
||||||
|
versions of the pkg installed.
|
||||||
|
|
||||||
|
Eg: if kernel-1 and kernel-3 are installed and we specify we want to
|
||||||
|
upgrade kernel-2, nothing should be done because we already have higher
|
||||||
|
version, but now `installed_query` would be empty and kernel-2 would be
|
||||||
|
installed.
|
||||||
|
|
||||||
|
Therefore, we need to use `installed_all`.
|
||||||
|
---
|
||||||
|
dnf/base.py | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/dnf/base.py b/dnf/base.py
|
||||||
|
index 82466831..e606d9fa 100644
|
||||||
|
--- a/dnf/base.py
|
||||||
|
+++ b/dnf/base.py
|
||||||
|
@@ -2152,7 +2152,7 @@ class Base(object):
|
||||||
|
# packages. Otherwise if for example kernel-1 and kernel-3 were installed and present in the
|
||||||
|
# transaction libsolv could decide to install kernel-2 because it is an upgrade for kernel-1 even
|
||||||
|
# though we don't want it because there already is a newer version present.
|
||||||
|
- query = query.union(installed_query.latest().filter(name=[pkg.name for pkg in query]))
|
||||||
|
+ query = query.union(installed_all.latest().filter(name=[pkg.name for pkg in query]))
|
||||||
|
sltr = dnf.selector.Selector(self.sack)
|
||||||
|
sltr.set(pkg=query)
|
||||||
|
self._goal.upgrade(select=sltr)
|
||||||
|
--
|
||||||
|
2.36.1
|
||||||
|
|
@ -2,7 +2,7 @@
|
|||||||
%define __cmake_in_source_build 1
|
%define __cmake_in_source_build 1
|
||||||
|
|
||||||
# default dependencies
|
# default dependencies
|
||||||
%global hawkey_version 0.61.1
|
%global hawkey_version 0.63.0-8
|
||||||
%global libcomps_version 0.1.8
|
%global libcomps_version 0.1.8
|
||||||
%global libmodulemd_version 2.9.3
|
%global libmodulemd_version 2.9.3
|
||||||
%global rpm_version 4.14.2-35
|
%global rpm_version 4.14.2-35
|
||||||
@ -66,26 +66,42 @@ It supports RPMs, modules and comps groups & environments.
|
|||||||
|
|
||||||
Name: dnf
|
Name: dnf
|
||||||
Version: 4.7.0
|
Version: 4.7.0
|
||||||
Release: 8%{?dist}.alma
|
Release: 11%{?dist}.alma
|
||||||
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-Update-translations-RhBug-2017270.patch
|
Patch0010: 0010-Add-fail_fast-parameter-to-download_payloads-methods.patch
|
||||||
|
Patch0011: 0011-comps-Make-the-install_or_skip-method-not-catch-Comp.patch
|
||||||
|
Patch0012: 0012-doc-Improve-description-of-multilib_policy-all-RhBug.patch
|
||||||
|
Patch0013: 0013-Fix-Python-dnf-API-does-not-respect-cacheonly-RhBug-.patch
|
||||||
|
Patch0014: 0014-Documentation-API-notes-for-cacheonly.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
|
||||||
|
Patch0024: 0024-doc-Describe-how-gpg-keys-are-stored-for-repo_ggpche.patch
|
||||||
|
Patch0025: 0025-Add-only-relevant-pkgs-to-upgrade-transaction-RhBug-.patch
|
||||||
|
Patch0026: 0026-Use-installed_all-because-installed_query-is-filtere.patch
|
||||||
|
|
||||||
|
|
||||||
#Almalinux patches
|
#Almalinux patches
|
||||||
@ -389,11 +405,24 @@ popd
|
|||||||
%{python3_sitelib}/%{name}/automatic/
|
%{python3_sitelib}/%{name}/automatic/
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Tue May 10 2022 Eduard Abdullin <eabdullin@almalinux.org> - 4.7.0-8.alma
|
* Tue Nov 08 2022 Eduard Abdullin <eabdullin@almalinux.org> - 4.7.0-11.alma
|
||||||
- Added patch for almalinux bugtracker
|
- Added patch for almalinux bugtracker
|
||||||
|
|
||||||
* Fri Mar 18 2022 Marek Blaha <mblaha@redhat.com> - 4.7.0-8
|
* Tue Jul 19 2022 Lukas Hrazky <lhrazky@redhat.com> - 4.7.0-11
|
||||||
- Update translations
|
- [doc] Describe how gpg keys are stored for `repo_ggpcheck`
|
||||||
|
- Add only relevant pkgs to upgrade transaction (RhBug:2097757)
|
||||||
|
|
||||||
|
* 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
|
||||||
|
- Add documentation for query api flags
|
||||||
|
- Fix processing of download errors
|
||||||
|
- Fix history undo on a Reason Change
|
||||||
|
- Fix remove when no repos are enabled
|
||||||
|
- Improve "proxy" configuration option documentation
|
||||||
|
|
||||||
* Fri Jan 14 2022 Pavla Kratochvilova <pkratoch@redhat.com> - 4.7.0-7
|
* Fri Jan 14 2022 Pavla Kratochvilova <pkratoch@redhat.com> - 4.7.0-7
|
||||||
- Rebuild with new release number
|
- Rebuild with new release number
|
||||||
|
Loading…
Reference in New Issue
Block a user