diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index d3705729c..b8dbc4ded 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -325,36 +325,47 @@ ModuleManager::checkRequirements() QTimer::singleShot( 0, rq, &RequirementsChecker::run ); } +static QStringList +missingRequiredModules( const QStringList& required, const QMap< QString, QVariantMap >& available ) +{ + QStringList l; + for( const QString& depName : required ) + { + if ( !available.contains( depName ) ) + l.append( depName ); + } + + return l; +} + QStringList ModuleManager::checkDependencies() { QStringList failed; + bool somethingWasRemovedBecauseOfUnmetDependencies = false; // This goes through the map of available modules, and deletes those whose // dependencies are not met, if any. - forever + do { - bool somethingWasRemovedBecauseOfUnmetDependencies = false; + somethingWasRemovedBecauseOfUnmetDependencies = false; for ( auto it = m_availableDescriptorsByModuleName.begin(); it != m_availableDescriptorsByModuleName.end(); ++it ) { - foreach ( const QString& depName, - it->value( "requiredModules" ).toStringList() ) + QStringList unmet = missingRequiredModules( it->value( "requiredModules" ).toStringList(), m_availableDescriptorsByModuleName ); + + if ( unmet.count() > 0 ) { - if ( !m_availableDescriptorsByModuleName.contains( depName ) ) - { - QString moduleName = it->value( "name" ).toString(); - somethingWasRemovedBecauseOfUnmetDependencies = true; - m_availableDescriptorsByModuleName.erase( it ); - failed << moduleName; - cWarning() << "Module" << moduleName << "has unknown requirement" << depName; - break; - } + QString moduleName = it->value( "name" ).toString(); + somethingWasRemovedBecauseOfUnmetDependencies = true; + m_availableDescriptorsByModuleName.erase( it ); + failed << moduleName; + cWarning() << "Module" << moduleName << "has unknown requirements" << Logger::DebugList( unmet ); + break; } } - if ( !somethingWasRemovedBecauseOfUnmetDependencies ) - break; } + while( somethingWasRemovedBecauseOfUnmetDependencies ); return failed; }