Utils: Introduce a TemporaryDirectory and TemporaryFile class

Both wrap the corresponding Qt class, but make sure all temporary files
or directories are created inside a "master temporary directory".

Change-Id: I55461be507c828c965224c02863ea5ed9bbf9498
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-01-19 16:44:22 +01:00
committed by Tim Jenssen
parent e6017c40fc
commit c6f90e575e
64 changed files with 324 additions and 153 deletions

View File

@@ -35,6 +35,7 @@
#include <utils/fileutils.h>
#include "utils/runextensions.h"
#include "utils/synchronousprocess.h"
#include "utils/temporaryfile.h"
#include <QCoreApplication>
#include <QDir>
@@ -50,7 +51,6 @@
#include <QProcessEnvironment>
#include <QScopedArrayPointer>
#include <QSocketNotifier>
#include <QTemporaryFile>
#include <QTimer>
#include <QXmlStreamReader>
@@ -81,8 +81,8 @@ class LogTailFiles : public QObject
Q_OBJECT
public:
void exec(QFutureInterface<void> &fi, std::shared_ptr<QTemporaryFile> stdoutFile,
std::shared_ptr<QTemporaryFile> stderrFile)
void exec(QFutureInterface<void> &fi, std::shared_ptr<Utils::TemporaryFile> stdoutFile,
std::shared_ptr<Utils::TemporaryFile> stderrFile)
{
if (fi.isCanceled())
return;
@@ -96,7 +96,7 @@ public:
watcher.setFuture(fi.future());
// Process to print the console output while app is running.
auto logProcess = [this, fi](QProcess *tailProcess, std::shared_ptr<QTemporaryFile> file) {
auto logProcess = [this, fi](QProcess *tailProcess, std::shared_ptr<Utils::TemporaryFile> file) {
QObject::connect(tailProcess, &QProcess::readyReadStandardOutput, [=]() {
if (!fi.isCanceled())
emit logMessage(QString::fromLocal8Bit(tailProcess->readAll()));
@@ -910,16 +910,13 @@ void IosSimulatorToolHandlerPrivate::launchAppOnSimulator(const QStringList &ext
const QString bundleId = SimulatorControl::bundleIdentifier(appBundle);
const bool debugRun = runKind == IosToolHandler::DebugRun;
bool captureConsole = IosConfigurations::xcodeVersion() >= QVersionNumber(8);
std::shared_ptr<QTemporaryFile> stdoutFile;
std::shared_ptr<QTemporaryFile> stderrFile;
std::shared_ptr<Utils::TemporaryFile> stdoutFile;
std::shared_ptr<Utils::TemporaryFile> stderrFile;
if (captureConsole) {
const QString fileTemplate = CONSOLE_PATH_TEMPLATE.arg(deviceId).arg(bundleId);
stdoutFile.reset(new QTemporaryFile);
stdoutFile->setFileTemplate(fileTemplate + QStringLiteral(".stdout"));
stderrFile.reset(new QTemporaryFile);
stderrFile->setFileTemplate(fileTemplate + QStringLiteral(".stderr"));
stdoutFile.reset(new Utils::TemporaryFile(fileTemplate + ".stdout"));
stderrFile.reset(new Utils::TemporaryFile(fileTemplate + ".stderr"));
captureConsole = stdoutFile->open() && stderrFile->open();
if (!captureConsole)