History for RepositoryOrganizationNotes
??changed:
-
Repository Organization Notes
Principles behind and incidental info about the organization of the
repository. This is actually the notes accumulated during design of
the organization.
Repository Organization Requirements
- The organization of the repository should be designed
to value clarity and ease of collaboration over ease of
performing mechanical processes (such as making release
distributions). Release-making scripts will be responsible
for creating "release bits" that are appropriate, and
"release bits" may or may not look like what is in the
repository.
- The organization should support our open development process
and be compatible with "product" processes. For example, it
should be possible for a "shepherd" to manage a particular
part of the repository and manage development in the Fishbowl.
At the same time, a "product" shepherd must be able to manage
a product lifecycle (which includes that part of the repository
as a component part) without imposing too much overhead on the
component shepherd.
This means, for example, that the Zope (product) shepherd must
be able to tag a specific revision of ZODB (component) for
inclusion in a specific version of the product bits. It should
be possible to do this (possibly for several products) with
a relatively lightweight amount of coordination. It should also
be able to happen in a way that doesn't impede the lifecycle
of the component (which implies that our branching policy may
need to change somewhat to avoid "freezes" outside of the product).
- Some parts of the repository can be used in multiple ways, and
have software bits that are unique to a particular usage (like
things only useful in a release distribution, but not in a
direct-checkout sort of usage). It is up to the shepherd of
a repository area to arrange things so that they are useful
in the appropriate contexts. For example, the ZEO part of the
repository might manage things like start and stop scripts
that are only used for a packaged release in a separate
subdirectory so that it is not in the way for use as a checkout.
The "release builder" for ZEO would be responsible for moving
them to whatever place was appropriate in the release bits.
- Software artifacts in the repository that have an identity
should manage any documenation related to that identity in that
place in the repository. For example, ZODB is a component part of
Zope, but it is also commonly used as a component in other systems
(and may have its own standalone release cycle). ZODB-specific
documentation should be managed in the repository with the
software. Scripts, CVS modules or other mechanisms used to make
"release bits" should take appropriate action if the documentation
needs to be augmented or moved around in the release bits.
- Some community users like to "run from CVS", which has not been
a problem until now because the repository (basically) reflected
the "release bits", making it possible to "run a checkout". It is
a goal to retain this ability, though it will likely be implemented
using CVS "modules" that build configurations of repository bits
that are shaped like release bits and can be run directly.
- The repository organization should largely reflect the areas
of responsibility of various "shepherds", and be as self-contained
as possible. Shepherds are expected to know what is going on in
their bits of the repository, and have given people write access
with the understanding that they are only to make changes to their
own bits. Keeping things self-contained will help prevent accidents.
- The repository organization should strongly encourage the use of
Python packages. Things that are not currently packages will live
in an area with a derogatory name, just to make us dislike putting
things there and want to move things out.
Issues
- Should there be a higher-level "technology area" organization,
like "templating", "persistence", "relational", etc.? The
reality is that (at least in the beginning) shepherds will
be scarce - too scarce to have one for each DB adapter for
example. One solution would be to have the "templating" shepherd,
"persistence" shepherd, etc.
**Resolution**: no, we are going to keep the repository as flat
as possible, as management process is too fluid to design the
repository around it.
- Should "documentation" be a top-level area? This would relate
basically to what Amos and Mike are currently doing on SF.
Should it continue at SF? We don't have to answer that immediately
to achieve the goals of this project.
**Resolution**: yes, documentation will be a top-level area. Most
likely the current SF documentation repository will move there.
The New Repository Organization
Here is the proposed repository organization.
<pre>
Packages
AccessControl
App
BTrees
DateTime
DocumentTemplate
HelpSys
Interface
OFS
SearchIndex
Shared
StructuredText
Testing
TreeDisplay
ZClasses
ZLogger
ZODB
ZPublisher
Zope
ZServer
ZEO
webdav
Products
ExternalMethod
MIMETools
MailHost
OFSP
PythonScripts
SiteAccess
StandardCacheManagers
ZCatalog
ZGadflyDA
ZSQLMethods
ZopeTutorial
PageTemplates
Documentation
TheZopeBook
ZopeDevGuide
etc.
Releases
Zope
CMF
etc.
Binaries
xxx
JunkPile ![known as 'Cruft' in the actual implementation]
Zope core stuff not located elsewhere
ExtensionClass
BTree
cPickle?
PCGI
zlib
</pre>
<hr solid id=comments_below>
jim (May 10, 2001 3:34 pm; Comment #1) --
<pre>
> - The organization of the repository should be designed
> to value clarity and ease of collaboration over ease of
> performing mechanical processes (such as making release
> distributions). Release-making scripts will be responsible
> for creating "release bits" that are appropriate, and
> "release bits" may or may not look like what is in the
> repository.
</pre>
Overall, I agree, however, I do think that there *is* an important bit of machinery that should be supported. It should be easy to check out releases.
That means that organization of a release should be possible via CVS
modules.
jim (May 10, 2001 3:40 pm; Comment #2) --
<pre>
> This means, for example, that the Zope (product) shepherd must
> be able to tag a specific revision of ZODB (component) for
> inclusion in a specific version of the product bits. It should
> be possible to do this (possibly for several products) with
> a relatively lightweight amount of coordination. It should also
> be able to happen in a way that doesn't impede the lifecycle
> of the component (which implies that our branching policy may
> need to change somewhat to avoid "freezes" outside of the product).
</pre>
If a particular configuration can be expressed via a CVS module, then this
can be done in a very straightforward fashion.
<pre>
> - Software artifacts in the repository that have an identity
> should manage any documenation related to that identity in that
[86 more lines...]