Mono Repository Migration to Subversion

Index

Status

IMPORTANT: A third migration has been done, the causes are documented in here. People will need to re-checkout their trees.

The Tree is Open

IMPORTANT: The SVN path has changed, now instead of `/repo/' or `/src/' we now use `/source/'.

NEED: People with bandwidth that would like to host Anonymous Subversion servers for distributing the sources. Contact miguel@novell.com for details.

Clients

SVN 1.0 and 1.1 clients are compatible with our SVN server.

SVN clients for various distributions are available http://subversion.tigris.org/project_packages.html

Primer on SVN

To checkout your new tree:


 $ svn co svn+ssh://USER@mono-cvs.ximian.com/source/trunk/MOD
	

Where `USER' is your username on CVS, and `MOD' is the module that you want to checkout.

To update your sources:

	
 $ svn up
	

To commit your changes:

	
 $ svn commit
	

If the commit has conflicts, after you fix the conflicts in the file, you must tell svn that the conflict has been resolved:

	
 $ svn resolved file.issue
	

To diff your local changes:


 $ svn diff
	

Note, by default svn gives a unified diff.

To diff your local changes, ignoring white space:


 $ svn diff --diff-cmd /usr/bin/diff -x "-w -u"
        

To check-out a specific branch:

	
 $ svn co svn+ssh://USER@mono-cvs.ximian.com/source/branches/BRANCH/MOD
	

Where `USER' is your repository username and `BRANCH is the branch name that you want to check out, and `MOD' is the module name that you want to check out.

To annotate a file:


 $ svn blame filename
	

There are other aliases for that action, `annotate' and `ann' also work.

To view the check-in logs for a file:


 $ svn log filename
	

List branches available:


 $ svn ls svn+ssh://USER@mono-cvs.ximian.com/source/branches/
 	

Moving pending patches from CVS to SVN

If you have pending patches on your tree, you will need to produce a diff:


  $ cd cvs/MODULE 
  $ cvs diff -u > /tmp/patch
	

Then on your new checkout of SVN, apply the patch:


  $ cd svn/MODULE 
  $ patch < /tmp/patch
	

And commit the changes:


  $ svn commit -m "Message"
	

Anonymous Repository Access

Peter has setup an anonymous SVN server, to download your modules, use the svn://mono.myrealbox.com/source prefix.

For example to download the mono and mcs modules:


  $ svn co svn://mono.myrealbox.com/source/trunk/mono
  $ svn co svn://mono.myrealbox.com/source/trunk/mcs
          

To download all the modules in the mono-1-0 branch:


  $ svn co svn://mono.myrealbox.com/source/branches/mono-1-0/
        

Learning Subversion

The Subversion Book.

Top Ten Tips for CVS users

Another Subversion article

In case of doubt, there is a Subversion crowd in channel #svn in irc.freenode.org

Migration Plan

Suggestions? miguel@novell.com

Causes for the Third Migration

The default settings for the cvs2svn script set a special flag that controls line endings on each textual file on the repository. This feature is intended to allow developers on multiple opereating systems to edit those files freely.

Unfortunatelly the Mono project had a mix of line-endings on its source code due to the nature of the project: LF and CRLF depending on the sources, and it would not even be consistent at the time. This was something that we failed to catch on early on in our use of CVS.

The problem is that the End-of-Line (EOL) mapping in Subversion effectively meant that one-line changes in one of the problematic files would basically commit the entire file to the repository with the new changes. This had two problems:

The subversion people have been great supporting us, and there is a script being developed that will help us fix all this in the future and is being tested as we speak.

Today we have reimported the tree a third time, this time without the special EOL attribute for Subversion, so Subversion will not change the files magically. But this means that we are not taking full advatange of Subversion. Hopefully in the future (when we test the script on various offline repositories) we will be able to take care of this problem once and for all (without requiring a full re-checkout again).

Upgrade messages

Saving current svnadmin-1.0.6-1.static as svnadmin-1.0.6-1.
Erase this program only after you make sure you won't need to dump/reload
any of your repositories to upgrade to a new version of the database.

Restore contents

~/CVS-pending-docs (/mcs/class/doc) These files are corrupt on CVS. Check them in again.