libmodulemd/0002-When-adding-obsoletes-ensure-index-has-stream-mdvers.patch
Stephen Gallagher d64a094808
Fix issue with ModuleIndex when input contains only Obsoletes documents
Fix import issue when built with Python 2 support

Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
2021-01-12 10:29:18 -05: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