Update to 2.6.0

- Update to 2.6.0
- New function ModuleIndexMerger.resolve_ext() allowing for strict merging
- Profile.get_description() now properly returns available translations
- Numerous documentation fixes
- Test improvements

Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
This commit is contained in:
Stephen Gallagher 2019-07-03 16:33:18 -04:00
parent 9ada74e700
commit 82042cbbaf
No known key found for this signature in database
GPG Key ID: 7A25556236BAA3A3
7 changed files with 12 additions and 354 deletions

1
.gitignore vendored
View File

@ -35,3 +35,4 @@
/modulemd-2.3.1.tar.xz
/modulemd-2.4.0.tar.xz
/modulemd-2.5.0.tar.xz
/modulemd-2.6.0.tar.xz

View File

@ -1,29 +0,0 @@
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

View File

@ -1,136 +0,0 @@
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

View File

@ -1,150 +0,0 @@
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

View File

@ -1,31 +0,0 @@
From 82e56d78e46504aab5917b606eae67e1a3b54603 Mon Sep 17 00:00:00 2001
From: Stephen Gallagher <sgallagh@redhat.com>
Date: Wed, 29 May 2019 16:18:30 -0400
Subject: [PATCH 4/4] Extend timeout for header test
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
---
modulemd/meson.build | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/modulemd/meson.build b/modulemd/meson.build
index e5912d4041ba3e427d13b98c0eeca5217d48244b..0741736a12b4457559ade0a5372ff4b25743fce3 100644
--- a/modulemd/meson.build
+++ b/modulemd/meson.build
@@ -306,11 +306,12 @@ endif
if build_api_v2
subdir('v2')
import_header_script = find_program('common/tests/test-import-headers.sh')
test ('test_v2_import_headers', import_header_script,
env : test_env,
- args : modulemd_v2_hdrs)
+ args : modulemd_v2_hdrs,
+ timeout : 300)
endif
if valgrind.found()
modulemd_valgrind_scripts = files('common/tests/test-valgrind.py')
test ('valgrind', python3,
--
2.21.0

View File

@ -1,5 +1,5 @@
%global libmodulemd_version 2.5.0
%global libmodulemd_v1_version 1.8.11
%global libmodulemd_version 2.6.0
%global libmodulemd_v1_version 1.8.13
# Python 2 is dead on F31+
%if ( 0%{?fedora} && 0%{?fedora} <= 30 ) || ( 0%{?rhel} && 0%{?rhel} <= 7)
@ -12,7 +12,7 @@
Name: libmodulemd
Version: %{libmodulemd_version}
Release: 2%{?dist}
Release: 1%{?dist}
Summary: Module metadata manipulation library
License: MIT
@ -42,10 +42,6 @@ Conflicts: libmodulemd1 < %{libmodulemd_v1_version}-%{release}
# Patches
Patch0001: 0001-Double-valgrind-timeout.patch
Patch0002: 0002-Parallelize-the-valgrind-tests.patch
Patch0003: 0003-Fix-transfer-type-for-Module.search_streams.patch
Patch0004: 0004-Extend-timeout-for-header-test.patch
%description
@ -235,6 +231,13 @@ ln -s libmodulemd.so.%{libmodulemd_v1_version} \
%{_datadir}/gtk-doc/html/modulemd-1.0/
%changelog
* Wed Jul 03 2019 Stephen Gallagher <sgallagh@redhat.com> - 2.6.0-1
- Update to 2.6.0
- New function ModuleIndexMerger.resolve_ext() allowing for strict merging
- Profile.get_description() now properly returns available translations
- Numerous documentation fixes
- Test improvements
* Wed May 29 2019 Stephen Gallagher <sgallagh@redhat.com> - 2.5.0-2
- Fix memory issue with Module.search_streams() in the python bindings

View File

@ -1 +1 @@
SHA512 (modulemd-2.5.0.tar.xz) = 78e9a523cbe0fccf4a39c3824397a4383eec58d688558f44dc05d4c34cce3b08b307b489ea8d68403607fb9f11efad76dd2bbbecfae6a102c0929acb95d05c65
SHA512 (modulemd-2.6.0.tar.xz) = 70ff6cb8c4f4ee8619cae96fc62280460f32872b166bf4db87d80827149825cdb1aa9d9bdc85ef68d2caddb1f9569003e218523d0d1e7f59367e53046628e7fb