Website transition to Subversion
Debian's website structure is currently still kept in CVS. CVS is getting pretty stale, and the inflexibility of CVS is impairing out ability to make anything but evolutionary changes to the website. Therefore, we are experimenting with a move to a different VCS: Subversion.
Subversion was chosen because its functionality and interface is not too different from CVS, while still giving users the possibility of a more advanced interface (e.g., through git-svnimport). See WebsiteVCSEvaluation for more information about the pros and cons of the different VCSs.
Current status
A test repository has been setup on alioth: http://alioth.debian.org/projects/webwml/. The repository can be viewed through the web at http://svn.debian.org/viewsvn/webwml/. Anonymous (read-only) access is provided via svn://svn.debian.org/webwml/, and registered users have write access via svn+ssh://user@alioth.debian.org/svn/webwml/. Please checkout only the trunk/webwml module, unless you know what you're doing.
Changes for users/translators
The user interface to Subversion is very similar to the CVS interface. To checkout a repository, use svn checkout instead of cvs checkout, to update an existing repository use svn update instead of cvs update, to commit a changed file use svn commit file/name. See also ?Subversion] in the Subversion book.
To checkout the repository, take the following steps:
First checkout the main repository: svn checkout svn://svn.debian.org/webwml/trunk/webwml --non-recursive This wil create a subdirectory webwml in you current directory. Alternatively, if you have an account on Alioth, you can use svn checkout svn+ssh://username@alioth.debian.org/svn/webwml/trunk/webwml --non-recursive
Change into that directory: cd webwml and checkout the main directories: svn update Perl, svn update english
Checkout any additional languages you'd like to work on: svn update dutch french farsi
For translators, the biggest change between CVS and Subversion probably is that in CVS, each file has its own versioning scheme, whereas in Subversion, a revision number refers to the state of the entire repository. In our old CVS repository, the version number of each file would only increase when that file itself was changed; e.g., the file english/index.wml was changed 78 times since it was first created, and thus has version number 1.79. In the new repository, the revision number will be something like r80711}}, indicating that 80711 changes have been committed in the past 10 years or so. Obviously, the file {{{english/index.wml has only been changed in a very few of those 80711 commits.
To find out the revision in which a certain file has last been changed, use svn info file/name. This will return something like this:
Path: english/index.wml Name: index.wml URL: svn+ssh://alioth.debian.org/svn/webwml/trunk/webwml/english/index.wml Repository Root: svn+ssh://alioth.debian.org/svn/webwml Repository UUID: a093df3b-0d2a-4daf-b7e4-2276095983ab Revision: 80724 Node Kind: file Schedule: normal Last Changed Author: kreutzm Last Changed Rev: 76462 Last Changed Date: 2007-08-03 22:54:07 +0200 (vr, 03 aug 2007) Text Last Updated: 2008-04-30 20:50:23 +0200 (wo, 30 apr 2008) Checksum: 615987710f08e5ccf5966a52df8b057b
The relevant line here is the one that says "Last Changed Rev: 76462", which gives the revision you should put in the translation header of any translations of the file english/index,wml. Note that the current version of the repository (gieven by the Revision: line) is 80724; apparently there have been more than 4000 changes to the repository since the file english/index.wml was last changed.
Technical implementation
Describe here what has changed about the working of the scripts.
Transition timeline
We need to allow some time between the announcement of the move and the actualy move to allow translators etc to commit any local changes they might have been working on locally. It should be possible to do the actual transition in a weekend: Conversion of the repository takes 12-24 hours, fixing all the revision in the translations headers takes another few hours.
Transition checklist
Make current CVS repository read-only (chmod g-w -R /cvs/webwml on gluck?)
Convert the cvs repository to Subversion using cvs2svn --cvs-revnums (other options needed?)
- Import the converted repository onto Alioth
- Checkout the entire repository
run makerevmap.pl to create a mapping between SVN revisions and CVS versions for each file, and run convert-revs.pl to fix the revision numbers in the translation headers of the WML files.
Remove the cvs2svn:cvs-rev svn-properties from all files
- Commit the updated scripts and changes to Makefiles to the new repository
Run make-revisionlog.pl once manually to generate the .revisions.log file, and setup a cronjob (where?) to run it dayly
Install the posthook_smartchange.pl script as a posthook in the Alioth repository.
- Check that everything works.