From 48771f968a68b0a54270bca6e08f1ffb2450397f Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 27 Feb 2018 01:04:35 +0100 Subject: [PATCH] [calamares] Load and execute the modules This runs dummyprocess, at least, but the other three dummies coredump. --- src/calamares/testmain.cpp | 58 ++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index dfd6ed7eb..1b5cb41f4 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -27,6 +27,7 @@ #include "modulesystem/Module.h" #include "Settings.h" +#include "Job.h" #include #include @@ -35,7 +36,16 @@ #include -static QString +struct ModuleConfig : public QPair< QString, QString > +{ + ModuleConfig( const QString& a, const QString& b ) : QPair< QString, QString >(a, b) { } + ModuleConfig() : QPair< QString, QString >( QString(), QString() ) { } + + QString moduleName() const { return first; } + QString configFile() const { return second; } +} ; + +static ModuleConfig handle_args( QCoreApplication& a ) { QCommandLineOption debugLevelOption( QStringLiteral("D"), @@ -68,22 +78,23 @@ handle_args( QCoreApplication& a ) { cError() << "Missing path.\n"; parser.showHelp(); - return QString(); // NOTREACHED + return ModuleConfig(); // NOTREACHED } - if ( args.size() > 1 ) + if ( args.size() > 2 ) { cError() << "More than one path.\n"; parser.showHelp(); - return QString(); // NOTREACHED + return ModuleConfig(); // NOTREACHED } - return args.first(); + return ModuleConfig( args.first(), args.size() == 2 ? args.at(1) : QString() ); } static Calamares::Module* -load_module( const QString& moduleName ) +load_module( const ModuleConfig& moduleConfig ) { + QString moduleName = moduleConfig.moduleName(); QFileInfo fi; bool ok = false; @@ -123,7 +134,10 @@ load_module( const QString& moduleName ) } QString moduleDirectory = fi.absolutePath(); - QString configFile = moduleDirectory + '/' + name + ".conf"; + QString configFile( + moduleConfig.configFile().isEmpty() + ? moduleDirectory + '/' + name + ".conf" + : moduleConfig.configFile() ); Calamares::Module* module = Calamares::Module::fromDescriptor( descriptor, name, configFile, moduleDirectory ); @@ -136,18 +150,40 @@ main( int argc, char* argv[] ) { QCoreApplication a( argc, argv ); - QString module = handle_args( a ); - if ( module.isEmpty() ) + ModuleConfig module = handle_args( a ); + if ( module.moduleName().isEmpty() ) return 1; std::unique_ptr< Calamares::Settings > settings_p( new Calamares::Settings( QString(), true ) ); - cDebug() << "Calamares test module-loader" << module; + cDebug() << "Calamares test module-loader" << module.moduleName(); Calamares::Module* m = load_module( module ); if ( !m ) { - cError() << "No module.desc data found in" << module; + cError() << "No module.desc data found in" << module.moduleName(); + return 1; + } + + if ( !m->isLoaded() ) + m->loadSelf(); + + if ( !m->isLoaded() ) + { + cError() << "Module" << module.moduleName() << "could not be loaded."; return 1; } + cDebug() << "Module" << m->name() << m->typeString() << m->interfaceString(); + + Calamares::JobList jobList = m->jobs(); + unsigned int count = 1; + for ( const auto& p : jobList ) + { + cDebug() << count << p->prettyName(); + Calamares::JobResult r = p->exec(); + if ( !r ) + cDebug() << count << ".. failed" << r; + ++count; + } + return 0; }