[libcalamares] Add a module-weight to the module descriptor

main
Adriaan de Groot 4 years ago
parent 14875259c7
commit c19866f887

@ -41,6 +41,7 @@
# [NO_CONFIG]
# [SHARED_LIB]
# [EMERGENCY]
# [WEIGHT w]
# )
#
# Function parameters:
@ -63,6 +64,9 @@
# - EMERGENCY
# If this is set, the module is marked as an *emergency* module in the
# descriptor. See *Emergency Modules* in the module documentation.
# - WEIGHT
# If this is set, writes an explicit weight into the module.desc;
# module weights are used in progress reporting.
#
include( CMakeParseArguments )
@ -73,7 +77,7 @@ function( calamares_add_plugin )
# parse arguments ( name needs to be saved before passing ARGN into the macro )
set( NAME ${ARGV0} )
set( options NO_CONFIG NO_INSTALL SHARED_LIB EMERGENCY )
set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES )
set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES WEIGHT )
set( multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS REQUIRES )
cmake_parse_arguments( PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
set( PLUGIN_NAME ${NAME} )
@ -181,6 +185,9 @@ function( calamares_add_plugin )
if ( PLUGIN_NO_CONFIG )
file( APPEND ${_file} "noconfig: true\n" )
endif()
if ( PLUGIN_WEIGHT )
file( APPEND ${_file} "weight: ${PLUGIN_WEIGHT}\n" )
endif()
endif()
if ( NOT PLUGIN_NO_INSTALL )

@ -87,8 +87,9 @@ Descriptor::fromDescriptorData( const QVariantMap& moduleDesc )
d.m_isEmergeny = CalamaresUtils::getBool( moduleDesc, "emergency", false );
d.m_hasConfig = !CalamaresUtils::getBool( moduleDesc, "noconfig", false ); // Inverted logic during load
d.m_requiredModules = CalamaresUtils::getStringList( moduleDesc, "requiredModules" );
d.m_weight = int( CalamaresUtils::getInteger( moduleDesc, "weight", -1 ) );
QStringList consumedKeys { "type", "interface", "name", "emergency", "noconfig", "requiredModules" };
QStringList consumedKeys { "type", "interface", "name", "emergency", "noconfig", "requiredModules", "weight" };
switch ( d.interface() )
{
@ -99,23 +100,37 @@ Descriptor::fromDescriptorData( const QVariantMap& moduleDesc )
case Interface::Python:
case Interface::PythonQt:
d.m_script = CalamaresUtils::getString( moduleDesc, "script" );
if ( d.m_script.isEmpty() )
{
cWarning() << "Module descriptor contains no *script*" << d.name();
d.m_isValid = false;
}
consumedKeys << "script";
break;
case Interface::Process:
d.m_script = CalamaresUtils::getString( moduleDesc, "command" );
d.m_processTimeout = CalamaresUtils::getInteger( moduleDesc, "timeout", 30 );
d.m_processTimeout = int( CalamaresUtils::getInteger( moduleDesc, "timeout", 30 ) );
d.m_processChroot = CalamaresUtils::getBool( moduleDesc, "chroot", false );
consumedKeys << "command"
<< "timeout"
<< "chroot";
if ( d.m_processTimeout < 0 )
{
d.m_processTimeout = 0;
}
if ( d.m_script.isEmpty() )
{
cWarning() << "Module descriptor contains no *script*" << d.name();
d.m_isValid = false;
}
consumedKeys << "command"
<< "timeout"
<< "chroot";
break;
}
if ( !d.m_isValid )
{
return d;
}
QStringList superfluousKeys;
for ( auto kv = moduleDesc.keyBegin(); kv != moduleDesc.keyEnd(); ++kv )
{

@ -80,6 +80,9 @@ public:
bool isEmergency() const { return m_isEmergeny; }
bool hasConfig() const { return m_hasConfig; }
int weight() const { return m_weight < 1 ? 1 : m_weight; }
bool explicitWeight() const { return m_weight > 0; }
/// @brief The directory where the module.desc lives
QString directory() const { return m_directory; }
@ -125,6 +128,7 @@ private:
QString m_name;
QString m_directory;
QStringList m_requiredModules;
int m_weight = -1;
Type m_type;
Interface m_interface;
bool m_isValid = false;

@ -46,9 +46,19 @@ Module descriptors **must** have the following keys:
- *interface* (see below for the different interfaces; generally we
refer to the kinds of modules by their interface)
Module descriptors for C++ modules **may** have the following key:
- *load* (the name of the shared library to load; if empty, uses a
standard library name derived from the module name)
Module descriptors for Python modules **must** have the following key:
- *script* (the name of the Python script to load, nearly always `main.py`)
Module descriptors for process modules **must** have the following key:
- *command* (the command to run)
Module descriptors for process modules **may** have the following keys:
- *timeout* (how long, in seconds, to wait for the command to run)
- *chroos* (if true, run the command in the target system rather than the host)
Module descriptors **may** have the following keys:
- *emergency* (a boolean value, set to true to mark the module
as an emergency module)
@ -56,6 +66,8 @@ Module descriptors **may** have the following keys:
has no configuration file; defaults to false)
- *requiredModules* (a list of modules which are required for this module
to operate properly)
- *weight* (a relative module weight, used to scale progress reporting)
### Required Modules

Loading…
Cancel
Save