diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2017-06-30 16:06:36 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2017-07-05 14:20:16 +0000 |
commit | 6509753e8684c17f8e05e5e157cbd1f310086292 (patch) | |
tree | 4a6306d3df9fe6dfdf1089616d74c1b439ed6f0b /src/plugins/diffeditor/diffutils.cpp | |
parent | 4bea049c457470cf678cdf5ec6d36bc78145af84 (diff) | |
download | qt-creator-6509753e8684c17f8e05e5e157cbd1f310086292.tar.gz |
Make it possible to cancel async diff calculation
Change-Id: I38fe86159daab794d060860de6ee5ab30fb395eb
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src/plugins/diffeditor/diffutils.cpp')
-rw-r--r-- | src/plugins/diffeditor/diffutils.cpp | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/plugins/diffeditor/diffutils.cpp b/src/plugins/diffeditor/diffutils.cpp index 8793132916..5b8ca9d674 100644 --- a/src/plugins/diffeditor/diffutils.cpp +++ b/src/plugins/diffeditor/diffutils.cpp @@ -25,10 +25,13 @@ #include "diffutils.h" #include "differ.h" + +#include "texteditor/fontsettings.h" + +#include <QFutureInterfaceBase> #include <QRegularExpression> #include <QStringList> #include <QTextStream> -#include "texteditor/fontsettings.h" namespace DiffEditor { @@ -808,7 +811,8 @@ static FileData readDiffHeaderAndChunks(QStringRef headerAndChunks, } static QList<FileData> readDiffPatch(QStringRef patch, - bool *ok) + bool *ok, + QFutureInterfaceBase *jobController) { const QRegularExpression diffRegExp("(?:\\n|^)" // new line of the beginning of a patch "(" // either @@ -835,6 +839,9 @@ static QList<FileData> readDiffPatch(QStringRef patch, readOk = true; int lastPos = -1; do { + if (jobController && jobController->isCanceled()) + return QList<FileData>(); + int pos = diffMatch.capturedStart(); if (lastPos >= 0) { QStringRef headerAndChunks = patch.mid(lastPos, @@ -1031,7 +1038,8 @@ static FileData readCopyRenameChunks(QStringRef copyRenameChunks, return fileData; } -static QList<FileData> readGitPatch(QStringRef patch, bool *ok) +static QList<FileData> readGitPatch(QStringRef patch, bool *ok, + QFutureInterfaceBase *jobController) { const QRegularExpression simpleGitRegExp( @@ -1127,6 +1135,9 @@ static QList<FileData> readGitPatch(QStringRef patch, bool *ok) }; do { + if (jobController && jobController->isCanceled()) + return QList<FileData>(); + collectFileData(); if (!readOk) break; @@ -1168,12 +1179,17 @@ static QList<FileData> readGitPatch(QStringRef patch, bool *ok) return fileDataList; } -QList<FileData> DiffUtils::readPatch(const QString &patch, bool *ok) +QList<FileData> DiffUtils::readPatch(const QString &patch, bool *ok, + QFutureInterfaceBase *jobController) { bool readOk = false; QList<FileData> fileDataList; + if (jobController) { + jobController->setProgressRange(0, 1); + jobController->setProgressValue(0); + } QStringRef croppedPatch(&patch); // Crop e.g. "-- \n2.10.2.windows.1\n\n" at end of file const QRegularExpression formatPatchEndingRegExp("(\\n-- \\n\\S*\\n\\n$)"); @@ -1181,9 +1197,9 @@ QList<FileData> DiffUtils::readPatch(const QString &patch, bool *ok) if (match.hasMatch()) croppedPatch = croppedPatch.left(match.capturedStart() + 1); - fileDataList = readGitPatch(croppedPatch, &readOk); + fileDataList = readGitPatch(croppedPatch, &readOk, jobController); if (!readOk) - fileDataList = readDiffPatch(croppedPatch, &readOk); + fileDataList = readDiffPatch(croppedPatch, &readOk, jobController); if (ok) *ok = readOk; |