# # # patch "src/monotone/MonotoneThread.cpp" # from [6fb78ad666d16cb7e6873737be59984fc8222c04] # to [a89ec00f442688978668f70be26f144e25fd1ae6] # ============================================================ --- src/monotone/MonotoneThread.cpp 6fb78ad666d16cb7e6873737be59984fc8222c04 +++ src/monotone/MonotoneThread.cpp a89ec00f442688978668f70be26f144e25fd1ae6 @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2007 by Thomas Keller * + * Copyright (C) 2007 by Thomas Keler * * address@hidden * * * * This program is free software; you can redistribute it and/or modify * @@ -277,10 +277,11 @@ void MonotoneThread::run() if (!process->waitForStarted()) { + QByteArray stderr = process->readAllStandardError(); + QProcess::ProcessError error = process->error(); + cleanup(process); - emit aborted(threadNumber, process->error(), - QString::fromUtf8(process->readAllStandardError()) - ); + emit aborted(threadNumber, error, QString::fromUtf8(stderr)); return; } @@ -295,10 +296,11 @@ void MonotoneThread::run() process->setReadChannel(QProcess::StandardError); if (process->waitForReadyRead(1000)) { - QString err = QString::fromUtf8(process->readAllStandardError()); + QByteArray stderr = process->readAllStandardError(); + QProcess::ProcessError error = process->error(); cleanup(process); - emit aborted(threadNumber, process->error(), err); + emit aborted(threadNumber, error, QString::fromUtf8(stderr)); return; } process->setReadChannel(QProcess::StandardOutput); @@ -356,10 +358,11 @@ void MonotoneThread::run() if (process->state() != QProcess::Running) { + QByteArray stderr = process->readAllStandardError(); + QProcess::ProcessError error = process->error(); + cleanup(process); - emit aborted(threadNumber, process->error(), - QString::fromUtf8(process->readAllStandardError()) - ); + emit aborted(threadNumber, error, QString::fromUtf8(stderr)); return; } @@ -409,18 +412,19 @@ void MonotoneThread::run() while (!process->waitForReadyRead(500) && !doAbort) { - if (process->error() == QProcess::Timedout) + if (process->state() != QProcess::Running) { - continue; - } + QByteArray stderr = process->readAllStandardError(); + QProcess::ProcessError error = process->error(); - cleanup(process); - emit aborted(threadNumber, process->error(), - QString::fromUtf8(process->readAllStandardError()) - ); - return; + cleanup(process); + emit aborted(threadNumber, error, QString::fromUtf8(stderr)); + return; + } } + // even though newer mtn versions should not output anything on stderr + // while running, we check for that nonetheless and abort the task QByteArray err = process->readAllStandardError(); if (err.size() != 0 || doAbort) { @@ -439,6 +443,7 @@ void MonotoneThread::run() buffer.append(process->readAllStandardOutput()); int returnCode = -1; + while (!buffer.isEmpty()) { StdioParser parser(buffer);