aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2010-10-06 10:15:30 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2010-10-06 10:16:41 +0200
commit4dd800c1605eb08a00220effe1656795765d9c68 (patch)
tree7cd81e9b38176e3073de5a80a2be91448c3d6679
parentf5716f05b77ee00c34218cde249c24f00b2df3a5 (diff)
QmlDump: If a automatic build fails, don't try again directly.
Reviewed-by: Kai Koehne
-rw-r--r--src/plugins/qt4projectmanager/qmldumptool.cpp29
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);