forked from rpms/dnf-plugins-core
import dnf-plugins-core-4.0.17-5.el8
This commit is contained in:
parent
3a66ff9d7d
commit
cd6f9b2bb5
@ -1 +1 @@
|
|||||||
5618d7b20c37876e97e4e508952229835a430281 SOURCES/dnf-plugins-core-4.0.12.tar.gz
|
f938708df18862c3e31e2b9d49e5c9b322d79897 SOURCES/dnf-plugins-core-4.0.17.tar.gz
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/dnf-plugins-core-4.0.12.tar.gz
|
SOURCES/dnf-plugins-core-4.0.17.tar.gz
|
||||||
|
@ -1,72 +0,0 @@
|
|||||||
From 8a9d9b7c09fb126baac22eda8ebb940412f4464c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Marek Blaha <mblaha@redhat.com>
|
|
||||||
Date: Wed, 27 Nov 2019 13:43:58 +0100
|
|
||||||
Subject: [PATCH] [reposync] Fix --delete with multiple repos (RhBug:1774103)
|
|
||||||
|
|
||||||
When reposync was used with --delete option and multiple repositories
|
|
||||||
to sync, only packages from the latest repository were kept and all
|
|
||||||
downloaded content from former repositories was imediately deleted.
|
|
||||||
|
|
||||||
Additionaly it fixes the problem with multiple packages having the same
|
|
||||||
filename (in different subdirectories) in one repository. In this case
|
|
||||||
when --delete option was used, only one of those files was kept and the
|
|
||||||
others were deleted.
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1774103
|
|
||||||
---
|
|
||||||
plugins/reposync.py | 35 +++++++++++++++--------------------
|
|
||||||
1 file changed, 15 insertions(+), 20 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/reposync.py b/plugins/reposync.py
|
|
||||||
index 10e9b0b5..fc612a7e 100644
|
|
||||||
--- a/plugins/reposync.py
|
|
||||||
+++ b/plugins/reposync.py
|
|
||||||
@@ -145,7 +145,7 @@ def run(self):
|
|
||||||
else:
|
|
||||||
self.download_packages(pkglist)
|
|
||||||
if self.opts.delete:
|
|
||||||
- self.delete_old_local_packages(pkglist)
|
|
||||||
+ self.delete_old_local_packages(repo, pkglist)
|
|
||||||
|
|
||||||
def repo_target(self, repo):
|
|
||||||
return _pkgdir(self.opts.destdir or self.opts.download_path, repo.id)
|
|
||||||
@@ -169,25 +169,20 @@ def pkg_download_path(self, pkg):
|
|
||||||
pkg_download_path, repo_target))
|
|
||||||
return pkg_download_path
|
|
||||||
|
|
||||||
- def delete_old_local_packages(self, packages_to_download):
|
|
||||||
- download_map = dict()
|
|
||||||
- for pkg in packages_to_download:
|
|
||||||
- download_map[(pkg.repo.id, os.path.basename(pkg.location))] = pkg.location
|
|
||||||
- # delete any *.rpm file, that is not going to be downloaded from repository
|
|
||||||
- for repo in self.base.repos.iter_enabled():
|
|
||||||
- repo_target = self.repo_target(repo)
|
|
||||||
- for dirpath, dirnames, filenames in os.walk(repo_target):
|
|
||||||
- for filename in filenames:
|
|
||||||
- path = os.path.join(dirpath, filename)
|
|
||||||
- if filename.endswith('.rpm') and os.path.isfile(path):
|
|
||||||
- location = download_map.get((repo.id, filename))
|
|
||||||
- if location is None or os.path.join(repo_target, location) != path:
|
|
||||||
- # Delete disappeared or relocated file
|
|
||||||
- try:
|
|
||||||
- os.unlink(path)
|
|
||||||
- logger.info(_("[DELETED] %s"), path)
|
|
||||||
- except OSError:
|
|
||||||
- logger.error(_("failed to delete file %s"), path)
|
|
||||||
+ def delete_old_local_packages(self, repo, pkglist):
|
|
||||||
+ # delete any *.rpm file under target path, that was not downloaded from repository
|
|
||||||
+ downloaded_files = set(self.pkg_download_path(pkg) for pkg in pkglist)
|
|
||||||
+ for dirpath, dirnames, filenames in os.walk(self.repo_target(repo)):
|
|
||||||
+ for filename in filenames:
|
|
||||||
+ path = os.path.join(dirpath, filename)
|
|
||||||
+ if filename.endswith('.rpm') and os.path.isfile(path):
|
|
||||||
+ if path not in downloaded_files:
|
|
||||||
+ # Delete disappeared or relocated file
|
|
||||||
+ try:
|
|
||||||
+ os.unlink(path)
|
|
||||||
+ logger.info(_("[DELETED] %s"), path)
|
|
||||||
+ except OSError:
|
|
||||||
+ logger.error(_("failed to delete file %s"), path)
|
|
||||||
|
|
||||||
def getcomps(self, repo):
|
|
||||||
comps_fn = repo._repo.getCompsFn()
|
|
@ -0,0 +1,62 @@
|
|||||||
|
From aa1f12be109a2d997eeb1c1cce22beb09dd21d04 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nicola Sella <nsella@redhat.com>
|
||||||
|
Date: Thu, 11 Jun 2020 09:32:17 +0200
|
||||||
|
Subject: [PATCH 1/2] [needs-restarting] Fix plugin fail if needs-restarting.d
|
||||||
|
does not exist
|
||||||
|
|
||||||
|
includes pep8 warning fix and string formatting space missing
|
||||||
|
---
|
||||||
|
plugins/needs_restarting.py | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/plugins/needs_restarting.py b/plugins/needs_restarting.py
|
||||||
|
index 91f7e116..6b7dacb6 100644
|
||||||
|
--- a/plugins/needs_restarting.py
|
||||||
|
+++ b/plugins/needs_restarting.py
|
||||||
|
@@ -46,6 +46,8 @@ def get_options_from_dir(filepath, base):
|
||||||
|
Return set of package names contained in files under filepath
|
||||||
|
"""
|
||||||
|
|
||||||
|
+ if not os.path.exists(filepath):
|
||||||
|
+ return set()
|
||||||
|
options = set()
|
||||||
|
for file in os.listdir(filepath):
|
||||||
|
if os.path.isdir(file) or not file.endswith('.conf'):
|
||||||
|
@@ -58,9 +60,9 @@ def get_options_from_dir(filepath, base):
|
||||||
|
packages = set()
|
||||||
|
for pkg in base.sack.query().installed().filter(name={x[0] for x in options}):
|
||||||
|
packages.add(pkg.name)
|
||||||
|
- for name, file in {x for x in options if x[0] not in packages }:
|
||||||
|
+ for name, file in {x for x in options if x[0] not in packages}:
|
||||||
|
logger.warning(
|
||||||
|
- _('No installed package found for package name "{pkg}"'
|
||||||
|
+ _('No installed package found for package name "{pkg}" '
|
||||||
|
'specified in needs-restarting file "{file}".'.format(pkg=name, file=file)))
|
||||||
|
return packages
|
||||||
|
|
||||||
|
|
||||||
|
From 57955d299f751cb9927fe501fa086d9153092532 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nicola Sella <nsella@redhat.com>
|
||||||
|
Date: Thu, 11 Jun 2020 10:53:54 +0200
|
||||||
|
Subject: [PATCH 2/2] [needs-restarting] add kernel-rt to reboot list
|
||||||
|
|
||||||
|
BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1806060
|
||||||
|
---
|
||||||
|
plugins/needs_restarting.py | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/plugins/needs_restarting.py b/plugins/needs_restarting.py
|
||||||
|
index 6b7dacb6..69203f4d 100644
|
||||||
|
--- a/plugins/needs_restarting.py
|
||||||
|
+++ b/plugins/needs_restarting.py
|
||||||
|
@@ -37,8 +37,8 @@
|
||||||
|
|
||||||
|
# For which package updates we should recommend a reboot
|
||||||
|
# Mostly taken from https://access.redhat.com/solutions/27943
|
||||||
|
-NEED_REBOOT = ['kernel', 'glibc', 'linux-firmware', 'systemd', 'dbus',
|
||||||
|
- 'dbus-broker', 'dbus-daemon']
|
||||||
|
+NEED_REBOOT = ['kernel', 'kernel-rt', 'glibc', 'linux-firmware',
|
||||||
|
+ 'systemd', 'dbus', 'dbus-broker', 'dbus-daemon']
|
||||||
|
|
||||||
|
def get_options_from_dir(filepath, base):
|
||||||
|
"""
|
159
SOURCES/0002-Fix-debug-restore-command-RhBug-1844533.patch
Normal file
159
SOURCES/0002-Fix-debug-restore-command-RhBug-1844533.patch
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
From b94763c7f52dbbcc9920b4216d53fd8109e434c9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Marek Blaha <mblaha@redhat.com>
|
||||||
|
Date: Wed, 17 Jun 2020 15:49:50 +0200
|
||||||
|
Subject: [PATCH] Fix debug-restore command
|
||||||
|
|
||||||
|
- correctly work with install-only packages (BZ#1844533)
|
||||||
|
- do not remove current versions of packages that are supposed to be
|
||||||
|
replaced (downgraded / upgraded)
|
||||||
|
---
|
||||||
|
plugins/debug.py | 108 ++++++++++++++++++++++++-----------------------
|
||||||
|
1 file changed, 56 insertions(+), 52 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/plugins/debug.py b/plugins/debug.py
|
||||||
|
index 6d00613d..29c5bf78 100644
|
||||||
|
--- a/plugins/debug.py
|
||||||
|
+++ b/plugins/debug.py
|
||||||
|
@@ -201,10 +201,9 @@ def run(self):
|
||||||
|
self.opts.filter_types = set(
|
||||||
|
self.opts.filter_types.replace(",", " ").split())
|
||||||
|
|
||||||
|
- installed = self.base.sack.query().installed()
|
||||||
|
dump_pkgs = self.read_dump_file(self.opts.filename[0])
|
||||||
|
|
||||||
|
- self.process_installed(installed, dump_pkgs, self.opts)
|
||||||
|
+ self.process_installed(dump_pkgs, self.opts)
|
||||||
|
|
||||||
|
self.process_dump(dump_pkgs, self.opts)
|
||||||
|
|
||||||
|
@@ -212,56 +211,63 @@ def run(self):
|
||||||
|
self.base.resolve()
|
||||||
|
self.base.do_transaction()
|
||||||
|
|
||||||
|
- def process_installed(self, installed, dump_pkgs, opts):
|
||||||
|
- for pkg in sorted(installed):
|
||||||
|
- filtered = False
|
||||||
|
+ def process_installed(self, dump_pkgs, opts):
|
||||||
|
+ installed = self.base.sack.query().installed()
|
||||||
|
+ installonly_pkgs = self.base._get_installonly_query(installed)
|
||||||
|
+ for pkg in installed:
|
||||||
|
+ pkg_remove = False
|
||||||
|
spec = pkgspec(pkg)
|
||||||
|
- action, dn, da, de, dv, dr = dump_pkgs.get((pkg.name, pkg.arch),
|
||||||
|
- [None, None, None,
|
||||||
|
- None, None, None])
|
||||||
|
- dump_naevr = (dn, da, de, dv, dr)
|
||||||
|
- if pkg.pkgtup == dump_naevr:
|
||||||
|
- # package unchanged
|
||||||
|
- del dump_pkgs[(pkg.name, pkg.arch)]
|
||||||
|
- else:
|
||||||
|
- if action == "install":
|
||||||
|
- # already have some version
|
||||||
|
- dump_pkgs[(pkg.name, pkg.arch)][0] = "replace"
|
||||||
|
- if "replace" not in opts.filter_types:
|
||||||
|
- filtered = True
|
||||||
|
+ dumped_versions = dump_pkgs.get((pkg.name, pkg.arch), None)
|
||||||
|
+ if dumped_versions is not None:
|
||||||
|
+ evr = (pkg.epoch, pkg.version, pkg.release)
|
||||||
|
+ if evr in dumped_versions:
|
||||||
|
+ # the correct version is already installed
|
||||||
|
+ dumped_versions[evr] = 'skip'
|
||||||
|
else:
|
||||||
|
- if "remove" not in opts.filter_types:
|
||||||
|
- filtered = True
|
||||||
|
- if not filtered:
|
||||||
|
- if opts.output:
|
||||||
|
- print("remove %s" % spec)
|
||||||
|
+ # other version is currently installed
|
||||||
|
+ if pkg in installonly_pkgs:
|
||||||
|
+ # package is install-only, should be removed
|
||||||
|
+ pkg_remove = True
|
||||||
|
else:
|
||||||
|
- self.base.package_remove(pkg)
|
||||||
|
-
|
||||||
|
- def process_dump(self, dump_pkgs, opts):
|
||||||
|
- for (action, n, a, e, v, r) in sorted(dump_pkgs.values()):
|
||||||
|
- filtered = False
|
||||||
|
- if opts.ignore_arch:
|
||||||
|
- arch = ""
|
||||||
|
- else:
|
||||||
|
- arch = "." + a
|
||||||
|
- if opts.install_latest and action == "install":
|
||||||
|
- pkg_spec = "%s%s" % (n, arch)
|
||||||
|
- if "install" not in opts.filter_types:
|
||||||
|
- filtered = True
|
||||||
|
+ # package should be upgraded / downgraded
|
||||||
|
+ if "replace" in opts.filter_types:
|
||||||
|
+ action = 'replace'
|
||||||
|
+ else:
|
||||||
|
+ action = 'skip'
|
||||||
|
+ for d_evr in dumped_versions.keys():
|
||||||
|
+ dumped_versions[d_evr] = action
|
||||||
|
else:
|
||||||
|
- pkg_spec = pkgtup2spec(n, arch, e, v, r)
|
||||||
|
- if (action == "replace" and
|
||||||
|
- "replace" not in opts.filter_types):
|
||||||
|
- filtered = True
|
||||||
|
- if not filtered:
|
||||||
|
+ # package should not be installed
|
||||||
|
+ pkg_remove = True
|
||||||
|
+ if pkg_remove and "remove" in opts.filter_types:
|
||||||
|
if opts.output:
|
||||||
|
- print("install %s" % pkg_spec)
|
||||||
|
+ print("remove %s" % spec)
|
||||||
|
else:
|
||||||
|
- try:
|
||||||
|
- self.base.install(pkg_spec)
|
||||||
|
- except dnf.exceptions.MarkingError:
|
||||||
|
- logger.error(_("Package %s is not available"), pkg_spec)
|
||||||
|
+ self.base.package_remove(pkg)
|
||||||
|
+
|
||||||
|
+ def process_dump(self, dump_pkgs, opts):
|
||||||
|
+ for (n, a) in sorted(dump_pkgs.keys()):
|
||||||
|
+ dumped_versions = dump_pkgs[(n, a)]
|
||||||
|
+ for (e, v, r) in sorted(dumped_versions.keys()):
|
||||||
|
+ action = dumped_versions[(e, v, r)]
|
||||||
|
+ if action == 'skip':
|
||||||
|
+ continue
|
||||||
|
+ if opts.ignore_arch:
|
||||||
|
+ arch = ""
|
||||||
|
+ else:
|
||||||
|
+ arch = "." + a
|
||||||
|
+ if opts.install_latest and action == "install":
|
||||||
|
+ pkg_spec = "%s%s" % (n, arch)
|
||||||
|
+ else:
|
||||||
|
+ pkg_spec = pkgtup2spec(n, arch, e, v, r)
|
||||||
|
+ if action in opts.filter_types:
|
||||||
|
+ if opts.output:
|
||||||
|
+ print("%s %s" % (action, pkg_spec))
|
||||||
|
+ else:
|
||||||
|
+ try:
|
||||||
|
+ self.base.install(pkg_spec)
|
||||||
|
+ except dnf.exceptions.MarkingError:
|
||||||
|
+ logger.error(_("Package %s is not available"), pkg_spec)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def read_dump_file(filename):
|
||||||
|
@@ -288,11 +294,9 @@ def read_dump_file(filename):
|
||||||
|
|
||||||
|
pkg_spec = line.strip()
|
||||||
|
nevra = hawkey.split_nevra(pkg_spec)
|
||||||
|
- pkgs[(nevra.name, nevra.arch)] = ["install", ucd(nevra.name),
|
||||||
|
- ucd(nevra.arch),
|
||||||
|
- ucd(nevra.epoch),
|
||||||
|
- ucd(nevra.version),
|
||||||
|
- ucd(nevra.release)]
|
||||||
|
+ # {(name, arch): {(epoch, version, release): action}}
|
||||||
|
+ pkgs.setdefault((nevra.name, nevra.arch), {})[
|
||||||
|
+ (nevra.epoch, nevra.version, nevra.release)] = "install"
|
||||||
|
|
||||||
|
return pkgs
|
||||||
|
|
||||||
|
@@ -321,6 +325,6 @@ def pkgspec(pkg):
|
||||||
|
|
||||||
|
|
||||||
|
def pkgtup2spec(name, arch, epoch, version, release):
|
||||||
|
- a = "" if not arch else ".%s" % arch
|
||||||
|
+ a = "" if not arch else ".%s" % arch.lstrip('.')
|
||||||
|
e = "" if epoch in (None, "") else "%s:" % epoch
|
||||||
|
return "%s-%s%s-%s%s" % (name, e, version, release, a)
|
@ -1,56 +0,0 @@
|
|||||||
From b60770dba985dfaab8bedc04e7c3b6a5c3a59d51 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Mracek <jmracek@redhat.com>
|
|
||||||
Date: Fri, 29 Nov 2019 10:48:55 +0100
|
|
||||||
Subject: [PATCH] Redesign reposync --newest_only for modular system
|
|
||||||
(RhBug:1775434)
|
|
||||||
|
|
||||||
reposync --newest_only will download all latest non-modular packages
|
|
||||||
plus all packages for contexts with latest version for each module
|
|
||||||
stream.
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1775434
|
|
||||||
---
|
|
||||||
plugins/reposync.py | 26 +++++++++++++++++++++++++-
|
|
||||||
1 file changed, 25 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/reposync.py b/plugins/reposync.py
|
|
||||||
index 10e9b0b5..c1bc6a99 100644
|
|
||||||
--- a/plugins/reposync.py
|
|
||||||
+++ b/plugins/reposync.py
|
|
||||||
@@ -203,11 +203,35 @@ def download_metadata(self, repo):
|
|
||||||
repo._repo.downloadMetadata(repo_target)
|
|
||||||
return True
|
|
||||||
|
|
||||||
+ def _get_latest(self, query):
|
|
||||||
+ """
|
|
||||||
+ return query with latest nonmodular package and all packages from latest version per stream
|
|
||||||
+ """
|
|
||||||
+ if not dnf.base.WITH_MODULES:
|
|
||||||
+ return query.latest()
|
|
||||||
+ query.apply()
|
|
||||||
+ module_packages = self.base._moduleContainer.getModulePackages()
|
|
||||||
+ all_artifacts = set()
|
|
||||||
+ module_dict = {} # {NameStream: {Version: [modules]}}
|
|
||||||
+ for module_package in module_packages:
|
|
||||||
+ all_artifacts.update(module_package.getArtifacts())
|
|
||||||
+ module_dict.setdefault(module_package.getNameStream(), {}).setdefault(
|
|
||||||
+ module_package.getVersionNum(), []).append(module_package)
|
|
||||||
+ non_modular_latest = query.filter(
|
|
||||||
+ pkg__neq=query.filter(nevra_strict=all_artifacts)).latest()
|
|
||||||
+ latest_artifacts = set()
|
|
||||||
+ for version_dict in module_dict.values():
|
|
||||||
+ keys = sorted(version_dict.keys(), reverse=True)
|
|
||||||
+ for module in version_dict[keys[0]]:
|
|
||||||
+ latest_artifacts.update(module.getArtifacts())
|
|
||||||
+ latest_modular_query = query.filter(nevra_strict=latest_artifacts)
|
|
||||||
+ return latest_modular_query.union(non_modular_latest)
|
|
||||||
+
|
|
||||||
def get_pkglist(self, repo):
|
|
||||||
query = self.base.sack.query(flags=hawkey.IGNORE_MODULAR_EXCLUDES).available().filterm(
|
|
||||||
reponame=repo.id)
|
|
||||||
if self.opts.newest_only:
|
|
||||||
- query = query.latest()
|
|
||||||
+ query = self._get_latest(query)
|
|
||||||
if self.opts.source:
|
|
||||||
query.filterm(arch='src')
|
|
||||||
elif self.opts.arches:
|
|
@ -1,34 +0,0 @@
|
|||||||
From 5bc8e4aee27f2e265ad034060c790d881d0af28a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pavla Kratochvilova <pkratoch@redhat.com>
|
|
||||||
Date: Thu, 2 Jan 2020 14:39:09 +0100
|
|
||||||
Subject: [PATCH] [config-manager] Allow use of --set-enabled without arguments
|
|
||||||
(RhBug:1679213)
|
|
||||||
|
|
||||||
Since config-manager was enhanced to also modify repositories specified
|
|
||||||
by repoids in the --setopt option, it should no longer be required to
|
|
||||||
specify repoids as arguments for --set-enabled.
|
|
||||||
|
|
||||||
As a consequence, "config-manager --set-enabled" without any other
|
|
||||||
argument will exit with 0 and have no effect (same as "--set-disabled").
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1679213
|
|
||||||
---
|
|
||||||
plugins/config_manager.py | 5 -----
|
|
||||||
1 file changed, 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/config_manager.py b/plugins/config_manager.py
|
|
||||||
index 4e03d642..bf238ea9 100644
|
|
||||||
--- a/plugins/config_manager.py
|
|
||||||
+++ b/plugins/config_manager.py
|
|
||||||
@@ -67,11 +67,6 @@ def configure(self):
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
"""Execute the util action here."""
|
|
||||||
-
|
|
||||||
- if self.opts.set_enabled and not self.opts.crepo:
|
|
||||||
- logger.error(_("Error: Trying to enable already enabled repos."))
|
|
||||||
- self.opts.set_enabled = False
|
|
||||||
-
|
|
||||||
if self.opts.add_repo:
|
|
||||||
self.add_repo()
|
|
||||||
else:
|
|
@ -0,0 +1,53 @@
|
|||||||
|
From 01f5570bb74aa923870e253007b76e8ed266a27f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Marek Blaha <mblaha@redhat.com>
|
||||||
|
Date: Wed, 1 Jul 2020 08:52:19 +0200
|
||||||
|
Subject: [PATCH 3/5] [debug] Use standard demands.resolving for transaction
|
||||||
|
handling
|
||||||
|
|
||||||
|
Do not handle the transaction in plugin, use standard demands.resolving
|
||||||
|
instead. This ensures that transaction errors are correctly presented to
|
||||||
|
the user.
|
||||||
|
|
||||||
|
Before:
|
||||||
|
$ dnf debug-restore running-kernel-remove.txt.gz
|
||||||
|
$ echo $?
|
||||||
|
1
|
||||||
|
|
||||||
|
After the patch:
|
||||||
|
$ dnf debug-restore running-kernel-remove.txt.gz
|
||||||
|
Error:
|
||||||
|
Problem: The operation would result in removing the following protected packages: kernel-core
|
||||||
|
(try to add '--skip-broken' to skip uninstallable packages)
|
||||||
|
$ echo $?
|
||||||
|
1
|
||||||
|
---
|
||||||
|
plugins/debug.py | 6 ++----
|
||||||
|
1 file changed, 2 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/plugins/debug.py b/plugins/debug.py
|
||||||
|
index 29c5bf7..efe6bea 100644
|
||||||
|
--- a/plugins/debug.py
|
||||||
|
+++ b/plugins/debug.py
|
||||||
|
@@ -175,6 +175,8 @@ class DebugRestoreCommand(dnf.cli.Command):
|
||||||
|
self.cli.demands.sack_activation = True
|
||||||
|
self.cli.demands.available_repos = True
|
||||||
|
self.cli.demands.root_user = True
|
||||||
|
+ if not self.opts.output:
|
||||||
|
+ self.cli.demands.resolving = True
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def set_argparser(parser):
|
||||||
|
@@ -207,10 +209,6 @@ class DebugRestoreCommand(dnf.cli.Command):
|
||||||
|
|
||||||
|
self.process_dump(dump_pkgs, self.opts)
|
||||||
|
|
||||||
|
- if not self.opts.output:
|
||||||
|
- self.base.resolve()
|
||||||
|
- self.base.do_transaction()
|
||||||
|
-
|
||||||
|
def process_installed(self, dump_pkgs, opts):
|
||||||
|
installed = self.base.sack.query().installed()
|
||||||
|
installonly_pkgs = self.base._get_installonly_query(installed)
|
||||||
|
--
|
||||||
|
2.25.4
|
||||||
|
|
@ -0,0 +1,41 @@
|
|||||||
|
From 9fc9615a07cb314edca953ab71caec27b53fac6d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Marek Blaha <mblaha@redhat.com>
|
||||||
|
Date: Thu, 2 Jul 2020 14:29:18 +0200
|
||||||
|
Subject: [PATCH 4/5] Reorder options in dnf-debug man page alphabetically
|
||||||
|
|
||||||
|
---
|
||||||
|
doc/debug.rst | 16 ++++++++--------
|
||||||
|
1 file changed, 8 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/doc/debug.rst b/doc/debug.rst
|
||||||
|
index 13ac071..ee9860f 100644
|
||||||
|
--- a/doc/debug.rst
|
||||||
|
+++ b/doc/debug.rst
|
||||||
|
@@ -57,16 +57,16 @@ All general DNF options are accepted, see `Options` in :manpage:`dnf(8)` for det
|
||||||
|
|
||||||
|
``dnf debug-restore``
|
||||||
|
|
||||||
|
-``--output``
|
||||||
|
- Only output list of packages which will be installed or removed.
|
||||||
|
- No actuall changes are done.
|
||||||
|
-
|
||||||
|
-``--install-latest``
|
||||||
|
- When installing use the latest package of the same name and architecture.
|
||||||
|
+``--filter-types=[install,remove,replace]``
|
||||||
|
+ Limit package changes to specified type.
|
||||||
|
|
||||||
|
``--ignore-arch``
|
||||||
|
When installing package ignore architecture and install missing packages
|
||||||
|
matching the name, epoch, version and release.
|
||||||
|
|
||||||
|
-``--filter-types=[install,remove,replace]``
|
||||||
|
- Limit package changes to specified type.
|
||||||
|
+``--install-latest``
|
||||||
|
+ When installing use the latest package of the same name and architecture.
|
||||||
|
+
|
||||||
|
+``--output``
|
||||||
|
+ Only output list of packages which will be installed or removed.
|
||||||
|
+ No actuall changes are done.
|
||||||
|
--
|
||||||
|
2.25.4
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,90 @@
|
|||||||
|
From 5a05773dfcfbd317e082a8a58edc391d53bed845 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Marek Blaha <mblaha@redhat.com>
|
||||||
|
Date: Thu, 2 Jul 2020 14:30:34 +0200
|
||||||
|
Subject: [PATCH 5/5] [debug] Do not remove install-only packages
|
||||||
|
(RhBug:1844533)
|
||||||
|
|
||||||
|
Running debug-restore command may result in an attempt to remove the
|
||||||
|
running kernel (in case the running kernel package is not present in the
|
||||||
|
dump file).
|
||||||
|
Newly the install-only packages are not removed, only the versions
|
||||||
|
mentioned in the dump file are marked for installation (the decision on
|
||||||
|
what versions to keep on the system is done according to
|
||||||
|
installonly_limit config option).
|
||||||
|
New option `--remove-installonly` to force removal of those versions of
|
||||||
|
install-only packages that are not present in the dump file is
|
||||||
|
introduced.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1844533
|
||||||
|
---
|
||||||
|
doc/debug.rst | 18 +++++++++++++++++-
|
||||||
|
plugins/debug.py | 13 +++++++++----
|
||||||
|
2 files changed, 26 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/doc/debug.rst b/doc/debug.rst
|
||||||
|
index ee9860f..2f8418f 100644
|
||||||
|
--- a/doc/debug.rst
|
||||||
|
+++ b/doc/debug.rst
|
||||||
|
@@ -23,7 +23,18 @@ DNF debug Plugin
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
-Writes system RPM configuration to a dump file and restore it.
|
||||||
|
+The plugin provides two dnf commands:
|
||||||
|
+
|
||||||
|
+``debug-dump``
|
||||||
|
+ Writes system RPM configuration to a dump file
|
||||||
|
+
|
||||||
|
+``debug-restore``
|
||||||
|
+ Restore the installed packages to the versions written in the dump file. By
|
||||||
|
+ default, it does not remove already installed versions of install-only
|
||||||
|
+ packages and only marks those versions that are mentioned in the dump file
|
||||||
|
+ for installation. The final decision on which versions to keep on the
|
||||||
|
+ system is left to dnf and can be fine-tuned using the `installonly_limit`
|
||||||
|
+ (see :manpage:`dnf.conf(5)`) configuration option.
|
||||||
|
|
||||||
|
.. note:: DNF and Yum debug files are not compatible and thus can't be used
|
||||||
|
by the other program.
|
||||||
|
@@ -70,3 +81,8 @@ All general DNF options are accepted, see `Options` in :manpage:`dnf(8)` for det
|
||||||
|
``--output``
|
||||||
|
Only output list of packages which will be installed or removed.
|
||||||
|
No actuall changes are done.
|
||||||
|
+
|
||||||
|
+``--remove-installonly``
|
||||||
|
+ Allow removal of install-only packages. Using this option may result in an
|
||||||
|
+ attempt to remove the running kernel version (in situations when the currently
|
||||||
|
+ running kernel version is not part of the dump file).
|
||||||
|
diff --git a/plugins/debug.py b/plugins/debug.py
|
||||||
|
index efe6bea..ad136a9 100644
|
||||||
|
--- a/plugins/debug.py
|
||||||
|
+++ b/plugins/debug.py
|
||||||
|
@@ -194,6 +194,10 @@ class DebugRestoreCommand(dnf.cli.Command):
|
||||||
|
"--filter-types", metavar="[install, remove, replace]",
|
||||||
|
default="install, remove, replace",
|
||||||
|
help=_("limit to specified type"))
|
||||||
|
+ parser.add_argument(
|
||||||
|
+ "--remove-installonly", action="store_true",
|
||||||
|
+ help=_('Allow removing of install-only packages. Using this option may '
|
||||||
|
+ 'result in an attempt to remove the running kernel.'))
|
||||||
|
parser.add_argument(
|
||||||
|
"filename", nargs=1, help=_("name of dump file"))
|
||||||
|
|
||||||
|
@@ -238,10 +242,11 @@ class DebugRestoreCommand(dnf.cli.Command):
|
||||||
|
# package should not be installed
|
||||||
|
pkg_remove = True
|
||||||
|
if pkg_remove and "remove" in opts.filter_types:
|
||||||
|
- if opts.output:
|
||||||
|
- print("remove %s" % spec)
|
||||||
|
- else:
|
||||||
|
- self.base.package_remove(pkg)
|
||||||
|
+ if pkg not in installonly_pkgs or opts.remove_installonly:
|
||||||
|
+ if opts.output:
|
||||||
|
+ print("remove %s" % spec)
|
||||||
|
+ else:
|
||||||
|
+ self.base.package_remove(pkg)
|
||||||
|
|
||||||
|
def process_dump(self, dump_pkgs, opts):
|
||||||
|
for (n, a) in sorted(dump_pkgs.keys()):
|
||||||
|
--
|
||||||
|
2.25.4
|
||||||
|
|
7289
SOURCES/0006-Update-translations-RhBug-1820546.patch
Normal file
7289
SOURCES/0006-Update-translations-RhBug-1820546.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,8 @@
|
|||||||
From dc71c83ba6a47fb86d7dc5a750df0f262cec3d1b Mon Sep 17 00:00:00 2001
|
From 37d60b626fcb3e3f68b02c2c24e4ae5149cf223f Mon Sep 17 00:00:00 2001
|
||||||
From: Marek Blaha <mblaha@redhat.com>
|
From: Marek Blaha <mblaha@redhat.com>
|
||||||
Date: Thu, 23 Jul 2020 16:27:22 +0200
|
Date: Thu, 23 Jul 2020 16:27:22 +0200
|
||||||
Subject: [PATCH] [reposync] Add latest NEVRAs per stream to download (RhBug: 1833074)
|
Subject: [PATCH] [reposync] Add latest NEVRAs per stream to download (RhBug:
|
||||||
|
1833074)
|
||||||
|
|
||||||
This covers situation when package with the newest NEVRA is part of
|
This covers situation when package with the newest NEVRA is part of
|
||||||
an older version of a stream and reposync was used with --newest-only
|
an older version of a stream and reposync was used with --newest-only
|
||||||
@ -15,14 +16,14 @@ With this patch these package versions are going to be downloaded:
|
|||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1833074
|
https://bugzilla.redhat.com/show_bug.cgi?id=1833074
|
||||||
---
|
---
|
||||||
plugins/reposync.py | 53 +++++++++++++++++++++++++++++++++++++++++++----------
|
plugins/reposync.py | 53 ++++++++++++++++++++++++++++++++++++---------
|
||||||
1 file changed, 43 insertions(+), 10 deletions(-)
|
1 file changed, 43 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
diff --git a/plugins/reposync.py b/plugins/reposync.py
|
diff --git a/plugins/reposync.py b/plugins/reposync.py
|
||||||
index 8306651..67827f4 100644
|
index 548a05b4..7556e7eb 100644
|
||||||
--- a/plugins/reposync.py
|
--- a/plugins/reposync.py
|
||||||
+++ b/plugins/reposync.py
|
+++ b/plugins/reposync.py
|
||||||
@@ -200,27 +200,60 @@ class RepoSyncCommand(dnf.cli.Command):
|
@@ -207,27 +207,60 @@ def download_metadata(self, repo):
|
||||||
|
|
||||||
def _get_latest(self, query):
|
def _get_latest(self, query):
|
||||||
"""
|
"""
|
||||||
@ -93,6 +94,3 @@ index 8306651..67827f4 100644
|
|||||||
|
|
||||||
def get_pkglist(self, repo):
|
def get_pkglist(self, repo):
|
||||||
query = self.base.sack.query(flags=hawkey.IGNORE_MODULAR_EXCLUDES).available().filterm(
|
query = self.base.sack.query(flags=hawkey.IGNORE_MODULAR_EXCLUDES).available().filterm(
|
||||||
--
|
|
||||||
libgit2 0.28.5
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
%{?!dnf_lowest_compatible: %global dnf_lowest_compatible 4.2.17}
|
%{?!dnf_lowest_compatible: %global dnf_lowest_compatible 4.2.22}
|
||||||
%global dnf_plugins_extra 2.0.0
|
%global dnf_plugins_extra 2.0.0
|
||||||
%global hawkey_version 0.37.0
|
%global hawkey_version 0.46.1
|
||||||
%global yum_utils_subpackage_name dnf-utils
|
%global yum_utils_subpackage_name dnf-utils
|
||||||
%if 0%{?rhel} > 7
|
%if 0%{?rhel} > 7
|
||||||
%global yum_utils_subpackage_name yum-utils
|
%global yum_utils_subpackage_name yum-utils
|
||||||
@ -31,18 +31,19 @@
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
Name: dnf-plugins-core
|
Name: dnf-plugins-core
|
||||||
Version: 4.0.12
|
Version: 4.0.17
|
||||||
Release: 4%{?dist}
|
Release: 5%{?dist}
|
||||||
Summary: Core Plugins for DNF
|
Summary: Core Plugins for DNF
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
URL: https://github.com/rpm-software-management/dnf-plugins-core
|
URL: https://github.com/rpm-software-management/dnf-plugins-core
|
||||||
Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz
|
Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz
|
||||||
Patch1: 0001-reposync-Fix-delete-with-multiple-repos-RhBug1774103.patch
|
Patch1: 0001-test-plugin-crash-if-needs-restarting-d-does-not-exist.patch
|
||||||
Patch2: 0002-Redesign-reposync-latest-for-modular-system-RhBug1775434.patch
|
Patch2: 0002-Fix-debug-restore-command-RhBug-1844533.patch
|
||||||
Patch3: 0003-config-manager-Allow-use-of-set-enabled-without-arguments-RhBug1679213.patch
|
Patch3: 0003-debug-Use-standard-demands.resolving-for-transaction.patch
|
||||||
Patch4: 0004-Update-translations-from-zanata-RhBug-1754960.patch
|
Patch4: 0004-Reorder-options-in-dnf-debug-man-page-alphabetically.patch
|
||||||
Patch5: 0005-reposync-Add-latest-NEVRAs-per-stream-to-download-RhBug-1833074.patch
|
Patch5: 0005-debug-Do-not-remove-install-only-packages-RhBug-1844.patch
|
||||||
|
Patch6: 0006-Update-translations-RhBug-1820546.patch
|
||||||
|
Patch7: 0007-reposync-Add-latest-NEVRAs-per-stream-to-download-RhBug-1833074.patch
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
BuildRequires: cmake
|
BuildRequires: cmake
|
||||||
BuildRequires: gettext
|
BuildRequires: gettext
|
||||||
@ -646,7 +647,8 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
|
|||||||
%exclude %{python3_sitelib}/dnf-plugins/leaves.*
|
%exclude %{python3_sitelib}/dnf-plugins/leaves.*
|
||||||
%exclude %{python3_sitelib}/dnf-plugins/__pycache__/leaves.*
|
%exclude %{python3_sitelib}/dnf-plugins/__pycache__/leaves.*
|
||||||
%endif
|
%endif
|
||||||
%endif # 0%{?rhel} == 0
|
%endif
|
||||||
|
# endif 0%%{?rhel} == 0
|
||||||
|
|
||||||
%if 0%{?rhel} == 0 && %{with python2}
|
%if 0%{?rhel} == 0 && %{with python2}
|
||||||
%files -n python2-dnf-plugin-local
|
%files -n python2-dnf-plugin-local
|
||||||
@ -712,7 +714,8 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
|
|||||||
%exclude %{python3_sitelib}/dnf-plugins/show_leaves.*
|
%exclude %{python3_sitelib}/dnf-plugins/show_leaves.*
|
||||||
%exclude %{python3_sitelib}/dnf-plugins/__pycache__/show_leaves.*
|
%exclude %{python3_sitelib}/dnf-plugins/__pycache__/show_leaves.*
|
||||||
%endif
|
%endif
|
||||||
%endif # 0%{?rhel} == 0
|
%endif
|
||||||
|
# endif 0%%{?rhel} == 0
|
||||||
|
|
||||||
%if %{with python2}
|
%if %{with python2}
|
||||||
%files -n python2-dnf-plugin-versionlock
|
%files -n python2-dnf-plugin-versionlock
|
||||||
@ -746,9 +749,44 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Aug 20 2020 Pavla Kratochvilova <pkratoch@redhat.com> - 4.0.12-4
|
* Wed Aug 05 2020 Nicola Sella <nsella@redhat.com> - 4.0.17-5
|
||||||
- [reposync] Add latest NEVRAs per stream to download (RhBug: 1833074)
|
- [reposync] Add latest NEVRAs per stream to download (RhBug: 1833074)
|
||||||
|
|
||||||
|
* Tue Jul 28 2020 Marek Blaha <mblaha@redhat.com> - 4.0.17-4
|
||||||
|
- Debug-restore command do not remove installonly packages (RhBug:1844533)
|
||||||
|
- Update translations (RhBug:1820546)
|
||||||
|
|
||||||
|
* Fri Jul 17 2020 Nicola Sella <nsella@redhat.com> - 4.0.17-3
|
||||||
|
- Fix debug-restore command (RhBug:1844533)
|
||||||
|
|
||||||
|
* Thu Jun 11 2020 Nicola Sella <nsella@redhat.com> - 4.0.17-2
|
||||||
|
- [needs-restarting] Fix plugin fail if needs-restarting.d does not exist
|
||||||
|
|
||||||
|
* Wed Jun 10 2020 Nicola Sella <nsella@redhat.com> - 4.0.17-1
|
||||||
|
- [repomanage] Add modular support (RhBug:1804720)
|
||||||
|
- [needs-restarting] add options using .conf file (RhBug:1810123)
|
||||||
|
|
||||||
|
* Wed Jun 03 2020 Nicola Sella <nsella@redhat.com> - 4.0.16-1
|
||||||
|
- Update to 4.0.16
|
||||||
|
- [versionlock] Take obsoletes into account (RhBug:1627124)
|
||||||
|
- Move args "--set-enabled", "--set-disabled" from DNF (RhBug:1727882)
|
||||||
|
- Add missing arguments --set-enabled/--set-diabled into error message
|
||||||
|
- Warn when --enablerepo/--disablerepo args were passed (RhBug:1727882)
|
||||||
|
- [copr] add support for enabling/disabling runtime dependencies
|
||||||
|
- [copr] no-liability text to be always printed
|
||||||
|
|
||||||
|
* Mon Apr 06 2020 Ales Matej <amatej@redhat.com> - 4.0.15-1
|
||||||
|
- Update to 4.0.15
|
||||||
|
- Fix: config_manager respect config file location during save
|
||||||
|
- Fix conflict for dnf download --resolve (RhBug:1787908)
|
||||||
|
- Fix: don't open stdin if versionlock is missing (RhBug:1785563)
|
||||||
|
- config-manager calls parser error when without options (RhBug:1782822)
|
||||||
|
- Update reposync.py with --norepopath option
|
||||||
|
- Support remote files in dnf builddep
|
||||||
|
- [versionlock] Prevent conflicting/duplicate entries (RhBug:1782052)
|
||||||
|
- [download] Respect repo priority (RhBug:1800342)
|
||||||
|
- [doc] Skip creating and installing migrate documentation for Python 3+
|
||||||
|
|
||||||
* Fri Jan 31 2020 Marek Blaha <mblaha@redhat.com> - 4.0.12-3
|
* Fri Jan 31 2020 Marek Blaha <mblaha@redhat.com> - 4.0.12-3
|
||||||
- [translations] Update translations from zanata (RhBug:1754960)
|
- [translations] Update translations from zanata (RhBug:1754960)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user