diff --git a/module_build_service/web/mse.py b/module_build_service/web/mse.py index 5c53216d..d9966c79 100644 --- a/module_build_service/web/mse.py +++ b/module_build_service/web/mse.py @@ -115,8 +115,25 @@ def _get_mmds_from_requires( added_mmds[ns] = [] if base_module_mmds: + base_module_streams = {} for base_module_mmd in base_module_mmds: - mmds[ns] += resolver.get_buildrequired_modulemds(name, stream, base_module_mmd) + # Group base module streams by major version + base_stream = base_module_mmd.get_stream_name() + base_stream_version = int(models.ModuleBuild.get_stream_version(base_stream)) + x = base_stream_version // 10000 + # tuple (base_stream_version, mmd) used for sorting + base_module_streams.setdefault(x, []).append( + (base_stream_version, base_module_mmd)) + for x in sorted(base_module_streams, reverse=True): + # Get latest builds that buildrequires the most recent + # base module stream, for each base module major version. + for base_stream_version, base_module_mmd in sorted( + base_module_streams[x], reverse=True): + builds = resolver.get_buildrequired_modulemds( + name, stream, base_module_mmd) + if builds != []: + mmds[ns] += builds + break else: mmds[ns] = resolver.get_module_modulemds(name, stream, strict=True) added_mmds[ns] += mmds[ns] diff --git a/tests/test_web/test_mse.py b/tests/test_web/test_mse.py index 3aad11e2..0403536b 100644 --- a/tests/test_web/test_mse.py +++ b/tests/test_web/test_mse.py @@ -452,7 +452,7 @@ class TestModuleStreamExpansion: "requires": {}, "buildrequires": {"platform": ["f29.1.0"], "gtk": ["1"]}, }], - ["platform:f29.0.0:0:c11", "gtk:1:0:c2", "gtk:1:2:c2", "platform:f29.1.0:0:c11"], + ["platform:f29.0.0:0:c11", "gtk:1:2:c2", "platform:f29.1.0:0:c11"], ) ], )