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:
		
							parent
							
								
									9ada74e700
								
							
						
					
					
						commit
						82042cbbaf
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -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 | ||||
|  | ||||
| @ -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 | ||||
| 
 | ||||
| @ -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 | ||||
| 
 | ||||
| @ -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 | ||||
| 
 | ||||
| @ -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 | ||||
| 
 | ||||
| @ -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 | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										2
									
								
								sources
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								sources
									
									
									
									
									
								
							| @ -1 +1 @@ | ||||
| SHA512 (modulemd-2.5.0.tar.xz) = 78e9a523cbe0fccf4a39c3824397a4383eec58d688558f44dc05d4c34cce3b08b307b489ea8d68403607fb9f11efad76dd2bbbecfae6a102c0929acb95d05c65 | ||||
| SHA512 (modulemd-2.6.0.tar.xz) = 70ff6cb8c4f4ee8619cae96fc62280460f32872b166bf4db87d80827149825cdb1aa9d9bdc85ef68d2caddb1f9569003e218523d0d1e7f59367e53046628e7fb | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user