[libcalamares] Refactor ProcessJob
- Use the system runCommand() instead of a 90% copy of it. This **does** change the overall command to `env /bin/sh -c` rather than running only `/bin/sh -c`, though.
This commit is contained in:
parent
92d03c2cf7
commit
6055f08aff
@ -67,83 +67,23 @@ ProcessJob::prettyStatusMessage() const
|
|||||||
JobResult
|
JobResult
|
||||||
ProcessJob::exec()
|
ProcessJob::exec()
|
||||||
{
|
{
|
||||||
int ec = 0;
|
using CalamaresUtils::System;
|
||||||
QString output;
|
|
||||||
if ( m_runInChroot )
|
if ( m_runInChroot )
|
||||||
ec = CalamaresUtils::System::instance()->
|
return CalamaresUtils::System::instance()->
|
||||||
targetEnvOutput( m_command,
|
targetEnvCommand( { m_command },
|
||||||
output,
|
|
||||||
m_workingPath,
|
m_workingPath,
|
||||||
QString(),
|
QString(),
|
||||||
m_timeoutSec );
|
m_timeoutSec )
|
||||||
|
.explainProcess( m_command, m_timeoutSec );
|
||||||
else
|
else
|
||||||
ec = callOutput( m_command,
|
return
|
||||||
output,
|
System::runCommand( System::RunLocation::RunInHost,
|
||||||
m_workingPath,
|
{ "/bin/sh", "-c", m_command },
|
||||||
QString(),
|
m_workingPath,
|
||||||
m_timeoutSec );
|
QString(),
|
||||||
|
m_timeoutSec )
|
||||||
return CalamaresUtils::ProcessResult::explainProcess( ec, m_command, output, m_timeoutSec );
|
.explainProcess( m_command, m_timeoutSec );
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
ProcessJob::callOutput( const QString& command,
|
|
||||||
QString& output,
|
|
||||||
const QString& workingPath,
|
|
||||||
const QString& stdInput,
|
|
||||||
int timeoutSec )
|
|
||||||
{
|
|
||||||
output.clear();
|
|
||||||
|
|
||||||
QProcess process;
|
|
||||||
process.setProgram( "/bin/sh" );
|
|
||||||
process.setArguments( { "-c", command } );
|
|
||||||
process.setProcessChannelMode( QProcess::MergedChannels );
|
|
||||||
|
|
||||||
if ( !workingPath.isEmpty() )
|
|
||||||
{
|
|
||||||
if ( QDir( workingPath ).exists() )
|
|
||||||
process.setWorkingDirectory( QDir( workingPath ).absolutePath() );
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cWarning() << "Invalid working directory:" << workingPath;
|
|
||||||
return -3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cDebug() << "Running" << command;
|
|
||||||
process.start();
|
|
||||||
if ( !process.waitForStarted() )
|
|
||||||
{
|
|
||||||
cWarning() << "Process failed to start" << process.error();
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !stdInput.isEmpty() )
|
|
||||||
{
|
|
||||||
process.write( stdInput.toLocal8Bit() );
|
|
||||||
process.closeWriteChannel();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !process.waitForFinished( timeoutSec ? ( timeoutSec * 1000 ) : -1 ) )
|
|
||||||
{
|
|
||||||
cWarning() << "Timed out. output so far:";
|
|
||||||
output.append( QString::fromLocal8Bit( process.readAllStandardOutput() ).trimmed() );
|
|
||||||
cWarning() << output;
|
|
||||||
return -4;
|
|
||||||
}
|
|
||||||
|
|
||||||
output.append( QString::fromLocal8Bit( process.readAllStandardOutput() ).trimmed() );
|
|
||||||
|
|
||||||
if ( process.exitStatus() == QProcess::CrashExit )
|
|
||||||
{
|
|
||||||
cWarning() << "Process crashed";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
cDebug() << "Finished. Exit code:" << process.exitCode();
|
|
||||||
return process.exitCode();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Calamares
|
} // namespace Calamares
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* === This file is part of Calamares - <https://github.com/calamares> ===
|
/* === This file is part of Calamares - <https://github.com/calamares> ===
|
||||||
*
|
*
|
||||||
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
|
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
|
||||||
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
|
* Copyright 2017-2019, Adriaan de Groot <groot@kde.org>
|
||||||
*
|
*
|
||||||
* Calamares is free software: you can redistribute it and/or modify
|
* Calamares is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -40,11 +40,6 @@ public:
|
|||||||
JobResult exec() override;
|
JobResult exec() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int callOutput( const QString& command,
|
|
||||||
QString& output,
|
|
||||||
const QString& workingPath = QString(),
|
|
||||||
const QString& stdInput = QString(),
|
|
||||||
int timeoutSec = 0 );
|
|
||||||
QString m_command;
|
QString m_command;
|
||||||
QString m_workingPath;
|
QString m_workingPath;
|
||||||
bool m_runInChroot;
|
bool m_runInChroot;
|
||||||
|
Loading…
Reference in New Issue
Block a user