Fix issue reading modified value for defaults from YAML streams

Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
This commit is contained in:
Stephen Gallagher 2019-01-11 10:58:16 -05:00
parent dd26c4a31a
commit ac437b4983
No known key found for this signature in database
GPG Key ID: 7A25556236BAA3A3
4 changed files with 111 additions and 153 deletions

View File

@ -0,0 +1,106 @@
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 (&copy);
}
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

View File

@ -1,116 +0,0 @@
From b873aca640964389935d88a90a657abba89421e3 Mon Sep 17 00:00:00 2001
From: Stephen Gallagher <sgallagh@redhat.com>
Date: Thu, 6 Sep 2018 11:17:41 -0400
Subject: [PATCH 1/2] Properly write out the ref for module components
Fixes: https://github.com/fedora-modularity/libmodulemd/issues/85
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
---
modulemd/v1/modulemd-yaml-emitter-modulemd.c | 2 +-
modulemd/v1/tests/test-modulemd-python.py | 50 +++++++++++++++++++
modulemd/v1/tests/test-modulemd-translation.c | 2 +-
3 files changed, 52 insertions(+), 2 deletions(-)
diff --git a/modulemd/v1/modulemd-yaml-emitter-modulemd.c b/modulemd/v1/modulemd-yaml-emitter-modulemd.c
index 87093813e28f5dd42ab014265874ce2148372c8a..7b0fbfafe1cdb4651f2f9b7147f9c082eb76ee2a 100644
--- a/modulemd/v1/modulemd-yaml-emitter-modulemd.c
+++ b/modulemd/v1/modulemd-yaml-emitter-modulemd.c
@@ -1353,11 +1353,11 @@ _emit_modulemd_module_components (yaml_emitter_t *emitter,
MMD_YAML_EMIT_STR_STR_DICT (
&event, name, value, YAML_PLAIN_SCALAR_STYLE);
}
/* Ref */
- value = modulemd_component_module_dup_repository (module_component);
+ value = modulemd_component_module_dup_ref (module_component);
if (value)
{
name = g_strdup ("ref");
MMD_YAML_EMIT_STR_STR_DICT (
&event, name, value, YAML_PLAIN_SCALAR_STYLE);
diff --git a/modulemd/v1/tests/test-modulemd-python.py b/modulemd/v1/tests/test-modulemd-python.py
index 07823213de9c7f16e16719efe0eccf155117cfa5..596665a6df2e367d0817c08b0bfc651cecd14e6a 100755
--- a/modulemd/v1/tests/test-modulemd-python.py
+++ b/modulemd/v1/tests/test-modulemd-python.py
@@ -214,10 +214,60 @@ class TestIssues(unittest.TestCase):
yaml_output = mmd_translation.dumps()
except GLib.GError as err:
# A proper exception is expected here
pass
+ def test_issue85(self):
+ """
+ Component module refs are lost when dumping to YAML
+ """
+ mmd = Modulemd.Module().new_from_string("""
+document: modulemd
+version: 1
+data:
+ summary: A test module in all its beautiful beauty.
+ description: This module demonstrates how to write simple modulemd files And can be used for testing the build and release pipeline.
+ license:
+ module: [ MIT ]
+ dependencies:
+ buildrequires:
+ platform: el8
+ requires:
+ platform: el8
+ references:
+ community: https://fedoraproject.org/wiki/Modularity
+ documentation: https://fedoraproject.org/wiki/Fedora_Packaging_Guidelines_for_Modules
+ tracker: https://taiga.fedorainfracloud.org/project/modularity
+ profiles:
+ default:
+ rpms:
+ - acl
+ api:
+ rpms:
+ - acl
+ components:
+ rpms:
+ acl:
+ rationale: needed
+ ref: rhel-8.0
+ modules:
+ testmodule:
+ ref: private-x
+ rationale: Testing module inclusion.
+ buildorder: 10
+""")
+ assert mmd.get_module_components(
+ )['testmodule'].peek_ref() == 'private-x'
+
+ mmd2 = Modulemd.Module.copy(mmd)
+ assert mmd2.get_module_components(
+ )['testmodule'].peek_ref() == 'private-x'
+
+ mmd3 = Modulemd.Module.new_from_string(mmd.dumps())
+ assert mmd3.get_module_components(
+ )['testmodule'].peek_ref() == 'private-x'
+
class TestIntent(unittest.TestCase):
def test_basic(self):
intent = Modulemd.Intent.new("intent_name")
diff --git a/modulemd/v1/tests/test-modulemd-translation.c b/modulemd/v1/tests/test-modulemd-translation.c
index a85ba5131db562aa9be3255fae3db13e9ee66508..dfa07f48d5ada811a5c82f14e7bcf52c7b258b94 100644
--- a/modulemd/v1/tests/test-modulemd-translation.c
+++ b/modulemd/v1/tests/test-modulemd-translation.c
@@ -350,11 +350,11 @@ modulemd_translation_test_index (TranslationFixture *fixture,
"demonstrates arches and multilib.\n arches: [i686, x86_64]\n "
" multilib: [x86_64]\n xyz:\n rationale: xyz is a bundled "
"dependency of xxx.\n buildorder: 10\n modules:\n "
"includedmodule:\n rationale: Included in the stack, just "
"because.\n repository: https://pagure.io/includedmodule.git\n "
- " ref: https://pagure.io/includedmodule.git\n buildorder: 100\n "
+ " ref: somecoolbranchname\n buildorder: 100\n "
"artifacts:\n rpms:\n - bar-0:1.23-1.module_deadbeef.x86_64\n - "
"bar-devel-0:1.23-1.module_deadbeef.x86_64\n - "
"bar-extras-0:1.23-1.module_deadbeef.x86_64\n - "
"baz-0:42-42.module_deadbeef.x86_64\n - "
"xxx-0:1-1.module_deadbeef.i686\n - xxx-0:1-1.module_deadbeef.x86_64\n "
--
2.19.0.rc0

View File

@ -1,35 +0,0 @@
From e69860136a11441a9f952ac97da1040a3219b4d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
Date: Wed, 5 Sep 2018 12:20:36 +0200
Subject: [PATCH 2/2] Use decimal version in NSVC
Fixes: #82
---
modulemd/v1/modulemd-modulestream.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/modulemd/v1/modulemd-modulestream.c b/modulemd/v1/modulemd-modulestream.c
index 1ee6e1cffc5cecd19439ca47afc4425e9808aaa4..58317c17564301f85984f7608356002afeb29921 100644
--- a/modulemd/v1/modulemd-modulestream.c
+++ b/modulemd/v1/modulemd-modulestream.c
@@ -1796,15 +1796,15 @@ modulemd_modulestream_get_nsvc (ModulemdModuleStream *self)
}
if (context)
{
nsvc = g_strdup_printf (
- "%s:%s:%" PRIx64 ":%s", name, stream, version, context);
+ "%s:%s:%" PRIu64 ":%s", name, stream, version, context);
}
else
{
- nsvc = g_strdup_printf ("%s:%s:%" PRIx64, name, stream, version);
+ nsvc = g_strdup_printf ("%s:%s:%" PRIu64, name, stream, version);
}
return nsvc;
}
--
2.19.0.rc0

View File

@ -3,7 +3,7 @@
Name: libmodulemd
Version: %{libmodulemd_version}
Release: 1%{?dist}
Release: 2%{?dist}
Summary: Module metadata manipulation library
License: MIT
@ -28,7 +28,7 @@ Obsoletes: python2-modulemd < 1.3.4
Obsoletes: python3-modulemd < 1.3.4
# Patches
Patch0001: 0001-Include-modified-value-when-copying-Defaults-objects.patch
%description
C Library for manipulating module metadata files.
@ -171,6 +171,9 @@ ln -s libmodulemd.so.%{libmodulemd_v1_version} \
%{_datadir}/gtk-doc/html/modulemd-1.0/
%changelog
* Fri Jan 11 2019 Stephen Gallagher <sgallagh@redhat.com> - 2.0.0-2
- Fix issue reading modified value for defaults from YAML streams
* Thu Dec 13 2018 Stephen Gallagher <sgallagh@redhat.com> - 2.0.0-1
- Update to 2.0.0 final
- Assorted fixes for validation