diff --git a/process/command.cpp b/process/command.cpp index 3f0f3e9..22b03a4 100644 --- a/process/command.cpp +++ b/process/command.cpp @@ -2,6 +2,7 @@ #include #include +#include #include Command::Command(QString const &command, int start_timeout, int finish_timeout) @@ -40,46 +41,64 @@ void Command::finished(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/) { } bool Command::execute(QString workingDirectory, QStringList args) { + + if (!QDir::setCurrent(workingDirectory)) { + qCritical() << "SET WORKING_DIRECTORY" << workingDirectory + << "FAILED FOR" << m_command; + return false; + } + QScopedPointer p(new QProcess(this)); + p->setWorkingDirectory(workingDirectory); p->setProcessChannelMode(QProcess::MergedChannels); connect(&(*p), SIGNAL(readyReadStandardOutput()), this, SLOT(readyReadStandardOutput())); connect(&(*p), SIGNAL(readyReadStandardError()), this, SLOT(readyReadStandardError())); - //qCritical() << "START COMMAND" << m_command << "WITH ARGS" << args - // << "IN" << workingDirectory; - - p->setWorkingDirectory(workingDirectory); if (!args.isEmpty()) { + qDebug() << "START COMMAND" << m_command << "WITH ARGS" << args + << "IN" << p->workingDirectory(); p->start(m_command, args); } else { + qDebug() << "START COMMAND" << m_command + << "IN" << p->workingDirectory(); p->start(m_command); } if (p->waitForStarted(m_waitForStartTimeout)) { - //qDebug() << "PROCESS" << m_command << "STARTED"; + qDebug() << "PROCESS" << m_command << "STARTED IN" << p->workingDirectory(); if (p->state() == QProcess::ProcessState::Running) { - //qDebug() << "PROCESS" << m_command << "RUNNING"; + qDebug() << "PROCESS" << m_command << "RUNNING IN" << p->workingDirectory(); if (p->waitForFinished(m_waitForFinishTimeout)) { - //qDebug() << "PROCESS" << m_command << "FINISHED"; + qDebug() << "PROCESS" << m_command << "FINISHED IN" << p->workingDirectory(); if (p->exitStatus() == QProcess::NormalExit) { if ((m_exitCode = p->exitCode()) == 0) { + qDebug() << "EXECUTED" << m_command + << "with code" << m_exitCode + << "IN" << p->workingDirectory(); return true; } else { - qCritical() << "EXECUTED" << m_command << "with code" << p->exitCode(); + qCritical() << "EXECUTED" << m_command + << "with code" << m_exitCode + << "IN" << p->workingDirectory(); } } else { qCritical() << "PROCESS" << m_command << "CRASHED with code" - << p->exitCode(); + << p->exitCode() + << "IN" << p->workingDirectory(); } } else { - qCritical() << "PROCESS" << m_command << "DID NOT FINISH"; + qCritical() << "PROCESS" << m_command + << "DID NOT FINISH" + << "IN" << p->workingDirectory(); } } else { - qCritical() << "WRONG PROCESS STATE" << p->state(); + qCritical() << "WRONG PROCESS STATE" << p->state() + << "IN" << p->workingDirectory(); } } else { - qCritical() << "PROCESS" << m_command << "TIMEOUT AT START"; + qCritical() << "PROCESS" << m_command << "TIMEOUT AT START" + << "IN" << p->workingDirectory(); } return false; }