diff --git a/pungi/phases/createrepo.py b/pungi/phases/createrepo.py index 7f8f292b..e6f691ee 100644 --- a/pungi/phases/createrepo.py +++ b/pungi/phases/createrepo.py @@ -33,7 +33,12 @@ from kobo.shortcuts import run, relative_path from ..wrappers.scm import get_dir_from_scm from ..wrappers.createrepo import CreaterepoWrapper from .base import PhaseBase -from ..util import find_old_compose, temp_dir, get_arch_variant_data +from ..util import ( + find_old_compose, + get_arch_variant_data, + iter_module_defaults, + temp_dir, +) from pungi import Modulemd from pungi.arch import tree_arch_to_yum_arch @@ -244,10 +249,9 @@ def create_variant_repo(compose, arch, variant, pkg_type, modules_metadata=None) modules.append(repo_mmd) module_names = set([x.get_name() for x in modules]) - for mmddeffile in glob.glob(os.path.join(compose.paths.work.module_defaults_dir(), "*.yaml")): - for mmddef in Modulemd.objects_from_file(mmddeffile): - if isinstance(mmddef, Modulemd.Defaults) and mmddef.peek_module_name() in module_names: - modules.append(mmddef) + for mmddef in iter_module_defaults(compose.paths.work.module_defaults_dir()): + if mmddef.peek_module_name() in module_names: + modules.append(mmddef) with temp_dir() as tmp_dir: modules_path = os.path.join(tmp_dir, "modules.yaml") diff --git a/pungi/phases/init.py b/pungi/phases/init.py index 0df1ca22..00cdc281 100644 --- a/pungi/phases/init.py +++ b/pungi/phases/init.py @@ -15,16 +15,14 @@ import collections -import glob import os import shutil from kobo.shortcuts import run -from pungi import Modulemd from pungi.phases.base import PhaseBase from pungi.phases.gather import write_prepopulate_file -from pungi.util import temp_dir +from pungi.util import temp_dir, iter_module_defaults from pungi.wrappers.comps import CompsWrapper from pungi.wrappers.createrepo import CreaterepoWrapper from pungi.wrappers.scm import get_dir_from_scm, get_file_from_scm @@ -188,11 +186,9 @@ def validate_module_defaults(path): :param str path: directory with cloned module defaults """ seen_defaults = collections.defaultdict(set) - for file in glob.glob(os.path.join(path, "*.yaml")): - for mmddef in Modulemd.objects_from_file(file): - if not isinstance(mmddef, Modulemd.Defaults): - continue - seen_defaults[mmddef.peek_module_name()].add(mmddef.peek_default_stream()) + + for mmddef in iter_module_defaults(path): + seen_defaults[mmddef.peek_module_name()].add(mmddef.peek_default_stream()) errors = [] for module_name, defaults in seen_defaults.items(): diff --git a/pungi/util.py b/pungi/util.py index 0bcd6d60..8bb33ebe 100644 --- a/pungi/util.py +++ b/pungi/util.py @@ -15,6 +15,7 @@ import argparse import fnmatch +import glob import json import subprocess import os @@ -34,6 +35,8 @@ from six.moves import urllib, range, shlex_quote from kobo.shortcuts import run, force_list from productmd.common import get_major_version +from pungi import Modulemd + # Patterns that match all names of debuginfo packages DEBUG_PATTERNS = ["*-debuginfo", "*-debuginfo-*", "*-debugsource"] @@ -855,3 +858,12 @@ def parse_koji_event(event): raise argparse.ArgumentTypeError( "%s is not a number or path to compose with valid Koji event" % event ) + + +def iter_module_defaults(path): + """Given a path to a directory with yaml files, yield each module default in there. + """ + for file in glob.glob(os.path.join(path, "*.yaml")): + for mmddef in Modulemd.objects_from_file(file): + if isinstance(mmddef, Modulemd.Defaults): + yield mmddef