FP Tools CVS Cheat Sheet

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.

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 Jeff Lewis).


Remote Read-only CVS Access

Read-only access is available to anyone - there's no need to ask us first. To get read-only access to our repository:

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.

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 on cvs.haskell.org has been set up, you need to install ssh, which is relatively painless. Log in to cvs.haskell.org, and set up your .ssh/authorized_keys file to allow logins from your local machine without a password (the ssh documentation has details on how to do this). Then, just

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.

GHC Tag Policy

If you want to check out a particular version of GHC, you'll need to know how we tag versions in the repository. The policy (as of 4.04) is: So, to check out a fresh GHC 4.06 tree you would do:
     $ cvs co -r ghc-4-06 fpconfig
     $ cd fptools
     $ cvs co -r ghc-4-06 ghc hslibs

General Hints

Reporting Bugs in the CVS sources

If you are reporting a bug or infelicity in the CVS version of GHC, please send your message to

cvs-hslibs@haskell.org (for hslibs/ stuff)
cvs-nofib@haskell.org (for nofib/ stuff)

(not to glasgow-haskell-bugs). Two reasons:

Please don't stop sending bug reports though. They are really useful.

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

Jeff Lewis
Simon Marlow