forked from rpms/dnf-plugins-core
import dnf-plugins-core-4.0.12-4.el8_2
This commit is contained in:
parent
76e15a06e3
commit
3a66ff9d7d
@ -0,0 +1,98 @@
|
|||||||
|
From dc71c83ba6a47fb86d7dc5a750df0f262cec3d1b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Marek Blaha <mblaha@redhat.com>
|
||||||
|
Date: Thu, 23 Jul 2020 16:27:22 +0200
|
||||||
|
Subject: [PATCH] [reposync] Add latest NEVRAs per stream to download (RhBug: 1833074)
|
||||||
|
|
||||||
|
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
|
||||||
|
switch.
|
||||||
|
With this patch these package versions are going to be downloaded:
|
||||||
|
- the latest NEVRAs from non-modular packages
|
||||||
|
- all packages from stream version with the latest package NEVRA (in
|
||||||
|
case the latest NEVRA is part of multiple stream versions only the
|
||||||
|
highest is downloaded)
|
||||||
|
- all packages from the latest stream version
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1833074
|
||||||
|
---
|
||||||
|
plugins/reposync.py | 53 +++++++++++++++++++++++++++++++++++++++++++----------
|
||||||
|
1 file changed, 43 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/plugins/reposync.py b/plugins/reposync.py
|
||||||
|
index 8306651..67827f4 100644
|
||||||
|
--- a/plugins/reposync.py
|
||||||
|
+++ b/plugins/reposync.py
|
||||||
|
@@ -200,27 +200,60 @@ class RepoSyncCommand(dnf.cli.Command):
|
||||||
|
|
||||||
|
def _get_latest(self, query):
|
||||||
|
"""
|
||||||
|
- return query with latest nonmodular package and all packages from latest version per stream
|
||||||
|
+ return union of these queries:
|
||||||
|
+ - the latest NEVRAs from non-modular packages
|
||||||
|
+ - all packages from stream version with the latest package NEVRA
|
||||||
|
+ (this should not be needed but the latest package NEVRAs might be
|
||||||
|
+ part of an older module version)
|
||||||
|
+ - all packages from the latest stream version
|
||||||
|
"""
|
||||||
|
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]}}
|
||||||
|
+ artifact_version = {} # {artifact: {NameStream: [Version]}}
|
||||||
|
for module_package in module_packages:
|
||||||
|
- all_artifacts.update(module_package.getArtifacts())
|
||||||
|
+ artifacts = module_package.getArtifacts()
|
||||||
|
+ all_artifacts.update(artifacts)
|
||||||
|
module_dict.setdefault(module_package.getNameStream(), {}).setdefault(
|
||||||
|
module_package.getVersionNum(), []).append(module_package)
|
||||||
|
- non_modular_latest = query.filter(
|
||||||
|
+ for artifact in artifacts:
|
||||||
|
+ artifact_version.setdefault(artifact, {}).setdefault(
|
||||||
|
+ module_package.getNameStream(), []).append(module_package.getVersionNum())
|
||||||
|
+
|
||||||
|
+ # the latest NEVRAs from non-modular packages
|
||||||
|
+ latest_query = 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)
|
||||||
|
+
|
||||||
|
+ # artifacts from the newest version and those versions that contain an artifact
|
||||||
|
+ # with the highest NEVRA
|
||||||
|
+ latest_stream_artifacts = set()
|
||||||
|
+ for namestream, version_dict in module_dict.items():
|
||||||
|
+ # versions that will be synchronized
|
||||||
|
+ versions = set()
|
||||||
|
+ # add the newest stream version
|
||||||
|
+ versions.add(sorted(version_dict.keys(), reverse=True)[0])
|
||||||
|
+ # collect all artifacts in all stream versions
|
||||||
|
+ stream_artifacts = set()
|
||||||
|
+ for modules in version_dict.values():
|
||||||
|
+ for module in modules:
|
||||||
|
+ stream_artifacts.update(module.getArtifacts())
|
||||||
|
+ # find versions to which the packages with the highest NEVRAs belong
|
||||||
|
+ for latest_pkg in query.filter(nevra_strict=stream_artifacts).latest():
|
||||||
|
+ # here we depend on modules.yaml allways containing full NEVRA (including epoch)
|
||||||
|
+ nevra = "{0.name}-{0.epoch}:{0.version}-{0.release}.{0.arch}".format(latest_pkg)
|
||||||
|
+ # download only highest version containing the latest artifact
|
||||||
|
+ versions.add(max(artifact_version[nevra][namestream]))
|
||||||
|
+ # add all artifacts from selected versions for synchronization
|
||||||
|
+ for version in versions:
|
||||||
|
+ for module in version_dict[version]:
|
||||||
|
+ latest_stream_artifacts.update(module.getArtifacts())
|
||||||
|
+ latest_query = latest_query.union(query.filter(nevra_strict=latest_stream_artifacts))
|
||||||
|
+
|
||||||
|
+ return latest_query
|
||||||
|
|
||||||
|
def get_pkglist(self, repo):
|
||||||
|
query = self.base.sack.query(flags=hawkey.IGNORE_MODULAR_EXCLUDES).available().filterm(
|
||||||
|
--
|
||||||
|
libgit2 0.28.5
|
||||||
|
|
@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
Name: dnf-plugins-core
|
Name: dnf-plugins-core
|
||||||
Version: 4.0.12
|
Version: 4.0.12
|
||||||
Release: 3%{?dist}
|
Release: 4%{?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
|
||||||
@ -41,6 +41,7 @@ Patch1: 0001-reposync-Fix-delete-with-multiple-repos-RhBug1774103.patch
|
|||||||
Patch2: 0002-Redesign-reposync-latest-for-modular-system-RhBug1775434.patch
|
Patch2: 0002-Redesign-reposync-latest-for-modular-system-RhBug1775434.patch
|
||||||
Patch3: 0003-config-manager-Allow-use-of-set-enabled-without-arguments-RhBug1679213.patch
|
Patch3: 0003-config-manager-Allow-use-of-set-enabled-without-arguments-RhBug1679213.patch
|
||||||
Patch4: 0004-Update-translations-from-zanata-RhBug-1754960.patch
|
Patch4: 0004-Update-translations-from-zanata-RhBug-1754960.patch
|
||||||
|
Patch5: 0005-reposync-Add-latest-NEVRAs-per-stream-to-download-RhBug-1833074.patch
|
||||||
|
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
BuildRequires: cmake
|
BuildRequires: cmake
|
||||||
@ -745,6 +746,9 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Aug 20 2020 Pavla Kratochvilova <pkratoch@redhat.com> - 4.0.12-4
|
||||||
|
- [reposync] Add latest NEVRAs per stream to download (RhBug: 1833074)
|
||||||
|
|
||||||
* 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