aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clearcase
diff options
context:
space:
mode:
authorJarek Kobus <[email protected]>2023-03-04 00:39:50 +0100
committerJarek Kobus <[email protected]>2023-03-09 08:40:57 +0000
commitce037d09a2a85ee06840cd4de2804e1b967dd90b (patch)
tree61960c0f31a144617525d96dda5eec9d696c04a1 /src/plugins/clearcase
parentcae18f88724cff430fb2a54ab0811c751723b6d4 (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.cpp15
-rw-r--r--src/plugins/clearcase/clearcasesync.cpp32
-rw-r--r--src/plugins/clearcase/clearcasesync.h9
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);