FP Tools CVS Cheat Sheet

At Glasgow, we use CVS (Concurrent Version System) to keep track of our sources for various software projects. CVS lets several people work on the same software at the same time, allowing changes to be checked in incrementally.

Information on using CVS can be obtained from Cyclic Software. If you're at Glasgow, the full documentation for CVS is online, in info format (use 'info cvs' or run emacs and type C-h i). A good source of tips is the CVS FAQ, in /local/doc/gnu/CVS.FAQ. Bradley C. Kuszmaul also provides a "to the point" introduction to CVS.

This note is supposed to be a set of guidelines for how to use our CVS repository, and will probably evolve in time. The main thing to remember is that most mistakes can be undone, but if there's anything you're not sure about feel free to bug the local CVS meister (namely Simon Marlow).

Contents

Remote Read-only CVS Access

Read-only access is available to anyone - there's no need to ask us first. We use the anoncvs mechanism pioneered by the OpenBSD folks. To get read-only access to our repository, just set your CVSROOT environment variable to

	anoncvs@solander.dcs.gla.ac.uk:/cvs

and you can then check out a source tree using normal CVS commands. For example:

	$ cvs checkout fpconfig
	$ cd fptools
	$ cvs checkout ghc

gets a brand spanking new set of GHC sources. The layout of our CVS repository is described below, under Using CVS for the first time.

With read-only CVS access you can do anything except commit changes to the repository. You can make changes to your local tree, and still use CVS's merge facility to keep your tree up to date, and you can generate patches using 'cvs diff' in order to send to us for inclusion.

If you like, you can use ssh instead of the standard rsh to connect to the CVS server. Just set your CVS_RSH variable to ssh.

Remote Read-Write CVS Access

We generally supply read-write access to folk doing serious development on some part of the source tree, when going through us would be a pain. If you're developing some feature, or think you have the time and inclination to fix bugs in our sources, feel free to ask for read-write access. There is a certain amount of responsibility that goes with commit privileges; we are more likely to grant you access if you've demonstrated your competence by sending us patches via mail in the past.

To use remote CVS, you need to supply me with a username and encrypted password. Once you've done that and the account has been set up, you need to do:

     cvs -d <username>@solander.dcs.gla.ac.uk:/local/fp/src/cvsroot login

CVS will ask for a password. You only need to enter the password once, it will be recorded in .cvspass in your home directory.

   setenv CVSROOT :pserver:<username>@solander.dcs.gla.ac.uk:/local/fp/src/cvsroot

The CVSROOT environment variable will be recorded in the checked-out tree, so you don't need to set this every time either. Ignore the instructions for setting CVSROOT below.

Using CVS for the First Time

Checking Out a Source Tree

Committing Your Changes

This is only if you have read-write access to the repository. For anoncvs users, CVS will issue a "read-only repository" error if you try to commit changes.

Updating Your Source Tree

It can be tempting to cvs update just part of a source tree to bring in some changes that someone else has made, or before committing your own changes. This is NOT RECOMMENDED! Quite often changes in one part of the tree are dependent on changes in another part of the tree (the mk/*.mk files are a good example where problems crop up quite often). Having an inconsistent tree is a major cause of headaches.

So, to avoid a lot of hassle, follow this recipe for updating your tree:

$ cd fptools
$ cvs update -Pd 2>&1 | tee log

Look at the log file, and fix any conflicts (denoted by a 'C' in the first column). If you're using multiple build trees, then for every build tree you have pointing at this source tree, you need to update the links in case any new files have appeared:

$ cd <build-tree>
$ lndir <source-tree>

Some files might have been removed, so you need to remove the links pointing to these non-existent files:

$ find . -xtype l -exec rm '{}' \;

And finally, re-configure to take into accound any changes in mk/config.mk.in.

$ ./configure

To be *really* safe, you should do

$ gmake boot && gmake all

from the top-level, to update the dependencies and build any changed files.

General Hints

Ok, that'll do for now. If there's anything else you'd like to see in this file, just let me know.

Simon Marlow