aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-04-28 13:31:05 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-04-28 13:49:06 +0200
commitc1e1176332ccddc01e86aa07a458710053c1e9fa (patch)
tree039b6c84d18bd1ce74b736eb394deb4e455bf2af
parent3b6628bded8316bfca98865005d51cfc33b60198 (diff)
Make the "clean" operation interruptible.
Change-Id: I60f221a0dfcc2786dfaa6b655cbce7f899a2027b Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r--src/lib/corelib/buildgraph/artifactcleaner.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/lib/corelib/buildgraph/artifactcleaner.cpp b/src/lib/corelib/buildgraph/artifactcleaner.cpp
index a38095c9e..cec7002da 100644
--- a/src/lib/corelib/buildgraph/artifactcleaner.cpp
+++ b/src/lib/corelib/buildgraph/artifactcleaner.cpp
@@ -88,9 +88,11 @@ static void removeArtifactFromDisk(Artifact *artifact, bool dryRun, const Logger
class CleanupVisitor : public ArtifactVisitor
{
public:
- CleanupVisitor(const CleanOptions &options, const Logger &logger)
+ CleanupVisitor(const CleanOptions &options, const ProgressObserver *observer,
+ const Logger &logger)
: ArtifactVisitor(Artifact::Generated)
, m_options(options)
+ , m_observer(observer)
, m_logger(logger)
, m_hasError(false)
{
@@ -108,6 +110,9 @@ public:
private:
void doVisit(Artifact *artifact)
{
+ if (m_observer->canceled())
+ throw ErrorInfo(Tr::tr("Cleaning up was canceled."));
+
if (artifact->product != m_product)
return;
if (m_options.cleanType() == CleanOptions::CleanupTemporaries) {
@@ -129,6 +134,7 @@ private:
}
const CleanOptions m_options;
+ const ProgressObserver * const m_observer;
Logger m_logger;
bool m_hasError;
ResolvedProductConstPtr m_product;
@@ -150,7 +156,7 @@ void ArtifactCleaner::cleanup(const TopLevelProjectPtr &project,
QSet<QString> directories;
foreach (const ResolvedProductPtr &product, products) {
- CleanupVisitor visitor(options, m_logger);
+ CleanupVisitor visitor(options, m_observer, m_logger);
visitor.visitProduct(product);
directories.unite(visitor.directories());
if (visitor.hasError())