[libcalamares] Add all mentioned instances to the instanceList
- "custom" instances is now a misnomer, since all the instances go into it; they are distinguished by `isCustom()` on the descriptor
This commit is contained in:
parent
f157d9c459
commit
6f7234e4ac
@ -73,6 +73,16 @@ requireBool( const YAML::Node& config, const char* key, bool d )
|
|||||||
namespace Calamares
|
namespace Calamares
|
||||||
{
|
{
|
||||||
|
|
||||||
|
InstanceDescription::InstanceDescription( const Calamares::ModuleSystem::InstanceKey& key )
|
||||||
|
: m_instanceKey( key )
|
||||||
|
, m_weight( 1 )
|
||||||
|
{
|
||||||
|
if ( !isValid() )
|
||||||
|
{
|
||||||
|
m_weight = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
InstanceDescription::InstanceDescription( Calamares::ModuleSystem::InstanceKey&& key, int weight )
|
InstanceDescription::InstanceDescription( Calamares::ModuleSystem::InstanceKey&& key, int weight )
|
||||||
: m_instanceKey( key )
|
: m_instanceKey( key )
|
||||||
, m_weight( qBound( 1, weight, 100 ) )
|
, m_weight( qBound( 1, weight, 100 ) )
|
||||||
@ -245,6 +255,50 @@ Settings::Settings( const QString& settingsFilePath, bool debugMode )
|
|||||||
s_instance = this;
|
s_instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Settings::validateSequence()
|
||||||
|
{
|
||||||
|
// Since moduleFinder captures targetKey by reference, we can
|
||||||
|
// update targetKey to change what the finder lambda looks for.
|
||||||
|
Calamares::ModuleSystem::InstanceKey targetKey;
|
||||||
|
auto moduleFinder = [&targetKey]( const InstanceDescription& d ) { return d.isValid() && d.key() == targetKey; };
|
||||||
|
|
||||||
|
// Check the sequence against the existing instances (which so far are only custom)
|
||||||
|
for ( const auto& step : m_modulesSequence )
|
||||||
|
{
|
||||||
|
for ( const auto& instance : step.second )
|
||||||
|
{
|
||||||
|
Calamares::ModuleSystem::InstanceKey k = Calamares::ModuleSystem::InstanceKey::fromString( instance );
|
||||||
|
if ( !k.isValid() )
|
||||||
|
{
|
||||||
|
cWarning() << "Invalid instance key in *sequence*," << instance;
|
||||||
|
}
|
||||||
|
if ( k.isValid() && k.isCustom() )
|
||||||
|
{
|
||||||
|
targetKey = k;
|
||||||
|
const auto it = std::find_if(
|
||||||
|
m_customModuleInstances.constBegin(), m_customModuleInstances.constEnd(), moduleFinder );
|
||||||
|
if ( it == m_customModuleInstances.constEnd() )
|
||||||
|
{
|
||||||
|
cWarning() << "Custom instance key" << instance << "is not listed in the *instances*";
|
||||||
|
// don't add it, let this fail later.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( k.isValid() && !k.isCustom() )
|
||||||
|
{
|
||||||
|
targetKey = k;
|
||||||
|
const auto it = std::find_if(
|
||||||
|
m_customModuleInstances.constBegin(), m_customModuleInstances.constEnd(), moduleFinder );
|
||||||
|
if ( it == m_customModuleInstances.constEnd() )
|
||||||
|
{
|
||||||
|
// Non-custom instance, just mentioned in *sequence*
|
||||||
|
m_customModuleInstances.append( InstanceDescription( k ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Settings::setConfiguration( const QByteArray& ba, const QString& explainName )
|
Settings::setConfiguration( const QByteArray& ba, const QString& explainName )
|
||||||
{
|
{
|
||||||
@ -265,6 +319,8 @@ Settings::setConfiguration( const QByteArray& ba, const QString& explainName )
|
|||||||
m_disableCancel = requireBool( config, "disable-cancel", false );
|
m_disableCancel = requireBool( config, "disable-cancel", false );
|
||||||
m_disableCancelDuringExec = requireBool( config, "disable-cancel-during-exec", false );
|
m_disableCancelDuringExec = requireBool( config, "disable-cancel-during-exec", false );
|
||||||
m_quitAtEnd = requireBool( config, "quit-at-end", false );
|
m_quitAtEnd = requireBool( config, "quit-at-end", false );
|
||||||
|
|
||||||
|
validateSequence();
|
||||||
}
|
}
|
||||||
catch ( YAML::Exception& e )
|
catch ( YAML::Exception& e )
|
||||||
{
|
{
|
||||||
|
@ -59,6 +59,16 @@ public:
|
|||||||
*/
|
*/
|
||||||
InstanceDescription() = default;
|
InstanceDescription() = default;
|
||||||
|
|
||||||
|
/** @brief An InstanceDescription with no special settings.
|
||||||
|
*
|
||||||
|
* Regardless of @p key being custom, sets weight to 1 and
|
||||||
|
* the configuration file to @c key.module() (plus the ".conf"
|
||||||
|
* extension).
|
||||||
|
*
|
||||||
|
* To InstanceDescription is custom if the key is.
|
||||||
|
*/
|
||||||
|
InstanceDescription( const InstanceKey& key );
|
||||||
|
|
||||||
static InstanceDescription fromSettings( const QVariantMap& );
|
static InstanceDescription fromSettings( const QVariantMap& );
|
||||||
|
|
||||||
bool isValid() const { return m_instanceKey.isValid(); }
|
bool isValid() const { return m_instanceKey.isValid(); }
|
||||||
@ -84,6 +94,7 @@ public:
|
|||||||
explicit Settings( const QString& settingsFilePath, bool debugMode );
|
explicit Settings( const QString& settingsFilePath, bool debugMode );
|
||||||
|
|
||||||
void setConfiguration( const QByteArray& configData, const QString& explainName );
|
void setConfiguration( const QByteArray& configData, const QString& explainName );
|
||||||
|
void validateSequence();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static Settings* instance();
|
static Settings* instance();
|
||||||
|
Loading…
Reference in New Issue
Block a user