Hi, > Major new developments -- the implementation of the foreseen JCR 2.0 ACL > functionality comes to mind -- should be done on development branches and > merged back into trunk as the developer(s) see fit aka ready for release. > Regular development still takes place on trunk, of course.
If done correctly, major new development can be done in the trunk without risk. How to do that: Use a (static final boolean) constant to enable / disable a certain new feature or new code path. It is used in the DataStore implementation. At first, it was disabled (only enabled when I run tests), and now it is enabled by default: class InternalValue { public static final boolean USE_DATA_STORE = Boolean.valueOf(System.getProperty("org.jackrabbit.useDataStore", "true")).booleanValue(); } and then, everywhere where it is required, do this: if (USE_DATA_STORE) { // new code } else { // old code } As an added advantage, it's easy to find out if this feature is responsible for a problem, by disabling the system property. > * Releases are (almost) only cut from trunk > * Branches are used for development and not for releases. > Trunk should always be as stable as possible. Releases are built from tags > based on trunk. This further simplifies the release procedure as there is no > more branching and nore more bug fix back porting. That's a good idea. Regards, Thomas