From 8173040ea6469cfbbb4a37d569170131366408e9 Mon Sep 17 00:00:00 2001 From: mprahl Date: Jul 17 2018 13:00:42 +0000 Subject: Use the libmodulemd API properly when setting values on existing objects MBS has been using the libmodulemd API incorrectly by assuming that methods like `get_rpm_components` return the actual object in memory and not a copy. This has been true but wasn't something sgallagh intended. We found this out after he had me test his new version of libmodulemd. This PR removes those assumptions. --- diff --git a/module_build_service/utils/submit.py b/module_build_service/utils/submit.py index be3bcfd..9ca864e 100644 --- a/module_build_service/utils/submit.py +++ b/module_build_service/utils/submit.py @@ -100,11 +100,13 @@ def format_mmd(mmd, scmurl, session=None): else: xmd['mbs']['commit'] = scm.get_latest() - if mmd.get_rpm_components() or mmd.get_module_components(): + rpm_components = mmd.get_rpm_components() + module_components = mmd.get_module_components() + if rpm_components or module_components: if 'rpms' not in xmd['mbs']: xmd['mbs']['rpms'] = {} # Add missing data in RPM components - for pkgname, pkg in mmd.get_rpm_components().items(): + for pkgname, pkg in rpm_components.items(): if pkg.get_repository() and not conf.rpms_allow_repository: raise Forbidden( "Custom component repositories aren't allowed. " @@ -119,9 +121,10 @@ def format_mmd(mmd, scmurl, session=None): pkg.set_cache(conf.rpms_default_cache + pkgname) if not pkg.get_ref(): pkg.set_ref('master') + mmd.set_rpm_components(rpm_components) # Add missing data in included modules components - for modname, mod in mmd.get_module_components().items(): + for modname, mod in module_components.items(): if mod.get_repository() and not conf.modules_allow_repository: raise Forbidden( "Custom module repositories aren't allowed. " @@ -130,11 +133,12 @@ def format_mmd(mmd, scmurl, session=None): mod.set_repository(conf.modules_default_repository + modname) if not mod.get_ref(): mod.set_ref('master') + mmd.set_module_components(module_components) # Check that SCM URL is valid and replace potential branches in pkg refs # by real SCM hash and store the result to our private xmd place in modulemd. pool = ThreadPool(20) - pkg_dicts = pool.map(_scm_get_latest, mmd.get_rpm_components().values()) + pkg_dicts = pool.map(_scm_get_latest, rpm_components.values()) err_msg = "" for pkg_dict in pkg_dicts: if pkg_dict["error"]: diff --git a/tests/__init__.py b/tests/__init__.py index bf5efa3..cf2a1d3 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -291,7 +291,9 @@ def scheduler_init_data(tangerine_state=None): current_dir, 'staged_data', 'formatted_testmodule.yaml') mmd = Modulemd.Module().new_from_file(formatted_testmodule_yml_path) mmd.upgrade() - mmd.get_rpm_components()['tangerine'].set_buildorder(0) + components = mmd.get_rpm_components() + components['tangerine'].set_buildorder(0) + mmd.set_rpm_components(components) build_one = module_build_service.models.ModuleBuild() build_one.name = 'testmodule' diff --git a/tests/test_utils/test_utils.py b/tests/test_utils/test_utils.py index 1c494b2..7fb0682 100644 --- a/tests/test_utils/test_utils.py +++ b/tests/test_utils/test_utils.py @@ -90,8 +90,9 @@ class TestUtilsComponentReuse: second_module_build = models.ModuleBuild.query.filter_by(id=3).one() if changed_component: mmd = second_module_build.mmd() - mmd.get_rpm_components()['tangerine'].set_ref( - '00ea1da4192a2030f9ae023de3b3143ed647bbab') + components = mmd.get_rpm_components() + components['tangerine'].set_ref('00ea1da4192a2030f9ae023de3b3143ed647bbab') + mmd.set_rpm_components(components) second_module_build.modulemd = mmd.dumps() second_module_changed_component = models.ComponentBuild.query.filter_by( package=changed_component, module_id=3).one() @@ -204,7 +205,9 @@ class TestUtilsComponentReuse: mmd = second_module_build.mmd() br_list = Modulemd.SimpleSet() br_list.add('master') - mmd.get_dependencies()[0].set_buildrequires({'some_module': br_list}) + deps = mmd.get_dependencies() + deps[0].set_buildrequires({'some_module': br_list}) + mmd.set_dependencies(deps) xmd = glib.from_variant_dict(mmd.get_xmd()) xmd['mbs']['buildrequires'] = { 'some_module': { @@ -306,9 +309,11 @@ class TestUtils: mmd = Modulemd.Module().new_from_file( path.join(BASE_DIR, '..', 'staged_data', 'testmodule.yaml')) mmd.upgrade() + components = mmd.get_rpm_components() # Modify the component branches so we can identify them later on - mmd.get_rpm_components()['perl-Tangerine'].set_ref('f28') - mmd.get_rpm_components()['tangerine'].set_ref('f27') + components['perl-Tangerine'].set_ref('f28') + components['tangerine'].set_ref('f27') + mmd.set_rpm_components(components) module_build_service.utils.format_mmd(mmd, scmurl) # Make sure that original refs are not changed.