[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