diff --git a/.gitignore b/.gitignore index 9570acc..e09460b 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/0001-Include-modified-value-when-copying-Defaults-objects.patch b/0001-Include-modified-value-when-copying-Defaults-objects.patch deleted file mode 100644 index ad3ee96..0000000 --- a/0001-Include-modified-value-when-copying-Defaults-objects.patch +++ /dev/null @@ -1,106 +0,0 @@ -From f66d185dd5c2c1750b3626c2e0bdfeab63e427b6 Mon Sep 17 00:00:00 2001 -From: Stephen Gallagher -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 ---- - 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 - # . - -+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 - diff --git a/0002-Always-sort-the-dependencies.patch b/0002-Always-sort-the-dependencies.patch deleted file mode 100644 index 170108c..0000000 --- a/0002-Always-sort-the-dependencies.patch +++ /dev/null @@ -1,230 +0,0 @@ -From f8fd49a9aefffdaa24f6d4b24268ac3cd5f3d090 Mon Sep 17 00:00:00 2001 -From: Stephen Gallagher -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 ---- - .../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 - diff --git a/0003-Use-glib2-valgrind-suppression-file.patch b/0003-Use-glib2-valgrind-suppression-file.patch deleted file mode 100644 index c6d5e83..0000000 --- a/0003-Use-glib2-valgrind-suppression-file.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 430fddbaae4c9e8ae8b3b43d9a792c71d93256dd Mon Sep 17 00:00:00 2001 -From: Stephen Gallagher -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 ---- - 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 - diff --git a/libmodulemd.spec b/libmodulemd.spec index 8cff3ae..e16077a 100644 --- a/libmodulemd.spec +++ b/libmodulemd.spec @@ -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 - 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 - 2.0.0-3 - Fix ordering issue with dependencies - Use glib2 suppression file when running valgrind tests diff --git a/sources b/sources index ea8a861..b0ba3e1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (modulemd-2.0.0.tar.xz) = 6069d10fdf92e6e906693972bef55d1342e2eb1e092cb651b24d3ca7bb98c802b53dc5aa6a8206ca791697b6eb919f28a5ca36cb864433e3c34b914f9871c05e +SHA512 (modulemd-2.1.0.tar.xz) = 565a248ed32b64e31419efd023defe12a9799b584b7dc21139453ad46a96799d5018a0aefb4f2b356d61cbf16ebe17381548f13c49db61643690ef9b8090f2ee