diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2014-04-28 13:31:05 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-04-28 13:49:06 +0200 |
commit | c1e1176332ccddc01e86aa07a458710053c1e9fa (patch) | |
tree | 039b6c84d18bd1ce74b736eb394deb4e455bf2af | |
parent | 3b6628bded8316bfca98865005d51cfc33b60198 (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.cpp | 10 |
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()) |