Update to libmodulemd 2.1.0 and 1.8.2
Drop upstreamed patches Add new API ModuleStream.depends_on_stream() and ModuleStream.build_depends_on_stream() to help support auto-detection of when a module stream may need to be rebuilt when its dependencies change. Don't fail merges when default streams differ, treat it as "no default for this module" Fix error message Copy modified value when copying Modulemd.Defaults objects Fixes discovered by clang and coverity static analysis tools Test improvements Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
This commit is contained in:
parent
fbc6b4e257
commit
ed17745b6d
1
.gitignore
vendored
1
.gitignore
vendored
@ -26,3 +26,4 @@
|
||||
/modulemd-1.7.0.tar.xz
|
||||
/modulemd-2.0.0beta2.tar.xz
|
||||
/modulemd-2.0.0.tar.xz
|
||||
/modulemd-2.1.0.tar.xz
|
||||
|
@ -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
|
||||
|
@ -1,230 +0,0 @@
|
||||
From f8fd49a9aefffdaa24f6d4b24268ac3cd5f3d090 Mon Sep 17 00:00:00 2001
|
||||
From: Stephen Gallagher <sgallagh@redhat.com>
|
||||
Date: Mon, 7 Jan 2019 10:22:30 -0500
|
||||
Subject: [PATCH 2/3] Always sort the dependencies
|
||||
|
||||
This will make sure that the output is always consistent. This
|
||||
patch fixes both the ordering of the module names as well as the
|
||||
stream names.
|
||||
|
||||
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
|
||||
---
|
||||
.../modulemd-2.0/private/modulemd-yaml.h | 30 ++++---
|
||||
modulemd/v2/modulemd-dependencies.c | 85 ++-----------------
|
||||
.../v2/tests/test-modulemd-modulestream.c | 14 +--
|
||||
3 files changed, 36 insertions(+), 93 deletions(-)
|
||||
|
||||
diff --git a/modulemd/v2/include/modulemd-2.0/private/modulemd-yaml.h b/modulemd/v2/include/modulemd-2.0/private/modulemd-yaml.h
|
||||
index e426fe6f1d9c43c7ad13420edc481eba46ae3fda..cca84590d6b29fe2f7d20fb91e7205fa21a38533 100644
|
||||
--- a/modulemd/v2/include/modulemd-2.0/private/modulemd-yaml.h
|
||||
+++ b/modulemd/v2/include/modulemd-2.0/private/modulemd-yaml.h
|
||||
@@ -655,12 +655,30 @@ skip_unknown_yaml (yaml_parser_t *parser, GError **error);
|
||||
MODULEMD_YAML_ERROR_EMIT, \
|
||||
"String set for key %s was empty on emit", \
|
||||
key); \
|
||||
return FALSE; \
|
||||
} \
|
||||
+ EMIT_STRING_SET_FULL ( \
|
||||
+ emitter, error, key, table, YAML_BLOCK_SEQUENCE_STYLE); \
|
||||
+ } \
|
||||
+ while (0)
|
||||
+
|
||||
+#define EMIT_STRING_SET_IF_NON_EMPTY(emitter, error, key, table) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ if (NON_EMPTY_TABLE (table)) \
|
||||
+ { \
|
||||
+ EMIT_STRING_SET (emitter, error, key, table); \
|
||||
+ } \
|
||||
+ } \
|
||||
+ while (0)
|
||||
+
|
||||
+#define EMIT_STRING_SET_FULL(emitter, error, key, table, sequence_style) \
|
||||
+ do \
|
||||
+ { \
|
||||
EMIT_SCALAR (emitter, error, key); \
|
||||
- EMIT_SEQUENCE_START (emitter, error); \
|
||||
+ EMIT_SEQUENCE_START_WITH_STYLE (emitter, error, sequence_style); \
|
||||
gsize i; \
|
||||
g_autoptr (GPtrArray) keys = \
|
||||
modulemd_ordered_str_keys (table, modulemd_strcmp_sort); \
|
||||
for (i = 0; i < keys->len; i++) \
|
||||
{ \
|
||||
@@ -668,20 +686,10 @@ skip_unknown_yaml (yaml_parser_t *parser, GError **error);
|
||||
} \
|
||||
EMIT_SEQUENCE_END (emitter, error); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
-#define EMIT_STRING_SET_IF_NON_EMPTY(emitter, error, key, table) \
|
||||
- do \
|
||||
- { \
|
||||
- if (NON_EMPTY_TABLE (table)) \
|
||||
- { \
|
||||
- EMIT_STRING_SET (emitter, error, key, table); \
|
||||
- } \
|
||||
- } \
|
||||
- while (0)
|
||||
-
|
||||
#define EMIT_ARRAY_VALUES(emitter, error, key, array, emitfn) \
|
||||
do \
|
||||
{ \
|
||||
if (!NON_EMPTY_ARRAY (array)) \
|
||||
{ \
|
||||
diff --git a/modulemd/v2/modulemd-dependencies.c b/modulemd/v2/modulemd-dependencies.c
|
||||
index f71bebe9fbc852fa6df729ce80bd0e0375e023bd..ee918e02a87dfdee04a5a6af7dc96e949159a046 100644
|
||||
--- a/modulemd/v2/modulemd-dependencies.c
|
||||
+++ b/modulemd/v2/modulemd-dependencies.c
|
||||
@@ -470,73 +470,22 @@ modulemd_dependencies_parse_yaml (yaml_parser_t *parser,
|
||||
}
|
||||
return g_steal_pointer (&d);
|
||||
}
|
||||
|
||||
|
||||
-static gboolean
|
||||
-modulemd_dependencies_emit_yaml_nested_set_value (GHashTable *values,
|
||||
- yaml_emitter_t *emitter,
|
||||
- yaml_sequence_style_t style,
|
||||
- GError **error)
|
||||
-{
|
||||
- MODULEMD_INIT_TRACE ();
|
||||
- int ret;
|
||||
- g_autoptr (GError) nested_error = NULL;
|
||||
- MMD_INIT_YAML_EVENT (event);
|
||||
- GHashTableIter iter;
|
||||
- gpointer key;
|
||||
-
|
||||
- ret = mmd_emitter_start_sequence (emitter, style, &nested_error);
|
||||
- if (!ret)
|
||||
- {
|
||||
- g_propagate_prefixed_error (
|
||||
- error,
|
||||
- g_steal_pointer (&nested_error),
|
||||
- "Failed to start dependencies nested mapping values: ");
|
||||
- return FALSE;
|
||||
- }
|
||||
-
|
||||
- g_hash_table_iter_init (&iter, values);
|
||||
- while (g_hash_table_iter_next (&iter, &key, NULL))
|
||||
- {
|
||||
- ret = mmd_emitter_scalar (
|
||||
- emitter, (const gchar *)key, YAML_PLAIN_SCALAR_STYLE, &nested_error);
|
||||
- if (!ret)
|
||||
- {
|
||||
- g_propagate_prefixed_error (
|
||||
- error,
|
||||
- g_steal_pointer (&nested_error),
|
||||
- "Failed to start dependencies nested mapping entry: ");
|
||||
- return FALSE;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- ret = mmd_emitter_end_sequence (emitter, &nested_error);
|
||||
- if (!ret)
|
||||
- {
|
||||
- g_propagate_prefixed_error (
|
||||
- error,
|
||||
- g_steal_pointer (&nested_error),
|
||||
- "Failed to end dependencies nested mapping values: ");
|
||||
- return FALSE;
|
||||
- }
|
||||
-
|
||||
- return TRUE;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static gboolean
|
||||
modulemd_dependencies_emit_yaml_nested_set (GHashTable *table,
|
||||
yaml_emitter_t *emitter,
|
||||
GError **error)
|
||||
{
|
||||
MODULEMD_INIT_TRACE ();
|
||||
int ret;
|
||||
g_autoptr (GError) nested_error = NULL;
|
||||
MMD_INIT_YAML_EVENT (event);
|
||||
- GHashTableIter iter;
|
||||
- gpointer key, value;
|
||||
+ g_autoptr (GPtrArray) keys = NULL;
|
||||
+ GHashTable *dep = NULL;
|
||||
+ gchar *key = NULL;
|
||||
|
||||
ret = mmd_emitter_start_mapping (
|
||||
emitter, YAML_BLOCK_MAPPING_STYLE, &nested_error);
|
||||
if (!ret)
|
||||
{
|
||||
@@ -545,34 +494,18 @@ modulemd_dependencies_emit_yaml_nested_set (GHashTable *table,
|
||||
g_steal_pointer (&nested_error),
|
||||
"Failed to start dependencies nested mapping: ");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
- g_hash_table_iter_init (&iter, table);
|
||||
- while (g_hash_table_iter_next (&iter, &key, &value))
|
||||
+ keys = modulemd_ordered_str_keys (table, modulemd_strcmp_sort);
|
||||
+ for (gint i = 0; i < keys->len; i++)
|
||||
{
|
||||
- ret = mmd_emitter_scalar (
|
||||
- emitter, (const gchar *)key, YAML_PLAIN_SCALAR_STYLE, &nested_error);
|
||||
- if (!ret)
|
||||
- {
|
||||
- g_propagate_prefixed_error (
|
||||
- error,
|
||||
- g_steal_pointer (&nested_error),
|
||||
- "Failed to emit dependencies nested key: ");
|
||||
- return FALSE;
|
||||
- }
|
||||
+ key = g_ptr_array_index (keys, i);
|
||||
+ dep = g_hash_table_lookup (table, key);
|
||||
|
||||
- ret = modulemd_dependencies_emit_yaml_nested_set_value (
|
||||
- (GHashTable *)value, emitter, YAML_FLOW_SEQUENCE_STYLE, &nested_error);
|
||||
- if (!ret)
|
||||
- {
|
||||
- g_propagate_prefixed_error (
|
||||
- error,
|
||||
- g_steal_pointer (&nested_error),
|
||||
- "Failed to emit dependencies nested sequence: ");
|
||||
- return FALSE;
|
||||
- }
|
||||
+ EMIT_STRING_SET_FULL (
|
||||
+ emitter, error, key, dep, YAML_FLOW_SEQUENCE_STYLE);
|
||||
}
|
||||
|
||||
ret = mmd_emitter_end_mapping (emitter, &nested_error);
|
||||
if (!ret)
|
||||
{
|
||||
diff --git a/modulemd/v2/tests/test-modulemd-modulestream.c b/modulemd/v2/tests/test-modulemd-modulestream.c
|
||||
index 8136b6ec626b3648339840c7cd667423c3ea1cc9..b68f4a650e15535d606aae031afc90a41bb4bcec 100644
|
||||
--- a/modulemd/v2/tests/test-modulemd-modulestream.c
|
||||
+++ b/modulemd/v2/tests/test-modulemd-modulestream.c
|
||||
@@ -308,19 +308,21 @@ module_stream_v2_test_parse_dump (ModuleStreamFixture *fixture,
|
||||
"Beerware\n - GPLv2+\n - zlib\n xmd:\n some_key: some_data\n "
|
||||
"dependencies:\n - buildrequires:\n platform: [-epel7, -f27, "
|
||||
"-f28]\n "
|
||||
" requires:\n platform: [-epel7, -f27, -f28]\n - buildrequires:\n "
|
||||
" "
|
||||
- "compatible: [v3]\n platform: [f27]\n buildtools: [v1, v2]\n "
|
||||
+ "buildtools: [v1, v2]\n compatible: [v3]\n platform: [f27]\n "
|
||||
"requires:\n compatible: [v3, v4]\n "
|
||||
"platform: [f27]\n - buildrequires:\n platform: [f28]\n "
|
||||
"requires:\n platform: [f28]\n runtime: [a, b]\n - "
|
||||
- "buildrequires:\n extras: []\n platform: [epel7]\n "
|
||||
- "moreextras: [foo, bar]\n "
|
||||
- "requires:\n extras: []\n platform: [epel7]\n "
|
||||
- "moreextras: [foo, bar]\n references:\n community: "
|
||||
- "http://www.example.com/\n documentation: http://www.example.com/\n "
|
||||
+ "buildrequires:\n extras: []\n moreextras: [bar, foo]\n "
|
||||
+ "platform: [epel7]\n "
|
||||
+ "requires:\n extras: []\n "
|
||||
+ "moreextras: [bar, foo]\n platform: [epel7]\n references:\n "
|
||||
+ "community: "
|
||||
+ "http://www.example.com/\n documentation: "
|
||||
+ "http://www.example.com/\n "
|
||||
"tracker: http://www.example.com/\n profiles:\n buildroot:\n "
|
||||
"rpms:\n - bar-devel\n container:\n rpms:\n - bar\n "
|
||||
" - bar-devel\n default:\n rpms:\n - bar\n - "
|
||||
"bar-extras\n - baz\n minimal:\n description: Minimal "
|
||||
"profile installing only the bar package.\n rpms:\n - bar\n "
|
||||
--
|
||||
2.20.1
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 430fddbaae4c9e8ae8b3b43d9a792c71d93256dd Mon Sep 17 00:00:00 2001
|
||||
From: Stephen Gallagher <sgallagh@redhat.com>
|
||||
Date: Mon, 7 Jan 2019 14:46:30 -0500
|
||||
Subject: [PATCH 3/3] Use glib2 valgrind suppression file
|
||||
|
||||
Make sure to filter out known issues with glib2 so our tests don't
|
||||
fail for situations we cannot control (or may be false-positives).
|
||||
|
||||
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
|
||||
---
|
||||
modulemd/common/tests/test-valgrind.py | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/modulemd/common/tests/test-valgrind.py b/modulemd/common/tests/test-valgrind.py
|
||||
index 94bf6e0dc5b437751189b0f5ea2eb27660a13227..9f193207ceff1cc85b34ec2dd8fe19d21a5bfd73 100644
|
||||
--- a/modulemd/common/tests/test-valgrind.py
|
||||
+++ b/modulemd/common/tests/test-valgrind.py
|
||||
@@ -46,14 +46,16 @@ for test in unfiltered_tests:
|
||||
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
|
||||
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)
|
||||
+ "--xml-file=%s/%s.xml " % (tmpdirname, test)
|
||||
proc_result = subprocess.run(
|
||||
[
|
||||
'meson',
|
||||
'test',
|
||||
'-t', '10',
|
||||
--
|
||||
2.20.1
|
||||
|
@ -1,9 +1,9 @@
|
||||
%global libmodulemd_version 2.0.0
|
||||
%global libmodulemd_v1_version 1.8.0
|
||||
%global libmodulemd_version 2.1.0
|
||||
%global libmodulemd_v1_version 1.8.2
|
||||
|
||||
Name: libmodulemd
|
||||
Version: %{libmodulemd_version}
|
||||
Release: 3%{?dist}
|
||||
Release: 1%{?dist}
|
||||
Summary: Module metadata manipulation library
|
||||
|
||||
License: MIT
|
||||
@ -28,9 +28,6 @@ Obsoletes: python2-modulemd < 1.3.4
|
||||
Obsoletes: python3-modulemd < 1.3.4
|
||||
|
||||
# Patches
|
||||
Patch0001: 0001-Include-modified-value-when-copying-Defaults-objects.patch
|
||||
Patch0002: 0002-Always-sort-the-dependencies.patch
|
||||
Patch0003: 0003-Use-glib2-valgrind-suppression-file.patch
|
||||
|
||||
%description
|
||||
C Library for manipulating module metadata files.
|
||||
@ -173,6 +170,19 @@ ln -s libmodulemd.so.%{libmodulemd_v1_version} \
|
||||
%{_datadir}/gtk-doc/html/modulemd-1.0/
|
||||
|
||||
%changelog
|
||||
* Sat Jan 26 2019 Stephen Gallagher <sgallagh@redhat.com> - 2.1.0-1
|
||||
- Update to libmodulemd 2.1.0 and 1.8.2
|
||||
- Drop upstreamed patches
|
||||
- Add new API ModuleStream.depends_on_stream() and
|
||||
ModuleStream.build_depends_on_stream() to help support auto-detection of
|
||||
when a module stream may need to be rebuilt when its dependencies change.
|
||||
- Don't fail merges when default streams differ, treat it as "no default for
|
||||
this module"
|
||||
- Fix error message
|
||||
- Copy modified value when copying Modulemd.Defaults objects
|
||||
- Fixes discovered by clang and coverity static analysis tools
|
||||
- Test improvements
|
||||
|
||||
* Fri Jan 11 2019 Stephen Gallagher <sgallagh@redhat.com> - 2.0.0-3
|
||||
- Fix ordering issue with dependencies
|
||||
- Use glib2 suppression file when running valgrind tests
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (modulemd-2.0.0.tar.xz) = 6069d10fdf92e6e906693972bef55d1342e2eb1e092cb651b24d3ca7bb98c802b53dc5aa6a8206ca791697b6eb919f28a5ca36cb864433e3c34b914f9871c05e
|
||||
SHA512 (modulemd-2.1.0.tar.xz) = 565a248ed32b64e31419efd023defe12a9799b584b7dc21139453ad46a96799d5018a0aefb4f2b356d61cbf16ebe17381548f13c49db61643690ef9b8090f2ee
|
||||
|
Loading…
Reference in New Issue
Block a user