aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-07-03 11:55:03 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-07-03 18:07:43 +0200
commit7a96f30d0f84f46287c954ed10292a258ad13fbb (patch)
tree6731acbc462961020af5be5e68072096939b8192 /src
parentb9e3b55ee846a3e39acd72c1e12aeb4126b99272 (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.cpp10
-rw-r--r--src/lib/corelib/buildgraph/buildgraphloader.h4
-rw-r--r--src/lib/corelib/language/language.cpp4
-rw-r--r--src/lib/corelib/language/language.h1
-rw-r--r--src/lib/corelib/language/loader.cpp2
-rw-r--r--src/lib/corelib/tools/persistence.cpp2
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 &parame
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 &parameters,
- 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 &paramet
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 &paramet
// 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 &parameters,
- 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 &parameters)
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)
{