[Zope-dev] weird Page Template / ZODB history problem with Zope 2.12.7

Marius Gedminas marius at gedmin.as
Mon Sep 27 19:12:52 EDT 2010


On Mon, Sep 27, 2010 at 11:37:11PM +0100, Chris Withers wrote:
> Hi All,
> 
> Try this:
> 
> - edit a page template
> 
> - edit it again
> 
> - go to the history tab, and use the "Copy to present" button to bring 
> back your first edit.
> 
> On the edit tab, you will correctly see the text you brought back.
> However, if you render the template, the old text will be used.
> 
> It's only if you "Save changes" that the copied-to-present text will 
> actually be used.
> 
> Anyone got any ideas why and how to fix this?

Why?  Because the precompiled TAL bytecode is sitting there in a
_v_program attribute that's not stored in the ZODB, so it's not reverted
when you undo things.

How to fix?  Make the "Copy to present" button drop all _v_* attributes
from the object it modifies.

This is OFS.History.Historical.manage_historyCopy, right?  Quick
untested patch:

--- ./OFS/History.py.orig	2010-09-28 02:11:56.535745440 +0300
+++ ./OFS/History.py	2010-09-28 02:12:00.043764683 +0300
@@ -151,6 +151,9 @@
             base = aq_base(self)
             base._p_activate()       # make sure we're not a ghost 
             base.__setstate__(state) # change the state
+            for attr in dir(base):
+                if attr.startswith('_v_'):
+                    delattr(base, attr)
             base._p_changed = True   # marke object as dirty 
             self.manage_afterHistoryCopy()


Marius Gedminas
-- 
http://pov.lt/ -- Zope 3/BlueBream consulting and development
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
Url : http://mail.zope.org/pipermail/zope-dev/attachments/20100928/7bc0a1db/attachment.bin 


More information about the Zope-Dev mailing list