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

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )

Reply via email to