[Zope-dev] Change in repository approach to software sharing

Jim Fulton jim at zope.com
Sun Apr 25 09:17:01 EDT 2004


The Zope project includes a number of interrelated subprojects,
such as:

   - Zope 2

   - Zope 3

   - ZODB

   - ZConfig

Software from the ZODB and ZConfig projects are shared by Zope 2
and Zope 3.  We want this sharing to be very convenient for
people working on Zope 2 and Zope 3.  We don't want users of
the Zope 2 and Zope 3 repository to have to do separate checkouts for
ZODB and ZConfig.  CVS supports such software sharing through it's
"module" system. The module system has some flaws, so we use symbolic
links instead.

In a response to:

   http://dev.zope.org/Zope3/MovingSCMToSubversion

John Belmonte has suggested that Zope 2 and Zope 3 should depend
on specific versions of shared packages, rather than on the head.
I'm inclined to agree. People working on ZODB and ZConfig have to
test their changes against both Zope 2 and Zope 3 to avoid breakage.
This is very burdensome and causes much pain when they get it wrong.

Fortunately, subversion provides a mechanism for sharing specific
revisions.  We'll be able to have the convenience of getting
ZODB and ZConfig (and other shared software) when we do a checkout
*and* we'll be able to control what parts we get.

To see how this will work, we'll look at ZConfig as an
example (because it has a single package) of reusable software
that we will include in Zope 3.

In the repository, we'll have a top-level Zope3 project directory,
with the standard svn subdirectories "trunk", "branches", and "tags".

We'll also have a top-level ZConfig project directory.  The "trunk"
of the ZConfig Python package will be in ZConfig/trunk/src/ZConfig.
If we create a tag T1 of ZConfig, then the Python package for that tag
will be in ZConfig/tags/T1/src/ZConfig.

Now, when we set up the Zope 3 repository, we will create the ZConfig
package in Zope 3 by copying a *tag* from the ZConfig project:

   svn copy svn+ssh://svn.zope.org/repos/ZConfig/tags/T1/src/ZConfig \
            svn+ssh://svn.zope.org/repos/Zope3/trunk/src/ZConfig
            -m 'Bring ZConfig T1 into main branch'

Then, whenever someone checks out the Z3 trunk, they'll get
the ZConfig from T1.  If we need to, we can even make Zope3-local
changes to ZConfig.

Later, we may decide to upgrade the Zope 3 head to use ZConfig tag 3.
At that point, we can recopy from the tag, or we can merge changes
made between the two tags.

A similar technique can be used for external software, as described in:

   http://svnbook.red-bean.com/svnbook/ch07s04.html

Jim

-- 
Jim Fulton           mailto:jim at zope.com       Python Powered!
CTO                  (540) 361-1714            http://www.python.org
Zope Corporation     http://www.zope.com       http://www.zope.org




More information about the Zope-Dev mailing list