[zope2-tracker] [Bug 649605] [NEW] "Copy to present" button doesn't drop _v_ attributes

ChrisW 649605 at bugs.launchpad.net
Tue Sep 28 03:35:05 EDT 2010

Public bug reported:

...which results in this buggy behaviour:

- 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.

Marius says this is 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 

** Affects: zope2
     Importance: High
         Status: Confirmed

"Copy to present" button doesn't drop _v_ attributes
You received this bug notification because you are a member of Zope 2
Developers, which is subscribed to Zope 2.

More information about the zope2-tracker mailing list