[libcalamaresui] Fix up module dependency checking
- If a module exists, and has unmet dependencies, then that is only a problem if the module itself is *used*. Merely existing is ok. This triggers on FreeBSD, where partition isn't built, but bootloader depends on partition -- so you can never start Calamares on FreeBSD, because bootloader depends on something non-existent. Relax the check: just warn, and only fail if a non-existent module is used (all those with unmet dependencies are considered non-existent).
This commit is contained in:
parent
a9a12820d8
commit
5ac4f3ec38
@ -188,11 +188,15 @@ findCustomInstance( const Settings::InstanceDescriptionList& customInstances, co
|
||||
void
|
||||
ModuleManager::loadModules()
|
||||
{
|
||||
QStringList failedModules = checkDependencies();
|
||||
if (checkDependencies())
|
||||
{
|
||||
cWarning() << "Some installed modules have unmet dependencies.";
|
||||
}
|
||||
Settings::InstanceDescriptionList customInstances = Settings::instance()->customModuleInstances();
|
||||
|
||||
QStringList failedModules;
|
||||
const auto modulesSequence
|
||||
= failedModules.isEmpty() ? Settings::instance()->modulesSequence() : Settings::ModuleSequence();
|
||||
= Settings::instance()->modulesSequence() ;
|
||||
for ( const auto& modulePhase : modulesSequence )
|
||||
{
|
||||
ModuleSystem::Action currentAction = modulePhase.first;
|
||||
@ -270,7 +274,7 @@ ModuleManager::loadModules()
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !checkDependencies( *thisModule ) )
|
||||
if ( !checkModuleDependencies( *thisModule ) )
|
||||
{
|
||||
// Error message is already printed
|
||||
failedModules.append( instanceKey.toString() );
|
||||
@ -351,10 +355,10 @@ missingRequiredModules( const QStringList& required, const QMap< QString, QVaria
|
||||
return l;
|
||||
}
|
||||
|
||||
QStringList
|
||||
size_t
|
||||
ModuleManager::checkDependencies()
|
||||
{
|
||||
QStringList failed;
|
||||
size_t numberRemoved = 0;
|
||||
bool somethingWasRemovedBecauseOfUnmetDependencies = false;
|
||||
|
||||
// This goes through the map of available modules, and deletes those whose
|
||||
@ -373,19 +377,18 @@ ModuleManager::checkDependencies()
|
||||
QString moduleName = it->value( "name" ).toString();
|
||||
somethingWasRemovedBecauseOfUnmetDependencies = true;
|
||||
m_availableDescriptorsByModuleName.erase( it );
|
||||
failed << moduleName;
|
||||
cWarning() << "Module" << moduleName << "requires modules" << Logger::DebugList( unmet );
|
||||
cWarning() << Logger::SubEntry << "but these are not available (listed in settings, or installed).";
|
||||
numberRemoved++;
|
||||
cWarning() << "Module" << moduleName << "requires missing modules" << Logger::DebugList( unmet );
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while ( somethingWasRemovedBecauseOfUnmetDependencies );
|
||||
|
||||
return failed;
|
||||
return numberRemoved;
|
||||
}
|
||||
|
||||
bool
|
||||
ModuleManager::checkDependencies( const Module& m )
|
||||
ModuleManager::checkModuleDependencies( const Module& m )
|
||||
{
|
||||
bool allRequirementsFound = true;
|
||||
QStringList requiredModules
|
||||
|
@ -106,15 +106,17 @@ private slots:
|
||||
private:
|
||||
/**
|
||||
* Check in a general sense whether the dependencies between
|
||||
* modules are valid. Returns a list of module names that
|
||||
* do **not** have their requirements met.
|
||||
* modules are valid. Returns the number of modules that
|
||||
* have missing dependencies -- this is **not** a problem
|
||||
* unless any of those modules are actually used.
|
||||
*
|
||||
* Returns an empty list on success.
|
||||
* Returns 0 on success.
|
||||
*
|
||||
* Also modifies m_availableDescriptorsByModuleName to remove
|
||||
* all the entries that fail.
|
||||
* all the entries that (so that later, when we try to look
|
||||
* them up, they are not found).
|
||||
*/
|
||||
QStringList checkDependencies();
|
||||
size_t checkDependencies();
|
||||
|
||||
/**
|
||||
* Check for this specific module if its required modules have
|
||||
@ -122,7 +124,7 @@ private:
|
||||
*
|
||||
* Returns true if the requirements are met.
|
||||
*/
|
||||
bool checkDependencies( const Module& );
|
||||
bool checkModuleDependencies( const Module& );
|
||||
|
||||
QMap< QString, QVariantMap > m_availableDescriptorsByModuleName;
|
||||
QMap< QString, QString > m_moduleDirectoriesByModuleName;
|
||||
|
Loading…
Reference in New Issue
Block a user