reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

commit 9a49042b8dd9b97a4fcb06c38b4afbabb7ef9487
parent 5c649b6399a287f5921230229627cad0120899a1
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Tue, 19 Jan 2016 14:07:09 -0500

don't run post-commit events if the task fails to commit

Diffstat:
Msrc/task.cpp | 27+++++++++++++++++----------
Msrc/task.hpp | 8++++----
2 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/src/task.cpp b/src/task.cpp @@ -50,9 +50,8 @@ void Task::commit() if(m_isCancelled) return; - doCommit(); - - m_onCommit(); + if(doCommit()) + m_onCommit(); } int Task::removeFile(const Path &path) const @@ -126,7 +125,7 @@ void InstallTask::saveSource(Download *dl, Source *src) } } -void InstallTask::doCommit() +bool InstallTask::doCommit() { for(const Path &path : m_oldFiles) removeFile(path); @@ -140,9 +139,11 @@ void InstallTask::doCommit() // it's a bit late to rollback here as some files might already have been // overwritten. at least we can delete the temporary files rollback(); - return; + return false; } } + + return true; } void InstallTask::doRollback() @@ -158,17 +159,21 @@ RemoveTask::RemoveTask(const vector<Path> &files, Transaction *t) { } -void RemoveTask::doCommit() +bool RemoveTask::doCommit() { - for(const Path &path : m_files) - remove(path); + for(const Path &path : m_files) { + if(!remove(path)) + return false; + } + + return true; } -void RemoveTask::remove(const Path &file) +bool RemoveTask::remove(const Path &file) { if(removeFile(file)) { transaction()->addError(strerror(errno), file.join()); - return; + return false; } else m_removedFiles.insert(file); @@ -182,4 +187,6 @@ void RemoveTask::remove(const Path &file) if(removeFile(dir)) break; } + + return true; } diff --git a/src/task.hpp b/src/task.hpp @@ -48,7 +48,7 @@ protected: Transaction *transaction() const { return m_transaction; } - virtual void doCommit() = 0; + virtual bool doCommit() = 0; virtual void doRollback() = 0; private: @@ -66,7 +66,7 @@ public: const std::set<Path> &removedFiles() const { return m_oldFiles; } protected: - void doCommit() override; + bool doCommit() override; void doRollback() override; private: @@ -85,11 +85,11 @@ public: const std::set<Path> &removedFiles() const { return m_removedFiles; } protected: - void doCommit() override; + bool doCommit() override; void doRollback() override {} private: - void remove(const Path &); + bool remove(const Path &); std::vector<Path> m_files; std::set<Path> m_removedFiles;