From ff963bc184378cdf9b715bbbdcdd01df8f28b2fe Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Tue, 20 Sep 2016 11:14:00 +0300 Subject: [PATCH] Git: Avoid QProcess::waitForReadyRead in MergeTool It's unreliable on Windows with Qt 5.7. Change-Id: I0703ae825e9db80ac8063d9f6962863a68591ed6 Reviewed-by: Tobias Hunger --- src/plugins/git/mergetool.cpp | 19 ++++++------------- src/plugins/git/mergetool.h | 2 +- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/plugins/git/mergetool.cpp b/src/plugins/git/mergetool.cpp index 53edac70691..75d2f330b39 100644 --- a/src/plugins/git/mergetool.cpp +++ b/src/plugins/git/mergetool.cpp @@ -70,18 +70,9 @@ bool MergeTool::start(const QString &workingDirectory, const QStringList &files) return true; } -MergeTool::FileState MergeTool::waitAndReadStatus(QString &extraInfo) +MergeTool::FileState MergeTool::parseStatus(const QByteArray &line, QString &extraInfo) { - QByteArray state; - for (int i = 0; i < 5; ++i) { - if (m_process->canReadLine()) { - const QByteArray line = m_process->readLine(); - VcsOutputWindow::append(QString::fromLocal8Bit(line)); - QByteArray state = line.trimmed(); - break; - } - m_process->waitForReadyRead(500); - } + QByteArray state = line.trimmed(); // " {local}: modified file" // " {remote}: deleted" if (!state.isEmpty()) { @@ -218,8 +209,10 @@ void MergeTool::readData() m_mergeType = mergeType(line.left(index)); int quote = line.indexOf('\''); m_fileName = QString::fromLocal8Bit(line.mid(quote + 1, line.lastIndexOf('\'') - quote - 1)); - m_localState = waitAndReadStatus(m_localInfo); - m_remoteState = waitAndReadStatus(m_remoteInfo); + } else if (line.startsWith(" {local}")) { + m_localState = parseStatus(line, m_localInfo); + } else if (line.startsWith(" {remote}")) { + m_remoteState = parseStatus(line, m_remoteInfo); chooseAction(); } else if (line.startsWith("Was the merge successful")) { prompt(tr("Unchanged File"), tr("Was the merge successful?")); diff --git a/src/plugins/git/mergetool.h b/src/plugins/git/mergetool.h index d9a54e24a0b..7217d473f83 100644 --- a/src/plugins/git/mergetool.h +++ b/src/plugins/git/mergetool.h @@ -69,7 +69,7 @@ private: void done(); void write(const QByteArray &bytes); - FileState waitAndReadStatus(QString &extraInfo); + FileState parseStatus(const QByteArray &line, QString &extraInfo); QString mergeTypeName(); QString stateName(FileState state, const QString &extraInfo); void chooseAction();