public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/libmodulemd] rawhide: 2.15.3 bump
@ 2026-06-12 13:07
0 siblings, 0 replies; only message in thread
From: @ 2026-06-12 13:07 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/libmodulemd
Branch : rawhide
Commit : b34829e6232d935cecd60f76bf442665fcd583bb
Author : Petr Písař <ppisar@redhat.com>
Date : 2026-06-12T15:03:14+02:00
Stats : +9/-2286 in 5 file(s)
URL : https://src.fedoraproject.org/rpms/libmodulemd/c/b34829e6232d935cecd60f76bf442665fcd583bb?branch=rawhide
Log:
2.15.3 bump
---
diff --git a/.gitignore b/.gitignore
index 78e14ea..3f678dc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -68,3 +68,5 @@
/modulemd-2.15.1.tar.xz.asc
/modulemd-2.15.2.tar.xz
/modulemd-2.15.2.tar.xz.asc
+/modulemd-2.15.3.tar.xz
+/modulemd-2.15.3.tar.xz.asc
diff --git a/libmodulemd.spec b/libmodulemd.spec
index 8a07089..bd824de 100644
--- a/libmodulemd.spec
+++ b/libmodulemd.spec
@@ -23,8 +23,8 @@
%endif
Name: %{upstream_name}%{?v2_suffix}
-Version: 2.15.2
-Release: 8%{?dist}
+Version: 2.15.3
+Release: 1%{?dist}
Summary: Module metadata manipulation library
# COPYING: MIT
@@ -41,10 +41,6 @@ Source0: %{url}/releases/download/%{version}/modulemd-%{version}.tar.xz
Source1: %{url}/releases/download/%{version}/modulemd-%{version}.tar.xz.asc
# Key exported from Petr Pisar's keyring
Source2: gpgkey-E3F42FCE156830A80358E6E94FD1AEC3365AF7BF.gpg
-# Adapt tests to glib2-2.87.0, in upstream after 2.15.2, bug #2423153
-Patch0: modulemd-2.15.2-tests-Adapt-to-glib-2.87.0.patch
-# Adapt tests to pygobject 3.55.0, in upstream after 2.15.2, bug #2440570
-Patch1: modulemd-2.15.2-tests-Adapt-to-pygobject-3.55.0.patch
BuildRequires: gnupg2
BuildRequires: meson >= 0.47
@@ -82,7 +78,6 @@ more details.
Summary: Python 2 bindings for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: python-gobject-base
-Requires: python-six
%description -n python2-%{name}
Python 2 bindings for %{name}.
@@ -94,12 +89,6 @@ Python 2 bindings for %{name}.
Summary: Python 3 bindings for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: python%{python3_pkgversion}-gobject-base
-%if (0%{?rhel} && 0%{?rhel} <= 7)
-# The py3_dist macro on EPEL 7 doesn't work right at the moment
-Requires: python3.6dist(six)
-%else
-Requires: %{py3_dist six}
-%endif
%description -n python%{python3_pkgversion}-%{name}
Python %{python3_pkgversion} bindings for %{name}.
@@ -193,6 +182,9 @@ mv %{buildroot}%{_mandir}/man1/modulemd-validator.1 \
%changelog
+* Fri Jun 12 2026 Petr Pisar <ppisar@redhat.com> - 2.15.3-1
+- 2.15.3 bump
+
* Wed Jun 03 2026 Python Maint <python-maint@redhat.com> - 2.15.2-8
- Rebuilt for Python 3.15
diff --git a/modulemd-2.15.2-tests-Adapt-to-glib-2.87.0.patch b/modulemd-2.15.2-tests-Adapt-to-glib-2.87.0.patch
deleted file mode 100644
index 8e86b58..0000000
--- a/modulemd-2.15.2-tests-Adapt-to-glib-2.87.0.patch
+++ /dev/null
@@ -1,2104 +0,0 @@
-From 89d4afb3d018250427d4d87840ae57aab3903361 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
-Date: Mon, 8 Dec 2025 13:39:29 +0100
-Subject: [PATCH] tests: Adapt to glib 2.87.0
-
-After upgrading glib from 2.86.1 to 2.87.0, tests which expect catching
-SIGTRAP started to fail like this:
-
- [...]/redhat-linux-build/modulemd/component_module
- TAP version 14
- # random seed: R02S501b6bd02413a2980133f197dab99416
- 1..6
- # Start of modulemd tests
- # Start of v2 tests
- # Start of component tests
- # Start of module tests
- not ok /modulemd/v2/component/module/construct - libmodulemd-FATAL-CRITICAL: modulemd_component_set_key: assertion 'name' failed
- Bail out!
- Aborted (core dumped) LD_LIBRARY_PATH=/home/test/libmodulemd-devel/redhat-linux-build/modulemd MESON_BUILD_ROOT=/home/test/libmodulemd-devel/redhat-linux-build TEST_DATA_PATH=/home/test/libmodulemd-devel/modulemd/tests/test_data UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 LC_ALL=C MESON_TEST_ITERATION=1 MESON_SOURCE_ROOT=/home/test/libmodulemd-devel MALLOC_PERTURB_=115 ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 /home/test/libmodulemd-devel/redhat-linux-build/modulemd/component_module
-
-The tests passed a NULL pointer to libmodulemd object constructors and
-checked that glib raised a SIGTRAP signal. The new glib fixed
-<https://gitlab.gnome.org/GNOME/glib/-/issues/3790> and as a side
-effect changed how the process is terminated: If the process runs
-under a debugger, a breakpoint trap is invoked or SIGTRAP raised,
-depending on the architecture. If the process does not run under
-a debugger, abort() is called, which raises SIGABRT and then after
-returning to glib SIGABRT disposition is reset and SIGABRT raised
-again to finally terminate the process. That means that catching
-signals is pointless because the process will be terminated
-nevertheless.
-
-This patch adapts the tests by using a glib-sanctioned way of checking
-whether a process terminated abnormally instead of depending on
-a way a particular glib version implements.
-
-This patch moves the trapping subtests into standalone tests because
-g_test_trap_subprocess() cannot handle multiple subtests in a single
-test function. It also removes pointless checks for a return value of
-a function which has just exited the process.
-
-The same goes for Python tests (with
-G_DEBUG=fatal-warnings,fatal-criticals) which originally went as far
-as checking whether and which signal was raised. This patch makes the
-Python tests passing regardless of G_DEBUG setting.
-
-Implementation note: Python does not support annoymous block and
-context managers are not compatible with fork, hence this patch moves
-the blocks into named callables to be exectuted in a subprocess.
-
-Implementation note: Glib provides G_TEST_SUBPROCESS_DEFAULT constant
-since 2.74. This patch adds a fallback definition instead of
-hard-coding 0 literal.
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2423153
----
- meson.build | 8 +
- modulemd/include/private/glib-extensions.h | 4 +
- modulemd/include/private/test-utils.h | 1 +
- modulemd/meson.build | 1 +
- modulemd/tests/ModulemdTests/base.py | 25 +++
- modulemd/tests/ModulemdTests/defaults.py | 31 ++-
- modulemd/tests/ModulemdTests/dependencies.py | 26 ++-
- modulemd/tests/ModulemdTests/profile.py | 21 +-
- modulemd/tests/ModulemdTests/servicelevel.py | 21 +-
- .../tests/ModulemdTests/translationentry.py | 21 +-
- modulemd/tests/test-modulemd-common.c | 68 +++---
- .../tests/test-modulemd-component-module.c | 82 ++++---
- modulemd/tests/test-modulemd-defaults-v1.c | 87 ++++---
- modulemd/tests/test-modulemd-defaults.c | 79 ++++---
- modulemd/tests/test-modulemd-dependencies.c | 212 ++++++++++++++----
- modulemd/tests/test-modulemd-module.c | 72 ++++--
- modulemd/tests/test-modulemd-obsoletes.c | 79 ++++---
- modulemd/tests/test-modulemd-profile.c | 105 ++++++---
- modulemd/tests/test-modulemd-service-level.c | 117 ++++++----
- .../tests/test-modulemd-translation-entry.c | 113 ++++++----
- modulemd/tests/test-modulemd-translation.c | 108 +++++----
- 21 files changed, 873 insertions(+), 408 deletions(-)
-
-diff --git a/meson.build b/meson.build
-index f28e410..df6e5ae 100644
---- a/meson.build
-+++ b/meson.build
-@@ -128,6 +128,14 @@ has_g_spawn_check_wait_status = cc.has_function(
- 'g_spawn_check_wait_status',
- dependencies : [ glib ])
-
-+# Check whether glib2 has G_TEST_SUBPROCESS_DEFAULT enum member.
-+has_g_test_subprocess_default = cc.compiles(
-+ '''#include <glib.h>
-+ int foo = G_TEST_SUBPROCESS_DEFAULT;
-+ ''',
-+ dependencies : [ glib ],
-+ name : 'G_TEST_SUBPROCESS_DEFAULT')
-+
- with_py3 = get_option('with_py3')
- if with_py3
- if get_option('skip_introspection')
-diff --git a/modulemd/include/private/glib-extensions.h b/modulemd/include/private/glib-extensions.h
-index 29e9c84..00081be 100644
---- a/modulemd/include/private/glib-extensions.h
-+++ b/modulemd/include/private/glib-extensions.h
-@@ -23,6 +23,10 @@
- G_DEFINE_AUTOPTR_CLEANUP_FUNC (GDate, g_date_free)
- #endif
-
-+/* G_TEST_SUBPROCESS_DEFAULT was added in Glib 2.74. */
-+#ifndef HAVE_G_TEST_SUBPROCESS_DEFAULT
-+#define G_TEST_SUBPROCESS_DEFAULT 0
-+#endif
-
- #ifndef HAVE_EXTEND_AND_STEAL
-
-diff --git a/modulemd/include/private/test-utils.h b/modulemd/include/private/test-utils.h
-index 2643ca1..320cf99 100644
---- a/modulemd/include/private/test-utils.h
-+++ b/modulemd/include/private/test-utils.h
-@@ -16,6 +16,7 @@
- #include <glib.h>
- #include <locale.h>
- #include <yaml.h>
-+#include "glib-extensions.h"
-
- G_BEGIN_DECLS
-
-diff --git a/modulemd/meson.build b/modulemd/meson.build
-index 1c75002..e41bcc5 100644
---- a/modulemd/meson.build
-+++ b/modulemd/meson.build
-@@ -145,6 +145,7 @@ cdata.set('HAVE_RPMIO', rpm.found())
- cdata.set('HAVE_GDATE_AUTOPTR', has_gdate_autoptr)
- cdata.set('HAVE_EXTEND_AND_STEAL', has_extend_and_steal)
- cdata.set('HAVE_G_SPAWN_CHECK_WAIT_STATUS', has_g_spawn_check_wait_status)
-+cdata.set('HAVE_G_TEST_SUBPROCESS_DEFAULT', has_g_test_subprocess_default)
- cdata.set('HAVE_OVERFLOWED_BUILDORDER', accept_overflowed_buildorder)
- configure_file(
- output : 'config.h',
-diff --git a/modulemd/tests/ModulemdTests/base.py b/modulemd/tests/ModulemdTests/base.py
-index 1b46470..55ac742 100644
---- a/modulemd/tests/ModulemdTests/base.py
-+++ b/modulemd/tests/ModulemdTests/base.py
-@@ -52,6 +52,21 @@ class TestBase(unittest.TestCase):
- elif self._caught_signal and not expect_signal:
- raise AssertionError("Signal caught in non-warning state")
-
-+ def assertProcessFailure(self, callable, *args):
-+ """Calls the callable in a subprocess and checks whether the process was
-+ killed with a signal depending on Glib warning fatality."""
-+ pid = os.fork()
-+ if pid == 0:
-+ callable(*args)
-+ os._exit(0)
-+ _, status = os.waitpid(pid, 0)
-+ if self.warnings_fatal:
-+ if not os.WIFSIGNALED(status):
-+ raise AssertionError("Child process was not aborted")
-+ else:
-+ if os.WIFSIGNALED(status):
-+ raise AssertionError("Child process was unexpectedly aborted")
-+
- @property
- def warnings_fatal(self):
- gdebug = os.getenv("G_DEBUG", "").split(",")
-@@ -67,3 +82,13 @@ class TestBase(unittest.TestCase):
- return super(TestBase, self).assertRaisesRegex(*args, **kwargs)
- except AttributeError:
- return self.assertRaisesRegexp(*args, **kwargs)
-+
-+ def assertRaisesRegexOrDies(self, callable, *args, **kwargs):
-+ """Checks that the callable terminates a process if Glib warnings are
-+ fatal. Otherwise, that the callable raised a given exception type with
-+ the given value matching a regular expression."""
-+ if self.warnings_fatal:
-+ self.assertProcessFailure(callable)
-+ else:
-+ with self.assertRaisesRegex(*args, **kwargs):
-+ callable()
-diff --git a/modulemd/tests/ModulemdTests/defaults.py b/modulemd/tests/ModulemdTests/defaults.py
-index c162bf3..3a1b9fe 100644
---- a/modulemd/tests/ModulemdTests/defaults.py
-+++ b/modulemd/tests/ModulemdTests/defaults.py
-@@ -29,6 +29,20 @@ except ImportError:
- from base import TestBase
-
-
-+def _zero_mdversion():
-+ defs = Modulemd.Defaults.new(0, "foo")
-+
-+
-+def _unknown_mdversion():
-+ defs = Modulemd.Defaults.new(
-+ Modulemd.DefaultsVersionEnum.LATEST + 1, "foo"
-+ )
-+
-+
-+def _set_module_name_to_none(defs):
-+ defs.props.module_name = None
-+
-+
- class TestDefaults(TestBase):
- def test_constructors(self):
- # Test that the new() function works
-@@ -48,16 +62,14 @@ class TestDefaults(TestBase):
- Modulemd.Defaults()
-
- # Test with a zero mdversion
-- with self.assertRaisesRegex(TypeError, "constructor returned NULL"):
-- with self.expect_signal():
-- defs = Modulemd.Defaults.new(0, "foo")
-+ self.assertRaisesRegexOrDies(
-+ _zero_mdversion, TypeError, "constructor returned NULL"
-+ )
-
- # Test with an unknown mdversion
-- with self.assertRaisesRegex(TypeError, "constructor returned NULL"):
-- with self.expect_signal():
-- defs = Modulemd.Defaults.new(
-- Modulemd.DefaultsVersionEnum.LATEST + 1, "foo"
-- )
-+ self.assertRaisesRegexOrDies(
-+ _unknown_mdversion, TypeError, "constructor returned NULL"
-+ )
-
- # Test with no name
- with self.assertRaisesRegex(
-@@ -99,8 +111,7 @@ class TestDefaults(TestBase):
- assert defs.get_module_name() == "foo"
-
- # Ensure we cannot set the module_name
-- with self.expect_signal():
-- defs.props.module_name = None
-+ self.assertProcessFailure(_set_module_name_to_none, defs)
-
- def test_modified(self):
- defs = Modulemd.Defaults.new(
-diff --git a/modulemd/tests/ModulemdTests/dependencies.py b/modulemd/tests/ModulemdTests/dependencies.py
-index a190134..c776e23 100644
---- a/modulemd/tests/ModulemdTests/dependencies.py
-+++ b/modulemd/tests/ModulemdTests/dependencies.py
-@@ -28,38 +28,40 @@ except ImportError:
- from base import TestBase
-
-
-+def _get_buildtime_streams(modulemd_dependecies, stream_name):
-+ modulemd_dependecies.get_buildtime_streams(stream_name)
-+
-+
-+def _get_runtime_streams(modulemd_dependecies, stream_name):
-+ modulemd_dependecies.get_runtime_streams(stream_name)
-+
-+
- class TestDependencies(TestBase):
- def test_constructor(self):
- # Test that the new() function works
- d = Modulemd.Dependencies.new()
- assert d
- assert d.get_buildtime_modules() == []
-- with self.expect_signal(only_on_fatal_warnings=True):
-- d.get_buildtime_streams("foobar123")
-+ self.assertProcessFailure(_get_buildtime_streams, d, "foobar123")
- assert d.get_runtime_modules() == []
-- with self.expect_signal(only_on_fatal_warnings=True):
-- d.get_runtime_streams("foobar123")
-+ self.assertProcessFailure(_get_runtime_streams, d, "foobar123")
-
- # Test that keyword name is accepted
- d = Modulemd.Dependencies()
- assert d
- assert d.get_buildtime_modules() == []
-- with self.expect_signal(only_on_fatal_warnings=True):
-- d.get_buildtime_streams("foobar123")
-+ self.assertProcessFailure(_get_buildtime_streams, d, "foobar123")
- assert d.get_runtime_modules() == []
-- with self.expect_signal(only_on_fatal_warnings=True):
-- d.get_runtime_streams("foobar123")
-+ self.assertProcessFailure(_get_runtime_streams, d, "foobar123")
-
- def test_copy(self):
- d_orig = Modulemd.Dependencies()
- d = d_orig.copy()
- assert d
- assert d.get_buildtime_modules() == []
-- with self.expect_signal(only_on_fatal_warnings=True):
-- d.get_buildtime_streams("foobar123")
-+ self.assertProcessFailure(_get_buildtime_streams, d, "foobar123")
- assert d.get_runtime_modules() == []
-- with self.expect_signal(only_on_fatal_warnings=True):
-- d.get_runtime_streams("foobar123")
-+ self.assertProcessFailure(_get_runtime_streams, d, "foobar123")
-
- d_orig.add_buildtime_stream("buildmod1", "stream2")
- d_orig.add_buildtime_stream("buildmod1", "stream1")
-diff --git a/modulemd/tests/ModulemdTests/profile.py b/modulemd/tests/ModulemdTests/profile.py
-index 1de57c6..765c57d 100644
---- a/modulemd/tests/ModulemdTests/profile.py
-+++ b/modulemd/tests/ModulemdTests/profile.py
-@@ -28,6 +28,18 @@ except ImportError:
- from base import TestBase
-
-
-+def construct_without_arguments():
-+ Modulemd.Profile()
-+
-+
-+def construct_with_none_name():
-+ Modulemd.Profile(name=None)
-+
-+
-+def _set_props_name(modulemd_profile, value):
-+ modulemd_profile.props.name = value
-+
-+
- class TestProfile(TestBase):
- def test_constructor(self):
- # Test that the new() function works
-@@ -51,11 +63,9 @@ class TestProfile(TestBase):
- Modulemd.Profile.new(None)
- assert "does not allow None as a value" in cm.exception.__str__()
-
-- with self.expect_signal():
-- Modulemd.Profile()
-+ self.assertProcessFailure(construct_without_arguments)
-
-- with self.expect_signal():
-- Modulemd.Profile(name=None)
-+ self.assertProcessFailure(construct_with_none_name)
-
- def test_copy(self):
- p_orig = Modulemd.Profile(name="testprofile")
-@@ -84,8 +94,7 @@ class TestProfile(TestBase):
- assert p.get_name() == "testprofile"
- assert p.props.name == "testprofile"
-
-- with self.expect_signal():
-- p.props.name = "notadrill"
-+ self.assertProcessFailure(_set_props_name, p, "notadrill")
-
- def test_get_set_description(self):
- p = Modulemd.Profile(name="testprofile")
-diff --git a/modulemd/tests/ModulemdTests/servicelevel.py b/modulemd/tests/ModulemdTests/servicelevel.py
-index f244b01..fc9c648 100644
---- a/modulemd/tests/ModulemdTests/servicelevel.py
-+++ b/modulemd/tests/ModulemdTests/servicelevel.py
-@@ -30,6 +30,18 @@ from base import TestBase
- import datetime
-
-
-+def _construct_without_arguments():
-+ Modulemd.ServiceLevel()
-+
-+
-+def _construct_with_none_name():
-+ Modulemd.ServiceLevel(name=None)
-+
-+
-+def _set_props_name(modulemd_servicelevel, value):
-+ modulemd_servicelevel.props.name = value
-+
-+
- class TestServiceLevel(TestBase):
- def test_constructors(self):
- # Test that the new() function works
-@@ -56,12 +68,10 @@ class TestServiceLevel(TestBase):
- assert "does not allow None as a value" in e.__str__()
-
- # Test that we fail if object is instantiated without a name
-- with self.expect_signal():
-- sl = Modulemd.ServiceLevel()
-+ self.assertProcessFailure(_construct_without_arguments)
-
- # Test that we fail if object is instantiated with a None name
-- with self.expect_signal():
-- sl = Modulemd.ServiceLevel(name=None)
-+ self.assertProcessFailure(_construct_with_none_name)
-
- def test_copy(self):
- sl = Modulemd.ServiceLevel.new("foo")
-@@ -93,8 +103,7 @@ class TestServiceLevel(TestBase):
- assert sl.props.name == "foo"
-
- # This property is not writable, make sure it fails to attempt it
-- with self.expect_signal():
-- sl.props.name = "bar"
-+ self.assertProcessFailure(_set_props_name, sl, "bar")
-
- def test_get_set_eol(self):
- sl = Modulemd.ServiceLevel.new("foo")
-diff --git a/modulemd/tests/ModulemdTests/translationentry.py b/modulemd/tests/ModulemdTests/translationentry.py
-index c53e64b..9fce443 100644
---- a/modulemd/tests/ModulemdTests/translationentry.py
-+++ b/modulemd/tests/ModulemdTests/translationentry.py
-@@ -29,6 +29,18 @@ except ImportError:
- from base import TestBase
-
-
-+def _instantiate_without_locale():
-+ Modulemd.TranslationEntry()
-+
-+
-+def _instantiate_with_none_local():
-+ Modulemd.TranslationEntry(locale=None)
-+
-+
-+def _set_locale(te):
-+ te.props.locale = "en_GB"
-+
-+
- class TestTranslationEntry(TestBase):
- def test_constructors(self):
- # Test that the new() function works
-@@ -118,12 +130,10 @@ class TestTranslationEntry(TestBase):
- assert "does not allow None as a value" in e.__str__()
-
- # Test that we fail if object is instantiated without a locale
-- with self.expect_signal():
-- Modulemd.TranslationEntry()
-+ self.assertProcessFailure(_instantiate_without_locale)
-
- # Test that we fail if object is instantiated with a None locale
-- with self.expect_signal():
-- Modulemd.TranslationEntry(locale=None)
-+ self.assertProcessFailure(_instantiate_with_none_local)
-
- def test_copy(self):
- te_orig = Modulemd.TranslationEntry(locale="en_US")
-@@ -162,8 +172,7 @@ class TestTranslationEntry(TestBase):
- assert te.get_locale() == "en_US"
- assert te.props.locale == "en_US"
-
-- with self.expect_signal():
-- te.props.locale = "en_GB"
-+ self.assertProcessFailure(_set_locale, te)
-
- def test_get_set_summary(self):
- te = Modulemd.TranslationEntry(locale="en_US")
-diff --git a/modulemd/tests/test-modulemd-common.c b/modulemd/tests/test-modulemd-common.c
-index 97e477f..6895e34 100644
---- a/modulemd/tests/test-modulemd-common.c
-+++ b/modulemd/tests/test-modulemd-common.c
-@@ -14,7 +14,6 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- #include <locale.h>
--#include <signal.h>
-
- #include "modulemd.h"
-
-@@ -83,7 +82,7 @@ test_modulemd_load_file (void)
-
-
- static void
--test_modulemd_load_string (void)
-+test_modulemd_load_string_regular (void)
- {
- const gchar *yaml_string = NULL;
- g_autoptr (GError) error = NULL;
-@@ -122,16 +121,6 @@ test_modulemd_load_string (void)
- g_assert_nonnull (output);
-
-
-- /* NULL string should raise an exception */
-- g_clear_error (&error);
-- g_clear_object (&idx);
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- idx = modulemd_load_string (NULL, &error);
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- g_assert_null (idx);
--
--
- /* An empty string is valid YAML, so it returns a non-NULL but empty index. */
- g_clear_error (&error);
- g_clear_object (&idx);
-@@ -151,6 +140,22 @@ test_modulemd_load_string (void)
- }
-
-
-+/* NULL string should raise an exception */
-+static void
-+test_modulemd_load_string_null (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (GError) error = NULL;
-+ g_autoptr (ModulemdModuleIndex) idx = NULL;
-+ idx = modulemd_load_string (NULL, &error);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
- static void
- test_packager_read_file (void)
- {
-@@ -353,7 +358,7 @@ test_packager_read_file (void)
-
-
- static void
--test_packager_read_string (void)
-+test_packager_read_string_regular (void)
- {
- const gchar *yaml_string = NULL;
- g_autoptr (GError) error = NULL;
-@@ -531,16 +536,6 @@ test_packager_read_string (void)
- ==,
- "streamname-override");
-
-- /* NULL string should raise an exception */
-- g_clear_error (&error);
-- g_clear_object (&object);
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- otype = modulemd_read_packager_string (NULL, &object, &error);
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- g_assert_cmpint (otype, ==, G_TYPE_INVALID);
-- g_assert_null (object);
--
- /* An empty string is not a valid packager format */
- g_clear_error (&error);
- g_clear_object (&object);
-@@ -559,6 +554,21 @@ test_packager_read_string (void)
- }
-
-
-+/* NULL string should raise an exception */
-+static void
-+test_packager_read_string_null (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (GError) error = NULL;
-+ g_autoptr (GObject) object = NULL;
-+ (void)modulemd_read_packager_string (NULL, &object, &error);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
- /*
- * Empty profiles are legal. Parser misinterpreted them as a list of one
- * package with an empty package name.
-@@ -617,13 +627,17 @@ main (int argc, char *argv[])
- test_modulemd_get_version);
-
- g_test_add_func ("/modulemd/v2/common/load_file", test_modulemd_load_file);
-- g_test_add_func ("/modulemd/v2/common/load_string",
-- test_modulemd_load_string);
-+ g_test_add_func ("/modulemd/v2/common/load_string/regular",
-+ test_modulemd_load_string_regular);
-+ g_test_add_func ("/modulemd/v2/common/load_string/null",
-+ test_modulemd_load_string_null);
-
- g_test_add_func ("/modulemd/v2/common/packager/read_file",
- test_packager_read_file);
-- g_test_add_func ("/modulemd/v2/common/packager/read_string",
-- test_packager_read_string);
-+ g_test_add_func ("/modulemd/v2/common/packager/read_string/regular",
-+ test_packager_read_string_regular);
-+ g_test_add_func ("/modulemd/v2/common/packager/read_string/null",
-+ test_packager_read_string_null);
-
- g_test_add_func ("/modulemd/v2/common/empty_profile", test_empty_profile);
-
-diff --git a/modulemd/tests/test-modulemd-component-module.c b/modulemd/tests/test-modulemd-component-module.c
-index 20e7881..683c774 100644
---- a/modulemd/tests/test-modulemd-component-module.c
-+++ b/modulemd/tests/test-modulemd-component-module.c
-@@ -14,7 +14,6 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- #include <locale.h>
--#include <signal.h>
-
- #include "modulemd-component-module.h"
- #include "modulemd-component.h"
-@@ -28,16 +27,8 @@ typedef struct _ComponentModuleFixture
- {
- } ComponentModuleFixture;
-
--gboolean signaled = FALSE;
--
--static void
--sigtrap_handler (int UNUSED (sig_num))
--{
-- signaled = TRUE;
--}
--
- static void
--component_module_test_construct (void)
-+component_module_test_construct_regular (void)
- {
- g_autoptr (ModulemdComponentModule) m = NULL;
- ModulemdComponent *mc = NULL;
-@@ -84,29 +75,49 @@ component_module_test_construct (void)
- modulemd_component_module_get_repository (m), ==, "somerepo");
- mc = NULL;
- g_clear_object (&m);
-+}
-
-- /* Test that we abort with a NULL name to new() */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- m = modulemd_component_module_new (NULL);
-- g_assert_true (signaled);
-- g_clear_object (&m);
--
-- /* Test that init fails without name */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- m = g_object_new (MODULEMD_TYPE_COMPONENT_MODULE, NULL);
-- g_assert_true (signaled);
-- g_clear_object (&m);
-+/* Test that we abort with a NULL name to new() */
-+static void
-+component_module_test_construct_new_null_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdComponentModule) m = NULL;
-+ m = modulemd_component_module_new (NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
-- /* Test that init fails with a NULL name */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- m = g_object_new (MODULEMD_TYPE_COMPONENT_MODULE, "name", NULL, NULL);
-- g_assert_true (signaled);
-- g_clear_object (&m);
-+/* Test that init fails without name */
-+static void
-+component_module_test_construct_init_without_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdComponentModule) m = NULL;
-+ m = g_object_new (MODULEMD_TYPE_COMPONENT_MODULE, NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
-+/* Test that init fails with a NULL name */
-+static void
-+component_module_test_construct_init_null_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdComponentModule) m = NULL;
-+ m = g_object_new (MODULEMD_TYPE_COMPONENT_MODULE, "name", NULL, NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
- static void
- component_module_test_equals (void)
-@@ -421,8 +432,17 @@ main (int argc, char *argv[])
- g_test_bug_base ("https://bugzilla.redhat.com/show_bug.cgi?id=");
-
- // Define the tests.
-- g_test_add_func ("/modulemd/v2/component/module/construct",
-- component_module_test_construct);
-+ g_test_add_func ("/modulemd/v2/component/module/construct/regular",
-+ component_module_test_construct_regular);
-+
-+ g_test_add_func ("/modulemd/v2/component/module/construct/new_null_name",
-+ component_module_test_construct_new_null_name);
-+
-+ g_test_add_func ("/modulemd/v2/component/module/construct/init_without_name",
-+ component_module_test_construct_init_without_name);
-+
-+ g_test_add_func ("/modulemd/v2/component/module/construct/init_null_name",
-+ component_module_test_construct_init_null_name);
-
- g_test_add_func ("/modulemd/v2/component/module/equals",
- component_module_test_equals);
-diff --git a/modulemd/tests/test-modulemd-defaults-v1.c b/modulemd/tests/test-modulemd-defaults-v1.c
-index c4fe235..2daa295 100644
---- a/modulemd/tests/test-modulemd-defaults-v1.c
-+++ b/modulemd/tests/test-modulemd-defaults-v1.c
-@@ -14,7 +14,6 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- #include <locale.h>
--#include <signal.h>
-
- #include "modulemd-defaults-v1.h"
- #include "private/glib-extensions.h"
-@@ -26,7 +25,7 @@
-
-
- static void
--defaults_test_construct (void)
-+defaults_test_construct_regular (void)
- {
- g_autoptr (ModulemdDefaultsV1) defaults = NULL;
-
-@@ -37,13 +36,6 @@ defaults_test_construct (void)
- g_assert_true (MODULEMD_IS_DEFAULTS_V1 (defaults));
- g_clear_object (&defaults);
-
-- /* Test new() with a NULL module_name */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- defaults = modulemd_defaults_v1_new (NULL);
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- g_clear_object (&defaults);
--
-
- /* Test object instantiation with a valid module name */
- // clang-format off
-@@ -55,26 +47,57 @@ defaults_test_construct (void)
- g_assert_true (MODULEMD_IS_DEFAULTS (defaults));
- g_assert_true (MODULEMD_IS_DEFAULTS_V1 (defaults));
- g_clear_object (&defaults);
-+}
-
-- /* Test object instantiation with a NULL module name */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- // clang-format off
-- defaults = g_object_new (MODULEMD_TYPE_DEFAULTS_V1,
-- "module-name", NULL,
-- NULL);
-- // clang-format on
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- g_clear_object (&defaults);
-
-- /* Test object instantiation without specifying the module name */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- // clang-format off
-- defaults = g_object_new (MODULEMD_TYPE_DEFAULTS_V1, NULL);
-- // clang-format on
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- g_clear_object (&defaults);
-+/* Test new() with a NULL module_name */
-+static void
-+defaults_test_construct_new_null_module_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdDefaultsV1) defaults = NULL;
-+ defaults = modulemd_defaults_v1_new (NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
-+/* Test object instantiation without specifying the module name */
-+static void
-+defaults_test_construct_init_no_module_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdDefaultsV1) defaults = NULL;
-+ // clang-format off
-+ defaults = g_object_new (MODULEMD_TYPE_DEFAULTS_V1, NULL);
-+ // clang-format on
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
-+/* Test object instantiation with a NULL module name */
-+static void
-+defaults_test_construct_init_null_module_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdDefaultsV1) defaults = NULL;
-+ // clang-format off
-+ defaults = g_object_new (MODULEMD_TYPE_DEFAULTS_V1,
-+ "module-name", NULL,
-+ NULL);
-+ // clang-format on
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
-
-@@ -820,8 +843,14 @@ main (int argc, char *argv[])
- // Define the tests.
- g_test_add_func ("/modulemd/v2/defaults/v1/equals", defaults_test_equals);
-
-- g_test_add_func ("/modulemd/v2/defaults/v1/construct",
-- defaults_test_construct);
-+ g_test_add_func ("/modulemd/v2/defaults/v1/construct/regular",
-+ defaults_test_construct_regular);
-+ g_test_add_func ("/modulemd/v2/defaults/v1/construct/new_null_module_name",
-+ defaults_test_construct_new_null_module_name);
-+ g_test_add_func ("/modulemd/v2/defaults/v1/construct/init_no_module_name",
-+ defaults_test_construct_init_no_module_name);
-+ g_test_add_func ("/modulemd/v2/defaults/v1/construct/init_null_module_name",
-+ defaults_test_construct_init_null_module_name);
-
- g_test_add_func ("/modulemd/v2/defaults/v1/copy", defaults_test_copy);
-
-diff --git a/modulemd/tests/test-modulemd-defaults.c b/modulemd/tests/test-modulemd-defaults.c
-index 2a46774..562e4fe 100644
---- a/modulemd/tests/test-modulemd-defaults.c
-+++ b/modulemd/tests/test-modulemd-defaults.c
-@@ -14,7 +14,6 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- #include <locale.h>
--#include <signal.h>
-
- #include "modulemd-defaults-v1.h"
- #include "modulemd-defaults.h"
-@@ -24,7 +23,7 @@
- #include "private/test-utils.h"
-
- static void
--defaults_test_construct (void)
-+defaults_test_construct_regular (void)
- {
- g_autoptr (ModulemdDefaults) defaults = NULL;
-
-@@ -34,30 +33,51 @@ defaults_test_construct (void)
- g_assert_true (MODULEMD_IS_DEFAULTS (defaults));
- g_assert_true (MODULEMD_IS_DEFAULTS_V1 (defaults));
- g_clear_object (&defaults);
-+}
-
-- /* Test new() with a zero mdversion */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- defaults = modulemd_defaults_new (0, "foo");
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- g_assert_null (defaults);
--
-- /* Test new() with a too-high mdversion */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- defaults = modulemd_defaults_new (MD_DEFAULTS_VERSION_LATEST + 1, "foo");
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- g_assert_null (defaults);
--
-- /* Test new() with a NULL module_name */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- defaults = modulemd_defaults_new (MD_DEFAULTS_VERSION_ONE, NULL);
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- /* If we trap the error, defaults actually returns a value here, so free
-- * it
-- */
-- g_clear_object (&defaults);
-+
-+/* Test new() with a zero mdversion */
-+static void
-+defaults_test_construct_zero_mdversion (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdDefaults) defaults = NULL;
-+ defaults = modulemd_defaults_new (0, "foo");
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
-+/* Test new() with a too-high mdversion */
-+static void
-+defaults_test_construct_too_high_mdversion (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdDefaults) defaults = NULL;
-+ defaults = modulemd_defaults_new (MD_DEFAULTS_VERSION_LATEST + 1, "foo");
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
-+/* Test new() with a NULL module_name */
-+static void
-+defaults_test_new_with_null_module_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdDefaults) defaults = NULL;
-+ defaults = modulemd_defaults_new (MD_DEFAULTS_VERSION_ONE, NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
-
-@@ -203,7 +223,14 @@ main (int argc, char *argv[])
- g_test_bug_base ("https://bugzilla.redhat.com/show_bug.cgi?id=");
-
- // Define the tests.
-- g_test_add_func ("/modulemd/v2/defaults/construct", defaults_test_construct);
-+ g_test_add_func ("/modulemd/v2/defaults/construct/regular",
-+ defaults_test_construct_regular);
-+ g_test_add_func ("/modulemd/v2/defaults/construct/zero_mdversion",
-+ defaults_test_construct_zero_mdversion);
-+ g_test_add_func ("/modulemd/v2/defaults/construct/too_high_mdversion",
-+ defaults_test_construct_too_high_mdversion);
-+ g_test_add_func ("/modulemd/v2/defaults/new/with_null_module_name",
-+ defaults_test_new_with_null_module_name);
-
- g_test_add_func ("/modulemd/v2/defaults/copy", defaults_test_copy);
-
-diff --git a/modulemd/tests/test-modulemd-dependencies.c b/modulemd/tests/test-modulemd-dependencies.c
-index bae0f46..d126dba 100644
---- a/modulemd/tests/test-modulemd-dependencies.c
-+++ b/modulemd/tests/test-modulemd-dependencies.c
-@@ -14,7 +14,6 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- #include <locale.h>
--#include <signal.h>
-
- #include "modulemd-dependencies.h"
- #include "private/glib-extensions.h"
-@@ -27,14 +26,6 @@ typedef struct _DependenciesFixture
- {
- } DependenciesFixture;
-
--gboolean signaled = FALSE;
--
--static void
--sigtrap_handler (int UNUSED (sig_num))
--{
-- signaled = TRUE;
--}
--
- static void
- dependencies_test_construct (void)
- {
-@@ -60,7 +51,7 @@ dependencies_test_construct (void)
-
-
- static void
--dependencies_test_dependencies (void)
-+dependencies_test_dependencies_regular (void)
- {
- g_autoptr (ModulemdDependencies) d = NULL;
- g_auto (GStrv) list = NULL;
-@@ -73,10 +64,6 @@ dependencies_test_dependencies (void)
- g_assert_nonnull (list);
- g_assert_cmpint (g_strv_length (list), ==, 0);
- g_clear_pointer (&list, g_strfreev);
-- signal (SIGTRAP, sigtrap_handler);
-- list = modulemd_dependencies_get_buildtime_streams_as_strv (d, "buildmod1");
-- g_assert_null (list);
-- g_clear_pointer (&list, g_strfreev);
-
- /* Add some deps */
- modulemd_dependencies_add_buildtime_stream (d, "buildmod1", "stream1");
-@@ -102,10 +89,6 @@ dependencies_test_dependencies (void)
- g_assert_nonnull (list);
- g_assert_cmpint (g_strv_length (list), ==, 0);
- g_clear_pointer (&list, g_strfreev);
-- signal (SIGTRAP, sigtrap_handler);
-- list = modulemd_dependencies_get_runtime_streams_as_strv (d, "buildmod1");
-- g_assert_null (list);
-- g_clear_pointer (&list, g_strfreev);
-
- list = modulemd_dependencies_get_runtime_modules_as_strv (d);
- g_assert_nonnull (list);
-@@ -117,10 +100,6 @@ dependencies_test_dependencies (void)
- g_assert_nonnull (list);
- g_assert_cmpint (g_strv_length (list), ==, 0);
- g_clear_pointer (&list, g_strfreev);
-- signal (SIGTRAP, sigtrap_handler);
-- list = modulemd_dependencies_get_runtime_streams_as_strv (d, "buildmod1");
-- g_assert_null (list);
-- g_clear_pointer (&list, g_strfreev);
- list = modulemd_dependencies_get_runtime_streams_as_strv (d, "runmod1");
- g_assert_nonnull (list);
- g_assert_cmpint (g_strv_length (list), ==, 2);
-@@ -130,6 +109,57 @@ dependencies_test_dependencies (void)
- }
-
-
-+static void
-+dependencies_test_dependencies_nonexistent_buildtime_stream (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdDependencies) d = NULL;
-+ g_auto (GStrv) list = NULL;
-+
-+ d = modulemd_dependencies_new ();
-+ g_assert_nonnull (d);
-+ g_assert_true (MODULEMD_IS_DEPENDENCIES (d));
-+
-+ list =
-+ modulemd_dependencies_get_buildtime_streams_as_strv (d, "buildmod1");
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
-+static void
-+dependencies_test_dependencies_nonexistent_runtime_stream (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdDependencies) d = NULL;
-+ g_auto (GStrv) list = NULL;
-+
-+ d = modulemd_dependencies_new ();
-+ g_assert_nonnull (d);
-+ g_assert_true (MODULEMD_IS_DEPENDENCIES (d));
-+
-+ /* Add some deps */
-+ modulemd_dependencies_add_buildtime_stream (d, "buildmod1", "stream1");
-+ modulemd_dependencies_add_runtime_stream (d, "runmod1", "stream2");
-+ modulemd_dependencies_add_runtime_stream (d, "runmod1", "stream1");
-+ modulemd_dependencies_set_empty_buildtime_dependencies_for_module (
-+ d, "defbuild");
-+ modulemd_dependencies_set_empty_runtime_dependencies_for_module (
-+ d, "defrun");
-+
-+ list =
-+ modulemd_dependencies_get_runtime_streams_as_strv (d, "buildmod1");
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
- static void
- dependencies_test_equals (void)
- {
-@@ -298,7 +328,7 @@ dependencies_test_equals (void)
-
-
- static void
--dependencies_test_copy (void)
-+dependencies_test_copy_regular (void)
- {
- g_autoptr (ModulemdDependencies) d = NULL;
- g_autoptr (ModulemdDependencies) d_copy = NULL;
-@@ -311,10 +341,6 @@ dependencies_test_copy (void)
- g_assert_nonnull (list);
- g_assert_cmpint (g_strv_length (list), ==, 0);
- g_clear_pointer (&list, g_strfreev);
-- signal (SIGTRAP, sigtrap_handler);
-- list = modulemd_dependencies_get_buildtime_streams_as_strv (d, "module1");
-- g_assert_null (list);
-- g_clear_pointer (&list, g_strfreev);
-
- d_copy = modulemd_dependencies_copy (d);
- g_assert_nonnull (d_copy);
-@@ -323,10 +349,6 @@ dependencies_test_copy (void)
- g_assert_nonnull (list);
- g_assert_cmpint (g_strv_length (list), ==, 0);
- g_clear_pointer (&list, g_strfreev);
-- signal (SIGTRAP, sigtrap_handler);
-- list = modulemd_dependencies_get_buildtime_streams_as_strv (d, "module1");
-- g_assert_null (list);
-- g_clear_pointer (&list, g_strfreev);
- g_clear_object (&d_copy);
-
- modulemd_dependencies_add_buildtime_stream (d, "buildmod1", "stream2");
-@@ -347,11 +369,7 @@ dependencies_test_copy (void)
- g_assert_cmpstr (list[0], ==, "builddef");
- g_assert_cmpstr (list[1], ==, "buildmod1");
- g_clear_pointer (&list, g_strfreev);
-- signal (SIGTRAP, sigtrap_handler);
-- list = modulemd_dependencies_get_buildtime_streams_as_strv (d_copy,
-- "nosuchmodule");
-- g_assert_null (list);
-- g_clear_pointer (&list, g_strfreev);
-+
- list =
- modulemd_dependencies_get_buildtime_streams_as_strv (d_copy, "buildmod1");
- g_assert_nonnull (list);
-@@ -371,11 +389,6 @@ dependencies_test_copy (void)
- g_assert_cmpstr (list[0], ==, "rundef");
- g_assert_cmpstr (list[1], ==, "runmod1");
- g_clear_pointer (&list, g_strfreev);
-- signal (SIGTRAP, sigtrap_handler);
-- list =
-- modulemd_dependencies_get_runtime_streams_as_strv (d_copy, "nosuchmodule");
-- g_assert_null (list);
-- g_clear_pointer (&list, g_strfreev);
- list = modulemd_dependencies_get_runtime_streams_as_strv (d_copy, "runmod1");
- g_assert_nonnull (list);
- g_assert_cmpint (g_strv_length (list), ==, 2);
-@@ -388,6 +401,101 @@ dependencies_test_copy (void)
- g_clear_pointer (&list, g_strfreev);
- }
-
-+
-+static void
-+dependencies_test_copy_empty_nonexsitent_buildtime_stream (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdDependencies) d = NULL;
-+ g_autoptr (ModulemdDependencies) d_copy = NULL;
-+ g_auto (GStrv) list = NULL;
-+
-+ d = modulemd_dependencies_new ();
-+ g_assert_nonnull (d);
-+ g_assert_true (MODULEMD_IS_DEPENDENCIES (d));
-+
-+ d_copy = modulemd_dependencies_copy (d);
-+ g_assert_nonnull (d_copy);
-+ g_assert_true (MODULEMD_IS_DEPENDENCIES (d_copy));
-+
-+ list =
-+ modulemd_dependencies_get_buildtime_streams_as_strv (d, "module1");
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
-+static void
-+dependencies_test_copy_full_nonexsitent_buildtime_stream (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdDependencies) d = NULL;
-+ g_autoptr (ModulemdDependencies) d_copy = NULL;
-+ g_auto (GStrv) list = NULL;
-+
-+ d = modulemd_dependencies_new ();
-+ g_assert_nonnull (d);
-+ g_assert_true (MODULEMD_IS_DEPENDENCIES (d));
-+
-+ modulemd_dependencies_add_buildtime_stream (d, "buildmod1", "stream2");
-+ modulemd_dependencies_add_buildtime_stream (d, "buildmod1", "stream1");
-+ modulemd_dependencies_set_empty_buildtime_dependencies_for_module (
-+ d, "builddef");
-+ modulemd_dependencies_add_runtime_stream (d, "runmod1", "stream3");
-+ modulemd_dependencies_add_runtime_stream (d, "runmod1", "stream4");
-+ modulemd_dependencies_set_empty_runtime_dependencies_for_module (
-+ d, "rundef");
-+
-+ d_copy = modulemd_dependencies_copy (d);
-+ g_assert_nonnull (d_copy);
-+ g_assert_true (MODULEMD_IS_DEPENDENCIES (d_copy));
-+ list = modulemd_dependencies_get_buildtime_streams_as_strv (
-+ d_copy, "nosuchmodule");
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
-+static void
-+dependencies_test_copy_full_nonexsitent_runtime_stream (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdDependencies) d = NULL;
-+ g_autoptr (ModulemdDependencies) d_copy = NULL;
-+ g_auto (GStrv) list = NULL;
-+
-+ d = modulemd_dependencies_new ();
-+ g_assert_nonnull (d);
-+ g_assert_true (MODULEMD_IS_DEPENDENCIES (d));
-+
-+ modulemd_dependencies_add_buildtime_stream (d, "buildmod1", "stream2");
-+ modulemd_dependencies_add_buildtime_stream (d, "buildmod1", "stream1");
-+ modulemd_dependencies_set_empty_buildtime_dependencies_for_module (
-+ d, "builddef");
-+ modulemd_dependencies_add_runtime_stream (d, "runmod1", "stream3");
-+ modulemd_dependencies_add_runtime_stream (d, "runmod1", "stream4");
-+ modulemd_dependencies_set_empty_runtime_dependencies_for_module (
-+ d, "rundef");
-+
-+ d_copy = modulemd_dependencies_copy (d);
-+ g_assert_nonnull (d_copy);
-+ g_assert_true (MODULEMD_IS_DEPENDENCIES (d_copy));
-+ list = modulemd_dependencies_get_runtime_streams_as_strv (
-+ d_copy, "nosuchmodule");
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
- static void
- dependencies_test_parse_yaml (void)
- {
-@@ -631,13 +739,29 @@ main (int argc, char *argv[])
- g_test_add_func ("/modulemd/v2/dependencies/construct",
- dependencies_test_construct);
-
-- g_test_add_func ("/modulemd/v2/dependencies/dependencies",
-- dependencies_test_dependencies);
-+ g_test_add_func ("/modulemd/v2/dependencies/dependencies/regular",
-+ dependencies_test_dependencies_regular);
-+ g_test_add_func (
-+ "/modulemd/v2/dependencies/dependencies/nonexistent_buildtime_stream",
-+ dependencies_test_dependencies_nonexistent_buildtime_stream);
-+ g_test_add_func (
-+ "/modulemd/v2/dependencies/dependencies/nonexistent_runtime_stream",
-+ dependencies_test_dependencies_nonexistent_runtime_stream);
-
- g_test_add_func ("/modulemd/v2/dependencies/equals",
- dependencies_test_equals);
-
-- g_test_add_func ("/modulemd/v2/dependencies/copy", dependencies_test_copy);
-+ g_test_add_func ("/modulemd/v2/dependencies/copy/regular",
-+ dependencies_test_copy_regular);
-+ g_test_add_func (
-+ "/modulemd/v2/dependencies/copy/empty_nonexsitent_buildtime_stream",
-+ dependencies_test_copy_empty_nonexsitent_buildtime_stream);
-+ g_test_add_func (
-+ "/modulemd/v2/dependencies/copy/full_nonexsitent_buildtime_stream",
-+ dependencies_test_copy_full_nonexsitent_buildtime_stream);
-+ g_test_add_func (
-+ "/modulemd/v2/dependencies/copy/full_nonexsitent_rundtime_stream",
-+ dependencies_test_copy_full_nonexsitent_runtime_stream);
-
- g_test_add_func ("/modulemd/v2/dependencies/yaml/parse",
- dependencies_test_parse_yaml);
-diff --git a/modulemd/tests/test-modulemd-module.c b/modulemd/tests/test-modulemd-module.c
-index c083c96..7759b37 100644
---- a/modulemd/tests/test-modulemd-module.c
-+++ b/modulemd/tests/test-modulemd-module.c
-@@ -14,7 +14,6 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- #include <locale.h>
--#include <signal.h>
-
- #include "modulemd-defaults.h"
- #include "modulemd-module-index-merger.h"
-@@ -38,7 +37,7 @@ typedef struct _ModuleFixture
-
-
- static void
--module_test_construct (void)
-+module_test_construct_regular (void)
- {
- g_autoptr (ModulemdModule) m = NULL;
- g_autoptr (GPtrArray) list = NULL;
-@@ -66,27 +65,51 @@ module_test_construct (void)
- g_assert_true (MODULEMD_IS_MODULE (m));
- g_assert_cmpstr (modulemd_module_get_module_name (m), ==, "testmodule");
- g_clear_object (&m);
-+}
-
-- /* Test that we abort with a NULL name to new() */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- m = modulemd_module_new (NULL);
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- g_clear_object (&m);
-
-- /* Test that we abort if we instantiate without a name */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- m = g_object_new (MODULEMD_TYPE_MODULE, NULL);
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- g_clear_object (&m);
-+/* Test that we abort with a NULL name to new() */
-+static void
-+module_test_construct_new_null_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdModule) m = NULL;
-+ m = modulemd_module_new (NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
-- /* test that we abort if we instantiate with a NULL name */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- m = g_object_new (MODULEMD_TYPE_MODULE, "module-name", NULL, NULL);
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- g_clear_object (&m);
-+
-+/* Test that we abort if we instantiate without a name */
-+static void
-+module_test_construct_init_no_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdModule) m = NULL;
-+ m = g_object_new (MODULEMD_TYPE_MODULE, NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
-+/* test that we abort if we instantiate with a NULL name */
-+static void
-+module_test_construct_init_null_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdModule) m = NULL;
-+ m = g_object_new (MODULEMD_TYPE_MODULE, "module-name", NULL, NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
-
-@@ -801,7 +824,14 @@ main (int argc, char *argv[])
-
- // Define the tests.
-
-- g_test_add_func ("/modulemd/v2/module/construct", module_test_construct);
-+ g_test_add_func ("/modulemd/v2/module/construct/regular",
-+ module_test_construct_regular);
-+ g_test_add_func ("/modulemd/v2/module/construct/new_null_name",
-+ module_test_construct_new_null_name);
-+ g_test_add_func ("/modulemd/v2/module/construct/init_no_name",
-+ module_test_construct_init_no_name);
-+ g_test_add_func ("/modulemd/v2/module/construct/init_null_name",
-+ module_test_construct_init_null_name);
-
- g_test_add_func ("/modulemd/v2/module/defaults", module_test_defaults);
-
-diff --git a/modulemd/tests/test-modulemd-obsoletes.c b/modulemd/tests/test-modulemd-obsoletes.c
-index f3e90d3..d4ced3c 100644
---- a/modulemd/tests/test-modulemd-obsoletes.c
-+++ b/modulemd/tests/test-modulemd-obsoletes.c
-@@ -14,7 +14,6 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- #include <locale.h>
--#include <signal.h>
-
- #include "modulemd-subdocument-info.h"
- #include "modulemd-obsoletes.h"
-@@ -26,7 +25,7 @@
- #include "private/test-utils.h"
-
- static void
--obsoletes_test_construct (void)
-+obsoletes_test_construct_regular (void)
- {
- g_autoptr (ModulemdObsoletes) e = NULL;
-
-@@ -39,33 +38,51 @@ obsoletes_test_construct (void)
- g_assert_cmpstr (modulemd_obsoletes_get_module_stream (e), ==, "teststream");
- g_assert_cmpstr (modulemd_obsoletes_get_message (e), ==, "testmessage");
- g_clear_object (&e);
-+}
-
-- /* Test new() with a NULL module_name */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- e = modulemd_obsoletes_new (
-- MD_OBSOLETES_VERSION_ONE, 2, NULL, "teststream", "testmessage");
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- /* If we trap the error, obsoletes actually returns a value here, so free it */
-- g_clear_object (&e);
-+/* Test new() with a NULL module_name */
-+static void
-+obsoletes_test_construct_null_module_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdObsoletes) e = NULL;
-+ e = modulemd_obsoletes_new (
-+ MD_OBSOLETES_VERSION_ONE, 2, NULL, "teststream", "testmessage");
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
-- /* Test new() with a NULL module_context */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- e = modulemd_obsoletes_new (
-- MD_OBSOLETES_VERSION_ONE, 2, "testmodule", NULL, "testmessage");
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- /* If we trap the error, obsoletes actually returns a value here, so free it */
-- g_clear_object (&e);
-+/* Test new() with a NULL module_context */
-+static void
-+obsoletes_test_construct_null_module_context (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdObsoletes) e = NULL;
-+ e = modulemd_obsoletes_new (
-+ MD_OBSOLETES_VERSION_ONE, 2, "testmodule", NULL, "testmessage");
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
-- /* Test new() with a NULL message */
-- modulemd_test_signal = 0;
-- signal (SIGTRAP, modulemd_test_signal_handler);
-- e = modulemd_obsoletes_new (
-- MD_OBSOLETES_VERSION_ONE, 2, "testmodule", "teststream", NULL);
-- g_assert_cmpint (modulemd_test_signal, ==, SIGTRAP);
-- /* If we trap the error, obsoletes actually returns a value here, so free it */
-- g_clear_object (&e);
-+/* Test new() with a NULL message */
-+static void
-+obsoletes_test_construct_null_message (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdObsoletes) e = NULL;
-+ e = modulemd_obsoletes_new (
-+ MD_OBSOLETES_VERSION_ONE, 2, "testmodule", "teststream", NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
- static void
-@@ -496,8 +513,14 @@ main (int argc, char *argv[])
-
- // Define the tests.
-
-- g_test_add_func ("/modulemd/v2/obsoletes/construct",
-- obsoletes_test_construct);
-+ g_test_add_func ("/modulemd/v2/obsoletes/construct/regular",
-+ obsoletes_test_construct_regular);
-+ g_test_add_func ("/modulemd/v2/obsoletes/construct/null_module_name",
-+ obsoletes_test_construct_null_module_name);
-+ g_test_add_func ("/modulemd/v2/obsoletes/construct/null_module_context",
-+ obsoletes_test_construct_null_module_context);
-+ g_test_add_func ("/modulemd/v2/obsoletes/construct/null_message",
-+ obsoletes_test_construct_null_message);
-
- g_test_add_func ("/modulemd/v2/obsoletes/copy", obsoletes_test_copy);
-
-diff --git a/modulemd/tests/test-modulemd-profile.c b/modulemd/tests/test-modulemd-profile.c
-index 3a730c1..b4bd88f 100644
---- a/modulemd/tests/test-modulemd-profile.c
-+++ b/modulemd/tests/test-modulemd-profile.c
-@@ -14,7 +14,6 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- #include <locale.h>
--#include <signal.h>
-
- #include "modulemd-profile.h"
- #include "private/glib-extensions.h"
-@@ -26,16 +25,8 @@ typedef struct _ProfileFixture
- {
- } ProfileFixture;
-
--gboolean signaled = FALSE;
--
- static void
--sigtrap_handler (int UNUSED (sig_num))
--{
-- signaled = TRUE;
--}
--
--static void
--profile_test_construct (void)
-+profile_test_construct_regular (void)
- {
- g_autoptr (ModulemdProfile) p = NULL;
- g_auto (GStrv) rpms = NULL;
-@@ -56,27 +47,52 @@ profile_test_construct (void)
- g_assert_true (MODULEMD_IS_PROFILE (p));
- g_assert_cmpstr (modulemd_profile_get_name (p), ==, "testprofile");
- g_clear_object (&p);
-+}
-
-- /* Test that we abort with a NULL name to new() */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- p = modulemd_profile_new (NULL);
-- g_assert_true (signaled);
-- g_clear_object (&p);
-
-- /* Test that we abort if we instantiate without a name */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- p = g_object_new (MODULEMD_TYPE_PROFILE, NULL);
-- g_assert_true (signaled);
-- g_clear_object (&p);
-+/* Test that we abort with a NULL name to new() */
-+static void
-+profile_test_construct_new_null (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdProfile) p = NULL;
-+ p = modulemd_profile_new (NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
-- /* test that we abort if we instantiate with a NULL name */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- p = g_object_new (MODULEMD_TYPE_PROFILE, "name", NULL, NULL);
-- g_assert_true (signaled);
-- g_clear_object (&p);
-+
-+/* Test that we abort if we instantiate without a name */
-+static void
-+profile_test_construct_init_no_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdProfile) p = NULL;
-+ p = g_object_new (MODULEMD_TYPE_PROFILE, NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-+
-+
-+/* Test that we abort if we instantiate with a NULL name */
-+static void
-+profile_test_construct_init_null_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdProfile) p = NULL;
-+
-+ p = g_object_new (MODULEMD_TYPE_PROFILE, "name", NULL, NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
-
-@@ -353,12 +369,23 @@ profile_test_get_name (void)
-
- g_object_get (p, "name", &name, NULL);
- g_assert_cmpstr (name, ==, "testprofile");
-+}
-+
-
-- /* Test that name is immutable */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- g_object_set (p, "name", "notatest", NULL);
-- g_assert_true (signaled);
-+/* Test that name is immutable */
-+static void
-+profile_test_name_is_immutable (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdProfile) p = NULL;
-+ p = modulemd_profile_new ("testprofile");
-+
-+ g_object_set (p, "name", "notatest", NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
-
-@@ -576,7 +603,14 @@ main (int argc, char *argv[])
-
- // Define the tests.
-
-- g_test_add_func ("/modulemd/v2/profile/construct", profile_test_construct);
-+ g_test_add_func ("/modulemd/v2/profile/construct/regular",
-+ profile_test_construct_regular);
-+ g_test_add_func ("/modulemd/v2/profile/construct/new_null",
-+ profile_test_construct_new_null);
-+ g_test_add_func ("/modulemd/v2/profile/construct/init_no_name",
-+ profile_test_construct_init_no_name);
-+ g_test_add_func ("/modulemd/v2/profile/construct/init_null_name",
-+ profile_test_construct_init_null_name);
-
- g_test_add_func ("/modulemd/v2/profile/equals", profile_test_equals);
-
-@@ -584,6 +618,9 @@ main (int argc, char *argv[])
-
- g_test_add_func ("/modulemd/v2/profile/get_name", profile_test_get_name);
-
-+ g_test_add_func ("/modulemd/v2/profile/name_is_immutable",
-+ profile_test_name_is_immutable);
-+
- g_test_add_func ("/modulemd/v2/profile/get_set_description",
- profile_test_get_set_description);
-
-diff --git a/modulemd/tests/test-modulemd-service-level.c b/modulemd/tests/test-modulemd-service-level.c
-index d8ee981..961956d 100644
---- a/modulemd/tests/test-modulemd-service-level.c
-+++ b/modulemd/tests/test-modulemd-service-level.c
-@@ -14,7 +14,6 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- #include <locale.h>
--#include <signal.h>
-
- #include "modulemd-service-level.h"
- #include "private/glib-extensions.h"
-@@ -26,16 +25,8 @@ typedef struct _ServiceLevelFixture
- {
- } ServiceLevelFixture;
-
--gboolean signaled = FALSE;
--
--static void
--sigtrap_handler (int UNUSED (sig_num))
--{
-- signaled = TRUE;
--}
--
- static void
--service_level_test_construct (void)
-+service_level_test_construct_regular (void)
- {
- g_autoptr (ModulemdServiceLevel) sl = NULL;
-
-@@ -59,34 +50,55 @@ service_level_test_construct (void)
- g_assert_cmpstr (modulemd_service_level_get_name (sl), ==, "bar");
- g_assert_null (modulemd_service_level_get_eol (sl));
- g_clear_object (&sl);
-+}
-
-
-- /* Test that we abort if we call new() with a NULL name */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- sl = modulemd_service_level_new (NULL);
-- g_assert_true (signaled);
-- g_clear_object (&sl);
-+/* Test that we abort if we call new() with a NULL name */
-+static void
-+service_level_test_construct_new_null (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdServiceLevel) sl = NULL;
-+ sl = modulemd_service_level_new (NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
-
-- /* Test that we abort if we instatiate without a name */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- sl = g_object_new (MODULEMD_TYPE_SERVICE_LEVEL, NULL);
-- g_assert_true (signaled);
-- g_clear_object (&sl);
-+/* Test that we abort if we instatiate without a name */
-+static void
-+service_level_test_construct_init_no_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdServiceLevel) sl = NULL;
-+ sl = g_object_new (MODULEMD_TYPE_SERVICE_LEVEL, NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
-
-- /* Test that we abort if we instatiate with a NULL name */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- // clang-format off
-- sl = g_object_new (MODULEMD_TYPE_SERVICE_LEVEL,
-- "name", NULL,
-- NULL);
-- // clang-format on
-- g_assert_true (signaled);
-- g_clear_object (&sl);
-+/* Test that we abort if we instatiate with a NULL name */
-+static void
-+service_level_test_construct_init_null_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdServiceLevel) sl = NULL;
-+ // clang-format off
-+ sl = g_object_new (MODULEMD_TYPE_SERVICE_LEVEL,
-+ "name", NULL,
-+ NULL);
-+ // clang-format on
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
-
-@@ -249,19 +261,25 @@ service_level_test_get_name (void)
- NULL);
- // clang-format on
- g_assert_cmpstr (name, ==, "foo");
-+}
-
-
-- /* Test that trying to set the name by object properties fails.
-- * The name must be immutable for the life of the object.
-- */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- // clang-format off
-- g_object_set (sl,
-- "name", "bar",
-- NULL);
-- // clang-format on
-- g_assert_true (signaled);
-+/*
-+ * Test that trying to set the name by object properties fails.
-+ * The name must be immutable for the life of the object.
-+ */
-+static void
-+service_level_test_name_is_immutable (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdServiceLevel) sl = NULL;
-+ sl = modulemd_service_level_new ("foo");
-+ g_object_set (sl, "name", "bar", NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
-
-@@ -476,12 +494,21 @@ main (int argc, char *argv[])
-
- // Define the tests.
-
-- g_test_add_func ("/modulemd/v2/servicelevel/construct",
-- service_level_test_construct);
-+ g_test_add_func ("/modulemd/v2/servicelevel/construct/regular",
-+ service_level_test_construct_regular);
-+ g_test_add_func ("/modulemd/v2/servicelevel/construct/new_null",
-+ service_level_test_construct_new_null);
-+ g_test_add_func ("/modulemd/v2/servicelevel/construct/init_no_name",
-+ service_level_test_construct_init_no_name);
-+ g_test_add_func ("/modulemd/v2/servicelevel/construct/init_null_name",
-+ service_level_test_construct_init_null_name);
-
- g_test_add_func ("/modulemd/v2/servicelevel/get_set_name",
- service_level_test_get_name);
-
-+ g_test_add_func ("/modulemd/v2/servicelevel/name_is_immutable",
-+ service_level_test_name_is_immutable);
-+
- g_test_add_func ("/modulemd/v2/servicelevel/equals",
- service_level_test_equals);
-
-diff --git a/modulemd/tests/test-modulemd-translation-entry.c b/modulemd/tests/test-modulemd-translation-entry.c
-index 858bdfa..ee17940 100644
---- a/modulemd/tests/test-modulemd-translation-entry.c
-+++ b/modulemd/tests/test-modulemd-translation-entry.c
-@@ -14,7 +14,6 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- #include <locale.h>
--#include <signal.h>
-
- #include "modulemd-translation-entry.h"
- #include "private/glib-extensions.h"
-@@ -26,16 +25,8 @@ typedef struct _TranslationEntryFixture
- {
- } TranslationEntryFixture;
-
--gboolean signaled = FALSE;
--
- static void
--sigtrap_handler (int UNUSED (sig_num))
--{
-- signaled = TRUE;
--}
--
--static void
--translation_entry_test_construct (void)
-+translation_entry_test_construct_regular (void)
- {
- g_autoptr (ModulemdTranslationEntry) te = NULL;
- g_auto (GStrv) profile_names = NULL;
-@@ -110,34 +101,55 @@ translation_entry_test_construct (void)
- g_assert_cmpstr (
- modulemd_translation_entry_get_description (te), ==, "jumped");
- g_clear_object (&te);
-+}
-
-
-- /* Test that we abort if we call new() with a NULL locale */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- te = modulemd_translation_entry_new (NULL);
-- g_assert_true (signaled);
-- g_clear_object (&te);
-+/* Test that we abort if we call new() with a NULL locale */
-+static void
-+translation_entry_test_construct_new_null (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdTranslationEntry) te = NULL;
-+ te = modulemd_translation_entry_new (NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
-
-- /* Test that we abort if we instatiate without a locale */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- te = g_object_new (MODULEMD_TYPE_TRANSLATION_ENTRY, NULL);
-- g_assert_true (signaled);
-- g_clear_object (&te);
-+/* Test that we abort if we instatiate without a locale */
-+static void
-+translation_entry_test_construct_init_no_locale (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdTranslationEntry) te = NULL;
-+ te = g_object_new (MODULEMD_TYPE_TRANSLATION_ENTRY, NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
-
-- /* Test that we abort if we instatiate with a NULL locale */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- // clang-format off
-- te = g_object_new (MODULEMD_TYPE_TRANSLATION_ENTRY,
-- "locale", NULL,
-- NULL);
-- // clang-format on
-- g_assert_true (signaled);
-- g_clear_object (&te);
-+/* Test that we abort if we instatiate with a NULL locale */
-+static void
-+translation_entry_test_construct_init_null_locale (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdTranslationEntry) te = NULL;
-+ // clang-format off
-+ te = g_object_new (MODULEMD_TYPE_TRANSLATION_ENTRY,
-+ "locale", NULL,
-+ NULL);
-+ // clang-format on
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
-
-@@ -334,12 +346,26 @@ translation_entry_test_get_locale (void)
-
- g_object_get (te, "locale", &locale, NULL);
- g_assert_cmpstr (locale, ==, "en_US");
-+}
-+
-
-- /* Test that locale is immutable */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- g_object_set (te, "locale", "en_GB", NULL);
-- g_assert_true (signaled);
-+/* Test that locale is immutable */
-+static void
-+translation_entry_test_locale_is_immutable (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdTranslationEntry) te = NULL;
-+
-+ te = modulemd_translation_entry_new ("en_US");
-+ g_assert_nonnull (te);
-+ g_assert_true (MODULEMD_IS_TRANSLATION_ENTRY (te));
-+
-+ g_object_set (te, "locale", "en_GB", NULL);
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
-
-@@ -609,8 +635,14 @@ main (int argc, char *argv[])
-
- // Define the tests.
-
-- g_test_add_func ("/modulemd/v2/translationentry/construct",
-- translation_entry_test_construct);
-+ g_test_add_func ("/modulemd/v2/translationentry/construct/regular",
-+ translation_entry_test_construct_regular);
-+ g_test_add_func ("/modulemd/v2/translationentry/construct/new_null",
-+ translation_entry_test_construct_new_null);
-+ g_test_add_func ("/modulemd/v2/translationentry/construct/init_no_locale",
-+ translation_entry_test_construct_init_no_locale);
-+ g_test_add_func ("/modulemd/v2/translationentry/construct/init_null_locale",
-+ translation_entry_test_construct_init_null_locale);
-
- g_test_add_func ("/modulemd/v2/translationentry/copy",
- translation_entry_test_copy);
-@@ -618,6 +650,9 @@ main (int argc, char *argv[])
- g_test_add_func ("/modulemd/v2/translationentry/get_locale",
- translation_entry_test_get_locale);
-
-+ g_test_add_func ("/modulemd/v2/translationentry/locale_is_immutable",
-+ translation_entry_test_locale_is_immutable);
-+
- g_test_add_func ("/modulemd/v2/translationentry/get_set_summary",
- translation_entry_test_get_set_summary);
-
-diff --git a/modulemd/tests/test-modulemd-translation.c b/modulemd/tests/test-modulemd-translation.c
-index 655200f..a67b787 100644
---- a/modulemd/tests/test-modulemd-translation.c
-+++ b/modulemd/tests/test-modulemd-translation.c
-@@ -14,7 +14,6 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- #include <locale.h>
--#include <signal.h>
-
- #include "modulemd-subdocument-info.h"
- #include "modulemd-translation-entry.h"
-@@ -30,17 +29,9 @@ typedef struct _TranslationFixture
- {
- } TranslationFixture;
-
--gboolean signaled = FALSE;
-
- static void
--sigtrap_handler (int UNUSED (sig_num))
--{
-- signaled = TRUE;
--}
--
--
--static void
--translation_test_construct (void)
-+translation_test_construct_regular (void)
- {
- g_autoptr (ModulemdTranslation) t = NULL;
- g_auto (GStrv) locales = NULL;
-@@ -94,41 +85,64 @@ translation_test_construct (void)
- g_assert_cmpstr (modulemd_translation_get_module_stream (t), ==, "teststr");
- g_assert_cmpint (modulemd_translation_get_modified (t), ==, modified);
- g_clear_object (&t);
-+}
-
-- /* Test that object_new does not work without a version */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- // clang-format off
-- t = g_object_new (MODULEMD_TYPE_TRANSLATION,
-- "module_name", "testmod",
-- "module_stream", "teststr",
-- NULL);
-- // clang-format on
-- g_assert_true (signaled);
-- g_clear_object (&t);
-+/* Test that object_new does not work without a version */
-+static void
-+translation_test_construct_no_version (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ g_autoptr (ModulemdTranslation) t = NULL;
-+ // clang-format off
-+ t = g_object_new (MODULEMD_TYPE_TRANSLATION,
-+ "module_name", "testmod",
-+ "module_stream", "teststr",
-+ NULL);
-+ // clang-format on
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
-- /* Test that object_new does not work without a name */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- // clang-format off
-- t = g_object_new (MODULEMD_TYPE_TRANSLATION,
-- "version", translation_version,
-- "module_stream", "teststr", NULL);
-- // clang-format on
-- g_assert_true (signaled);
-- g_clear_object (&t);
-+/* Test that object_new does not work without a name */
-+static void
-+translation_test_construct_no_name (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ guint64 translation_version = 1;
-+ g_autoptr (ModulemdTranslation) t = NULL;
-+ // clang-format off
-+ t = g_object_new (MODULEMD_TYPE_TRANSLATION,
-+ "version", translation_version,
-+ "module_stream", "teststr", NULL);
-+ // clang-format on
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
-+}
-
-- /* Test that object_new does not work without a stream */
-- signaled = FALSE;
-- signal (SIGTRAP, sigtrap_handler);
-- // clang-format off
-- t = g_object_new (MODULEMD_TYPE_TRANSLATION,
-- "version", translation_version,
-- "module_name", "testmod",
-- NULL);
-- // clang-format on
-- g_assert_true (signaled);
-- g_clear_object (&t);
-+/* Test that object_new does not work without a stream */
-+static void
-+translation_test_construct_no_stream (void)
-+{
-+ if (g_test_subprocess ())
-+ {
-+ guint64 translation_version = 1;
-+ g_autoptr (ModulemdTranslation) t = NULL;
-+ // clang-format off
-+ t = g_object_new (MODULEMD_TYPE_TRANSLATION,
-+ "version", translation_version,
-+ "module_name", "testmod",
-+ NULL);
-+ // clang-format on
-+ return;
-+ }
-+ g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
-+ g_test_trap_assert_failed ();
- }
-
- static void
-@@ -416,8 +430,14 @@ main (int argc, char *argv[])
-
- // Define the tests.
-
-- g_test_add_func ("/modulemd/v2/translation/construct",
-- translation_test_construct);
-+ g_test_add_func ("/modulemd/v2/translation/construct/regular",
-+ translation_test_construct_regular);
-+ g_test_add_func ("/modulemd/v2/translation/construct/no_version",
-+ translation_test_construct_no_version);
-+ g_test_add_func ("/modulemd/v2/translation/construct/no_name",
-+ translation_test_construct_no_name);
-+ g_test_add_func ("/modulemd/v2/translation/construct/no_stream",
-+ translation_test_construct_no_stream);
-
- g_test_add_func ("/modulemd/v2/translation/copy", translation_test_copy);
-
---
-2.52.0
-
diff --git a/modulemd-2.15.2-tests-Adapt-to-pygobject-3.55.0.patch b/modulemd-2.15.2-tests-Adapt-to-pygobject-3.55.0.patch
deleted file mode 100644
index 6c4c517..0000000
--- a/modulemd-2.15.2-tests-Adapt-to-pygobject-3.55.0.patch
+++ /dev/null
@@ -1,167 +0,0 @@
-From e33ecf1cc15383b9563bc4cd9a6908277bf8039d Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
-Date: Tue, 24 Feb 2026 13:35:17 +0100
-Subject: [PATCH] tests: Adapt to pygobject 3.55.0
-
-After upgrading pygobject from 3.54.5 to 3.55.2, Python tests
-expecting a process failure on setting an immutable
-(G_PARAM_CONSTRUCT_ONLY) property started to fail like this:
-
- Traceback (most recent call last):
- File "/home/test/libmodulemd-devel/redhat-linux-build/../modulemd/tests/ModulemdTests/defaults.py", line 114, in test_module_name
- self.assertProcessFailure(_set_module_name_to_none, defs)
- ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/home/test/libmodulemd-devel/modulemd/tests/ModulemdTests/base.py", line 60, in assertProcessFailure
- callable(*args)
- ~~~~~~~~^^^^^^^
- File "/home/test/libmodulemd-devel/redhat-linux-build/../modulemd/tests/ModulemdTests/defaults.py", line 43, in _set_module_name_to_none
- defs.props.module_name = None
- ^^^^^^^^^^^^^^^^^^^^^^
- TypeError: property 'module-name' can only be set in constructor
-
-The cause was that pygobject-3.55.0 started to raise a Python
-TypeError exception instead of calling Glib functions which would fail
-on its own depending on Glib warning fatality and Glib version. An example:
-
- cat /tmp/test.py
- #!/usr/bin/python3
-
- import gi
- gi.require_version("Modulemd", "2.0")
- from gi.repository import Modulemd
-
- object = Modulemd.Defaults.new(Modulemd.DefaultsVersionEnum.LATEST, "foo")
- object.props.module_name = "bar"
-
-Before:
-
- $ /tmp/test.py
- /tmp/test.py:8: Warning: g_object_set_is_valid_property: construct property "module-name" for object 'ModulemdDefaultsV1' can't be set after construction
- object.props.module_name = "bar"
-
-After:
-
- $ /tmp/test.py
- Traceback (most recent call last):
- File "/tmp/test.py", line 8, in <module>
- object.props.module_name = "bar"
- ^^^^^^^^^^^^^^^^^^^^^^^^
- TypeError: property 'module-name' can only be set in constructor
-
-That was an intentional change in pygobject
-3b6e4804de4f26cfb9472666f18f44ac731d874c commit (gi: Factor out
-pygi_set_property_gvalue_from_property_info). Probably an
-optimization.
-
-This patch adjusts the tests to pass if TypeError exception is raised
-regardless of Glib warning fatality.
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2440570
----
- modulemd/tests/ModulemdTests/base.py | 30 +++++++++++++++++++
- modulemd/tests/ModulemdTests/defaults.py | 4 ++-
- modulemd/tests/ModulemdTests/profile.py | 4 ++-
- modulemd/tests/ModulemdTests/servicelevel.py | 2 +-
- .../tests/ModulemdTests/translationentry.py | 2 +-
- 5 files changed, 38 insertions(+), 4 deletions(-)
-
-diff --git a/modulemd/tests/ModulemdTests/base.py b/modulemd/tests/ModulemdTests/base.py
-index 55ac742..16b90e0 100644
---- a/modulemd/tests/ModulemdTests/base.py
-+++ b/modulemd/tests/ModulemdTests/base.py
-@@ -67,6 +67,36 @@ class TestBase(unittest.TestCase):
- if os.WIFSIGNALED(status):
- raise AssertionError("Child process was unexpectedly aborted")
-
-+ def assertTypeExceptionOrProcessFailure(self, callable, *args):
-+ """Calls the callable in a subprocess and checks that the process
-+ raised a TypeError exception, or was killed depending on Glib warning
-+ fatality.
-+
-+ Since pygobject-3.55.0 setting a G_PARAM_CONSTRUCT_ONLY property
-+ raises a Python exception. Old pygobject continues down to Glib
-+ which kills the process if Glib warnings a fatal, otherwise Glib
-+ warning is printed and the code continues.
-+ """
-+ pid = os.fork()
-+ if pid == 0:
-+ try:
-+ callable(*args)
-+ except TypeError:
-+ os._exit(1)
-+ os._exit(0)
-+ _, status = os.waitpid(pid, 0)
-+ if os.WIFEXITED(status) and os.WEXITSTATUS(status) == 1:
-+ return
-+ if self.warnings_fatal:
-+ if not os.WIFSIGNALED(status):
-+ raise AssertionError(
-+ "Child process did not raise TypeError "
-+ "exception or was not aborted"
-+ )
-+ else:
-+ if os.WIFSIGNALED(status):
-+ raise AssertionError("Child process was unexpectedly aborted")
-+
- @property
- def warnings_fatal(self):
- gdebug = os.getenv("G_DEBUG", "").split(",")
-diff --git a/modulemd/tests/ModulemdTests/defaults.py b/modulemd/tests/ModulemdTests/defaults.py
-index 3a1b9fe..2f2ec02 100644
---- a/modulemd/tests/ModulemdTests/defaults.py
-+++ b/modulemd/tests/ModulemdTests/defaults.py
-@@ -111,7 +111,9 @@ class TestDefaults(TestBase):
- assert defs.get_module_name() == "foo"
-
- # Ensure we cannot set the module_name
-- self.assertProcessFailure(_set_module_name_to_none, defs)
-+ self.assertTypeExceptionOrProcessFailure(
-+ _set_module_name_to_none, defs
-+ )
-
- def test_modified(self):
- defs = Modulemd.Defaults.new(
-diff --git a/modulemd/tests/ModulemdTests/profile.py b/modulemd/tests/ModulemdTests/profile.py
-index 765c57d..f8c7b93 100644
---- a/modulemd/tests/ModulemdTests/profile.py
-+++ b/modulemd/tests/ModulemdTests/profile.py
-@@ -94,7 +94,9 @@ class TestProfile(TestBase):
- assert p.get_name() == "testprofile"
- assert p.props.name == "testprofile"
-
-- self.assertProcessFailure(_set_props_name, p, "notadrill")
-+ self.assertTypeExceptionOrProcessFailure(
-+ _set_props_name, p, "notadrill"
-+ )
-
- def test_get_set_description(self):
- p = Modulemd.Profile(name="testprofile")
-diff --git a/modulemd/tests/ModulemdTests/servicelevel.py b/modulemd/tests/ModulemdTests/servicelevel.py
-index fc9c648..71289eb 100644
---- a/modulemd/tests/ModulemdTests/servicelevel.py
-+++ b/modulemd/tests/ModulemdTests/servicelevel.py
-@@ -103,7 +103,7 @@ class TestServiceLevel(TestBase):
- assert sl.props.name == "foo"
-
- # This property is not writable, make sure it fails to attempt it
-- self.assertProcessFailure(_set_props_name, sl, "bar")
-+ self.assertTypeExceptionOrProcessFailure(_set_props_name, sl, "bar")
-
- def test_get_set_eol(self):
- sl = Modulemd.ServiceLevel.new("foo")
-diff --git a/modulemd/tests/ModulemdTests/translationentry.py b/modulemd/tests/ModulemdTests/translationentry.py
-index 9fce443..685349e 100644
---- a/modulemd/tests/ModulemdTests/translationentry.py
-+++ b/modulemd/tests/ModulemdTests/translationentry.py
-@@ -172,7 +172,7 @@ class TestTranslationEntry(TestBase):
- assert te.get_locale() == "en_US"
- assert te.props.locale == "en_US"
-
-- self.assertProcessFailure(_set_locale, te)
-+ self.assertTypeExceptionOrProcessFailure(_set_locale, te)
-
- def test_get_set_summary(self):
- te = Modulemd.TranslationEntry(locale="en_US")
---
-2.53.0
-
diff --git a/sources b/sources
index a912538..cb103ed 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (modulemd-2.15.2.tar.xz) = d1785f6982ed19292103d741e3e94581e9789737be6f8e90d19218296f3aeb87d6589f3247744f8eab4f714d298d1508312b119624a8c32086c720becfa4cdc5
-SHA512 (modulemd-2.15.2.tar.xz.asc) = 282ff35f15418e95aae09d9bff8084aa0b6f2732cea3934a84a1bd4ddd8e50c8375466acb6a39a6e632f4bbbefd49735b7f56e9304d52521786e245f52feae24
+SHA512 (modulemd-2.15.3.tar.xz) = b8c2f80553b66704e8117a6608cbfc1b1a47cb8f260503193c58aff702c2e11cd79b795482d0c9a953ab73e53ecb8133682fe2e8a0755eca1d99b718bbccfde2
+SHA512 (modulemd-2.15.3.tar.xz.asc) = ac08c79ad6ae5be2e8085b2a598848c4121d21fe25a5bd64c05b36a7558d07b2e55fb468ae2633a8d880212b3c711163291070381d04082707d0236e58e21e9b
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-06-12 13:07 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-12 13:07 [rpms/libmodulemd] rawhide: 2.15.3 bump
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox