diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2014-07-03 11:55:03 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2014-07-03 18:07:43 +0200 |
commit | 7a96f30d0f84f46287c954ed10292a258ad13fbb (patch) | |
tree | 6731acbc462961020af5be5e68072096939b8192 /src | |
parent | b9e3b55ee846a3e39acd72c1e12aeb4126b99272 (diff) |
Remember at what point in time a project was fully resolved.
And use that information for out-of-date checks instead of the build
graph time stamp. The latter is updated after resolving or even building
has finished, which means we miss all changes to project files that have
happened in between.
Change-Id: I4b2f9e962c26894ce167b36ae3e562e7905d2a3c
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/corelib/buildgraph/buildgraphloader.cpp | 10 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/buildgraphloader.h | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/language.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/language.h | 1 | ||||
-rw-r--r-- | src/lib/corelib/language/loader.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/tools/persistence.cpp | 2 |
6 files changed, 12 insertions, 11 deletions
diff --git a/src/lib/corelib/buildgraph/buildgraphloader.cpp b/src/lib/corelib/buildgraph/buildgraphloader.cpp index 25c5319ba..f5586be21 100644 --- a/src/lib/corelib/buildgraph/buildgraphloader.cpp +++ b/src/lib/corelib/buildgraph/buildgraphloader.cpp @@ -161,15 +161,13 @@ BuildGraphLoadResult BuildGraphLoader::load(const SetupProjectParameters ¶me return m_result; QBS_CHECK(parameters.restoreBehavior() == SetupProjectParameters::RestoreAndTrackChanges); - trackProjectChanges(parameters, buildGraphFilePath, project, pool.headData().projectConfig); + trackProjectChanges(parameters, project, pool.headData().projectConfig); return m_result; } void BuildGraphLoader::trackProjectChanges(const SetupProjectParameters ¶meters, - const QString &buildGraphFilePath, const TopLevelProjectPtr &restoredProject, - const QVariantMap &oldProjectConfig) + const TopLevelProjectPtr &restoredProject, const QVariantMap &oldProjectConfig) { - const FileTime buildGraphTimeStamp = FileInfo(buildGraphFilePath).lastModified(); QSet<QString> buildSystemFiles = restoredProject->buildSystemFiles; QList<ResolvedProductPtr> allRestoredProducts = restoredProject->allProducts(); QList<ResolvedProductPtr> changedProducts; @@ -177,7 +175,7 @@ void BuildGraphLoader::trackProjectChanges(const SetupProjectParameters ¶met bool reResolvingNecessary = false; if (!isConfigCompatible(parameters.finalBuildConfigurationTree(), oldProjectConfig)) reResolvingNecessary = true; - if (hasProductFileChanged(allRestoredProducts, buildGraphTimeStamp, + if (hasProductFileChanged(allRestoredProducts, restoredProject->lastResolveTime, buildSystemFiles, productsWithChangedFiles)) { reResolvingNecessary = true; } @@ -186,7 +184,7 @@ void BuildGraphLoader::trackProjectChanges(const SetupProjectParameters ¶met // can make the list of source files in a product change without the respective file // having been touched. In such a case, the build data for that product will have to be set up // anew. - if (hasBuildSystemFileChanged(buildSystemFiles, buildGraphTimeStamp) + if (hasBuildSystemFileChanged(buildSystemFiles, restoredProject->lastResolveTime) || hasEnvironmentChanged(restoredProject) || hasFileExistsResultChanged(restoredProject) || hasFileLastModifiedResultChanged(restoredProject)) { diff --git a/src/lib/corelib/buildgraph/buildgraphloader.h b/src/lib/corelib/buildgraph/buildgraphloader.h index 58a911faf..48cf40abe 100644 --- a/src/lib/corelib/buildgraph/buildgraphloader.h +++ b/src/lib/corelib/buildgraph/buildgraphloader.h @@ -69,9 +69,7 @@ public: private: void trackProjectChanges(const SetupProjectParameters ¶meters, - const QString &buildGraphFilePath, - const TopLevelProjectPtr &restoredProject, - const QVariantMap &oldProjectConfig); + const TopLevelProjectPtr &restoredProject, const QVariantMap &oldProjectConfig); bool hasEnvironmentChanged(const TopLevelProjectConstPtr &restoredProject) const; bool hasFileExistsResultChanged(const TopLevelProjectConstPtr &restoredProject) const; bool hasFileLastModifiedResultChanged(const TopLevelProjectConstPtr &restoredProject) const; diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp index 300b41d2d..cc9d02180 100644 --- a/src/lib/corelib/language/language.cpp +++ b/src/lib/corelib/language/language.cpp @@ -937,7 +937,7 @@ void ResolvedProject::store(PersistentPool &pool) const } -TopLevelProject::TopLevelProject() : locked(false) +TopLevelProject::TopLevelProject() : locked(false), lastResolveTime(FileTime::oldestTime()) { } @@ -1010,6 +1010,7 @@ void TopLevelProject::load(PersistentPool &pool) for (QHash<QString, QString>::const_iterator i = envHash.begin(); i != envHash.end(); ++i) environment.insert(i.key(), i.value()); pool.stream() >> buildSystemFiles; + pool.stream() >> lastResolveTime; buildData.reset(pool.idLoad<ProjectBuildData>()); QBS_CHECK(buildData); buildData->isDirty = false; @@ -1026,6 +1027,7 @@ void TopLevelProject::store(PersistentPool &pool) const envHash.insert(key, environment.value(key)); pool.stream() << envHash; pool.stream() << buildSystemFiles; + pool.stream() << lastResolveTime; pool.store(buildData.data()); } diff --git a/src/lib/corelib/language/language.h b/src/lib/corelib/language/language.h index c1605394a..ed1b37320 100644 --- a/src/lib/corelib/language/language.h +++ b/src/lib/corelib/language/language.h @@ -463,6 +463,7 @@ public: bool locked; QSet<QString> buildSystemFiles; + FileTime lastResolveTime; void setBuildConfiguration(const QVariantMap &config); const QVariantMap &buildConfiguration() const { return m_buildConfiguration; } diff --git a/src/lib/corelib/language/loader.cpp b/src/lib/corelib/language/loader.cpp index 921387121..a1e557bca 100644 --- a/src/lib/corelib/language/loader.cpp +++ b/src/lib/corelib/language/loader.cpp @@ -106,8 +106,10 @@ TopLevelProjectPtr Loader::loadProject(const SetupProjectParameters ¶meters) cancelationTimer.start(1000); } + const FileTime resolveTime = FileTime::currentTime(); ModuleLoaderResult loadResult = m_moduleLoader->load(parameters); const TopLevelProjectPtr project = m_projectResolver->resolve(loadResult, parameters); + project->lastResolveTime = resolveTime; // E.g. if the top-level project is disabled. if (m_progressObserver) diff --git a/src/lib/corelib/tools/persistence.cpp b/src/lib/corelib/tools/persistence.cpp index f5068d77a..5418148b7 100644 --- a/src/lib/corelib/tools/persistence.cpp +++ b/src/lib/corelib/tools/persistence.cpp @@ -40,7 +40,7 @@ namespace qbs { namespace Internal { -static const char QBS_PERSISTENCE_MAGIC[] = "QBSPERSISTENCE-70"; +static const char QBS_PERSISTENCE_MAGIC[] = "QBSPERSISTENCE-71"; PersistentPool::PersistentPool(const Logger &logger) : m_logger(logger) { |