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:
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;