Since we have multiple people doing programming on avida, we are using
SourceForge to keep the project
organized. The developmental version of avida is maintained there using
a program called the "Concurrent Versions System" or CVS. This document will
tell you how to setup your account so that you will be able to use the CVS.
I'll also give you some instruction on how the CVS works, but you can skip
that if you want, and the next document will tell you what you need to type
if all you want to do is pull avida out of the CVS. Click
here if you want to go
directly to the Avida project page on SourceForge (this is not needed to
download the source).
The CVS software now comes with virtually all flavors of Unix and Linux. If
you are using a system that does not have it, you may need to look into
downloading it first. The rest of this document assumes that you do have
CVS available to you.
The first thing you need to do is determine what kind of "shell" you are
using. The shell determines how your command line works, and how you
configure "environment variables" that let programs know where things are.
In this case, you are going to need to set an environment variable to let
CVS know where the software repository is, and what protocol to use to
access it. To begin with, type "echo $SHELL" on the command line.
If the response is /bin/tcsh, you should:
setenv CVSROOT anonymous@cvs.avida.sourceforge.net:/cvsroot/avida
This will set the needed environment variables. To be able to make changes
to the Avida sourcecode directly, you need to get an account on SourceForge,
and then substitute your account name for "anonymous" above. You then need
to be added as a developer on the project, so make sure to talk with one of
the project admin's first.
If your shell is /bin/bash, you should:
CVSROOT="anonymous@cvs.avida.sourceforge.net:/cvsroot/avida"
Where you replace username with your own account name from myxo. This will
set the needed environment variables.
I'm not as familiar with other shells, so if you are using another one,
you're on your own.
Test to make sure this worked. Type "echo $CVSROOT" on the
command line, and make sure the result is the one you entered above.
Do the same for "echo $CVS_RSH".
Once you have your environment variables straight, the CVS is very easy to
use. The way you send a command to the CVS is by typing
"cvs command" where you replace command by the command
you wish to issue. To get a brand new project called "ecoli_racing" out of
the CVS, you would type "cvs get ecoli_racing". It would pull all
of the files from the CVS, and place them in your current directory.
When a project is downloaded from the CVS, it will also create a new
sub-directory inside of each project-directory, called CVS/. This lets
future CVS commands know the status of all your files and what project they
are part of, so you should never need to tell it again.
Here are some of other commands that you can execute inside of a project
that you have retrieved from the CVS:
Configuring the CVS
setenv CVS_RSH ssh
CVS_RSH=ssh
export CVSROOT
export CVS_RSH
How to use a CVS
cvs update | This command will incorporate all changes anyone else has made in the project since last time you downloaded it. If you have made any changes to the project yourself, it will merge those changes (discussed more below). |
cvs status | This command will tell you the status of each file in the CVS. It will let you know if you have made changes to it ("locally modified"), if someone else has made changes ("needs update"), or both ("needs merge"). |
cvs commit | You would use this command to commit all of the changes you have made to the sourcecode so that everyone else can use them. Do not do this lightly!!! Remember, that any bugs that are introduced into the code this way will now affect everyone. Fortunately, the CVS has a logging system that will allow us to back out of any problematic changes, but as long as everyone is careful, that shouldn't be necessary. |
cvs diff | This command will show you any differences between the file that you have and the current version of the file in the CVS. |
cvs help | Prints a list of all available CVS commands, with a brief description of each. |
If you are just using the CVS in order to have the most up-to-date version of avida, than you should never have any problems with it. An occasional "cvs update" when you need a newly implemented feature should do the trick. However, if you are going to edit the code (even if you never plan to commit your changes) there are some other things you need to worry about.
In particular, what happens if both you and someone else edit the source code at the same time? Well, in fact the CVS is very good at handling this. If they are two different files, then there is no problem at all. If they are even the same file, but different sections of it, this isn't a problem either -- the CVS will typically merge the changes smoothly and correctly. The real problem is when two people edit the same part of the same file.
When this happens and you try to update, the CVS will say "Warning: conflicts have occured". As the individual files scoll by, it will let you know which ones need to be manually merged. After the update, when you edit the file, you will see that there will be a ">>>>>>>>>>" on one line in the file, followed by your edits, then a "===========" and the other persons edits, and finally a "<<<<<<<<<<<" to indicate the end of the other persons edits. It is now your job to merge your edits with theirs. In the case of avida, I'd be happy to help with this if it ever ends up being a problem. Most of the time this is caused by two people trying to fix the same bug, and you can just choose one edit or the other and either will work just fine.
For more information on the CVS, see this
tutorial