!232 [sync] PR-231: dnf:Limit queries to nevra forms when provided by command and Update the man page entry for the countme option
From: @openeuler-sync-bot Reviewed-by: @t_feng Signed-off-by: @t_feng
This commit is contained in:
commit
b5ea1fc594
@ -0,0 +1,130 @@
|
||||
From 0a11bd268ecfaa0bacf012f2ed2ee292700a02aa Mon Sep 17 00:00:00 2001
|
||||
From: Jaroslav Mracek <jmracek@redhat.com>
|
||||
Date: Wed, 22 May 2024 11:09:34 +0200
|
||||
Subject: [PATCH] Limit queries to nevra forms when provided by command
|
||||
|
||||
Command `dnf install-n <provide>` does not install only according
|
||||
to package mame but still search in provides. The patch limits
|
||||
searrch only to NEVRA forms for install, remove, autoremove,
|
||||
and repoquery commands.
|
||||
|
||||
Resolves partially: https://issues.redhat.com/browse/RHEL-5747
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/rpm-software-management/dnf/commit/0a11bd268ecfaa0bacf012f2ed2ee292700a02aa
|
||||
---
|
||||
dnf/base.py | 14 ++++++++++++--
|
||||
dnf/cli/commands/repoquery.py | 5 +++--
|
||||
doc/api_base.rst | 6 +++++-
|
||||
doc/command_ref.rst | 7 +++++--
|
||||
4 files changed, 25 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/dnf/base.py b/dnf/base.py
|
||||
index a6b3574686..dac3cefd7a 100644
|
||||
--- a/dnf/base.py
|
||||
+++ b/dnf/base.py
|
||||
@@ -2064,9 +2064,14 @@ def install_specs(self, install, exclude=None, reponame=None, strict=True, forms
|
||||
def install(self, pkg_spec, reponame=None, strict=True, forms=None):
|
||||
# :api
|
||||
"""Mark package(s) given by pkg_spec and reponame for installation."""
|
||||
+ kwargs = {'forms': forms, 'with_src': False}
|
||||
+ if forms:
|
||||
+ kwargs['with_nevra'] = True
|
||||
+ kwargs['with_provides'] = False
|
||||
+ kwargs['with_filenames'] = False
|
||||
|
||||
subj = dnf.subject.Subject(pkg_spec)
|
||||
- solution = subj.get_best_solution(self.sack, forms=forms, with_src=False)
|
||||
+ solution = subj.get_best_solution(self.sack, **kwargs)
|
||||
|
||||
if self.conf.multilib_policy == "all" or subj._is_arch_specified(solution):
|
||||
q = solution['query']
|
||||
@@ -2306,8 +2311,13 @@ def autoremove(self, forms=None, pkg_specs=None, grp_specs=None, filenames=None)
|
||||
def remove(self, pkg_spec, reponame=None, forms=None):
|
||||
# :api
|
||||
"""Mark the specified package for removal."""
|
||||
+ kwargs = {'forms': forms}
|
||||
+ if forms:
|
||||
+ kwargs['with_nevra'] = True
|
||||
+ kwargs['with_provides'] = False
|
||||
+ kwargs['with_filenames'] = False
|
||||
|
||||
- matches = dnf.subject.Subject(pkg_spec).get_best_query(self.sack, forms=forms)
|
||||
+ matches = dnf.subject.Subject(pkg_spec).get_best_query(self.sack, **kwargs)
|
||||
installed = [
|
||||
pkg for pkg in matches.installed()
|
||||
if reponame is None or
|
||||
diff --git a/dnf/cli/commands/repoquery.py b/dnf/cli/commands/repoquery.py
|
||||
index 83b52a8abe..41dd688eac 100644
|
||||
--- a/dnf/cli/commands/repoquery.py
|
||||
+++ b/dnf/cli/commands/repoquery.py
|
||||
@@ -461,9 +461,10 @@ def run(self):
|
||||
if self.opts.key:
|
||||
remote_packages = self._add_add_remote_packages()
|
||||
|
||||
- kwark = {}
|
||||
+ kwark = {'with_provides': False}
|
||||
if self.opts.command in self.nevra_forms:
|
||||
kwark["forms"] = [self.nevra_forms[self.opts.command]]
|
||||
+ kwark['with_filenames'] = False
|
||||
pkgs = []
|
||||
query_results = q.filter(empty=True)
|
||||
|
||||
@@ -474,7 +475,7 @@ def run(self):
|
||||
for key in self.opts.key:
|
||||
query_results = query_results.union(
|
||||
dnf.subject.Subject(key, ignore_case=True).get_best_query(
|
||||
- self.base.sack, with_provides=False, query=q, **kwark))
|
||||
+ self.base.sack, query=q, **kwark))
|
||||
q = query_results
|
||||
|
||||
if self.opts.recent:
|
||||
diff --git a/doc/api_base.rst b/doc/api_base.rst
|
||||
index 389b28ec6f..95d2d57049 100644
|
||||
--- a/doc/api_base.rst
|
||||
+++ b/doc/api_base.rst
|
||||
@@ -280,7 +280,11 @@
|
||||
.. method:: install(pkg_spec, reponame=None, strict=True, forms=None)
|
||||
|
||||
Mark packages matching `pkg_spec` for installation.
|
||||
- `reponame` can be a name of a repository or a list of repository names. If given, the selection of available packages is limited to packages from these repositories. If strict is set to False, the installation ignores packages with dependency solving problems. Parameter `forms` has the same meaning as in :meth:`dnf.subject.Subject.get_best_query`.
|
||||
+ `reponame` can be a name of a repository or a list of repository names. If given, the selection of available
|
||||
+ packages is limited to packages from these repositories. If strict is set to False, the installation ignores
|
||||
+ packages with dependency solving problems. Parameter `forms` is list of pattern forms from `hawkey`_.
|
||||
+ Leaving the parameter to ``None`` results in using a reasonable default list of forms. When forms is specified,
|
||||
+ method will not match `pkg_spec` with provides and file provides.
|
||||
|
||||
.. method:: package_downgrade(pkg, strict=False)
|
||||
|
||||
diff --git a/doc/command_ref.rst b/doc/command_ref.rst
|
||||
index 25431ca1c7..5fba2ebfa5 100644
|
||||
--- a/doc/command_ref.rst
|
||||
+++ b/doc/command_ref.rst
|
||||
@@ -857,7 +857,8 @@ Install Command
|
||||
are considered correct, the resulting package is picked simply by lexicographical order.
|
||||
|
||||
There are also a few specific install commands ``install-n``, ``install-na`` and
|
||||
- ``install-nevra`` that allow the specification of an exact argument in the NEVRA format.
|
||||
+ ``install-nevra`` that allow the specification of an exact argument in the NEVRA format. As a consequence, <spec>
|
||||
+ will be not matched with provides and file provides.
|
||||
|
||||
See also :ref:`\configuration_files_replacement_policy-label`.
|
||||
|
||||
@@ -1191,7 +1192,8 @@ Remove Command
|
||||
Removes old installonly packages, keeping only latest versions and version of running kernel.
|
||||
|
||||
There are also a few specific remove commands ``remove-n``, ``remove-na`` and ``remove-nevra``
|
||||
- that allow the specification of an exact argument in the NEVRA format.
|
||||
+ that allow the specification of an exact argument in the NEVRA format. As a consequence, <spec>
|
||||
+ will be not matched with provides and file provides.
|
||||
|
||||
Remove Examples
|
||||
---------------
|
||||
@@ -1255,6 +1257,7 @@ Repoquery Command
|
||||
|
||||
There are also a few specific repoquery commands ``repoquery-n``, ``repoquery-na`` and ``repoquery-nevra``
|
||||
that allow the specification of an exact argument in the NEVRA format (does not affect arguments of options like --whatprovides <arg>, ...).
|
||||
+ As a consequence, <spec> will be not matched with file provides.
|
||||
|
||||
Select Options
|
||||
--------------
|
||||
@ -0,0 +1,86 @@
|
||||
From a8c77bb0d8fe58e48b3b22e21e2cd495d1d6ec15 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Domonkos <mdomonko@redhat.com>
|
||||
Date: Wed, 8 May 2024 15:13:38 +0200
|
||||
Subject: [PATCH] Update the man page entry for the countme option
|
||||
|
||||
Make it a bit more explanatory, format the age buckets as a table and
|
||||
reflect the changes from the libdnf PR #1662.
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/rpm-software-management/dnf/commit/a8c77bb0d8fe58e48b3b22e21e2cd495d1d6ec15
|
||||
---
|
||||
doc/conf_ref.rst | 61 ++++++++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 44 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst
|
||||
index 240b35f967..f52a4acd80 100644
|
||||
--- a/doc/conf_ref.rst
|
||||
+++ b/doc/conf_ref.rst
|
||||
@@ -858,23 +858,50 @@ configuration.
|
||||
``countme``
|
||||
:ref:`boolean <boolean-label>`
|
||||
|
||||
- Determines whether a special flag should be added to a single, randomly
|
||||
- chosen metalink/mirrorlist query each week.
|
||||
- This allows the repository owner to estimate the number of systems
|
||||
- consuming it, by counting such queries over a week's time, which is much
|
||||
- more accurate than just counting unique IP addresses (which is subject to
|
||||
- both overcounting and undercounting due to short DHCP leases and NAT,
|
||||
- respectively).
|
||||
-
|
||||
- The flag is a simple "countme=N" parameter appended to the metalink and
|
||||
- mirrorlist URL, where N is an integer representing the "longevity" bucket
|
||||
- this system belongs to.
|
||||
- The following 4 buckets are defined, based on how many full weeks have
|
||||
- passed since the beginning of the week when this system was installed: 1 =
|
||||
- first week, 2 = first month (2-4 weeks), 3 = six months (5-24 weeks) and 4
|
||||
- = more than six months (> 24 weeks).
|
||||
- This information is meant to help distinguish short-lived installs from
|
||||
- long-term ones, and to gather other statistics about system lifecycle.
|
||||
+ When enabled, one (and only one) HTTP GET request for the metalink file
|
||||
+ will be selected at random every week to carry a special URL flag.
|
||||
+
|
||||
+ This flag allows the repository provider to estimate the number of systems
|
||||
+ consuming the repository, by counting such requests over a week's time.
|
||||
+ This method is more accurate than just counting unique IP addresses (which
|
||||
+ is subject to both overcounting and undercounting due to short DHCP leases
|
||||
+ and NAT, respectively).
|
||||
+
|
||||
+ This is *not* an out-of-band HTTP request made for this purpose alone.
|
||||
+ Only requests initiated by DNF during normal operation, such as to check
|
||||
+ for metadata updates, can get this flag.
|
||||
+
|
||||
+ The flag is a simple "countme=N" parameter appended to the metalink URL
|
||||
+ where N is an integer representing the age "bucket" this system belongs to.
|
||||
+ Four buckets are defined, based on how many full weeks have passed since
|
||||
+ the installation of a system:
|
||||
+
|
||||
+ ====== ===============================
|
||||
+ bucket system age
|
||||
+ ====== ===============================
|
||||
+ 1 first week
|
||||
+ 2 first month (2 - 4 weeks)
|
||||
+ 3 first 6 months (5 - 24 weeks)
|
||||
+ 4 more than 6 months (> 24 weeks)
|
||||
+ ====== ===============================
|
||||
+
|
||||
+ This number is meant to help distinguish short-lived (throwaway) machines
|
||||
+ from long-term installs and get a better picture of how systems are used
|
||||
+ over time.
|
||||
+
|
||||
+ To determine a system's installation time ("epoch"), the ``machine-id(5)``
|
||||
+ file's modification time is used as the single source of truth. This file
|
||||
+ is semantically tied to the system's lifetime as it's typically populated
|
||||
+ at installation time or during the first boot by an installer tool or init
|
||||
+ system (such as ``systemd(1)``), respectively, and remains unchanged.
|
||||
+
|
||||
+ If the file is empty or missing (such as in containers), the time of the
|
||||
+ very first request made using the expanded metalink URL (i.e. with any
|
||||
+ repository variables such as ``$releasever`` substituted) that carried the
|
||||
+ flag is declared as the epoch.
|
||||
+
|
||||
+ If no metalink URL is defined for this repository but a mirrorlist URL is,
|
||||
+ the latter is used for this purpose instead.
|
||||
|
||||
Default is False.
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
From c640ec0ef6a6b38fdd549e4a18266e0f70749576 Mon Sep 17 00:00:00 2001
|
||||
From: Jaroslav Mracek <jmracek@redhat.com>
|
||||
Date: Thu, 23 May 2024 11:25:29 +0200
|
||||
Subject: [PATCH] [doc] Remove provide of spec definition for repoquery command
|
||||
|
||||
Repoquery command never matched spec with provides.
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/rpm-software-management/dnf/commit/c640ec0ef6a6b38fdd549e4a18266e0f70749576
|
||||
---
|
||||
doc/command_ref.rst | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/doc/command_ref.rst b/doc/command_ref.rst
|
||||
index 5fba2ebfa5..5684b06119 100644
|
||||
--- a/doc/command_ref.rst
|
||||
+++ b/doc/command_ref.rst
|
||||
@@ -1266,7 +1266,7 @@ Together with ``<package-file-spec>``, control what packages are displayed in th
|
||||
packages to those matching the specification. All packages are considered if no ``<package-file-spec>`` is specified.
|
||||
|
||||
``<package-file-spec>``
|
||||
- Package specification in the NEVRA format (name[-[epoch:]version[-release]][.arch]), a package provide or a file provide. See :ref:`Specifying Packages
|
||||
+ Package specification in the NEVRA format (name[-[epoch:]version[-release]][.arch]) or a file provide. See :ref:`Specifying Packages
|
||||
<specifying_packages-label>`.
|
||||
|
||||
``-a``, ``--all``
|
||||
8
dnf.spec
8
dnf.spec
@ -3,7 +3,7 @@
|
||||
|
||||
Name: dnf
|
||||
Version: 4.16.2
|
||||
Release: 4
|
||||
Release: 5
|
||||
Summary: A software package manager that manages packages on Linux distributions.
|
||||
License: GPL-2.0-or-later AND GPL-1.0-only
|
||||
URL: https://github.com/rpm-software-management/dnf
|
||||
@ -28,6 +28,9 @@ Patch6002: backport-Fix-bash-completion-due-to-sqlite-changes.patch
|
||||
Patch6003: backport-remove-duplicates-when-no-duplicates-exit-with-0.patch
|
||||
Patch6004: backport-remove-oldinstallonly-when-no-old-installonly-packages-exit-with-0.patch
|
||||
Patch6005: backport-Add-all-candidates-for-reinstall-to-solver.patch
|
||||
Patch6006: backport-Limit-queries-to-nevra-forms-when-provided-by-command.patch
|
||||
Patch6007: backport-doc-Remove-provide-of-spec-definition-for-repoquery-command.patch
|
||||
Patch6008: backport-Update-the-man-page-entry-for-the-countme-option.patch
|
||||
|
||||
BuildArch: noarch
|
||||
BuildRequires: cmake gettext systemd bash-completion python3-sphinx
|
||||
@ -255,6 +258,9 @@ popd
|
||||
%{_mandir}/man8/%{name}-automatic.8*
|
||||
|
||||
%changelog
|
||||
* Thu Jul 25 2024 LuWu <2398491106@qq.com> - 4.16.2-5
|
||||
- Limit queries to nevra forms when provided by command and Update the man page entry for the countme option
|
||||
|
||||
* Mon May 6 2024 hanhuihui <hanhuihui5@huawei.com> - 4.16.2-4
|
||||
- Type:bugfix
|
||||
- CVE:NA
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user