import libmodulemd-2.5.0-2.el8
This commit is contained in:
parent
4f08b48951
commit
073c599424
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/modulemd-2.0.0.tar.xz
|
||||
SOURCES/modulemd-2.5.0.tar.xz
|
||||
|
@ -1 +1 @@
|
||||
e242f10ac0185da47cc54d0253cb0f8a80633ff4 SOURCES/modulemd-2.0.0.tar.xz
|
||||
2b6c3443a36ec821fd289ae6605e9dea4c5dbcda SOURCES/modulemd-2.5.0.tar.xz
|
||||
|
@ -1,543 +0,0 @@
|
||||
From 774f36026f1d3a4215be67845c2873135ceab6e4 Mon Sep 17 00:00:00 2001
|
||||
From: Stephen Gallagher <sgallagh@redhat.com>
|
||||
Date: Wed, 16 Jan 2019 13:21:44 -0500
|
||||
Subject: [PATCH] Don't fail merges when default streams differ
|
||||
|
||||
Instead of failing the merge on a default stream conflict, we will
|
||||
instead treat it as having no default set. This is safe because if
|
||||
the module is not yet installed, then this just means its packages
|
||||
aren't visible and it needs to be selected explicitly.
|
||||
|
||||
If some packages from it are already installed, then the module
|
||||
stream is already set, and thus changing the default won't matter.
|
||||
|
||||
Update documentation to reflect modified field in Defaults
|
||||
|
||||
Resolves: rhbz#1666871
|
||||
|
||||
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
|
||||
---
|
||||
.../modulemd-1.0/private/modulemd-private.h | 2 +
|
||||
modulemd/v1/modulemd-defaults.c | 39 +++++++----
|
||||
modulemd/v1/tests/test-modulemd-defaults.c | 66 ++++++++++++++++++-
|
||||
.../modulemd-module-index-merger.h | 18 +++--
|
||||
.../private/modulemd-defaults-v1-private.h | 2 +
|
||||
modulemd/v2/modulemd-defaults-v1.c | 59 +++++++++++------
|
||||
modulemd/v2/tests/ModulemdTests/merger.py | 33 +++++++---
|
||||
.../v2/tests/test_data/overriding-nodejs.yaml | 11 ++++
|
||||
test_data/defaults/overriding-nodejs.yaml | 10 +++
|
||||
9 files changed, 191 insertions(+), 49 deletions(-)
|
||||
create mode 100644 modulemd/v2/tests/test_data/overriding-nodejs.yaml
|
||||
create mode 100644 test_data/defaults/overriding-nodejs.yaml
|
||||
|
||||
diff --git a/modulemd/v1/include/modulemd-1.0/private/modulemd-private.h b/modulemd/v1/include/modulemd-1.0/private/modulemd-private.h
|
||||
index 20604efab843de6ac64cd9e181ce93d7e3a798fe..e9a785aed0d38598ce08d58e7e507d01698788a0 100644
|
||||
--- a/modulemd/v1/include/modulemd-1.0/private/modulemd-private.h
|
||||
+++ b/modulemd/v1/include/modulemd-1.0/private/modulemd-private.h
|
||||
@@ -24,10 +24,12 @@ enum
|
||||
MD_VERSION_MAX = G_MAXUINT64
|
||||
};
|
||||
|
||||
#define MD_VERSION_LATEST MD_VERSION_2
|
||||
|
||||
+#define DEFAULT_MERGE_CONFLICT "__merge_conflict__"
|
||||
+
|
||||
ModulemdModule *
|
||||
modulemd_module_new_from_modulestream (ModulemdModuleStream *stream);
|
||||
|
||||
ModulemdModuleStream *
|
||||
modulemd_module_peek_modulestream (ModulemdModule *self);
|
||||
diff --git a/modulemd/v1/modulemd-defaults.c b/modulemd/v1/modulemd-defaults.c
|
||||
index 77ce30733945e30ffb8368986fa8c54c45697b5a..d44076eef0ac3bffae05f74b852fb6b51c2aee64 100644
|
||||
--- a/modulemd/v1/modulemd-defaults.c
|
||||
+++ b/modulemd/v1/modulemd-defaults.c
|
||||
@@ -12,10 +12,11 @@
|
||||
*/
|
||||
|
||||
#include "modulemd.h"
|
||||
#include "modulemd-defaults.h"
|
||||
#include "modulemd-simpleset.h"
|
||||
+#include "private/modulemd-private.h"
|
||||
#include "private/modulemd-yaml.h"
|
||||
|
||||
|
||||
GQuark
|
||||
modulemd_defaults_error_quark (void)
|
||||
@@ -146,19 +147,38 @@ modulemd_defaults_set_default_stream (ModulemdDefaults *self,
|
||||
const gchar *
|
||||
modulemd_defaults_peek_default_stream (ModulemdDefaults *self)
|
||||
{
|
||||
g_return_val_if_fail (self, NULL);
|
||||
|
||||
+ if (self->default_stream &&
|
||||
+ g_str_equal (self->default_stream, DEFAULT_MERGE_CONFLICT))
|
||||
+ {
|
||||
+ /* During an index merge, we determined that this was in conflict
|
||||
+ * with another set of ModulemdDefaults for the same module. If we
|
||||
+ * see this, treat it as no default stream when querying for it.
|
||||
+ */
|
||||
+ return NULL;
|
||||
+ }
|
||||
return self->default_stream;
|
||||
}
|
||||
|
||||
|
||||
gchar *
|
||||
modulemd_defaults_dup_default_stream (ModulemdDefaults *self)
|
||||
{
|
||||
g_return_val_if_fail (self, NULL);
|
||||
|
||||
+ if (self->default_stream &&
|
||||
+ g_str_equal (self->default_stream, DEFAULT_MERGE_CONFLICT))
|
||||
+ {
|
||||
+ /* During an index merge, we determined that this was in conflict
|
||||
+ * with another set of ModulemdDefaults for the same module. If we
|
||||
+ * see this, treat it as no default stream when querying for it.
|
||||
+ */
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
return g_strdup (self->default_stream);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
@@ -753,28 +773,25 @@ modulemd_defaults_merge (ModulemdDefaults *first,
|
||||
/* They had the same 'modified' value (such as both zero, for
|
||||
* backwards-compatibility with 1.7.x and older.
|
||||
* Merge them as best we can.
|
||||
*/
|
||||
|
||||
+ defaults = modulemd_defaults_copy (first);
|
||||
+
|
||||
/* First check for incompatibilities with the streams */
|
||||
- if (g_strcmp0 (modulemd_defaults_peek_default_stream (first),
|
||||
- modulemd_defaults_peek_default_stream (second)))
|
||||
+ if (g_strcmp0 (first->default_stream, second->default_stream))
|
||||
{
|
||||
/* Default streams don't match and override is not set.
|
||||
* Return an error
|
||||
*/
|
||||
- g_set_error (
|
||||
- error,
|
||||
- MODULEMD_DEFAULTS_ERROR,
|
||||
- MODULEMD_DEFAULTS_ERROR_CONFLICTING_STREAMS,
|
||||
- "Conflicting default streams when merging defaults for module %s",
|
||||
- modulemd_defaults_peek_module_name (first));
|
||||
- return NULL;
|
||||
+ /* They have conflicting default streams */
|
||||
+ g_info ("Module stream mismatch in merge: %s != %s",
|
||||
+ first->default_stream,
|
||||
+ second->default_stream);
|
||||
+ modulemd_defaults_set_default_stream (defaults, DEFAULT_MERGE_CONFLICT);
|
||||
}
|
||||
|
||||
- defaults = modulemd_defaults_copy (first);
|
||||
-
|
||||
/* Merge the profile defaults */
|
||||
profile_defaults = modulemd_defaults_peek_profile_defaults (defaults);
|
||||
|
||||
g_hash_table_iter_init (&iter,
|
||||
modulemd_defaults_peek_profile_defaults (second));
|
||||
diff --git a/modulemd/v1/tests/test-modulemd-defaults.c b/modulemd/v1/tests/test-modulemd-defaults.c
|
||||
index 5d032d83cbca4046af13719f68bdbc6778d6879e..35142b885b3ec30f5109d53befe17be3e08d7b5a 100644
|
||||
--- a/modulemd/v1/tests/test-modulemd-defaults.c
|
||||
+++ b/modulemd/v1/tests/test-modulemd-defaults.c
|
||||
@@ -602,10 +602,11 @@ modulemd_defaults_test_prioritizer (DefaultsFixture *fixture,
|
||||
{
|
||||
g_autofree gchar *yaml_base_path = NULL;
|
||||
g_autofree gchar *yaml_override_path = NULL;
|
||||
g_autoptr (GPtrArray) base_objects = NULL;
|
||||
g_autoptr (GPtrArray) override_objects = NULL;
|
||||
+ g_autoptr (GPtrArray) override_nodejs_objects = NULL;
|
||||
g_autoptr (GPtrArray) merged_objects = NULL;
|
||||
g_autoptr (ModulemdPrioritizer) prioritizer = NULL;
|
||||
g_autoptr (GError) error = NULL;
|
||||
GHashTable *htable = NULL;
|
||||
gint64 prio;
|
||||
@@ -618,10 +619,22 @@ modulemd_defaults_test_prioritizer (DefaultsFixture *fixture,
|
||||
|
||||
base_objects = modulemd_objects_from_file (yaml_base_path, &error);
|
||||
g_assert_nonnull (base_objects);
|
||||
g_assert_cmpint (base_objects->len, ==, 7);
|
||||
|
||||
+
|
||||
+ yaml_override_path =
|
||||
+ g_strdup_printf ("%s/test_data/defaults/overriding-nodejs.yaml",
|
||||
+ g_getenv ("MESON_SOURCE_ROOT"));
|
||||
+ g_assert_nonnull (yaml_override_path);
|
||||
+
|
||||
+ override_nodejs_objects =
|
||||
+ modulemd_objects_from_file (yaml_override_path, &error);
|
||||
+ g_clear_pointer (&yaml_override_path, g_free);
|
||||
+ g_assert_nonnull (override_nodejs_objects);
|
||||
+ g_assert_cmpint (override_nodejs_objects->len, ==, 1);
|
||||
+
|
||||
yaml_override_path = g_strdup_printf (
|
||||
"%s/test_data/defaults/overriding.yaml", g_getenv ("MESON_SOURCE_ROOT"));
|
||||
g_assert_nonnull (yaml_override_path);
|
||||
|
||||
override_objects = modulemd_objects_from_file (yaml_override_path, &error);
|
||||
@@ -659,10 +672,52 @@ modulemd_defaults_test_prioritizer (DefaultsFixture *fixture,
|
||||
fprintf (stderr, "Merge error: %s", error->message);
|
||||
}
|
||||
g_assert_true (result);
|
||||
|
||||
|
||||
+ /*
|
||||
+ * Test that importing the nodejs overrides at the same priority level fails.
|
||||
+ *
|
||||
+ * This YAML has a conflicting default stream which should be ignored and set
|
||||
+ * to "no default stream".
|
||||
+ */
|
||||
+
|
||||
+ result = modulemd_prioritizer_add (
|
||||
+ prioritizer, override_nodejs_objects, prio, &error);
|
||||
+ g_assert_true (result);
|
||||
+
|
||||
+ merged_objects = modulemd_prioritizer_resolve (prioritizer, &error);
|
||||
+ g_assert_nonnull (merged_objects);
|
||||
+ g_assert_cmpint (merged_objects->len, ==, 3);
|
||||
+
|
||||
+ for (gint i = 0; i < merged_objects->len; i++)
|
||||
+ {
|
||||
+ if (MODULEMD_IS_DEFAULTS (g_ptr_array_index (merged_objects, i)))
|
||||
+ {
|
||||
+ defaults = g_ptr_array_index (merged_objects, i);
|
||||
+ if (!g_strcmp0 (modulemd_defaults_peek_module_name (defaults),
|
||||
+ "nodejs"))
|
||||
+ {
|
||||
+ g_assert_null (modulemd_defaults_peek_default_stream (defaults));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ g_clear_pointer (&merged_objects, g_ptr_array_unref);
|
||||
+
|
||||
+
|
||||
+ /* Start over and test profile conflicts */
|
||||
+ g_clear_pointer (&prioritizer, g_object_unref);
|
||||
+ prioritizer = modulemd_prioritizer_new ();
|
||||
+ result = modulemd_prioritizer_add (prioritizer, base_objects, prio, &error);
|
||||
+ if (!result)
|
||||
+ {
|
||||
+ fprintf (stderr, "Merge error: %s", error->message);
|
||||
+ }
|
||||
+ g_assert_true (result);
|
||||
+
|
||||
+
|
||||
/*
|
||||
* Test that importing the overrides at the same priority level fails.
|
||||
*
|
||||
* These objects have several conflicts with the base objects that cannot be
|
||||
* merged.
|
||||
@@ -671,11 +726,11 @@ modulemd_defaults_test_prioritizer (DefaultsFixture *fixture,
|
||||
modulemd_prioritizer_add (prioritizer, override_objects, prio, &error);
|
||||
g_assert_false (result);
|
||||
g_assert_cmpstr (
|
||||
g_quark_to_string (error->domain), ==, "modulemd-defaults-error-quark");
|
||||
g_assert_cmpint (
|
||||
- error->code, ==, MODULEMD_DEFAULTS_ERROR_CONFLICTING_STREAMS);
|
||||
+ error->code, ==, MODULEMD_DEFAULTS_ERROR_CONFLICTING_PROFILES);
|
||||
g_clear_pointer (&error, g_error_free);
|
||||
|
||||
/* The object's internal state is undefined after an error, so delete it */
|
||||
g_clear_pointer (&prioritizer, g_object_unref);
|
||||
|
||||
@@ -987,11 +1042,11 @@ modulemd_defaults_test_index_prioritizer (DefaultsFixture *fixture,
|
||||
modulemd_prioritizer_add_index (prioritizer, override_index, prio, &error);
|
||||
g_assert_false (result);
|
||||
g_assert_cmpstr (
|
||||
g_quark_to_string (error->domain), ==, "modulemd-defaults-error-quark");
|
||||
g_assert_cmpint (
|
||||
- error->code, ==, MODULEMD_DEFAULTS_ERROR_CONFLICTING_STREAMS);
|
||||
+ error->code, ==, MODULEMD_DEFAULTS_ERROR_CONFLICTING_PROFILES);
|
||||
g_clear_pointer (&error, g_error_free);
|
||||
|
||||
/* The object's internal state is undefined after an error, so delete it */
|
||||
g_clear_pointer (&prioritizer, g_object_unref);
|
||||
|
||||
@@ -1138,10 +1193,15 @@ modulemd_regressions_issue44 (DefaultsFixture *fixture,
|
||||
g_assert_true (result);
|
||||
|
||||
|
||||
/* Add another almost-identical document, except with a conflicting default
|
||||
* stream set.
|
||||
+ *
|
||||
+ * NOTE: when this was written (for issue 44 on GitHub), this was meant to be
|
||||
+ * a hard error. As of 1.8.1 we expect this to just result in having no
|
||||
+ * default stream for this module. This test has been slightly modified so
|
||||
+ * that the expected result is now a pass.
|
||||
*/
|
||||
yaml_conflicting_path = g_strdup_printf (
|
||||
"%s/test_data/defaults/issue44-2.yaml", g_getenv ("MESON_SOURCE_ROOT"));
|
||||
g_assert_nonnull (yaml_conflicting_path);
|
||||
|
||||
@@ -1149,11 +1209,11 @@ modulemd_regressions_issue44 (DefaultsFixture *fixture,
|
||||
modulemd_objects_from_file (yaml_conflicting_path, &error);
|
||||
g_assert_nonnull (conflicting_objects);
|
||||
|
||||
result =
|
||||
modulemd_prioritizer_add (prioritizer, conflicting_objects, 0, &error);
|
||||
- g_assert_false (result);
|
||||
+ g_assert_true (result);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
modulemd_regressions_issue45 (DefaultsFixture *fixture,
|
||||
diff --git a/modulemd/v2/include/modulemd-2.0/modulemd-module-index-merger.h b/modulemd/v2/include/modulemd-2.0/modulemd-module-index-merger.h
|
||||
index 27cccb738dc805724268afa04acc13d4e250eae2..b019f0ed856684a003e9c2f6abefc70e1448246a 100644
|
||||
--- a/modulemd/v2/include/modulemd-2.0/modulemd-module-index-merger.h
|
||||
+++ b/modulemd/v2/include/modulemd-2.0/modulemd-module-index-merger.h
|
||||
@@ -51,22 +51,30 @@ G_BEGIN_DECLS
|
||||
* there exists two #ModulemdModuleStream entries that have different content
|
||||
* for the same NSVC, the behavior is undefined.
|
||||
*
|
||||
* Merging #ModulemdDefaults entries behaves as follows:
|
||||
*
|
||||
+ * - Within a ModuleIndex, if two or more default entries reference the same
|
||||
+ * module, the one with the highest modified field will be used and the
|
||||
+ * others discarded.
|
||||
+ * - When merging ModuleIndexes, if two or more indexes contain Defaults for
|
||||
+ * the same module, but different modified values, the one with the highest
|
||||
+ * modified value will be used and the others discarded.
|
||||
* - Any module default that is provided by a single repository is
|
||||
* authoritative.
|
||||
* - If the repos have different priorities (not common), then the default for
|
||||
* this module and stream name coming from the repo of higher priority will
|
||||
- * be used and the default from the lower-priority repo will not be included.
|
||||
+ * be used and the default from the lower-priority repo will not be included
|
||||
+ * even if it has a higher modified value.
|
||||
* - If the repos have the same priority (such as "fedora" and "updates" in the
|
||||
- * Fedora Project), the entries will be merged as follows:
|
||||
- * - If both repositories specify a default stream for the module, use it.
|
||||
+ * Fedora Project) and modified value, the entries will be merged as follows:
|
||||
+ * - If both repositories specify the same default stream for the module, use
|
||||
+ * it.
|
||||
* - If either repository specifies a default stream for the module and the
|
||||
* other does not, use the one specified.
|
||||
- * - If both repositories specify different streams, this is an unresolvable
|
||||
- * merge conflict and the merge resolution will fail and report an error.
|
||||
+ * - If both repositories specify different default streams, the merge will
|
||||
+ * unset the default stream and proceed with the merge.
|
||||
* - If both repositories specify a set of default profiles for a stream and
|
||||
* the sets are equivalent, use that set.
|
||||
* - If one repository specifies a set of default profiles for a stream and
|
||||
* the other does not, use the one specified.
|
||||
* - If both repositories specify a set of default profiles for a stream and
|
||||
diff --git a/modulemd/v2/include/modulemd-2.0/private/modulemd-defaults-v1-private.h b/modulemd/v2/include/modulemd-2.0/private/modulemd-defaults-v1-private.h
|
||||
index 9cac6cc53175a0eecca986f4fa96a7b7b1070957..de2ede98e6fb49bfd792b5f2913868fad6ff27db 100644
|
||||
--- a/modulemd/v2/include/modulemd-2.0/private/modulemd-defaults-v1-private.h
|
||||
+++ b/modulemd/v2/include/modulemd-2.0/private/modulemd-defaults-v1-private.h
|
||||
@@ -26,10 +26,12 @@ G_BEGIN_DECLS
|
||||
* @stability: private
|
||||
* @short_description: #ModulemdDefault methods that should only be used by
|
||||
* internal consumers.
|
||||
*/
|
||||
|
||||
+#define DEFAULT_MERGE_CONFLICT "__merge_conflict__"
|
||||
+
|
||||
/**
|
||||
* modulemd_defaults_v1_parse_yaml:
|
||||
* @subdoc: (in): A #ModulemdSubdocumentInfo representing a defaults document
|
||||
* of metadata version 1.
|
||||
* @strict: (in): Whether the parser should return failure if it encounters an
|
||||
diff --git a/modulemd/v2/modulemd-defaults-v1.c b/modulemd/v2/modulemd-defaults-v1.c
|
||||
index c8f983105b529519365d0a653d8d07715f610b97..1c1cdd7b1036734a477b72d12f12526af1de777d 100644
|
||||
--- a/modulemd/v2/modulemd-defaults-v1.c
|
||||
+++ b/modulemd/v2/modulemd-defaults-v1.c
|
||||
@@ -179,11 +179,22 @@ modulemd_defaults_v1_get_default_stream (ModulemdDefaultsV1 *self,
|
||||
{
|
||||
const gchar *default_stream = NULL;
|
||||
g_return_val_if_fail (MODULEMD_IS_DEFAULTS_V1 (self), NULL);
|
||||
|
||||
if (!intent)
|
||||
- return self->default_stream;
|
||||
+ {
|
||||
+ if (self->default_stream &&
|
||||
+ g_str_equal (self->default_stream, DEFAULT_MERGE_CONFLICT))
|
||||
+ {
|
||||
+ /* During an index merge, we determined that this was in conflict
|
||||
+ * with another set of ModulemdDefaults for the same module. If we
|
||||
+ * see this, treat it as no default stream when querying for it.
|
||||
+ */
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ return self->default_stream;
|
||||
+ }
|
||||
|
||||
default_stream = g_hash_table_lookup (self->intent_default_streams, intent);
|
||||
if (default_stream)
|
||||
{
|
||||
if (default_stream[0] == '\0')
|
||||
@@ -1159,12 +1170,10 @@ ModulemdDefaults *
|
||||
modulemd_defaults_v1_merge (const gchar *module_name,
|
||||
ModulemdDefaultsV1 *from,
|
||||
ModulemdDefaultsV1 *into,
|
||||
GError **error)
|
||||
{
|
||||
- const gchar *into_default_stream;
|
||||
- const gchar *from_default_stream;
|
||||
g_autoptr (ModulemdDefaultsV1) merged = NULL;
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
GHashTable *intent_profiles = NULL;
|
||||
GHashTable *merged_intent_profiles = NULL;
|
||||
@@ -1175,37 +1184,45 @@ modulemd_defaults_v1_merge (const gchar *module_name,
|
||||
g_autoptr (GError) nested_error = NULL;
|
||||
|
||||
merged = modulemd_defaults_v1_new (module_name);
|
||||
|
||||
/* Merge the default streams */
|
||||
- into_default_stream = modulemd_defaults_v1_get_default_stream (into, NULL);
|
||||
- from_default_stream = modulemd_defaults_v1_get_default_stream (from, NULL);
|
||||
-
|
||||
- if (into_default_stream && !from_default_stream)
|
||||
+ if (into->default_stream && !from->default_stream)
|
||||
{
|
||||
modulemd_defaults_v1_set_default_stream (
|
||||
- merged, into_default_stream, NULL);
|
||||
+ merged, into->default_stream, NULL);
|
||||
}
|
||||
- else if (from_default_stream && !into_default_stream)
|
||||
+ else if (from->default_stream && !into->default_stream)
|
||||
{
|
||||
modulemd_defaults_v1_set_default_stream (
|
||||
- merged, from_default_stream, NULL);
|
||||
+ merged, from->default_stream, NULL);
|
||||
}
|
||||
- else if (into_default_stream && from_default_stream)
|
||||
+ else if (into->default_stream && from->default_stream)
|
||||
{
|
||||
- if (!g_str_equal (into_default_stream, from_default_stream))
|
||||
+ if (g_str_equal (into->default_stream, DEFAULT_MERGE_CONFLICT))
|
||||
{
|
||||
- g_set_error (error,
|
||||
- MODULEMD_ERROR,
|
||||
- MODULEMD_ERROR_VALIDATE,
|
||||
- "Module stream mismatch in merge: %s != %s",
|
||||
- into_default_stream,
|
||||
- from_default_stream);
|
||||
- return NULL;
|
||||
+ /* A previous pass over this same module encountered a merge
|
||||
+ * conflict, so we need to propagate that.
|
||||
+ */
|
||||
+ modulemd_defaults_v1_set_default_stream (
|
||||
+ merged, DEFAULT_MERGE_CONFLICT, NULL);
|
||||
+ }
|
||||
+ else if (!g_str_equal (into->default_stream, from->default_stream))
|
||||
+ {
|
||||
+ /* They have conflicting default streams */
|
||||
+ g_info ("Module stream mismatch in merge: %s != %s",
|
||||
+ into->default_stream,
|
||||
+ from->default_stream);
|
||||
+ modulemd_defaults_v1_set_default_stream (
|
||||
+ merged, DEFAULT_MERGE_CONFLICT, NULL);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ /* They're the same, so store that */
|
||||
+ modulemd_defaults_v1_set_default_stream (
|
||||
+ merged, into->default_stream, NULL);
|
||||
}
|
||||
- modulemd_defaults_v1_set_default_stream (
|
||||
- merged, into_default_stream, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Both values were NULL.
|
||||
* Nothing to do, leave it blank.
|
||||
diff --git a/modulemd/v2/tests/ModulemdTests/merger.py b/modulemd/v2/tests/ModulemdTests/merger.py
|
||||
index e7cbf4214bb111fbc5732fe983ee5ccee134fd83..49c2722959486aeb250d88daf7f068cacc8c3fe7 100644
|
||||
--- a/modulemd/v2/tests/ModulemdTests/merger.py
|
||||
+++ b/modulemd/v2/tests/ModulemdTests/merger.py
|
||||
@@ -104,26 +104,41 @@ class TestModuleIndexMerger(TestBase):
|
||||
self.assertEqual(
|
||||
len(httpd_defaults.get_default_profiles_for_stream('2.4', 'workstation')), 1)
|
||||
self.assertEqual(
|
||||
len(httpd_defaults.get_default_profiles_for_stream('2.6', 'workstation')), 3)
|
||||
|
||||
+ # Get another set of objects that will override the default stream for
|
||||
+ # nodejs
|
||||
+ override_nodejs_index = Modulemd.ModuleIndex()
|
||||
+ override_nodejs_index.update_from_file(
|
||||
+ path.join(
|
||||
+ self.source_root,
|
||||
+ "modulemd/v2/tests/test_data/overriding-nodejs.yaml"), True)
|
||||
+
|
||||
+ # Test that adding both of these at the same priority level results in
|
||||
+ # the no default stream
|
||||
+ merger = Modulemd.ModuleIndexMerger()
|
||||
+ merger.associate_index(base_index, 0)
|
||||
+ merger.associate_index(override_nodejs_index, 0)
|
||||
+
|
||||
+ merged_index = merger.resolve()
|
||||
+ self.assertIsNotNone(merged_index)
|
||||
+
|
||||
+ nodejs = merged_index.get_module('nodejs')
|
||||
+ self.assertIsNotNone(nodejs)
|
||||
+
|
||||
+ nodejs_defaults = nodejs.get_defaults()
|
||||
+ self.assertIsNotNone(nodejs_defaults)
|
||||
+ self.assertIsNone(nodejs_defaults.get_default_stream())
|
||||
+
|
||||
# Get another set of objects that will override the above
|
||||
override_index = Modulemd.ModuleIndex()
|
||||
override_index.update_from_file(
|
||||
path.join(
|
||||
self.source_root,
|
||||
"modulemd/v2/tests/test_data/overriding.yaml"), True)
|
||||
|
||||
- # Test that adding both of these at the same priority level fails
|
||||
- # with a merge conflict.
|
||||
- merger = Modulemd.ModuleIndexMerger()
|
||||
- merger.associate_index(base_index, 0)
|
||||
- merger.associate_index(override_index, 0)
|
||||
-
|
||||
- with self.assertRaisesRegex(GLib.GError, 'Module stream mismatch in merge'):
|
||||
- merged_index = merger.resolve()
|
||||
-
|
||||
# Test that override_index at a higher priority level succeeds
|
||||
# Test that adding both of these at the same priority level fails
|
||||
# with a merge conflict.
|
||||
# Use randomly-selected high and low values to make sure we don't have
|
||||
# sorting issues.
|
||||
diff --git a/modulemd/v2/tests/test_data/overriding-nodejs.yaml b/modulemd/v2/tests/test_data/overriding-nodejs.yaml
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..b588f5f542d84755fa74fc1dbf059c0766d2a712
|
||||
--- /dev/null
|
||||
+++ b/modulemd/v2/tests/test_data/overriding-nodejs.yaml
|
||||
@@ -0,0 +1,11 @@
|
||||
+---
|
||||
+# Override the default stream
|
||||
+document: modulemd-defaults
|
||||
+version: 1
|
||||
+data:
|
||||
+ module: nodejs
|
||||
+ stream: '9.0'
|
||||
+ profiles:
|
||||
+ '6.0': [default]
|
||||
+ '8.0': [super]
|
||||
+ '9.0': [supermegaultra]
|
||||
\ No newline at end of file
|
||||
diff --git a/test_data/defaults/overriding-nodejs.yaml b/test_data/defaults/overriding-nodejs.yaml
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..937a2b899afc6b5254fd3b3e61e5b32035a3130a
|
||||
--- /dev/null
|
||||
+++ b/test_data/defaults/overriding-nodejs.yaml
|
||||
@@ -0,0 +1,10 @@
|
||||
+---
|
||||
+document: modulemd-defaults
|
||||
+version: 1
|
||||
+data:
|
||||
+ module: nodejs
|
||||
+ stream: '9.0'
|
||||
+ profiles:
|
||||
+ '6.0': [default]
|
||||
+ '8.0': [super]
|
||||
+ '9.0': [supermegaultra]
|
||||
\ No newline at end of file
|
||||
--
|
||||
2.20.1
|
||||
|
29
SOURCES/0001-Double-valgrind-timeout.patch
Normal file
29
SOURCES/0001-Double-valgrind-timeout.patch
Normal file
@ -0,0 +1,29 @@
|
||||
From 1a7bf143761ff8e3f4f6585b82c0be4dbd511fca Mon Sep 17 00:00:00 2001
|
||||
From: Stephen Gallagher <sgallagh@redhat.com>
|
||||
Date: Thu, 23 May 2019 14:00:36 -0400
|
||||
Subject: [PATCH 1/3] Double valgrind timeout
|
||||
|
||||
On some architectures under heavy load, the valgrind check on v2
|
||||
is taking a long time.
|
||||
|
||||
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
|
||||
---
|
||||
modulemd/meson.build | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/modulemd/meson.build b/modulemd/meson.build
|
||||
index 47bd1f58e6401d2634d8ff737c2b347f5ebc6bf5..e49c7a9df76dcf37a18ddeba3150d6c914aa4e25 100644
|
||||
--- a/modulemd/meson.build
|
||||
+++ b/modulemd/meson.build
|
||||
@@ -313,7 +313,7 @@ endif
|
||||
if valgrind.found()
|
||||
modulemd_valgrind_scripts = files('common/tests/test-valgrind.py')
|
||||
test ('valgrind', python3,
|
||||
env : test_env,
|
||||
args : modulemd_valgrind_scripts,
|
||||
- timeout : 600)
|
||||
+ timeout : 1200)
|
||||
endif
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,106 +0,0 @@
|
||||
From f66d185dd5c2c1750b3626c2e0bdfeab63e427b6 Mon Sep 17 00:00:00 2001
|
||||
From: Stephen Gallagher <sgallagh@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 08:36:11 -0500
|
||||
Subject: [PATCH] Include modified value when copying Defaults objects
|
||||
|
||||
The symptom of this was that any defaults object read from a YAML
|
||||
stream would end up stored in the ModuleIndex with the a zero for
|
||||
the modified value.
|
||||
|
||||
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
|
||||
---
|
||||
modulemd/v2/modulemd-defaults.c | 7 ++++--
|
||||
modulemd/v2/tests/ModulemdTests/defaults.py | 25 +++++++++++++++++++++
|
||||
2 files changed, 30 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/modulemd/v2/modulemd-defaults.c b/modulemd/v2/modulemd-defaults.c
|
||||
index 9e5c31b499704ae7a8543c91b9ea3bbf0dbf981d..c577d4a0c3db45319c8e0582b4cc07f3943836fa 100644
|
||||
--- a/modulemd/v2/modulemd-defaults.c
|
||||
+++ b/modulemd/v2/modulemd-defaults.c
|
||||
@@ -91,14 +91,18 @@ modulemd_defaults_copy (ModulemdDefaults *self)
|
||||
|
||||
|
||||
static ModulemdDefaults *
|
||||
modulemd_defaults_default_copy (ModulemdDefaults *self)
|
||||
{
|
||||
+ g_autoptr (ModulemdDefaults) copy = NULL;
|
||||
g_return_val_if_fail (MODULEMD_IS_DEFAULTS (self), NULL);
|
||||
|
||||
- return modulemd_defaults_new (modulemd_defaults_get_mdversion (self),
|
||||
+ copy = modulemd_defaults_new (modulemd_defaults_get_mdversion (self),
|
||||
modulemd_defaults_get_module_name (self));
|
||||
+ modulemd_defaults_set_modified (copy, modulemd_defaults_get_modified (self));
|
||||
+
|
||||
+ return g_steal_pointer (©);
|
||||
}
|
||||
|
||||
|
||||
gboolean
|
||||
modulemd_defaults_validate (ModulemdDefaults *self, GError **error)
|
||||
@@ -214,11 +218,10 @@ modulemd_defaults_set_modified (ModulemdDefaults *self, guint64 modified)
|
||||
{
|
||||
g_return_if_fail (MODULEMD_IS_DEFAULTS (self));
|
||||
|
||||
ModulemdDefaultsPrivate *priv =
|
||||
modulemd_defaults_get_instance_private (self);
|
||||
-
|
||||
priv->modified = modified;
|
||||
}
|
||||
|
||||
|
||||
guint64
|
||||
diff --git a/modulemd/v2/tests/ModulemdTests/defaults.py b/modulemd/v2/tests/ModulemdTests/defaults.py
|
||||
index ddac23bbed573b3725feb8cb0090fb878a1f4f22..9a783d25617fc53f59448bc32a68c6e2755dd034 100644
|
||||
--- a/modulemd/v2/tests/ModulemdTests/defaults.py
|
||||
+++ b/modulemd/v2/tests/ModulemdTests/defaults.py
|
||||
@@ -10,11 +10,13 @@
|
||||
# This program is free software.
|
||||
# For more information on the license, see COPYING.
|
||||
# For more information on free software, see
|
||||
# <https://www.gnu.org/philosophy/free-sw.en.html>.
|
||||
|
||||
+import os
|
||||
import sys
|
||||
+
|
||||
try:
|
||||
import unittest
|
||||
import gi
|
||||
gi.require_version('Modulemd', '2.0')
|
||||
from gi.repository import Modulemd
|
||||
@@ -92,10 +94,33 @@ class TestDefaults(TestBase):
|
||||
|
||||
# Ensure we cannot set the module_name
|
||||
with self.expect_signal():
|
||||
defs.props.module_name = None
|
||||
|
||||
+ def test_modified(self):
|
||||
+ defs = Modulemd.Defaults.new(
|
||||
+ Modulemd.DefaultsVersionEnum.LATEST, 'foo')
|
||||
+ self.assertIsNotNone(defs)
|
||||
+
|
||||
+ self.assertEqual(defs.get_modified(), 0)
|
||||
+
|
||||
+ defs.set_modified(201901110830)
|
||||
+
|
||||
+ self.assertEqual(defs.get_modified(), 201901110830)
|
||||
+
|
||||
+ # Load a defaults object into an Index
|
||||
+ index = Modulemd.ModuleIndex.new()
|
||||
+ index.update_from_file("%s/mod-defaults/spec.v1.yaml" % (
|
||||
+ os.getenv('MESON_SOURCE_ROOT')), True)
|
||||
+ module_names = index.get_module_names()
|
||||
+ self.assertEqual(len(module_names), 1)
|
||||
+
|
||||
+ defs = index.get_module(index.get_module_names()[0]).get_defaults()
|
||||
+ self.assertIsNotNone(defs)
|
||||
+
|
||||
+ self.assertEqual(defs.get_modified(), 201812071200)
|
||||
+
|
||||
def test_validate(self):
|
||||
defs = Modulemd.Defaults.new(
|
||||
Modulemd.DefaultsVersionEnum.LATEST, 'foo')
|
||||
assert defs
|
||||
|
||||
--
|
||||
2.20.1
|
||||
|
136
SOURCES/0002-Parallelize-the-valgrind-tests.patch
Normal file
136
SOURCES/0002-Parallelize-the-valgrind-tests.patch
Normal file
@ -0,0 +1,136 @@
|
||||
From d9b41f72d4b2d545b2600aff7bd8a27ed0093750 Mon Sep 17 00:00:00 2001
|
||||
From: Stephen Gallagher <sgallagh@redhat.com>
|
||||
Date: Wed, 29 May 2019 11:33:57 -0400
|
||||
Subject: [PATCH 2/3] Parallelize the valgrind tests
|
||||
|
||||
This considerably reduces the time needed to perform the valgrind
|
||||
memory tests on systems with multiple available processors. In the
|
||||
case of my laptop, the duration was reduced from ~200s to 90s.
|
||||
|
||||
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
|
||||
---
|
||||
modulemd/common/tests/test-valgrind.py | 74 ++++++++++++++------------
|
||||
1 file changed, 41 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/modulemd/common/tests/test-valgrind.py b/modulemd/common/tests/test-valgrind.py
|
||||
index 9be72c705fde79aa305d831eaa4f31f7e2cc663f..9349749658ccca0529776f3d534664d614c1cb4d 100644
|
||||
--- a/modulemd/common/tests/test-valgrind.py
|
||||
+++ b/modulemd/common/tests/test-valgrind.py
|
||||
@@ -16,13 +16,16 @@ import os
|
||||
import sys
|
||||
import subprocess
|
||||
import tempfile
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
+from multiprocessing import Pool, TimeoutError
|
||||
+
|
||||
if os.getenv('MMD_SKIP_VALGRIND'):
|
||||
sys.exit(77)
|
||||
|
||||
+
|
||||
failed = False
|
||||
|
||||
# Get the list of tests to run
|
||||
proc_result = subprocess.run(['meson', 'test', '--list'],
|
||||
stdout=subprocess.PIPE,
|
||||
@@ -47,13 +50,13 @@ for test in unfiltered_tests:
|
||||
test == 'test_dirty_repo' or
|
||||
test == 'valgrind'):
|
||||
continue
|
||||
tests.append(test)
|
||||
|
||||
+
|
||||
with tempfile.TemporaryDirectory(prefix="libmodulemd_valgrind_") as tmpdirname:
|
||||
- for test in tests:
|
||||
- # TODO: auto-detect the location of the suppression file
|
||||
+ def exec_valgrind(test):
|
||||
valgrind_command = "/usr/bin/valgrind " \
|
||||
"--leak-check=full " \
|
||||
"--suppressions=/usr/share/glib-2.0/valgrind/glib.supp " \
|
||||
"--xml=yes " \
|
||||
"--xml-file=%s/%s.xml " % (tmpdirname, test)
|
||||
@@ -64,45 +67,50 @@ with tempfile.TemporaryDirectory(prefix="libmodulemd_valgrind_") as tmpdirname:
|
||||
'-t', '10',
|
||||
'--logbase=%s' % test,
|
||||
'--wrap=%s' % valgrind_command,
|
||||
test])
|
||||
|
||||
- if proc_result.returncode != 0:
|
||||
- print("Valgrind exited with an error on %s" % test,
|
||||
- file=sys.stderr)
|
||||
- failed = True
|
||||
- continue
|
||||
+ return proc_result.returncode, test
|
||||
|
||||
- # Process the XML for leaks
|
||||
- tree = ET.parse('%s/%s.xml' % (tmpdirname, test))
|
||||
- root = tree.getroot()
|
||||
+ with Pool() as pool:
|
||||
+ for returncode, test in pool.map(exec_valgrind, tests):
|
||||
+ if returncode != 0:
|
||||
+ print("Valgrind exited with an error on %s" % test,
|
||||
+ file=sys.stderr)
|
||||
+ failed = True
|
||||
+ continue
|
||||
|
||||
- for root_child in root:
|
||||
- if (root_child.tag == "error"):
|
||||
- for error_child in root_child:
|
||||
- if error_child.tag == 'kind':
|
||||
- if error_child.text == 'Leak_DefinitelyLost':
|
||||
- print("Memory leak detected in %s" % test,
|
||||
- file=sys.stderr)
|
||||
- failed = True
|
||||
+ # Process the XML for leaks
|
||||
+ tree = ET.parse('%s/%s.xml' % (tmpdirname, test))
|
||||
+ root = tree.getroot()
|
||||
|
||||
- elif error_child.text == 'InvalidFree':
|
||||
- print("Invalid free() detected in %s" % test,
|
||||
- file=sys.stderr)
|
||||
- failed = True
|
||||
+ for root_child in root:
|
||||
+ if (root_child.tag == "error"):
|
||||
+ for error_child in root_child:
|
||||
+ if error_child.tag == 'kind':
|
||||
+ if error_child.text == 'Leak_DefinitelyLost':
|
||||
+ print("Memory leak detected in %s" % test,
|
||||
+ file=sys.stderr)
|
||||
+ failed = True
|
||||
|
||||
- elif error_child.text == 'InvalidRead':
|
||||
- print("Invalid read detected in %s" % test,
|
||||
- file=sys.stderr)
|
||||
- failed = True
|
||||
+ elif error_child.text == 'InvalidFree':
|
||||
+ print("Invalid free() detected in %s" % test,
|
||||
+ file=sys.stderr)
|
||||
+ failed = True
|
||||
|
||||
- elif error_child.text == 'UninitCondition':
|
||||
- print("Uninitialized usage detected in %s" % test,
|
||||
- file=sys.stderr)
|
||||
- failed = True
|
||||
- if failed:
|
||||
- with open('%s/%s.xml' % (tmpdirname, test), 'r') as xml:
|
||||
- print(xml.read())
|
||||
+ elif error_child.text == 'InvalidRead':
|
||||
+ print("Invalid read detected in %s" % test,
|
||||
+ file=sys.stderr)
|
||||
+ failed = True
|
||||
+
|
||||
+ elif error_child.text == 'UninitCondition':
|
||||
+ print(
|
||||
+ "Uninitialized usage detected in %s" %
|
||||
+ test, file=sys.stderr)
|
||||
+ failed = True
|
||||
+ if failed:
|
||||
+ with open('%s/%s.xml' % (tmpdirname, test), 'r') as xml:
|
||||
+ print(xml.read())
|
||||
|
||||
|
||||
if failed:
|
||||
sys.exit(1)
|
||||
--
|
||||
2.21.0
|
||||
|
150
SOURCES/0003-Fix-transfer-type-for-Module.search_streams.patch
Normal file
150
SOURCES/0003-Fix-transfer-type-for-Module.search_streams.patch
Normal file
@ -0,0 +1,150 @@
|
||||
From 340e316bd6384562086b4e381c8cd42b1ccd0781 Mon Sep 17 00:00:00 2001
|
||||
From: Stephen Gallagher <sgallagh@redhat.com>
|
||||
Date: Tue, 28 May 2019 14:28:30 -0400
|
||||
Subject: [PATCH 3/3] Fix transfer type for Module.search_streams()
|
||||
|
||||
Technically this is an API-breaking change, but no one is using it
|
||||
yet and it was always expected to be managed this way.
|
||||
|
||||
Fixes: https://github.com/fedora-modularity/libmodulemd/issues/308
|
||||
|
||||
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
|
||||
---
|
||||
modulemd/meson.build | 1 +
|
||||
.../v2/include/modulemd-2.0/modulemd-module.h | 4 +-
|
||||
modulemd/v2/meson.build | 17 ++++++-
|
||||
modulemd/v2/tests/ModulemdTests/module.py | 46 +++++++++++++++++++
|
||||
4 files changed, 65 insertions(+), 3 deletions(-)
|
||||
create mode 100644 modulemd/v2/tests/ModulemdTests/module.py
|
||||
|
||||
diff --git a/modulemd/meson.build b/modulemd/meson.build
|
||||
index e49c7a9df76dcf37a18ddeba3150d6c914aa4e25..e5912d4041ba3e427d13b98c0eeca5217d48244b 100644
|
||||
--- a/modulemd/meson.build
|
||||
+++ b/modulemd/meson.build
|
||||
@@ -229,10 +229,11 @@ test_v2_python_scripts = files(
|
||||
'v2/tests/ModulemdTests/componentrpm.py',
|
||||
'v2/tests/ModulemdTests/defaults.py',
|
||||
'v2/tests/ModulemdTests/defaultsv1.py',
|
||||
'v2/tests/ModulemdTests/dependencies.py',
|
||||
'v2/tests/ModulemdTests/merger.py',
|
||||
+ 'v2/tests/ModulemdTests/module.py',
|
||||
'v2/tests/ModulemdTests/moduleindex.py',
|
||||
'v2/tests/ModulemdTests/modulestream.py',
|
||||
'v2/tests/ModulemdTests/profile.py',
|
||||
'v2/tests/ModulemdTests/rpmmap.py',
|
||||
'v2/tests/ModulemdTests/servicelevel.py',
|
||||
diff --git a/modulemd/v2/include/modulemd-2.0/modulemd-module.h b/modulemd/v2/include/modulemd-2.0/modulemd-module.h
|
||||
index 45be9c0ae96e203707da61d84f18c71c4a826035..0219cfe227652813d20bdf736f9033782084c5ad 100644
|
||||
--- a/modulemd/v2/include/modulemd-2.0/modulemd-module.h
|
||||
+++ b/modulemd/v2/include/modulemd-2.0/modulemd-module.h
|
||||
@@ -129,12 +129,12 @@ modulemd_module_get_stream_by_NSVC (ModulemdModule *self,
|
||||
* @context: (nullable): The context of the stream to retrieve. If NULL, the
|
||||
* context is not included in the search.
|
||||
* @arch: (nullable): The processor architecture of the stream to retrieve. If
|
||||
* NULL, the architecture is not included in the search.
|
||||
*
|
||||
- * Returns: (transfer full) (element-type ModulemdModuleStream): The list of
|
||||
- * stream objects matching the requested parameters. This function cannot
|
||||
+ * Returns: (transfer container) (element-type ModulemdModuleStream): The list
|
||||
+ * of stream objects matching the requested parameters. This function cannot
|
||||
* fail, but it may return a zero-length list if no matches were found. The
|
||||
* returned streams will be in a predictable order, sorted first by stream
|
||||
* name, then by version (highest to lowest), then by context and finally by
|
||||
* architecture.
|
||||
*
|
||||
diff --git a/modulemd/v2/meson.build b/modulemd/v2/meson.build
|
||||
index 3f45db2c4e0e9a8996c74dffd949d5276082dc6f..e8a5a38f0528c4f860f0b84ef63609ff5fd89caa 100644
|
||||
--- a/modulemd/v2/meson.build
|
||||
+++ b/modulemd/v2/meson.build
|
||||
@@ -390,20 +390,35 @@ test ('dependencies_python2_debug', python2,
|
||||
args : dependencies_python_script)
|
||||
test ('dependencies_python2_release', python2,
|
||||
env : py_test_release_env,
|
||||
args : dependencies_python_script)
|
||||
|
||||
+# -- Test Modulemd.Module (Python) -- #
|
||||
+module_python_script = files('tests/ModulemdTests/module.py')
|
||||
+test ('module_python3_debug', python3,
|
||||
+ env : py_test_env,
|
||||
+ args : module_python_script)
|
||||
+test ('module_python3_release', python3,
|
||||
+ env : py_test_release_env,
|
||||
+ args : module_python_script)
|
||||
+
|
||||
+test ('module_python2_debug', python2,
|
||||
+ env : py_test_env,
|
||||
+ args : module_python_script)
|
||||
+test ('module_python2_release', python2,
|
||||
+ env : py_test_release_env,
|
||||
+ args : module_python_script)
|
||||
+
|
||||
# -- Test Modulemd.ModuleIndex (Python) -- #
|
||||
moduleindex_python_script = files('tests/ModulemdTests/moduleindex.py')
|
||||
test ('moduleindex_python3_debug', python3,
|
||||
env : py_test_env,
|
||||
args : moduleindex_python_script)
|
||||
test ('moduleindex_python3_release', python3,
|
||||
env : py_test_release_env,
|
||||
args : moduleindex_python_script)
|
||||
|
||||
-moduleindex_python_script = files('tests/ModulemdTests/moduleindex.py')
|
||||
test ('moduleindex_python2_debug', python2,
|
||||
env : py_test_env,
|
||||
args : moduleindex_python_script)
|
||||
test ('moduleindex_python2_release', python2,
|
||||
env : py_test_release_env,
|
||||
diff --git a/modulemd/v2/tests/ModulemdTests/module.py b/modulemd/v2/tests/ModulemdTests/module.py
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..b604d9c9b357c4a5211d3ba5b4d0aba08c3a42bd
|
||||
--- /dev/null
|
||||
+++ b/modulemd/v2/tests/ModulemdTests/module.py
|
||||
@@ -0,0 +1,46 @@
|
||||
+#!/usr/bin/python3
|
||||
+
|
||||
+# This file is part of libmodulemd
|
||||
+# Copyright (C) 2017-2018 Stephen Gallagher
|
||||
+#
|
||||
+# Fedora-License-Identifier: MIT
|
||||
+# SPDX-2.0-License-Identifier: MIT
|
||||
+# SPDX-3.0-License-Identifier: MIT
|
||||
+#
|
||||
+# This program is free software.
|
||||
+# For more information on the license, see COPYING.
|
||||
+# For more information on free software, see
|
||||
+# <https://www.gnu.org/philosophy/free-sw.en.html>.
|
||||
+
|
||||
+from os import path
|
||||
+import sys
|
||||
+try:
|
||||
+ import unittest
|
||||
+ import gi
|
||||
+ gi.require_version('Modulemd', '2.0')
|
||||
+ from gi.repository import Modulemd
|
||||
+ from gi.repository.Modulemd import ModuleIndex
|
||||
+ from gi.repository import GLib
|
||||
+except ImportError:
|
||||
+ # Return error 77 to skip this test on platforms without the necessary
|
||||
+ # python modules
|
||||
+ sys.exit(77)
|
||||
+
|
||||
+from base import TestBase
|
||||
+
|
||||
+
|
||||
+class TestModule(TestBase):
|
||||
+
|
||||
+ def test_search_streams(self):
|
||||
+ idx = Modulemd.ModuleIndex.new()
|
||||
+ idx.update_from_file(path.join(self.source_root,
|
||||
+ "modulemd/v2/tests/test_data/f29.yaml"),
|
||||
+ True)
|
||||
+ module = idx.get_module('nodejs')
|
||||
+
|
||||
+ self.assertEquals(len(module.search_streams('8', 0)), 1)
|
||||
+ self.assertEquals(len(module.search_streams('10', 0)), 1)
|
||||
+
|
||||
+
|
||||
+if __name__ == '__main__':
|
||||
+ unittest.main()
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,16 +1,16 @@
|
||||
%global libmodulemd_version 2.0.0
|
||||
%global libmodulemd_v1_version 1.8.0
|
||||
%global libmodulemd_version 2.5.0
|
||||
%global libmodulemd_v1_version 1.8.11
|
||||
|
||||
Name: libmodulemd
|
||||
Version: %{libmodulemd_version}
|
||||
Release: 5%{?dist}
|
||||
Release: 2%{?dist}
|
||||
Summary: Module metadata manipulation library
|
||||
|
||||
License: MIT
|
||||
URL: https://github.com/fedora-modularity/libmodulemd
|
||||
Source0: %{url}/releases/download/%{name}-%{version}/modulemd-%{version}.tar.xz
|
||||
|
||||
BuildRequires: meson >= 0.45.1-3
|
||||
BuildRequires: meson >= 0.47
|
||||
BuildRequires: pkgconfig
|
||||
BuildRequires: gcc
|
||||
BuildRequires: gcc-c++
|
||||
@ -24,15 +24,15 @@ BuildRequires: python3-gobject-base
|
||||
BuildRequires: valgrind
|
||||
%endif
|
||||
|
||||
Obsoletes: python2-modulemd < 1.3.4
|
||||
Obsoletes: python3-modulemd < 1.3.4
|
||||
|
||||
# Make sure we upgrade libmodulemd1 to match
|
||||
Conflicts: libmodulemd1 < %{libmodulemd_v1_version}-%{release}
|
||||
|
||||
|
||||
# Patches
|
||||
Patch0001: 0001-Include-modified-value-when-copying-Defaults-objects.patch
|
||||
Patch0002: 0001-Don-t-fail-merges-when-default-streams-differ.patch
|
||||
Patch0001: 0001-Double-valgrind-timeout.patch
|
||||
Patch0002: 0002-Parallelize-the-valgrind-tests.patch
|
||||
Patch0003: 0003-Fix-transfer-type-for-Module.search_streams.patch
|
||||
|
||||
|
||||
%description
|
||||
C Library for manipulating module metadata files.
|
||||
@ -42,9 +42,9 @@ more details.
|
||||
|
||||
%package -n python3-%{name}
|
||||
Summary: Python 3 bindings for %{name}
|
||||
BuildArch: noarch
|
||||
Requires: libmodulemd = %{version}-%{release}
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: python3-gobject-base
|
||||
Requires: %{py3_dist six}
|
||||
Obsoletes: python3-modulemd < 1.3.4
|
||||
|
||||
%description -n python3-%{name}
|
||||
@ -88,10 +88,12 @@ Development files for libmodulemd 1.x
|
||||
%package -n python3-libmodulemd1
|
||||
Summary: Python 3 bindings for %{name}1
|
||||
Version: %{libmodulemd_v1_version}
|
||||
BuildArch: noarch
|
||||
Requires: libmodulemd1 = %{libmodulemd_v1_version}-%{release}
|
||||
Requires: python3-gobject-base
|
||||
|
||||
Obsoletes: python3-libmodulemd < 2
|
||||
Provides: python3-libmodulemd = %{libmodulemd_v1_version}-%{release}
|
||||
|
||||
%description -n python3-libmodulemd1
|
||||
Python 3 bindings for libmodulemd1
|
||||
|
||||
@ -106,7 +108,7 @@ Python 3 bindings for libmodulemd1
|
||||
%meson_build
|
||||
|
||||
%define _vpath_builddir api2
|
||||
%meson -Ddeveloper_build=false -Dbuild_api_v1=false -Dbuild_api_v2=true
|
||||
%meson -Ddeveloper_build=false -Dbuild_api_v1=false -Dbuild_api_v2=true -Dwith_py3_overrides=true -Dwith_py2_overrides=false
|
||||
%meson_build
|
||||
|
||||
|
||||
@ -114,7 +116,7 @@ Python 3 bindings for libmodulemd1
|
||||
|
||||
export LC_CTYPE=C.utf8
|
||||
|
||||
%ifarch %{power64}
|
||||
%ifarch %{power64} s390x
|
||||
# Valgrind is broken on ppc64[le] with GCC7:
|
||||
# https://bugs.kde.org/show_bug.cgi?id=386945
|
||||
export MMD_SKIP_VALGRIND=1
|
||||
@ -148,7 +150,6 @@ ln -s libmodulemd.so.%{libmodulemd_v1_version} \
|
||||
%{_libdir}/%{name}.so.2*
|
||||
%dir %{_libdir}/girepository-1.0
|
||||
%{_libdir}/girepository-1.0/Modulemd-2.0.typelib
|
||||
%{python3_sitearch}/gi/overrides/
|
||||
|
||||
|
||||
%files devel
|
||||
@ -163,6 +164,7 @@ ln -s libmodulemd.so.%{libmodulemd_v1_version} \
|
||||
|
||||
|
||||
%files -n python3-%{name}
|
||||
%{python3_sitearch}/gi/overrides/
|
||||
|
||||
|
||||
%files -n python3-libmodulemd1
|
||||
@ -189,6 +191,19 @@ ln -s libmodulemd.so.%{libmodulemd_v1_version} \
|
||||
|
||||
|
||||
%changelog
|
||||
* Wed May 29 2019 Stephen Gallagher <sgallagh@redhat.com> - 2.5.0-2
|
||||
- Fix memory corruption error using Module.search_rpms() from python
|
||||
- Speed up valgrind tests
|
||||
- Resolves: rhbz#1714766
|
||||
|
||||
* Wed May 22 2019 Stephen Gallagher <sgallagh@redhat.com> - 2.5.0-1
|
||||
- Rebase to 2.5.0 and 1.8.11
|
||||
- Related: rhbz#1693680
|
||||
|
||||
* Mon May 13 2019 Stephen Gallagher <sgallagh@redhat.com> - 2.4.0-1
|
||||
- Rebase to 2.4.0 and 1.8.10
|
||||
- Resolves: rhbz#1693680
|
||||
|
||||
* Fri Jan 18 2019 Stephen Gallagher <sgallagh@redhat.com> - 2.0.0-5
|
||||
- Don't fail merges when default streams differ
|
||||
- Resolves: rhbz#1666871
|
||||
|
Loading…
Reference in New Issue
Block a user