From 045d1496b5947551465189a7c0f56931bf17b718 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 9 Jul 2015 10:25:54 +0200 Subject: [PATCH] QmlDesigner: create error output file for puppet builds Change-Id: I140820702d11e5bc20e6063bdee13411a5f2eeaa Reviewed-by: Tim Jenssen --- .../instances/puppetbuildprogressdialog.cpp | 6 ++++++ .../instances/puppetbuildprogressdialog.h | 1 + .../designercore/instances/puppetcreator.cpp | 20 ++++++++++++++----- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp index dfe36cea5cf..30002333e5f 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp @@ -67,6 +67,12 @@ bool PuppetBuildProgressDialog::useFallbackPuppet() const return m_useFallbackPuppet; } +void PuppetBuildProgressDialog::setErrorOutputFile(const QString &filePath) +{ + ui->openErrorOutputFileLabel->setText(QString::fromLatin1("%2").arg( + filePath, ui->openErrorOutputFileLabel->text())); +} + void PuppetBuildProgressDialog::setUseFallbackPuppet() { m_useFallbackPuppet = true; diff --git a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h index ab2622c7fb7..53432f70ab2 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h +++ b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h @@ -51,6 +51,7 @@ public: void setProgress(int progress); void newBuildOutput(const QByteArray &standardOutput); bool useFallbackPuppet() const; + void setErrorOutputFile(const QString &filePath); private slots: void setUseFallbackPuppet(); diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp index b397d1a2646..55b91b0bc13 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp @@ -391,21 +391,31 @@ bool PuppetCreator::startBuildProcess(const QString &buildDirectoryPath, if (command.isEmpty()) return false; + const QString errorOutputFilePath(buildDirectoryPath + QLatin1String("/build_error_output.txt")); + if (QFile::exists(errorOutputFilePath)) + QFile(errorOutputFilePath).remove(); + progressDialog->setErrorOutputFile(errorOutputFilePath); + QProcess process; + process.setStandardErrorFile(errorOutputFilePath); process.setProcessChannelMode(QProcess::SeparateChannels); process.setProcessEnvironment(processEnvironment()); process.setWorkingDirectory(buildDirectoryPath); process.start(command, processArguments); process.waitForStarted(); - while (process.waitForReadyRead(-1)) { + while (process.waitForReadyRead(100) || process.state() == QProcess::Running) { if (progressDialog->useFallbackPuppet()) return false; - QByteArray newOutput = process.readAllStandardOutput(); - if (progressDialog) - progressDialog->newBuildOutput(newOutput); + QApplication::processEvents(QEventLoop::ExcludeSocketNotifiers); - m_compileLog.append(newOutput); + QByteArray newOutput = process.readAllStandardOutput(); + if (!newOutput.isEmpty()) { + if (progressDialog) + progressDialog->newBuildOutput(newOutput); + + m_compileLog.append(QString::fromLatin1(newOutput)); + } } process.waitForFinished();