aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/buildgraph
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/buildgraph')
-rw-r--r--src/lib/corelib/buildgraph/artifact.cpp2
-rw-r--r--src/lib/corelib/buildgraph/artifact.h2
-rw-r--r--src/lib/corelib/buildgraph/buildgraphloader.cpp1
-rw-r--r--src/lib/corelib/buildgraph/executor.cpp9
-rw-r--r--src/lib/corelib/buildgraph/rescuableartifactdata.h3
5 files changed, 16 insertions, 1 deletions
diff --git a/src/lib/corelib/buildgraph/artifact.cpp b/src/lib/corelib/buildgraph/artifact.cpp
index 5e38c3b36..667194356 100644
--- a/src/lib/corelib/buildgraph/artifact.cpp
+++ b/src/lib/corelib/buildgraph/artifact.cpp
@@ -145,6 +145,7 @@ void Artifact::load(PersistentPool &pool)
artifactType = static_cast<ArtifactType>(pool.load<quint8>());
alwaysUpdated = pool.load<bool>();
oldDataPossiblyPresent = pool.load<bool>();
+ pool.load(knownOutOfDate);
}
void Artifact::store(PersistentPool &pool)
@@ -162,6 +163,7 @@ void Artifact::store(PersistentPool &pool)
pool.store(static_cast<quint8>(artifactType));
pool.store(alwaysUpdated);
pool.store(oldDataPossiblyPresent);
+ pool.store(knownOutOfDate);
}
} // namespace Internal
diff --git a/src/lib/corelib/buildgraph/artifact.h b/src/lib/corelib/buildgraph/artifact.h
index 5ca4f4d46..b1669974c 100644
--- a/src/lib/corelib/buildgraph/artifact.h
+++ b/src/lib/corelib/buildgraph/artifact.h
@@ -100,6 +100,8 @@ public:
bool alwaysUpdated : 1;
bool oldDataPossiblyPresent : 1;
+ bool knownOutOfDate = false;
+
void initialize();
const TypeFilter<Artifact> parentArtifacts() const;
const TypeFilter<Artifact> childArtifacts() const;
diff --git a/src/lib/corelib/buildgraph/buildgraphloader.cpp b/src/lib/corelib/buildgraph/buildgraphloader.cpp
index bef7145ca..9890a8327 100644
--- a/src/lib/corelib/buildgraph/buildgraphloader.cpp
+++ b/src/lib/corelib/buildgraph/buildgraphloader.cpp
@@ -857,6 +857,7 @@ void BuildGraphLoader::rescueOldBuildData(const ResolvedProductConstPtr &restore
if (!newArtifact) {
RescuableArtifactData rad;
rad.timeStamp = oldArtifact->timestamp();
+ rad.knownOutOfDate = oldArtifact->knownOutOfDate;
rad.fileTags = oldArtifact->fileTags();
rad.properties = oldArtifact->properties;
rad.commands = oldArtifact->transformer->commands;
diff --git a/src/lib/corelib/buildgraph/executor.cpp b/src/lib/corelib/buildgraph/executor.cpp
index 1783decab..24f484ad2 100644
--- a/src/lib/corelib/buildgraph/executor.cpp
+++ b/src/lib/corelib/buildgraph/executor.cpp
@@ -391,6 +391,11 @@ bool Executor::isUpToDate(Artifact *artifact) const
return false;
}
+ if (artifact->knownOutOfDate) {
+ qCDebug(lcUpToDateCheck) << "Explicitly marked as out of date.";
+ return false;
+ }
+
for (Artifact *childArtifact : filterByType<Artifact>(artifact->children)) {
QBS_CHECK(childArtifact->timestamp().isValid());
qCDebug(lcUpToDateCheck) << "child timestamp"
@@ -564,6 +569,9 @@ void Executor::finishJob(ExecutorJob *job, bool success)
for (Artifact * const artifact : qAsConst(transformer->outputs)) {
if (artifact->alwaysUpdated) {
artifact->setTimestamp(FileTime::currentTime());
+ artifact->knownOutOfDate = false;
+ for (Artifact * const parent : artifact->parentArtifacts())
+ parent->knownOutOfDate = true;
if (m_buildOptions.forceOutputCheck()
&& !m_buildOptions.dryRun() && !FileInfo(artifact->filePath()).exists()) {
if (transformer->rule) {
@@ -854,6 +862,7 @@ void Executor::rescueOldBuildData(Artifact *artifact, bool *childrenAdded = 0)
artifact->transformer->lastPrepareScriptExecutionTime = rad.lastPrepareScriptExecutionTime;
artifact->transformer->commandsNeedChangeTracking = true;
artifact->setTimestamp(rad.timeStamp);
+ artifact->knownOutOfDate = artifact->knownOutOfDate || rad.knownOutOfDate;
if (childrenAdded && !childrenToConnect.empty())
*childrenAdded = true;
for (const ChildArtifactData &cad : qAsConst(childrenToConnect)) {
diff --git a/src/lib/corelib/buildgraph/rescuableartifactdata.h b/src/lib/corelib/buildgraph/rescuableartifactdata.h
index 7e846aef7..fbcf8a9d4 100644
--- a/src/lib/corelib/buildgraph/rescuableartifactdata.h
+++ b/src/lib/corelib/buildgraph/rescuableartifactdata.h
@@ -66,7 +66,7 @@ class QBS_AUTOTEST_EXPORT RescuableArtifactData
public:
template<PersistentPool::OpType opType> void completeSerializationOp(PersistentPool &pool)
{
- pool.serializationOp<opType>(timeStamp, children, fileDependencies,
+ pool.serializationOp<opType>(timeStamp, children, fileDependencies, knownOutOfDate,
propertiesRequestedInPrepareScript,
propertiesRequestedInCommands,
propertiesRequestedFromArtifactInPrepareScript,
@@ -105,6 +105,7 @@ public:
FileTime timeStamp;
QList<ChildData> children;
std::vector<QString> fileDependencies;
+ bool knownOutOfDate = false;
// Per-Transformer data
CommandList commands;