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.
This commit is contained in:
mprahl
2018-07-16 18:38:37 -04:00
parent 1ec9849960
commit 8173040ea6
3 changed files with 21 additions and 10 deletions

View File

@@ -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"]:

View File

@@ -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'

View File

@@ -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.