From 40cc2c4079e05188acac848d97f1db13f0dd9903 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Wed, 5 Mar 2014 09:31:37 +0100 Subject: [PATCH] fix removal of versions; apply also to versionable concepts --- versioning/configure.zcml | 16 ++++++++-------- versioning/versionable.py | 13 ++++++++----- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/versioning/configure.zcml b/versioning/configure.zcml index 47e18d1..6c41df9 100644 --- a/versioning/configure.zcml +++ b/versioning/configure.zcml @@ -1,10 +1,7 @@ - - + i18n_domain="zope"> @@ -19,8 +16,12 @@ + handler="loops.versioning.versionable.cleanupVersions" /> + + @@ -28,7 +29,6 @@ name="listversions" for="loops.interfaces.IResource" class="loops.versioning.browser.ListVersions" - permission="zope.View" - /> + permission="zope.View" /> diff --git a/versioning/versionable.py b/versioning/versionable.py index 1e85db3..5c3c683 100644 --- a/versioning/versionable.py +++ b/versioning/versionable.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2012 Helmut Merz helmutm@cy55.de +# Copyright (c) 2014 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -222,23 +222,26 @@ class VersionableResource(object): def cleanupVersions(context, event): - """ Called upon deletion of a resource. + """ Called upon deletion of a resource or concept. """ vContext = IVersionable(context, None) if vContext is None: return - rm = context.getLoopsRoot().getResourceManager() + #rm = context.getLoopsRoot().getResourceManager() + rm = getParent(context) if context == vContext.master: toBeDeleted = [] for v in vContext.versions.values(): if v != context: toBeDeleted.append(getName(v)) for name in toBeDeleted: + # TODO: notify(ObjectRemovedEvent(rm[name])) del rm[name] else: vId = vContext.versionId - vMaster = IVersionable(vContext.master) - del vMaster.versions[vId] + vMaster = vContext.versionableMaster + if vId in vMaster.versions: + del vMaster.versions[vId] if vMaster.getVersioningAttribute('currentVersion', None) == context: newCurrent = sorted(vMaster.versions.items())[-1][1] vMaster.setVersioningAttribute('currentVersion', newCurrent)