From ProgClub
Jump to: navigation, search

Subversion is a version control system used by ProgClub as part of its Software Configuration Management to store files related to its projects.


ProgClub's subversion repository is called 'pcrepo', and it's available here:

Anyone can access the public read-only version of pcrepo. In order to access the private read-write version of the repository you need an account, which means you need to be a registered member. Becoming a member who has commit access to pcrepo entails accepting the ProgClub terms and conditions, specifically the Copyright policy which includes the Contributor License Agreement (CLA) wherein members agree to license their contributions under the licensing terms of the project.

You can browse the pcrepo repository on the web.

Project directory layout

ProgClub's projects are configured in pcrepo with sub-directories of 'trunk', 'branches' and 'tags'. This is a widely used convention, and perhaps you are already familiar with it.


~/trunk is the mainline repository, and can often be unstable as it is used to ferry files under development between development workstations and development servers. For this reason, subscribing to trunk is generally a bad idea, unless you are a ProgClub member actively working on the project. If you're looking for something that's going to be kept up-to-date, but that is also going to be stable, generally for the purposes of an svn:externals property in your own repository, then you're looking for latest, as detailed below.


~/branches are a location for members to create private copies of the repository (typically branching off trunk) for the purposes of establishing their own workspace. After the work in progress is satisfactorily completed in a branch, it will typically be manually merged back into the trunk. At the moment ProgClub doesn't have any branches, we're collaborating via trunk.


~/tags are a location for 'tagging' specific versions of a project. At ProgClub 'tags' contains two sub-directories, 'latest' and 'release'.


~/tags/latest is the directory you want to follow with your svn:externals. It's a pointer to the latest stable release of the project. It gets updated by our release management script, which is detailed below.


~/tags/release is a directory containing sub-directories in the form {year}/{month}/{day}/{serial}, where {serial} is a number between "01" and "99", the other variables being self-explanatory. Basically there can be up to 99 releases per day, and the dates should use UTC time. The point of a release name is to be unique for that release, and to be sensibly sortable. If you're interested in a specific release, you can look in the release directory to find it. Unlike 'latest', tags in 'release' are static, and they are not changed after they're made, at all, ever.

Managing a release

There is a release script in /home/jj5/bin/release which will manage the release of a ProgClub project. There's an article about it on the blog. Essentially to use this script you just run it passing in the name of the project you are releasing, so that might be something like 'pcwiki', or 'pcma', etc; and a comment about what this release does, such as "Added support for so-and-so, updated to include such-and-such". The script will create the 'release' tag for that release, and then update 'latest' with the latest release. For example, to release pcwiki, you would use something like the following command:

$ /home/jj5/bin/release pcwiki "Added support for W3C validation links and extended section edit links"

Creating new projects

To create a new project in our Subversion repository SSH in to (or and use the pcrepo-create script from the jj5-bin project:

$ pcrepo-create {project name}