Allow specifying empty variants
The variants.xml file can list a variant with is_empty="true" and no groups. If such variant is found, not package gathering will be run for it, and no repos will be created. This only makes sense for a variant that will have some other deliverables like live media or images. Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
parent
adbc772fd0
commit
454363fba8
@ -294,7 +294,7 @@ def run_compose(compose):
|
||||
|
||||
# write .discinfo and media.repo before ISOs are created
|
||||
for variant in compose.get_variants(recursive=True):
|
||||
if variant.type == "addon":
|
||||
if variant.type == "addon" or variant.is_empty:
|
||||
continue
|
||||
for arch in variant.arches + ["src"]:
|
||||
timestamp = pungi.metadata.write_discinfo(compose, arch, variant)
|
||||
|
@ -170,7 +170,7 @@ def write_compose_info(compose):
|
||||
|
||||
|
||||
def write_tree_info(compose, arch, variant, timestamp=None):
|
||||
if variant.type in ("addon", ):
|
||||
if variant.type in ("addon", ) or variant.is_empty:
|
||||
return
|
||||
|
||||
if not timestamp:
|
||||
|
@ -77,16 +77,24 @@ class CreaterepoPhase(PhaseBase):
|
||||
|
||||
for arch in self.compose.get_arches():
|
||||
for variant in self.compose.get_variants(arch=arch):
|
||||
if variant.is_empty:
|
||||
continue
|
||||
self.pool.queue_put((self.compose, arch, variant, "rpm"))
|
||||
self.pool.queue_put((self.compose, arch, variant, "debuginfo"))
|
||||
|
||||
for variant in self.compose.get_variants():
|
||||
if variant.is_empty:
|
||||
continue
|
||||
self.pool.queue_put((self.compose, None, variant, "srpm"))
|
||||
|
||||
self.pool.start()
|
||||
|
||||
|
||||
def create_variant_repo(compose, arch, variant, pkg_type):
|
||||
if variant.is_empty:
|
||||
compose.log_info("[SKIP ] Creating repo (arch: %s, variant: %s): %s" % (arch, variant))
|
||||
return
|
||||
|
||||
createrepo_c = compose.conf.get("createrepo_c", True)
|
||||
createrepo_checksum = compose.conf["createrepo_checksum"]
|
||||
repo = CreaterepoWrapper(createrepo_c=createrepo_c)
|
||||
@ -131,7 +139,7 @@ def create_variant_repo(compose, arch, variant, pkg_type):
|
||||
manifest = productmd.rpms.Rpms()
|
||||
manifest.load(manifest_file)
|
||||
|
||||
for rpms_arch, data in manifest.rpms[variant.uid].items():
|
||||
for rpms_arch, data in manifest.rpms[variant.uid].iteritems():
|
||||
if arch is None and pkg_type != "srpm":
|
||||
continue
|
||||
if arch is not None and arch != rpms_arch:
|
||||
|
@ -164,6 +164,15 @@ def gather_packages(compose, arch, variant, package_sets, fulltree_excludes=None
|
||||
GatherMethod = get_gather_method(compose.conf["gather_method"])
|
||||
|
||||
msg = "Gathering packages (arch: %s, variant: %s)" % (arch, variant)
|
||||
|
||||
if variant.is_empty:
|
||||
compose.log_info("[SKIP ] %s" % msg)
|
||||
return {
|
||||
"rpm": [],
|
||||
"srpm": [],
|
||||
"debuginfo": [],
|
||||
}
|
||||
|
||||
compose.log_info("[BEGIN] %s" % msg)
|
||||
|
||||
packages, groups, filter_packages = get_variant_packages(compose, arch, variant, package_sets)
|
||||
|
@ -98,14 +98,14 @@ class ProductimgPhase(PhaseBase):
|
||||
def run(self):
|
||||
# create PRODUCT.IMG
|
||||
for variant in self.compose.get_variants():
|
||||
if variant.type != "variant":
|
||||
if variant.type != "variant" or variant.is_empty:
|
||||
continue
|
||||
create_product_img(self.compose, "global", variant)
|
||||
|
||||
# copy PRODUCT.IMG
|
||||
for arch in self.compose.get_arches():
|
||||
for variant in self.compose.get_variants(arch=arch):
|
||||
if variant.type != "variant":
|
||||
if variant.type != "variant" or variant.is_empty:
|
||||
continue
|
||||
image = self.compose.paths.work.product_img(variant)
|
||||
os_tree = self.compose.paths.compose.os_tree(arch, variant)
|
||||
@ -117,7 +117,7 @@ class ProductimgPhase(PhaseBase):
|
||||
|
||||
for arch in self.compose.get_arches():
|
||||
for variant in self.compose.get_variants(arch=arch):
|
||||
if variant.type != "variant":
|
||||
if variant.type != "variant" or variant.is_empty:
|
||||
continue
|
||||
rebuild_boot_iso(self.compose, arch, variant, self.pkgset_phase.package_sets)
|
||||
|
||||
|
@ -71,6 +71,7 @@ class VariantsXmlParser(object):
|
||||
"groups": [],
|
||||
"environments": [],
|
||||
"buildinstallpackages": [],
|
||||
"is_empty": bool(variant_node.attrib.get("is_empty", False)),
|
||||
}
|
||||
if self.tree_arches:
|
||||
variant_dict["arches"] = [i for i in variant_dict["arches"] if i in self.tree_arches]
|
||||
@ -162,7 +163,7 @@ class VariantsXmlParser(object):
|
||||
|
||||
|
||||
class Variant(object):
|
||||
def __init__(self, id, name, type, arches, groups, environments=None, buildinstallpackages=None):
|
||||
def __init__(self, id, name, type, arches, groups, environments=None, buildinstallpackages=None, is_empty=False):
|
||||
if not id.isalnum():
|
||||
raise ValueError("Variant ID must contain only alphanumeric characters: %s" % id)
|
||||
|
||||
@ -178,6 +179,7 @@ class Variant(object):
|
||||
self.buildinstallpackages = sorted(buildinstallpackages)
|
||||
self.variants = {}
|
||||
self.parent = None
|
||||
self.is_empty = is_empty
|
||||
|
||||
def __getitem__(self, name):
|
||||
return self.variants[name]
|
||||
|
@ -1,11 +1,12 @@
|
||||
<!ELEMENT variants (ref*,variant*)>
|
||||
|
||||
<!ELEMENT variant (release?,arches,groups,environments*,variants*,buildinstallpackages?)?>
|
||||
<!ELEMENT variant (release?,arches,groups?,environments*,variants*,buildinstallpackages?)?>
|
||||
<!ATTLIST variant
|
||||
id ID #REQUIRED
|
||||
name CDATA #REQUIRED
|
||||
type (variant|addon|optional|layered-product) #REQUIRED
|
||||
has_optional (true|false) #IMPLIED
|
||||
is_empty (true|false) "false"
|
||||
>
|
||||
|
||||
<!ELEMENT release (#PCDATA)>
|
||||
|
@ -11,6 +11,12 @@
|
||||
</groups>
|
||||
</variant>
|
||||
|
||||
<variant id="Live" name="Live" type="variant" is_empty="true">
|
||||
<arches>
|
||||
<arch>x86_64</arch>
|
||||
</arches>
|
||||
</variant>
|
||||
|
||||
<variant id="Gluster" name="Gluster Layered Product" type="layered-product">
|
||||
<release name="Gluster" version="2.3" short="Gluster" />
|
||||
<arches>
|
||||
|
Loading…
Reference in New Issue
Block a user