diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-03-15 10:05:18 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-03-15 10:05:18 +0200 |
commit | fe648009635c8b744c51303020fd0b3b9cfe83c9 (patch) | |
tree | d7a18b2aef102b202b91e2715ba69f7bcd905801 /acf/transaction/init.lua | |
parent | d0071b9d4ad1c595965cbce982ba9edee5f4176a (diff) | |
download | acf2-fe648009635c8b744c51303020fd0b3b9cfe83c9.tar.bz2 acf2-fe648009635c8b744c51303020fd0b3b9cfe83c9.tar.xz |
fix bugs in validation and deletion
Diffstat (limited to 'acf/transaction/init.lua')
-rw-r--r-- | acf/transaction/init.lua | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/acf/transaction/init.lua b/acf/transaction/init.lua index 99b8b9d..eb92c34 100644 --- a/acf/transaction/init.lua +++ b/acf/transaction/init.lua @@ -123,7 +123,9 @@ function Transaction:commit() self:check() local errors = ErrorDict() - for path, func in pairs(self.validate) do errors:collect(func) end + for path, func in pairs(self.validate) do + if not self.deleted[path] then errors:collect(func) end + end errors:raise() local mods = {} @@ -147,15 +149,17 @@ function Transaction:commit() end local function insert_del(path) - local value = self.backend:get(path) - if type(value) == 'table' then - for _, child in ipairs(value) do - local cp = pth.join(path, child) - assert(self.deleted[cp]) - if not handled[cp] then insert_del(cp) end + if not handled[path] then + local value = self.backend:get(path) + if type(value) == 'table' then + for _, child in ipairs(value) do + local cp = pth.join(path, child) + assert(self.deleted[cp]) + insert_del(cp) + end end + insert(path) end - insert(path) end for path, deleted in pairs(self.deleted) do |