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