hybrid: Re-add getting platform from lookaside repos
This is needed when a compose does not include any modules itself, but is using a lookaside with modules. JIRA: COMPOSE-3720 Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
parent
1423105802
commit
7aa65f00c2
@ -13,6 +13,7 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, see <https://gnu.org/licenses/>.
|
# along with this program; if not, see <https://gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import gzip
|
||||||
import os
|
import os
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from fnmatch import fnmatch
|
from fnmatch import fnmatch
|
||||||
@ -22,7 +23,7 @@ import kobo.rpmlib
|
|||||||
from kobo.shortcuts import run
|
from kobo.shortcuts import run
|
||||||
|
|
||||||
import pungi.phases.gather.method
|
import pungi.phases.gather.method
|
||||||
from pungi import multilib_dnf
|
from pungi import Modulemd, multilib_dnf
|
||||||
from pungi.arch import get_valid_arches, tree_arch_to_yum_arch
|
from pungi.arch import get_valid_arches, tree_arch_to_yum_arch
|
||||||
from pungi.phases.gather import _mk_pkg_map
|
from pungi.phases.gather import _mk_pkg_map
|
||||||
from pungi.util import (
|
from pungi.util import (
|
||||||
@ -404,11 +405,40 @@ class GatherMethodHybrid(pungi.phases.gather.method.GatherMethodBase):
|
|||||||
return packages
|
return packages
|
||||||
|
|
||||||
|
|
||||||
|
def iter_platforms_in_repo(url):
|
||||||
|
"""Find all platform streams that any module in give repo requires at runtime.
|
||||||
|
Yields lists of stream names (possible empty).
|
||||||
|
"""
|
||||||
|
repomd = cr.Repomd(os.path.join(url, "repodata/repomd.xml"))
|
||||||
|
for rec in repomd.records:
|
||||||
|
if rec.type != "modules":
|
||||||
|
continue
|
||||||
|
# No with statement on Python 2.6 for GzipFile...
|
||||||
|
gzipped_file = gzip.GzipFile(os.path.join(url, rec.location_href), "r")
|
||||||
|
mod_index = Modulemd.ModuleIndex.new()
|
||||||
|
mod_index.update_from_string(gzipped_file.read(), False)
|
||||||
|
gzipped_file.close()
|
||||||
|
for module_name in mod_index.get_module_names():
|
||||||
|
module = mod_index.get_module(module_name)
|
||||||
|
for module_stream in module.get_all_streams():
|
||||||
|
module_stream = module_stream.upgrade(2)
|
||||||
|
for dep in module_stream.get_dependencies():
|
||||||
|
yield dep.get_runtime_streams("platform")
|
||||||
|
|
||||||
|
|
||||||
|
def get_platform_from_lookasides(compose, variant, arch):
|
||||||
|
"""Find a set of all platform dependencies in all lookaside repos."""
|
||||||
|
platforms = set()
|
||||||
|
for repo in pungi.phases.gather.get_lookaside_repos(compose, arch, variant):
|
||||||
|
platforms.update(iter_platforms_in_repo(fus._prep_path(repo)))
|
||||||
|
return platforms
|
||||||
|
|
||||||
|
|
||||||
def get_platform(compose, variant, arch):
|
def get_platform(compose, variant, arch):
|
||||||
"""Find platform stream for modules. Raises RuntimeError if there are
|
"""Find platform stream for modules. Raises RuntimeError if there are
|
||||||
conflicting requests.
|
conflicting requests.
|
||||||
"""
|
"""
|
||||||
platforms = set()
|
platforms = get_platform_from_lookasides(compose, variant, arch)
|
||||||
|
|
||||||
for var in compose.all_variants.values():
|
for var in compose.all_variants.values():
|
||||||
for mmd in var.arch_mmds.get(arch, {}).values():
|
for mmd in var.arch_mmds.get(arch, {}).values():
|
||||||
|
Loading…
Reference in New Issue
Block a user