diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2010-10-06 10:15:30 +0200 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2010-10-06 10:16:41 +0200 |
commit | 4dd800c1605eb08a00220effe1656795765d9c68 (patch) | |
tree | 7cd81e9b38176e3073de5a80a2be91448c3d6679 | |
parent | f5716f05b77ee00c34218cde249c24f00b2df3a5 (diff) |
QmlDump: If a automatic build fails, don't try again directly.
Reviewed-by: Kai Koehne
-rw-r--r-- | src/plugins/qt4projectmanager/qmldumptool.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/plugins/qt4projectmanager/qmldumptool.cpp b/src/plugins/qt4projectmanager/qmldumptool.cpp index d0dddbe26a..af5e7f2812 100644 --- a/src/plugins/qt4projectmanager/qmldumptool.cpp +++ b/src/plugins/qt4projectmanager/qmldumptool.cpp @@ -52,7 +52,7 @@ using namespace Qt4ProjectManager; class QmlDumpBuildTask; typedef QHash<int, QmlDumpBuildTask *> QmlDumpByVersion; -Q_GLOBAL_STATIC(QmlDumpByVersion, runningQmlDumpBuilds); +Q_GLOBAL_STATIC(QmlDumpByVersion, qmlDumpBuilds); // A task suitable to be run by QtConcurrent to build qmldump. class QmlDumpBuildTask : public QObject { @@ -61,8 +61,9 @@ class QmlDumpBuildTask : public QObject { public: explicit QmlDumpBuildTask(QtVersion *version) : m_version(*version) + , m_failed(false) { - runningQmlDumpBuilds()->insert(m_version.uniqueId(), this); + qmlDumpBuilds()->insert(m_version.uniqueId(), this); } void run(QFutureInterface<void> &future) @@ -76,10 +77,11 @@ public: if (path.isEmpty()) { qWarning() << "Could not build QML plugin dumping helper for " << m_version.displayName() << "\nOutput:\n" << output; + m_failed = true; + } else { + // proceed in gui thread + metaObject()->invokeMethod(this, "finish", Qt::QueuedConnection, Q_ARG(QString, path)); } - - // proceed in gui thread - metaObject()->invokeMethod(this, "finish", Qt::QueuedConnection, Q_ARG(QString, path)); } void updateProjectWhenDone(ProjectExplorer::Project *project) @@ -87,14 +89,16 @@ public: m_projectsToUpdate.insert(project); } + bool hasFailed() const + { + return m_failed; + } + public slots: void finish(QString qmldumpPath) { deleteLater(); - runningQmlDumpBuilds()->remove(m_version.uniqueId()); - - if (qmldumpPath.isEmpty()) - return; + qmlDumpBuilds()->remove(m_version.uniqueId()); // update qmldump path for all the project QmlJS::ModelManagerInterface *modelManager = QmlJS::ModelManagerInterface::instance(); @@ -113,6 +117,7 @@ public slots: private: QSet<ProjectExplorer::Project *> m_projectsToUpdate; QtVersion m_version; + bool m_failed; }; } // end of anonymous namespace @@ -268,8 +273,10 @@ QString QmlDumpTool::qmlDumpPath(ProjectExplorer::Project *project) QtVersion *version = qtVersionForProject(project); if (version && path.isEmpty()) { - if (runningQmlDumpBuilds()->contains(version->uniqueId())) { - runningQmlDumpBuilds()->value(version->uniqueId())->updateProjectWhenDone(project); + QmlDumpBuildTask *qmlDumpBuildTask = qmlDumpBuilds()->value(version->uniqueId()); + if (qmlDumpBuildTask) { + if (!qmlDumpBuildTask->hasFailed()) + qmlDumpBuildTask->updateProjectWhenDone(project); } else { QmlDumpBuildTask *buildTask = new QmlDumpBuildTask(version); buildTask->updateProjectWhenDone(project); |