diff options
author | Jarek Kobus <[email protected]> | 2023-03-04 00:39:50 +0100 |
---|---|---|
committer | Jarek Kobus <[email protected]> | 2023-03-09 08:40:57 +0000 |
commit | ce037d09a2a85ee06840cd4de2804e1b967dd90b (patch) | |
tree | 61960c0f31a144617525d96dda5eec9d696c04a1 /src/plugins/clearcase | |
parent | cae18f88724cff430fb2a54ab0811c751723b6d4 (diff) |
VcsBase: Use QtConcurrent invocation for async run
Change-Id: Ia4e461c1a2e71d4c959f582e9ed464d4713b672a
Reviewed-by: Orgad Shaneh <[email protected]>
Reviewed-by: <[email protected]>
Reviewed-by: Qt CI Bot <[email protected]>
Diffstat (limited to 'src/plugins/clearcase')
-rw-r--r-- | src/plugins/clearcase/clearcaseplugin.cpp | 15 | ||||
-rw-r--r-- | src/plugins/clearcase/clearcasesync.cpp | 32 | ||||
-rw-r--r-- | src/plugins/clearcase/clearcasesync.h | 9 |
3 files changed, 29 insertions, 27 deletions
diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index 83db3d6919e..f60db85ac05 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -30,13 +30,13 @@ #include <projectexplorer/projectmanager.h> #include <utils/algorithm.h> +#include <utils/asynctask.h> #include <utils/hostosinfo.h> #include <utils/infobar.h> #include <utils/layoutbuilder.h> #include <utils/parameteraction.h> #include <utils/qtcassert.h> #include <utils/qtcprocess.h> -#include <utils/runextensions.h> #include <utils/temporarydirectory.h> #include <vcsbase/basevcseditorfactory.h> @@ -259,7 +259,7 @@ private: CommandResult runCleartool(const FilePath &workingDir, const QStringList &arguments, VcsBase::RunFlags flags = VcsBase::RunFlags::None, QTextCodec *codec = nullptr, int timeoutMultiplier = 1) const; - static void sync(QFutureInterface<void> &future, QStringList files); + static void sync(QPromise<void> &promise, QStringList files); void history(const FilePath &workingDir, const QStringList &file = {}, @@ -1657,7 +1657,7 @@ bool ClearCasePluginPrivate::vcsOpen(const FilePath &workingDir, const QString & if (!m_settings.disableIndexer && (fi.isWritable() || vcsStatus(absPath).status == FileStatus::Unknown)) - runAsync(sync, QStringList(absPath)).waitForFinished(); + Utils::asyncRun(sync, QStringList(absPath)).waitForFinished(); if (vcsStatus(absPath).status == FileStatus::CheckedOut) { QMessageBox::information(ICore::dialogParent(), Tr::tr("ClearCase Checkout"), Tr::tr("File is already checked out.")); @@ -2129,7 +2129,8 @@ void ClearCasePluginPrivate::updateIndex() return; m_checkInAllAction->setEnabled(false); m_statusMap->clear(); - QFuture<void> result = runAsync(sync, transform(project->files(Project::SourceFiles), &FilePath::toString)); + QFuture<void> result = Utils::asyncRun(sync, transform(project->files(Project::SourceFiles), + &FilePath::toString)); if (!m_settings.disableIndexer) ProgressManager::addTask(result, Tr::tr("Updating ClearCase Index"), ClearCase::Constants::TASK_INDEX); } @@ -2261,7 +2262,7 @@ void ClearCasePluginPrivate::syncSlot() FilePath topLevel = state.topLevel(); if (topLevel != state.currentProjectTopLevel()) return; - runAsync(sync, QStringList()); + Utils::asyncRun(sync, QStringList()); // TODO: make use of returned QFuture } void ClearCasePluginPrivate::closing() @@ -2271,12 +2272,12 @@ void ClearCasePluginPrivate::closing() disconnect(qApp, &QApplication::applicationStateChanged, nullptr, nullptr); } -void ClearCasePluginPrivate::sync(QFutureInterface<void> &future, QStringList files) +void ClearCasePluginPrivate::sync(QPromise<void> &promise, QStringList files) { ClearCasePluginPrivate *plugin = ClearCasePluginPrivate::instance(); ClearCaseSync ccSync(plugin->m_statusMap); connect(&ccSync, &ClearCaseSync::updateStreamAndView, plugin, &ClearCasePluginPrivate::updateStreamAndView); - ccSync.run(future, files); + ccSync.run(promise, files); } QString ClearCasePluginPrivate::displayName() const diff --git a/src/plugins/clearcase/clearcasesync.cpp b/src/plugins/clearcase/clearcasesync.cpp index 388ce1a8c18..90dad2b988c 100644 --- a/src/plugins/clearcase/clearcasesync.cpp +++ b/src/plugins/clearcase/clearcasesync.cpp @@ -13,6 +13,8 @@ #include <utils/qtcassert.h> #include <utils/qtcprocess.h> +#include <QPromise> + #ifdef WITH_TESTS #include <QTest> #include <utils/fileutils.h> @@ -22,8 +24,7 @@ using namespace Utils; namespace ClearCase::Internal { -static void runProcess(QFutureInterface<void> &future, - const ClearCaseSettings &settings, +static void runProcess(QPromise<void> &promise, const ClearCaseSettings &settings, const QStringList &args, std::function<void(const QString &buffer, int processed)> processLine) { @@ -37,7 +38,7 @@ static void runProcess(QFutureInterface<void> &future, int processed = 0; QString buffer; - while (process.waitForReadyRead() && !future.isCanceled()) { + while (process.waitForReadyRead() && !promise.isCanceled()) { buffer += QString::fromLocal8Bit(process.readAllRawStandardOutput()); int index = buffer.indexOf('\n'); while (index != -1) { @@ -135,7 +136,7 @@ void ClearCaseSync::updateStatusForNotManagedFiles(const QStringList &files) } } -void ClearCaseSync::syncSnapshotView(QFutureInterface<void> &future, QStringList &files, +void ClearCaseSync::syncSnapshotView(QPromise<void> &promise, QStringList &files, const ClearCaseSettings &settings) { const QString view = ClearCasePlugin::viewData().name; @@ -167,18 +168,18 @@ void ClearCaseSync::syncSnapshotView(QFutureInterface<void> &future, QStringList // adding 1 for initial sync in which total is not accurate, to prevent finishing // (we don't want it to become green) - future.setProgressRange(0, totalFileCount + 1); + promise.setProgressRange(0, totalFileCount + 1); int totalProcessed = 0; - runProcess(future, settings, args, [&](const QString &buffer, int processed) { + runProcess(promise, settings, args, [&](const QString &buffer, int processed) { processCleartoolLsLine(viewRootDir, buffer); - future.setProgressValue(qMin(totalFileCount, processed)); + promise.setProgressValue(qMin(totalFileCount, processed)); totalProcessed = processed; }); - if (!future.isCanceled()) { + if (!promise.isCanceled()) { updateStatusForNotManagedFiles(files); - future.setProgressValue(totalFileCount + 1); + promise.setProgressValue(totalFileCount + 1); if (!hot) updateTotalFilesCount(view, settings, totalProcessed); } @@ -193,21 +194,20 @@ void ClearCaseSync::processCleartoolLscheckoutLine(const QString &buffer) /// /// Update the file status for dynamic views. /// -void ClearCaseSync::syncDynamicView(QFutureInterface<void> &future, - const ClearCaseSettings& settings) +void ClearCaseSync::syncDynamicView(QPromise<void> &promise, const ClearCaseSettings& settings) { // Always invalidate status for all files invalidateStatusAllFiles(); const QStringList args({"lscheckout", "-avobs", "-me", "-cview", "-s"}); - runProcess(future, settings, args, [&](const QString &buffer, int processed) { + runProcess(promise, settings, args, [&](const QString &buffer, int processed) { processCleartoolLscheckoutLine(buffer); - future.setProgressValue(processed); + promise.setProgressValue(processed); }); } -void ClearCaseSync::run(QFutureInterface<void> &future, QStringList &files) +void ClearCaseSync::run(QPromise<void> &promise, QStringList &files) { ClearCaseSettings settings = ClearCasePlugin::settings(); if (settings.disableIndexer) @@ -225,9 +225,9 @@ void ClearCaseSync::run(QFutureInterface<void> &future, QStringList &files) emit updateStreamAndView(); if (ClearCasePlugin::viewData().isDynamic) - syncDynamicView(future, settings); + syncDynamicView(promise, settings); else - syncSnapshotView(future, files, settings); + syncSnapshotView(promise, files, settings); } #ifdef WITH_TESTS diff --git a/src/plugins/clearcase/clearcasesync.h b/src/plugins/clearcase/clearcasesync.h index a008dabb600..c2862d9d404 100644 --- a/src/plugins/clearcase/clearcasesync.h +++ b/src/plugins/clearcase/clearcasesync.h @@ -9,6 +9,8 @@ QT_BEGIN_NAMESPACE class QDir; template <typename T> class QFutureInterface; +template <typename T> +class QPromise; QT_END_NAMESPACE namespace ClearCase::Internal { @@ -18,7 +20,7 @@ class ClearCaseSync : public QObject Q_OBJECT public: explicit ClearCaseSync(QSharedPointer<StatusMap> statusMap); - void run(QFutureInterface<void> &future, QStringList &files); + void run(QPromise<void> &promise, QStringList &files); QStringList updateStatusHotFiles(const QString &viewRoot, int &total); void invalidateStatus(const QDir &viewRootDir, const QStringList &files); @@ -28,9 +30,8 @@ public: const int processed); void updateStatusForNotManagedFiles(const QStringList &files); - void syncDynamicView(QFutureInterface<void> &future, - const ClearCaseSettings &settings); - void syncSnapshotView(QFutureInterface<void> &future, QStringList &files, + void syncDynamicView(QPromise<void> &promise, const ClearCaseSettings &settings); + void syncSnapshotView(QPromise<void> &promise, QStringList &files, const ClearCaseSettings &settings); void processCleartoolLscheckoutLine(const QString &buffer); |