[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.
This commit is contained in:
Adriaan de Groot 2018-06-15 11:45:02 -04:00
parent 8387d5d81f
commit 264d135776

View File

@ -50,21 +50,35 @@ public:
void run() override void run() override
{ {
bool anyFailed = false;
QString message;
QString details;
m_jobIndex = 0; m_jobIndex = 0;
for( auto job : m_jobs ) for( auto job : m_jobs )
{ {
if ( anyFailed && !job->isEmergency() )
{
cDebug() << "Skipping non-emergency job" << job->prettyName();
continue;
}
emitProgress(); emitProgress();
cDebug() << "Starting job" << job->prettyName(); cDebug() << "Starting" << ( anyFailed ? "EMERGENCY JOB" : "job" ) << job->prettyName();
connect( job.data(), &Job::progress, this, &JobThread::emitProgress ); connect( job.data(), &Job::progress, this, &JobThread::emitProgress );
JobResult result = job->exec(); JobResult result = job->exec();
if ( !result ) if ( !anyFailed && !result )
{ {
emitFailed( result.message(), result.details() ); anyFailed = true;
emitFinished(); message = result.message();
return; details = result.details();
} }
if ( !anyFailed )
++m_jobIndex; ++m_jobIndex;
} }
if ( anyFailed )
emitFailed( message, details );
else
emitProgress(); emitProgress();
emitFinished(); emitFinished();
} }