From 264d135776c327de05e74a0b3134c495c82e29e0 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 15 Jun 2018 11:45:02 -0400 Subject: [PATCH] [libcalamares] Run emergency jobs - After a failure, skip non-emergency jobs. - After running all emergency jobs, then emit failure message. - In log, distinguish emergency and non-emergency jobs. --- src/libcalamares/JobQueue.cpp | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index 339fd8457..b3d42d8f9 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -50,22 +50,36 @@ public: void run() override { + bool anyFailed = false; + QString message; + QString details; + m_jobIndex = 0; for( auto job : m_jobs ) { + if ( anyFailed && !job->isEmergency() ) + { + cDebug() << "Skipping non-emergency job" << job->prettyName(); + continue; + } + emitProgress(); - cDebug() << "Starting job" << job->prettyName(); + cDebug() << "Starting" << ( anyFailed ? "EMERGENCY JOB" : "job" ) << job->prettyName(); connect( job.data(), &Job::progress, this, &JobThread::emitProgress ); JobResult result = job->exec(); - if ( !result ) + if ( !anyFailed && !result ) { - emitFailed( result.message(), result.details() ); - emitFinished(); - return; + anyFailed = true; + message = result.message(); + details = result.details(); } - ++m_jobIndex; + if ( !anyFailed ) + ++m_jobIndex; } - emitProgress(); + if ( anyFailed ) + emitFailed( message, details ); + else + emitProgress(); emitFinished(); }