aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/buildgraph/inputartifactscanner.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2016-12-08 12:47:57 +0100
committerJoerg Bornemann <joerg.bornemann@qt.io>2017-01-10 10:00:09 +0000
commit4004e5688b49e0c7e97e9f4773c3d3c76c0059ee (patch)
tree125b596236fa93feddc37599e28b4db0268b26d6 /src/lib/corelib/buildgraph/inputartifactscanner.cpp
parent4265033a34e1ecd06f9d51b72ab8d595d5eb28be (diff)
Make scanning information persistent
This way, a change in some artifact or dependency will not cause re- scanning of tons of other header files anymore. Task-number: QBS-1052 Change-Id: I1713da416b47b19275641cbbacd0a5c9da866578 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/buildgraph/inputartifactscanner.cpp')
-rw-r--r--src/lib/corelib/buildgraph/inputartifactscanner.cpp30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/lib/corelib/buildgraph/inputartifactscanner.cpp b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
index 47600bbfc..177eba970 100644
--- a/src/lib/corelib/buildgraph/inputartifactscanner.cpp
+++ b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
@@ -60,11 +60,6 @@
namespace qbs {
namespace Internal {
-InputArtifactScannerContext::InputArtifactScannerContext(ScanResultCache *scanResultCache)
- : scanResultCache(scanResultCache)
-{
-}
-
static void resolveDepencency(const RawScannedDependency &dependency,
const ResolvedProduct *product, ResolvedDependency *result,
const QString &baseDir = QString())
@@ -112,7 +107,11 @@ static void resolveDepencency(const RawScannedDependency &dependency,
InputArtifactScanner::InputArtifactScanner(Artifact *artifact, InputArtifactScannerContext *ctx,
const Logger &logger)
- : m_artifact(artifact), m_context(ctx), m_newDependencyAdded(false), m_logger(logger)
+ : m_artifact(artifact),
+ m_rawScanResults(artifact->product->topLevelProject()->buildData->rawScanResults),
+ m_context(ctx),
+ m_newDependencyAdded(false),
+ m_logger(logger)
{
}
@@ -230,24 +229,25 @@ void InputArtifactScanner::scanForScannerFileDependencies(DependencyScanner *sca
}
const QString &filePathToBeScanned = fileToBeScanned->filePath();
- ScanResultCache::Result scanResult = m_context->scanResultCache->value(scanner->key(), filePathToBeScanned);
- if (!scanResult.valid) {
+ RawScanResults::ScanData &scanData = m_rawScanResults.findScanData(fileToBeScanned, scanner,
+ m_artifact->properties);
+ if (scanData.lastScanTime < fileToBeScanned->timestamp()) {
try {
if (m_logger.traceEnabled())
m_logger.qbsTrace() << "scanning " << FileInfo::fileName(filePathToBeScanned);
- scanWithScannerPlugin(scanner, fileToBeScanned, &scanResult);
+ scanWithScannerPlugin(scanner, fileToBeScanned, &scanData.rawScanResult);
+ scanData.lastScanTime = FileTime::currentTime();
} catch (const ErrorInfo &error) {
m_logger.printWarning(error);
return;
}
- m_context->scanResultCache->insert(scanner->key(), filePathToBeScanned, scanResult);
}
- resolveScanResultDependencies(inputArtifact, scanResult, filesToScan, cache);
+ resolveScanResultDependencies(inputArtifact, scanData.rawScanResult, filesToScan, cache);
}
void InputArtifactScanner::resolveScanResultDependencies(const Artifact *inputArtifact,
- const ScanResultCache::Result &scanResult, QList<FileResourceBase *> *artifactsToScan,
+ const RawScanResult &scanResult, QList<FileResourceBase *> *artifactsToScan,
InputArtifactScannerContext::ScannerResolvedDependenciesCache &cache)
{
foreach (const RawScannedDependency &dependency, scanResult.deps) {
@@ -343,6 +343,8 @@ void InputArtifactScanner::handleDependency(ResolvedDependency &dependency)
if (fileDependency) {
m_artifact->fileDependencies << fileDependency;
+ if (!fileDependency->timestamp().isValid())
+ fileDependency->setTimestamp(FileInfo(fileDependency->filePath()).lastModified());
} else {
if (m_artifact->children.contains(artifactDependency))
return;
@@ -354,13 +356,13 @@ void InputArtifactScanner::handleDependency(ResolvedDependency &dependency)
void InputArtifactScanner::scanWithScannerPlugin(DependencyScanner *scanner,
FileResourceBase *fileToBeScanned,
- ScanResultCache::Result *scanResult)
+ RawScanResult *scanResult)
{
+ scanResult->deps.clear();
const QStringList &dependencies
= scanner->collectDependencies(fileToBeScanned, m_fileTagsForScanner.constData());
for (const QString &s : dependencies)
scanResult->deps += RawScannedDependency(s);
- scanResult->valid = true;
}
InputArtifactScannerContext::DependencyScannerCacheItem::DependencyScannerCacheItem() : valid(false)