[Framework-Team] PLIP8 CMFEditions - Review

Helge Tesdal tesdal at plonesolutions.com
Mon Sep 25 22:40:01 UTC 2006


1. Overview
===========
PLIP8 Versioning finally gives Plone a versioning story.

http://plone.org/products/plone/roadmap/8

2. Test setup
=============
This was tested with Zope 2.10 from SVN and the review bundle.

svn co https://svn.plone.org/svn/plone/review/plip8-versioning-bundle  
Products
cd Products
./getZVC.sh

3. How does it work
===================
UI wise, the user can add versions explicitly using the versions tab, or  
use
the checkmark on the edit form to add a new version on save.

If you assign diffs to content types in the diff tool, you can even diff
between versions of content.

The doc/DevelDoc.txt and the README explains more about how it works under  
the
hood, and I'm trying to give a short summary below:

portal_repository/IRepository.py implemented by  
CopyModifyMergeRepositoryTool.py
Main API. Implementation depends on the applications use cases/policies.

portal_archivist/IArchivist.py implemented by ArchivistTool.py
The Archivist knows _how_ to clone/copy a python object. It needs the
help of the portal_modifier to find the boundaries of an object.

portal_modifier/IModifier.py implemented by ModifierRegistryTool.py
Registry for modifier plug ins. Modifiers know how to handle different  
aspects
of objects during the versioning process - knows _what_ to clone.

portal_historiesstorage/IStorage.py implemented by ZVCStorage.py
Storage layer for storing the versions. Does not have to care about
references as that is handled already.

purge - can be used for purging very old data. This is a fairly new  
feature.

4. State of code
================
CMFEditions has a lot of history (pun intended), going all the way back to
2003, with the main development push happening in 2004 and 2005 (sponsored  
by
Oxfam). By now, I believe it is  well proven and battle hardened. There  
also
seems to be quite a bit of code. A bit like Plone itself.

There are interfaces with good descriptions, and a lot of time has  
obviously
gone into the architecture design. Although there is a lot of code, there  
is
not a lot of bit rot compared to other components of similar age and
complexity.

5. Suggested improvements
=========================
It would probably make sense to introduce some Z3 tech, like triggering an
event when creating a new version for example. I don't see any  
showstoppers,
and inclusion in Plone 3 will hopefully lead to increased development
activity.

6. Recommendation
=================
CMFEditions adds significant complexity to Plone. There is a lot of code,  
and
several new tools. I'm not going to pretend I full understand all aspects  
of
the code yet, but what I have seen is confidence inspiring. Versioning is  
an
important feature, and this seems to be the best alternative around.

+1 to including this in Plone 3.


-- 
Helge Tesdal
Plone Solutions




More information about the Framework-Team mailing list