Add support for module defaults
This commit is contained in:
parent
12c29eb4c5
commit
6c327d6971
@ -1,7 +1,7 @@
|
|||||||
From 3f60e62ea86a3180b45290102d3519347cf8788a Mon Sep 17 00:00:00 2001
|
From 3f60e62ea86a3180b45290102d3519347cf8788a Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
|
From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
|
||||||
Date: Wed, 11 Apr 2018 09:18:59 +0200
|
Date: Wed, 11 Apr 2018 09:18:59 +0200
|
||||||
Subject: [PATCH 1/3] Revert "Move ostree phase and pipelines for running
|
Subject: [PATCH 1/8] Revert "Move ostree phase and pipelines for running
|
||||||
phases"
|
phases"
|
||||||
|
|
||||||
This reverts commit 660c04368ba1abed310f121d01f0fa029eea5f11.
|
This reverts commit 660c04368ba1abed310f121d01f0fa029eea5f11.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From fcc431622fc0305248bb966271c71c8d17fd5f69 Mon Sep 17 00:00:00 2001
|
From fcc431622fc0305248bb966271c71c8d17fd5f69 Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
|
From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
|
||||||
Date: Wed, 11 Apr 2018 09:19:53 +0200
|
Date: Wed, 11 Apr 2018 09:19:53 +0200
|
||||||
Subject: [PATCH 2/3] Revert "Other repo for OstreeInstaller"
|
Subject: [PATCH 2/8] Revert "Other repo for OstreeInstaller"
|
||||||
|
|
||||||
This reverts commit 5c081cb545715c2a912ff50fa57554e89d905868.
|
This reverts commit 5c081cb545715c2a912ff50fa57554e89d905868.
|
||||||
---
|
---
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From 8a7bf97434cbbf2397d3209498eacc326fc130f2 Mon Sep 17 00:00:00 2001
|
From 8a7bf97434cbbf2397d3209498eacc326fc130f2 Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
|
From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
|
||||||
Date: Wed, 11 Apr 2018 09:20:51 +0200
|
Date: Wed, 11 Apr 2018 09:20:51 +0200
|
||||||
Subject: [PATCH 3/3] Revert "Ostree can use pkgset repos"
|
Subject: [PATCH 3/8] Revert "Ostree can use pkgset repos"
|
||||||
|
|
||||||
This reverts commit c7cc200246300c6a3946b2e3a9f5f7693896a7d6.
|
This reverts commit c7cc200246300c6a3946b2e3a9f5f7693896a7d6.
|
||||||
---
|
---
|
||||||
|
131
0004-Include-module-defaults-in-the-repodata.patch
Normal file
131
0004-Include-module-defaults-in-the-repodata.patch
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
From 7d3baa8531e11059866412ddc6ae1aae4e855fc2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Petr=20=C5=A0abata?= <contyk@redhat.com>
|
||||||
|
Date: Wed, 4 Apr 2018 12:59:52 +0200
|
||||||
|
Subject: [PATCH 4/8] Include module defaults in the repodata
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
If the compose configuration includes the module_defaults_dir (an
|
||||||
|
scm_dict), clone the directory, read the module defaults contained
|
||||||
|
therein and include relevant defaults in the combined modulemd file.
|
||||||
|
|
||||||
|
Only defaults for modules present in the variant are included.
|
||||||
|
|
||||||
|
This requires libmodulemd 1.2.0+.
|
||||||
|
|
||||||
|
Merges: https://pagure.io/pungi/pull-request/891
|
||||||
|
Signed-off-by: Petr Šabata <contyk@redhat.com>
|
||||||
|
---
|
||||||
|
pungi/compose.py | 4 ++++
|
||||||
|
pungi/phases/createrepo.py | 8 +++++++-
|
||||||
|
pungi/phases/init.py | 17 ++++++++++++++++-
|
||||||
|
tests/test_initphase.py | 3 +++
|
||||||
|
4 files changed, 30 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pungi/compose.py b/pungi/compose.py
|
||||||
|
index 4199d72a..07c67f4f 100644
|
||||||
|
--- a/pungi/compose.py
|
||||||
|
+++ b/pungi/compose.py
|
||||||
|
@@ -194,6 +194,10 @@ class Compose(kobo.log.LoggingBase):
|
||||||
|
return bool(self.conf.get("comps_file", False))
|
||||||
|
|
||||||
|
@property
|
||||||
|
+ def has_module_defaults(self):
|
||||||
|
+ return bool(self.conf.get("module_defaults_dir", False))
|
||||||
|
+
|
||||||
|
+ @property
|
||||||
|
def config_dir(self):
|
||||||
|
return os.path.dirname(self.conf._open_file or "")
|
||||||
|
|
||||||
|
diff --git a/pungi/phases/createrepo.py b/pungi/phases/createrepo.py
|
||||||
|
index 1ce2b171..49ff553a 100644
|
||||||
|
--- a/pungi/phases/createrepo.py
|
||||||
|
+++ b/pungi/phases/createrepo.py
|
||||||
|
@@ -218,9 +218,15 @@ def create_variant_repo(compose, arch, variant, pkg_type, modules_metadata=None)
|
||||||
|
raise AttributeError("module_metadata parameter was not passed and it is needed for module processing")
|
||||||
|
modules.append(repo_mmd)
|
||||||
|
|
||||||
|
+ module_names = set([x.get_name() for x in modules])
|
||||||
|
+ for mmddeffile in glob.glob(os.path.join(compose.config_dir, "module_defaults", "*.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)
|
||||||
|
+
|
||||||
|
with temp_dir() as tmp_dir:
|
||||||
|
modules_path = os.path.join(tmp_dir, "modules.yaml")
|
||||||
|
- Modulemd.Module.dump_all(modules, modules_path)
|
||||||
|
+ Modulemd.dump(modules, modules_path)
|
||||||
|
|
||||||
|
cmd = repo.get_modifyrepo_cmd(os.path.join(repo_dir, "repodata"),
|
||||||
|
modules_path, mdtype="modules",
|
||||||
|
diff --git a/pungi/phases/init.py b/pungi/phases/init.py
|
||||||
|
index a01168a9..81eec0f4 100644
|
||||||
|
--- a/pungi/phases/init.py
|
||||||
|
+++ b/pungi/phases/init.py
|
||||||
|
@@ -23,7 +23,8 @@ from pungi.phases.base import PhaseBase
|
||||||
|
from pungi.phases.gather import write_prepopulate_file
|
||||||
|
from pungi.wrappers.createrepo import CreaterepoWrapper
|
||||||
|
from pungi.wrappers.comps import CompsWrapper
|
||||||
|
-from pungi.wrappers.scm import get_file_from_scm
|
||||||
|
+from pungi.wrappers.scm import get_file_from_scm, get_dir_from_scm
|
||||||
|
+from pungi.util import temp_dir
|
||||||
|
|
||||||
|
|
||||||
|
class InitPhase(PhaseBase):
|
||||||
|
@@ -63,6 +64,10 @@ class InitPhase(PhaseBase):
|
||||||
|
|
||||||
|
# download variants.xml / product.xml?
|
||||||
|
|
||||||
|
+ # download module defaults
|
||||||
|
+ if self.compose.has_module_defaults:
|
||||||
|
+ write_module_defaults(self.compose)
|
||||||
|
+
|
||||||
|
# write prepopulate file
|
||||||
|
write_prepopulate_file(self.compose)
|
||||||
|
|
||||||
|
@@ -160,3 +165,13 @@ def create_comps_repo(compose, arch):
|
||||||
|
checksum=createrepo_checksum)
|
||||||
|
run(cmd, logfile=compose.paths.log.log_file(arch, "comps_repo"), show_cmd=True)
|
||||||
|
compose.log_info("[DONE ] %s" % msg)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+def write_module_defaults(compose):
|
||||||
|
+ scm_dict = compose.conf["module_defaults_dir"]
|
||||||
|
+
|
||||||
|
+ with temp_dir(prefix="moduledefaults_") as tmp_dir:
|
||||||
|
+ get_dir_from_scm(scm_dict, tmp_dir, logger=compose._logger)
|
||||||
|
+ compose.log_debug("Writing module defaults")
|
||||||
|
+ shutil.rmtree(os.path.join(compose.config_dir, "module_defaults"), ignore_errors=True)
|
||||||
|
+ shutil.copytree(tmp_dir, os.path.join(compose.config_dir, "module_defaults"))
|
||||||
|
diff --git a/tests/test_initphase.py b/tests/test_initphase.py
|
||||||
|
index ae6c4e52..8c3b0d9d 100644
|
||||||
|
--- a/tests/test_initphase.py
|
||||||
|
+++ b/tests/test_initphase.py
|
||||||
|
@@ -24,6 +24,7 @@ class TestInitPhase(PungiTestCase):
|
||||||
|
def test_run(self, write_prepopulate, write_variant, create_comps, write_arch, write_global):
|
||||||
|
compose = DummyCompose(self.topdir, {})
|
||||||
|
compose.has_comps = True
|
||||||
|
+ compose.has_module_defaults = False
|
||||||
|
compose.setup_optional()
|
||||||
|
phase = init.InitPhase(compose)
|
||||||
|
phase.run()
|
||||||
|
@@ -52,6 +53,7 @@ class TestInitPhase(PungiTestCase):
|
||||||
|
write_arch, write_global, copy_comps):
|
||||||
|
compose = DummyCompose(self.topdir, {})
|
||||||
|
compose.has_comps = True
|
||||||
|
+ compose.has_module_defaults = False
|
||||||
|
compose.variants['Everything'].groups = []
|
||||||
|
compose.variants['Everything'].modules = []
|
||||||
|
phase = init.InitPhase(compose)
|
||||||
|
@@ -81,6 +83,7 @@ class TestInitPhase(PungiTestCase):
|
||||||
|
write_arch, write_global, copy_comps):
|
||||||
|
compose = DummyCompose(self.topdir, {})
|
||||||
|
compose.has_comps = False
|
||||||
|
+ compose.has_module_defaults = False
|
||||||
|
phase = init.InitPhase(compose)
|
||||||
|
phase.run()
|
||||||
|
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
35
0005-Handle-relative-paths-in-module_defaults_dir.patch
Normal file
35
0005-Handle-relative-paths-in-module_defaults_dir.patch
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
From 91a03c693222a41a23d1a3250984e0d8c9372b75 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Petr=20=C5=A0abata?= <contyk@redhat.com>
|
||||||
|
Date: Wed, 4 Apr 2018 14:01:10 +0200
|
||||||
|
Subject: [PATCH 5/8] Handle relative paths in module_defaults_dir
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
This now handles strings as well as sct_dicts with type=file that
|
||||||
|
include relative paths.
|
||||||
|
|
||||||
|
Signed-off-by: Petr Šabata <contyk@redhat.com>
|
||||||
|
---
|
||||||
|
pungi/phases/init.py | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/pungi/phases/init.py b/pungi/phases/init.py
|
||||||
|
index 81eec0f4..ef203568 100644
|
||||||
|
--- a/pungi/phases/init.py
|
||||||
|
+++ b/pungi/phases/init.py
|
||||||
|
@@ -169,6 +169,11 @@ def create_comps_repo(compose, arch):
|
||||||
|
|
||||||
|
def write_module_defaults(compose):
|
||||||
|
scm_dict = compose.conf["module_defaults_dir"]
|
||||||
|
+ if isinstance(scm_dict, dict):
|
||||||
|
+ if scm_dict["scm"] == "file":
|
||||||
|
+ scm_dict["dir"] = os.path.join(compose.config_dir, scm_dict["dir"])
|
||||||
|
+ else:
|
||||||
|
+ scm_dict = os.path.join(compose.config_dir, scm_dict)
|
||||||
|
|
||||||
|
with temp_dir(prefix="moduledefaults_") as tmp_dir:
|
||||||
|
get_dir_from_scm(scm_dict, tmp_dir, logger=compose._logger)
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
@ -0,0 +1,39 @@
|
|||||||
|
From 587b4847843af878650d56e7c093cbef6b356801 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Petr=20=C5=A0abata?= <contyk@redhat.com>
|
||||||
|
Date: Wed, 4 Apr 2018 14:02:15 +0200
|
||||||
|
Subject: [PATCH 6/8] Update configuration docs with module_defaults_dir
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Signed-off-by: Petr Šabata <contyk@redhat.com>
|
||||||
|
---
|
||||||
|
doc/configuration.rst | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/doc/configuration.rst b/doc/configuration.rst
|
||||||
|
index e5f1e9e0..9e6cf1a9 100644
|
||||||
|
--- a/doc/configuration.rst
|
||||||
|
+++ b/doc/configuration.rst
|
||||||
|
@@ -21,6 +21,7 @@ Minimal Config Example
|
||||||
|
# GENERAL SETTINGS
|
||||||
|
comps_file = "comps-f23.xml"
|
||||||
|
variants_file = "variants-f23.xml"
|
||||||
|
+ module_defaults_dir = "module_defaults"
|
||||||
|
|
||||||
|
# KOJI
|
||||||
|
koji_profile = "koji"
|
||||||
|
@@ -135,6 +136,10 @@ Options
|
||||||
|
(:ref:`scm_dict <scm_support>` or *str*) -- reference to variants XML file
|
||||||
|
that defines release variants and architectures
|
||||||
|
|
||||||
|
+**module_defaults_dir** [optional]
|
||||||
|
+ (:ref:`scm_dict <scm_support>` or *str*) -- reference the module defaults
|
||||||
|
+ directory containing modulemd-defaults YAML documents
|
||||||
|
+
|
||||||
|
**failable_deliverables** [optional]
|
||||||
|
(*list*) -- list which deliverables on which variant and architecture can
|
||||||
|
fail and not abort the whole compose. This only applies to ``buildinstall``
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
@ -0,0 +1,29 @@
|
|||||||
|
From dc6fccd522efc0ae0c2072812b6fc0559cc74475 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Petr=20=C5=A0abata?= <contyk@redhat.com>
|
||||||
|
Date: Wed, 11 Apr 2018 10:33:42 +0200
|
||||||
|
Subject: [PATCH 7/8] Update the configuration JSON schema for
|
||||||
|
module_defaults_dir
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Signed-off-by: Petr Šabata <contyk@redhat.com>
|
||||||
|
---
|
||||||
|
pungi/checks.py | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/pungi/checks.py b/pungi/checks.py
|
||||||
|
index 189ca948..1c2059b2 100644
|
||||||
|
--- a/pungi/checks.py
|
||||||
|
+++ b/pungi/checks.py
|
||||||
|
@@ -678,6 +678,7 @@ def make_schema():
|
||||||
|
"type": "boolean",
|
||||||
|
"default": True
|
||||||
|
},
|
||||||
|
+ "module_defaults_dir": {"$ref": "#/definitions/str_or_scm_dict"},
|
||||||
|
|
||||||
|
"pkgset_repos": {
|
||||||
|
"type": "object",
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
64
0008-Clone-module-defaults-into-work-directory.patch
Normal file
64
0008-Clone-module-defaults-into-work-directory.patch
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
From 9104444a7bc874c18de2a57851356e60a776341c Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
|
||||||
|
Date: Wed, 11 Apr 2018 16:05:08 +0200
|
||||||
|
Subject: [PATCH 8/8] Clone module defaults into work/ directory
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
We can not rely on config_dir being writable, and should not modify
|
||||||
|
anything in there anyway.
|
||||||
|
|
||||||
|
Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
|
||||||
|
---
|
||||||
|
pungi/paths.py | 8 ++++++++
|
||||||
|
pungi/phases/createrepo.py | 2 +-
|
||||||
|
pungi/phases/init.py | 3 +--
|
||||||
|
3 files changed, 10 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pungi/paths.py b/pungi/paths.py
|
||||||
|
index 0e506795..37c6da13 100644
|
||||||
|
--- a/pungi/paths.py
|
||||||
|
+++ b/pungi/paths.py
|
||||||
|
@@ -340,6 +340,14 @@ class WorkPaths(object):
|
||||||
|
path = "%s.cfg" % path
|
||||||
|
return path
|
||||||
|
|
||||||
|
+ def module_defaults_dir(self, create_dir=True):
|
||||||
|
+ """
|
||||||
|
+ """
|
||||||
|
+ path = os.path.join(self.topdir(create_dir=create_dir), 'module_defaults')
|
||||||
|
+ if create_dir:
|
||||||
|
+ makedirs(path)
|
||||||
|
+ return path
|
||||||
|
+
|
||||||
|
|
||||||
|
class ComposePaths(object):
|
||||||
|
def __init__(self, compose):
|
||||||
|
diff --git a/pungi/phases/createrepo.py b/pungi/phases/createrepo.py
|
||||||
|
index 49ff553a..f8e61387 100644
|
||||||
|
--- a/pungi/phases/createrepo.py
|
||||||
|
+++ b/pungi/phases/createrepo.py
|
||||||
|
@@ -219,7 +219,7 @@ 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.config_dir, "module_defaults", "*.yaml")):
|
||||||
|
+ 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)
|
||||||
|
diff --git a/pungi/phases/init.py b/pungi/phases/init.py
|
||||||
|
index ef203568..9d9212e7 100644
|
||||||
|
--- a/pungi/phases/init.py
|
||||||
|
+++ b/pungi/phases/init.py
|
||||||
|
@@ -178,5 +178,4 @@ def write_module_defaults(compose):
|
||||||
|
with temp_dir(prefix="moduledefaults_") as tmp_dir:
|
||||||
|
get_dir_from_scm(scm_dict, tmp_dir, logger=compose._logger)
|
||||||
|
compose.log_debug("Writing module defaults")
|
||||||
|
- shutil.rmtree(os.path.join(compose.config_dir, "module_defaults"), ignore_errors=True)
|
||||||
|
- shutil.copytree(tmp_dir, os.path.join(compose.config_dir, "module_defaults"))
|
||||||
|
+ shutil.copytree(tmp_dir, compose.paths.work.module_defaults_dir())
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
11
pungi.spec
11
pungi.spec
@ -1,6 +1,6 @@
|
|||||||
Name: pungi
|
Name: pungi
|
||||||
Version: 4.1.23
|
Version: 4.1.23
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
Summary: Distribution compose tool
|
Summary: Distribution compose tool
|
||||||
|
|
||||||
Group: Development/Tools
|
Group: Development/Tools
|
||||||
@ -11,6 +11,12 @@ Patch0: 0001-tests-Use-dummy-modulesdir-for-DNF.patch
|
|||||||
Patch1: 0001-Revert-Move-ostree-phase-and-pipelines-for-running-p.patch
|
Patch1: 0001-Revert-Move-ostree-phase-and-pipelines-for-running-p.patch
|
||||||
Patch2: 0002-Revert-Other-repo-for-OstreeInstaller.patch
|
Patch2: 0002-Revert-Other-repo-for-OstreeInstaller.patch
|
||||||
Patch3: 0003-Revert-Ostree-can-use-pkgset-repos.patch
|
Patch3: 0003-Revert-Ostree-can-use-pkgset-repos.patch
|
||||||
|
Patch4: 0004-Include-module-defaults-in-the-repodata.patch
|
||||||
|
Patch5: 0005-Handle-relative-paths-in-module_defaults_dir.patch
|
||||||
|
Patch6: 0006-Update-configuration-docs-with-module_defaults_dir.patch
|
||||||
|
Patch7: 0007-Update-the-configuration-JSON-schema-for-module_defa.patch
|
||||||
|
Patch8: 0008-Clone-module-defaults-into-work-directory.patch
|
||||||
|
|
||||||
BuildRequires: python3-nose
|
BuildRequires: python3-nose
|
||||||
BuildRequires: python3-mock
|
BuildRequires: python3-mock
|
||||||
BuildRequires: python2-devel
|
BuildRequires: python2-devel
|
||||||
@ -176,6 +182,9 @@ nosetests-3 --exe
|
|||||||
%{_bindir}/%{name}-wait-for-signed-ostree-handler
|
%{_bindir}/%{name}-wait-for-signed-ostree-handler
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Apr 12 2018 Lubomír Sedlář <lsedlar@redhat.com> - 4.1.23-3
|
||||||
|
- Add support for module defaults
|
||||||
|
|
||||||
* Wed Apr 11 2018 Lubomír Sedlář <lsedlar@redhat.com> - 4.1.23-2
|
* Wed Apr 11 2018 Lubomír Sedlář <lsedlar@redhat.com> - 4.1.23-2
|
||||||
- Revert reordering of ostree phases
|
- Revert reordering of ostree phases
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user