aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2013-12-11 18:45:55 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2013-12-12 10:02:07 +0100
commit928f81c194d43155d50f654df70347405ad236ff (patch)
tree5c81dfe2f26110f76bb28a8d97dd80f9e7147f48 /src
parentf8f985af535712e051be28883aef9199cde3b022 (diff)
Fix artifact cleaner.
If the "remove all" flag is not set, we must take care to not only skip target artifacts, but also their siblings that are not target artifacts. Otherwise, the build graph can end up in an unexpected state. Change-Id: Ie2fa36f3e489c3bee19f461e16fa093515b01020 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/lib/buildgraph/artifactcleaner.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/lib/buildgraph/artifactcleaner.cpp b/src/lib/buildgraph/artifactcleaner.cpp
index 7e9a449d4..7a2056a8c 100644
--- a/src/lib/buildgraph/artifactcleaner.cpp
+++ b/src/lib/buildgraph/artifactcleaner.cpp
@@ -32,6 +32,7 @@
#include "artifactvisitor.h"
#include "productbuilddata.h"
#include "projectbuilddata.h"
+#include "transformer.h"
#include <language/language.h>
#include <logging/translator.h>
@@ -39,6 +40,7 @@
#include <tools/error.h>
#include <tools/fileinfo.h>
#include <tools/progressobserver.h>
+#include <tools/qbsassert.h>
#include <QCoreApplication>
#include <QDir>
@@ -108,9 +110,12 @@ private:
{
if (artifact->product != m_product)
return;
- if (artifact->product->buildData->targetArtifacts.contains(artifact)
- && m_options.cleanType() == CleanOptions::CleanupTemporaries) {
- return;
+ if (m_options.cleanType() == CleanOptions::CleanupTemporaries) {
+ QBS_CHECK(artifact->transformer);
+ foreach (Artifact * const sibling, artifact->transformer->outputs) {
+ if (artifact->product->buildData->targetArtifacts.contains(sibling))
+ return;
+ }
}
try {
removeArtifactFromDisk(artifact, m_options.dryRun(), m_logger);