forked from qt-creator/qt-creator
BuildManager: Reuse TaskTreeRunner
Change-Id: I533d92272a69f96df3efa578960803f81e712072 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -31,6 +31,7 @@
|
|||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
|
|
||||||
#include <solutions/tasking/tasktree.h>
|
#include <solutions/tasking/tasktree.h>
|
||||||
|
#include <solutions/tasking/tasktreerunner.h>
|
||||||
|
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
#include <utils/outputformatter.h>
|
#include <utils/outputformatter.h>
|
||||||
@@ -276,7 +277,7 @@ public:
|
|||||||
QFutureWatcher<void> m_progressWatcher;
|
QFutureWatcher<void> m_progressWatcher;
|
||||||
QPointer<FutureProgress> m_futureProgress;
|
QPointer<FutureProgress> m_futureProgress;
|
||||||
|
|
||||||
std::unique_ptr<TaskTree> m_taskTree;
|
TaskTreeRunner m_taskTreeRunner;
|
||||||
QElapsedTimer m_elapsed;
|
QElapsedTimer m_elapsed;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -309,6 +310,28 @@ BuildManager::BuildManager(QObject *parent, QAction *cancelBuildAction)
|
|||||||
this, &BuildManager::cancel);
|
this, &BuildManager::cancel);
|
||||||
connect(&d->m_progressWatcher, &QFutureWatcherBase::finished,
|
connect(&d->m_progressWatcher, &QFutureWatcherBase::finished,
|
||||||
this, &BuildManager::finish);
|
this, &BuildManager::finish);
|
||||||
|
|
||||||
|
connect(&d->m_taskTreeRunner, &TaskTreeRunner::done, this, [](DoneWith result) {
|
||||||
|
const bool success = result == DoneWith::Success;
|
||||||
|
|
||||||
|
if (!success && d->m_progressFutureInterface)
|
||||||
|
d->m_progressFutureInterface->reportCanceled();
|
||||||
|
|
||||||
|
cleanupBuild();
|
||||||
|
|
||||||
|
if (d->m_pendingQueue.isEmpty()) {
|
||||||
|
d->m_poppedUpTaskWindow = false;
|
||||||
|
d->m_isDeploying = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
emit m_instance->buildQueueFinished(success);
|
||||||
|
|
||||||
|
if (!d->m_pendingQueue.isEmpty()) {
|
||||||
|
d->m_buildQueue = d->m_pendingQueue;
|
||||||
|
d->m_pendingQueue.clear();
|
||||||
|
startBuildQueue();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildManager *BuildManager::instance()
|
BuildManager *BuildManager::instance()
|
||||||
@@ -520,10 +543,10 @@ void BuildManager::cleanupBuild()
|
|||||||
|
|
||||||
void BuildManager::cancel()
|
void BuildManager::cancel()
|
||||||
{
|
{
|
||||||
if (!d->m_taskTree)
|
if (!d->m_taskTreeRunner.isRunning())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
d->m_taskTree.reset();
|
d->m_taskTreeRunner.reset();
|
||||||
|
|
||||||
const QList<BuildItem> pendingQueue = d->m_pendingQueue;
|
const QList<BuildItem> pendingQueue = d->m_pendingQueue;
|
||||||
d->m_pendingQueue.clear();
|
d->m_pendingQueue.clear();
|
||||||
@@ -679,31 +702,6 @@ void BuildManager::startBuildQueue()
|
|||||||
if (!targetTasks.isEmpty())
|
if (!targetTasks.isEmpty())
|
||||||
topLevel.append(Group(targetTasks));
|
topLevel.append(Group(targetTasks));
|
||||||
|
|
||||||
d->m_taskTree.reset(new TaskTree(Group{topLevel}));
|
|
||||||
const auto onDone = [](DoneWith result) {
|
|
||||||
const bool success = result == DoneWith::Success;
|
|
||||||
d->m_taskTree.release()->deleteLater();
|
|
||||||
|
|
||||||
if (!success && d->m_progressFutureInterface)
|
|
||||||
d->m_progressFutureInterface->reportCanceled();
|
|
||||||
|
|
||||||
cleanupBuild();
|
|
||||||
|
|
||||||
if (d->m_pendingQueue.isEmpty()) {
|
|
||||||
d->m_poppedUpTaskWindow = false;
|
|
||||||
d->m_isDeploying = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
emit m_instance->buildQueueFinished(success);
|
|
||||||
|
|
||||||
if (!d->m_pendingQueue.isEmpty()) {
|
|
||||||
d->m_buildQueue = d->m_pendingQueue;
|
|
||||||
d->m_pendingQueue.clear();
|
|
||||||
startBuildQueue();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
connect(d->m_taskTree.get(), &TaskTree::done, instance(), onDone);
|
|
||||||
|
|
||||||
// Progress Reporting
|
// Progress Reporting
|
||||||
d->m_progressFutureInterface = new QFutureInterface<void>;
|
d->m_progressFutureInterface = new QFutureInterface<void>;
|
||||||
d->m_progressWatcher.setFuture(d->m_progressFutureInterface->future());
|
d->m_progressWatcher.setFuture(d->m_progressFutureInterface->future());
|
||||||
@@ -720,7 +718,7 @@ void BuildManager::startBuildQueue()
|
|||||||
d->m_progressFutureInterface->reportStarted();
|
d->m_progressFutureInterface->reportStarted();
|
||||||
|
|
||||||
d->m_elapsed.start();
|
d->m_elapsed.start();
|
||||||
d->m_taskTree->start();
|
d->m_taskTreeRunner.start(topLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildManager::showBuildResults()
|
void BuildManager::showBuildResults()
|
||||||
@@ -761,7 +759,7 @@ void BuildManager::progressChanged(int percent, const QString &text)
|
|||||||
|
|
||||||
bool BuildManager::buildQueueAppend(const QList<BuildItem> &items, const QStringList &preambleMessage)
|
bool BuildManager::buildQueueAppend(const QList<BuildItem> &items, const QStringList &preambleMessage)
|
||||||
{
|
{
|
||||||
if (!d->m_taskTree) {
|
if (!d->m_taskTreeRunner.isRunning()) {
|
||||||
d->m_outputWindow->clearContents();
|
d->m_outputWindow->clearContents();
|
||||||
if (ProjectExplorerPlugin::projectExplorerSettings().clearIssuesOnRebuild) {
|
if (ProjectExplorerPlugin::projectExplorerSettings().clearIssuesOnRebuild) {
|
||||||
TaskHub::clearTasks(Constants::TASK_CATEGORY_COMPILE);
|
TaskHub::clearTasks(Constants::TASK_CATEGORY_COMPILE);
|
||||||
@@ -797,7 +795,7 @@ bool BuildManager::buildQueueAppend(const QList<BuildItem> &items, const QString
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (d->m_taskTree)
|
if (d->m_taskTreeRunner.isRunning())
|
||||||
d->m_pendingQueue << items;
|
d->m_pendingQueue << items;
|
||||||
else
|
else
|
||||||
d->m_buildQueue = items;
|
d->m_buildQueue = items;
|
||||||
@@ -812,7 +810,7 @@ bool BuildManager::buildQueueAppend(const QList<BuildItem> &items, const QString
|
|||||||
for (const BuildItem &item : items)
|
for (const BuildItem &item : items)
|
||||||
incrementActiveBuildSteps(item.buildStep);
|
incrementActiveBuildSteps(item.buildStep);
|
||||||
|
|
||||||
if (!d->m_taskTree)
|
if (!d->m_taskTreeRunner.isRunning())
|
||||||
startBuildQueue();
|
startBuildQueue();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user