WhatGoesWhereAndHow
What Goes Where and How
The repository consists of applications and also directories of elements which are typically shared among the applications. Anyone making additions to the repository must understand the sharing arrangements to know how to properly situate the additions. There are facilities (controlled by checking in recipe files) for managing the interconnections and for directing the destinations for checkin notices. This is all described below.
See CVSAddons for a description of the ingredients and hookup of our special CVS provisions that implement the sharing and notifications, etc.
Organization
The short story re organization is that only application-specific stuff should go directly in the application sections of the repository. Lots of stuff should wind up in Packages (and get linked into the application(s) where its used via the CVSROOT/repolinks), except for Zope products which go in Products.
- Products
- Zope python-based extension packages. The Zope repository section links to the standard products from Zope/lib/python/Products.
- Packages
- Non-Product python packages used in the various
repository applications.
You would generally expect to add to Packages when adding a substantial element to any application, and link the package in to the application skeleton.
- Docs
- General Zope-related documentation, and application specific documentation directories.
- Various Applications
- Zope, CMF, StandaloneZODB, ZEO, and
others as they emerge. These directly contain the
application-specific elements, plus links to the
Packages, Products (in the case of Zope), and Docs for
sharable elements.
- Cruft
- shared stuff that doesn't have a proper place in the other official places.
(There is also a few legacy items: Zope2 is an old name for the Zope checkout, no longer being actively maintained. Releases was a temporary provision - it has been redirected, to support old checkouts, but will soon be removed.)
Sharing of Repository Elements
Repository element sharing is arranged using symlinks in the
repository. (We can't use standard CVS modules
due to severe
deficiences, described in
http://mail.zope.org/pipermail/zope-announce/2001-August/000517.html .)
Those symlinks are governed by a textual list in the
CVSROOT bookkeeping directory, CVSROOT/repolinks. People with
checkin privileges can change the sharing structure by changing
this file. You should really know where things belong before
messing with the structure - if you are unsure, contact the people
on mailto:[email protected] (so everyone can get filled in on
the answers), or contact the mailto:[email protected] directly if
you're shy.
The CVSROOT/repolinks file has comments at the top describing the format.
The CVSROOT/adjustlinks.py script is automatically invoked to apply the link map prescribed by repolinks. The docstring for LinkMap.assert_links() method details the actions - here's a current (08/07/2001) snapshot:
"""Impose the links specified by the recipe, removing preexisting links that are not specified in the map. Specifically: - Add prescribed links that are absent, when there's no non-link file in the way. - Adjust already-existing links that don't point to the prescribed place - so we can use the recipe file to redirect existing links. - Remove links that are not prescribed. - Do nothing for links that already exist as prescribed. - Warn about prescribed links that point nowhere. - Warn about prescribed links that cannot be created because the indicated containing dir does not exist. - Reiterate attempts until all are done, or no more progress is being made - so it's not a problem for links to be dependent on others in order to be situated. - Delete prescribed links that point outside the repository. - Produce output about all the actions."""
The warnings and info messages resulting from application of the script are sent to the digicool-cvs mailling list.
Checkin Notices
Checkin notices about all checkins are dictated by another script we've added to CVS central bookkeeping, CVSROOT/traffic_table.py . Using entries in that table you can cause checkin notices for a particular section of the repository to be directed to any email addresses - typically we send them to mailling lists. Notices for any checkins not corresponding to a particular entry are sent to the zope-cvs list.
Note that the checkin mechanisms account for the repository symlinks dictated by repolinks. Ie, all relevant entries for an element will be triggered, even if that entry contains the directory where the checkin was made only indirectly, due to symlinking.