diff options
| author | Tobias Hunger <tobias.hunger@digia.com> | 2013-06-18 15:35:04 +0200 |
|---|---|---|
| committer | Tobias Hunger <tobias.hunger@digia.com> | 2013-06-20 17:15:52 +0200 |
| commit | 22a2777a898fdef6f2d5fc4f93a8c11682ecf4ea (patch) | |
| tree | 3bbbfab563eabd4caa44f835bb5efefeb2bacfac /src/lib/buildgraph/buildgraphloader.cpp | |
| parent | 590c138dc9fe8ece6d7c21fc61f33012cb0c7691 (diff) | |
| download | qbs-22a2777a898fdef6f2d5fc4f93a8c11682ecf4ea.tar.gz | |
Store list of files that are part of the project
Store a list of all files that are referenced when resolving the
project as part of the project.
This list is then processed to check whether the project needs to be
re-resolved.
Change-Id: Iccb8928a5349546c22a9615256a505bebf5de567
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/buildgraph/buildgraphloader.cpp')
| -rw-r--r-- | src/lib/buildgraph/buildgraphloader.cpp | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/src/lib/buildgraph/buildgraphloader.cpp b/src/lib/buildgraph/buildgraphloader.cpp index eea9bbd73..181193d03 100644 --- a/src/lib/buildgraph/buildgraphloader.cpp +++ b/src/lib/buildgraph/buildgraphloader.cpp @@ -215,12 +215,15 @@ void BuildGraphLoader::trackProjectChanges(const SetupProjectParameters ¶met const QString &buildGraphFilePath, const TopLevelProjectPtr &restoredProject) { const FileInfo bgfi(buildGraphFilePath); + QSet<QString> buildSystemFiles = restoredProject->buildSystemFiles; const QList<ResolvedProjectPtr> allRestoredProjects = restoredProject->allSubProjects() << restoredProject; bool projectFileChanged = false; bool subProjectRemoved = false; foreach (const ResolvedProjectConstPtr &p, allRestoredProjects) { - FileInfo fi(p->location.fileName()); + const QString fileName = p->location.fileName(); + const FileInfo fi(fileName); + buildSystemFiles.remove(fileName); if (!fi.exists()) { subProjectRemoved = true; break; @@ -230,10 +233,16 @@ void BuildGraphLoader::trackProjectChanges(const SetupProjectParameters ¶met break; } } - if (subProjectRemoved) + if (subProjectRemoved) { m_logger.qbsTrace() << "A sub-project was removed, must re-resolve project"; - if (projectFileChanged) + // Save build graph to prevent a re-resolve on every run now. + restoredProject->buildData->isDirty = true; + } + if (projectFileChanged) { m_logger.qbsTrace() << "A project file changed, must re-resolve project."; + // Save build graph to prevent a re-resolve on every run now. + restoredProject->buildData->isDirty = true; + } bool environmentChanged = false; for (QHash<QString, QString>::ConstIterator it = restoredProject->usedEnvironment.constBegin(); @@ -247,7 +256,9 @@ void BuildGraphLoader::trackProjectChanges(const SetupProjectParameters ¶met const QList<ResolvedProductPtr> allRestoredProducts = restoredProject->allProducts(); QList<ResolvedProductPtr> changedProducts; foreach (const ResolvedProductPtr &product, allRestoredProducts) { - const FileInfo pfi(product->location.fileName()); + const QString fileName = product->location.fileName(); + const FileInfo pfi(fileName); + buildSystemFiles.remove(fileName); if (!pfi.exists()) { productRemoved = true; } else if (bgfi.lastModified() < pfi.lastModified()) { @@ -269,10 +280,23 @@ void BuildGraphLoader::trackProjectChanges(const SetupProjectParameters ¶met } } - if (!environmentChanged && !projectFileChanged && !subProjectRemoved && !productRemoved - && changedProducts.isEmpty()) { - return; + bool filesChanged = false; + foreach (const QString &file, buildSystemFiles) { + const FileInfo fi(file); + if (!fi.exists() || bgfi.lastModified() < fi.lastModified()) { + filesChanged = true; + break; + } } + if (filesChanged) { + m_logger.qbsTrace() << "A qbs or js file changed, must re-resolve project"; + // Save build graph to prevent a re-resolve on every run now. + restoredProject->buildData->isDirty = true; + } + + if (!filesChanged && !environmentChanged && !projectFileChanged + && !subProjectRemoved && !productRemoved && changedProducts.isEmpty()) + return; Loader ldr(m_evalContext->engine(), m_logger); ldr.setSearchPaths(parameters.searchPaths()); |
