[ZODB-Dev] CMS on top of ZODB

Tino Wildenhain tino@wildenhain.de
Wed, 09 Apr 2003 09:07:48 +0200


Hi Dieter,



>   *  Versioning/History
> 
>      ZODB's version/history support is almost identical to that implemented
>      by Sörman-CMS. Its only drawback: it gives us only very limited
>      control over the versions.
> 
>      I think, we could enhance the packing process to recognize
>      special objects (based on classname) to hold references
>      to older versions. We could then use a standard marking
>      garbage collection for packing: current versions and
>      versions referenced by (current) special objects are
>      in use; any version referenced by a version in use is in
>      use.
> 
>      The "version referenced by a version" is a bit tricky, as
>      a version references another version only indirectly:
>      it directly references an object and it is associated with a time;
>      it references the object's version that was current at this time.
> 
>      Of course, packing would become considerably more expensive...
> 
> 
> What do you think about the prospects of these extensions?

There are several people who got the same idea, including myself. :)
A short while ago there was a short thread about this.


> 
> 
> I can make extensions to ZODB (with respect to programming skills
> and employment contract obligations) and donate them back to the core,
> when you are interested...

I'm extraordinary interested. Can I provide support in any way?

I think, the version object should have a map (dictinary) which
points to a list of specific historic versions of several other
objects. This would appear to be identical to "tagging" objects
in the CVS. One special subobject of this version-dispatcher
could in turn hold a "checkout-rule" for each tag. Subobject,
because it would have its own historic pile.

so the way would go: 
userobject(permission_to_view_current)->versiondispatcher->[list/tree of 
all "HEAD" objects (pass -thru)] -> object by path/id

userobject(permission_to_view_published)->versiondispathcer->checkout-rule-obj->"published" 
-> (only tagged objects) -> versiondispatcher [list/tree of all historic 
versions] -> object by path/id

It looks like the versiondispatcher would be kind of a Catalog then ;)

Regards
Tino