libmodulemd/0002-When-adding-obsoletes-ensure-index-has-stream-mdvers.patch
DistroBaker ef6dfbebe6 Merged update from upstream sources
This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/libmodulemd.git#d64a0948084f1f4493494a7a9b3744ff534ee68b
2021-01-12 16:05:01 +00:00

155 lines
4.8 KiB
Diff

From 8606b0c341a9a3b13add67e7b42c57ef36ad3fec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
Date: Tue, 12 Jan 2021 09:55:39 +0100
Subject: [PATCH 2/2] When adding obsoletes ensure index has stream mdversion
at least 2
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
---
modulemd/modulemd-module-index.c | 13 +++++
modulemd/tests/test-modulemd-merger.c | 83 +++++++++++++++++++++++++++
2 files changed, 96 insertions(+)
diff --git a/modulemd/modulemd-module-index.c b/modulemd/modulemd-module-index.c
index 82ae1e168d2443c7c54bb94d39b233ad62ef887b..dd5a777e0f30deec1c42e6e3eaaab661ba97ff92 100644
--- a/modulemd/modulemd-module-index.c
+++ b/modulemd/modulemd-module-index.c
@@ -1288,15 +1288,28 @@ modulemd_module_index_add_obsoletes (ModulemdModuleIndex *self,
GError **error)
{
g_autoptr (GError) nested_error = NULL;
g_return_val_if_fail (MODULEMD_IS_MODULE_INDEX (self), FALSE);
+ g_return_val_if_fail (MODULEMD_IS_OBSOLETES (obsoletes), FALSE);
modulemd_module_add_obsoletes (
get_or_create_module (self,
modulemd_obsoletes_get_module_name (obsoletes)),
obsoletes);
+
+ /* Obsoletes need at least MD_MODULESTREAM_VERSION_TWO */
+ if (self->stream_mdversion < MD_MODULESTREAM_VERSION_TWO)
+ {
+ if (!modulemd_module_index_upgrade_streams (
+ self, MD_MODULESTREAM_VERSION_TWO, &nested_error))
+ {
+ g_propagate_error (error, g_steal_pointer (&nested_error));
+ return FALSE;
+ }
+ }
+
return TRUE;
}
GHashTable *
diff --git a/modulemd/tests/test-modulemd-merger.c b/modulemd/tests/test-modulemd-merger.c
index 34b14e75ef60e037d9cef371e0ae033874e62a70..cd5379838832ec3c9d487e96b81b2259d97649fa 100644
--- a/modulemd/tests/test-modulemd-merger.c
+++ b/modulemd/tests/test-modulemd-merger.c
@@ -774,10 +774,90 @@ merger_test_obsoletes_incompatible (void)
GPtrArray *obsoletes = NULL;
obsoletes = modulemd_module_get_obsoletes (module);
g_assert_cmpint (obsoletes->len, ==, 1);
}
+static void
+merger_test_obsoletes_lone_obsolete (void)
+{
+ // clang-format off
+ g_autofree gchar *obsolete_str = g_strdup(
+"---\n"
+"document: modulemd-obsoletes\n"
+"version: 1\n"
+"data:\n"
+" modified: 2020-05-01T00:00Z\n"
+" module: nodejs\n"
+" context: 6c81f848\n"
+" stream: 5\n"
+" message: \"obsoleting obsoletes\"\n"
+" obsoleted_by:\n"
+" module: nodejs\n"
+" stream: 10\n"
+"...\n");
+ // clang-format on
+
+ // clang-format off
+ g_autofree gchar *stream_str = g_strdup(
+"---\n"
+"document: modulemd\n"
+"version: 2\n"
+"data:\n"
+" name: nodejs\n"
+" stream: 5\n"
+" version: 99\n"
+" context: 6c81f848\n"
+" arch: x86_64\n"
+" summary: Javascript runtime\n"
+" description: >-\n"
+" Node.js is a platform built on Chrome''s JavaScript runtime.\n"
+" license:\n"
+" module:\n"
+" - MIT\n"
+"...\n");
+ // clang-format on
+
+ g_autoptr (GPtrArray) failures = NULL;
+ g_autoptr (GError) error = NULL;
+ g_autoptr (ModulemdModuleIndex) obsolete_idx = modulemd_module_index_new ();
+ g_autoptr (ModulemdModuleIndex) stream_idx = modulemd_module_index_new ();
+ g_autoptr (ModulemdModuleIndex) merged_idx = NULL;
+ g_autoptr (ModulemdModuleIndexMerger) merger =
+ modulemd_module_index_merger_new ();
+ gboolean ret;
+
+ ret = modulemd_module_index_update_from_string (
+ obsolete_idx, obsolete_str, TRUE, &failures, &error);
+ modulemd_subdocument_info_debug_dump_failures (failures);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ ret = modulemd_module_index_update_from_string (
+ stream_idx, stream_str, TRUE, &failures, &error);
+ modulemd_subdocument_info_debug_dump_failures (failures);
+ g_assert_no_error (error);
+ g_assert_true (ret);
+
+ modulemd_module_index_merger_associate_index (merger, obsolete_idx, 0);
+ modulemd_module_index_merger_associate_index (merger, stream_idx, 0);
+ merged_idx = modulemd_module_index_merger_resolve (merger, &error);
+
+ g_assert_nonnull (merged_idx);
+ g_assert_no_error (error);
+
+ g_autoptr (ModulemdModuleStream) stream = NULL;
+ stream = g_object_ref (modulemd_module_get_stream_by_NSVCA (
+ modulemd_module_index_get_module (merged_idx, "nodejs"),
+ "5",
+ 99,
+ NULL,
+ NULL,
+ &error));
+ g_assert_nonnull (stream);
+ g_assert_no_error (error);
+}
+
int
main (int argc, char *argv[])
{
setlocale (LC_ALL, "");
@@ -819,7 +899,10 @@ main (int argc, char *argv[])
merger_test_obsoletes_priority);
g_test_add_func ("/modulemd/module/index/merger/obsoletes/incompatibility",
merger_test_obsoletes_incompatible);
+ g_test_add_func ("/modulemd/module/index/merger/obsoletes/lone_obsolete",
+ merger_test_obsoletes_lone_obsolete);
+
return g_test_run ();
}
--
2.29.2