Source code stability

Note: This page is aimed at Greenstone developers.

The source code stability system attempts to provide developers with a constant stable code base for development even as the main trunk passes between stable and unstable states. If you are doing development on a working copy of the trunk, but the trunk has bugs which prevent it compiling or running, then it can be very hard to test your changes. Rather than spend time inquiring into those bugs, the stability system gives you a way to temporarily roll your working copy back to the last stable state. Once you have finished testing your changes, you can then roll you working copy forward again and commit your changes. Except in the case where other developers have make significant changes to the trunk, your changes will start working once the trunk is stable again.

The stability system works by periodically checking out the trunk and testing it for stability, then creating a 'stable' tag if and only if the trunk passes these stability tests. For now the stability tests are as simple as checking that the release kits on all three main operating systems were able to successfully create a release from the trunk. In the future, these checks could be extended to include regression tests, installer tests, tests to the runtime system and anything else which might further 'prove' the stability of the trunk. Stable tags related to Greenstone2 are named 'stable' and stable tags related to Greenstone3 are named 'stable3'.

To make your working copy stable, change to the root directory of the working copy and run one of these commands:

(For Greenstone2): svn switch http://svn.greenstone.org/gsdl/stable (For Greenstone3): svn switch http://svn.greenstone.org/greenstone3/stable3

Or to checkout a fresh stable working copy, run one of these commands:

(For Greenstone2): svn checkout http://svn.greenstone.org/gsdl/stable gsdl (For Greenstone3): svn checkout http://svn.greenstone.org/greenstone3/stable3 greenstone3

Then test your changes and/or keep working on them. Once you are ready to commit your changes, switch back to the trunk: (For Greenstone2): svn switch http://svn.greenstone.org/gsdl/trunk (For Greenstone3): svn switch http://svn.greenstone.org/greenstone3/trunk

And commit as normal.

Note: The stable tags are read-only. (Only the nightly tasks that create the stable tags can write to them.) This is for good reason; allowing commits to the stable tag would be lost the next time the trunk was tagged as stable.

The projects 'gli', 'gs2build', 'indexers' and 'documentation' also have stable tags. You can execute a command like the following to switch to the stable tag for one of these projects: svn switch http://svn.greenstone.org/ project-name /stable[3]

And switch back with: svn switch http://svn.greenstone.org/ project-name /trunk

Note: Though the stable branches are in separate locations in the repository, they should be considered as one unit. To get a bona fide stable working copy, each project which made up the working copy would have to be switched to the stable tag of the project. Mixing of 'stable' and 'stable3' tags would also prevent a working copy from being a bona fide working copy.