III.13.1 Using CVS with OpenACS
All OpenACS code is available anonymously. To get code anonymously, use the parameter -d:pserver:email@example.com:/cvsroot immediately after cvs in a cvs command to check out or export code.
If you are an OpenACS developer, you should check out code so that you or any other developer can commit it. To do this, use the parameter -d:ext:cvs.openacs.org:/cvsroot immediately after cvs in checkout commands. This will create a local checkout directory that uses cvs.openacs.org but does not specify the user. By default, it will use your local account name as the user, so if you are logged in as "foobar" it will try to check out and commit as if you had specified :ext:firstname.lastname@example.org:/cvsroot. The advantage of not specifying a user in the checkout command is that other users can work in the directory using their own accounts.
OpenACS.org supports non-anonymous cvs access only over ssh, so you must have CVS_RSH=ssh in your environment. (Typically this is accomplished by putting export CVS_RSH=ssh into ~/.bash_profile.). If your local account name does not match your cvs.openacs.org account name, create a file ~/.ssh/config with an entry like:
With this setup, you will be asked for your password with each cvs command. To avoid this, set up ssh certificate authentication for your openacs account. (More information)
You may want to set some more default actions for CVS usage. To do so, create the file ~/.cvsrc with the contents:
-z6 speeds up cvs access over the network quite a bit by enabling compressed connection by default. -q suppresses some verbose output from commands. For example, it makes the output of cvs up much easier to read.
If you are actively developing a non-core package, you should work from the latest core release branch. Currently this is oacs-5-4. This ensures that you are working on top of a stable OpenACS core, but still allows you to commit feature changes to non-core packages. To check out all packages,
cvs -d :ext:cvs.openacs.org:/cvsroot co -r oacs-5-4 openacs-4
If you work in the directories created with this command, all of your cvs updates and commits will be confined to the oacs-5-4 branch. Your work will be merged back to HEAD for you with each release.
Because the entire openacs-4 directory is large, you may want to use only acs-core plus some specific modules. To do this, check out core first:
cvs -d:ext:cvs.openacs.org:/cvsroot -r oacs-5-4 checkout acs-core
Then add modules as needed:
cvs up -d packagename
If you are actively developing packages in the OpenACS Core, work from the HEAD branch. HEAD is used for active development of the next version of core OpenACS. It may be very buggy; it may not even install correctly. Do not use this branch for development of non-core features unless your work depends on some of the HEAD core work. To check out HEAD, omit the -r tag.
To check out HEAD for development, which requires an OpenACS developer account:
cvs -d:ext:cvs.openacs.org:/cvsroot checkout acs-core
To check out HEAD anonymously:
cvs -d:pserver:email@example.com:/cvsroot checkout acs-core
.LRN consists of a given version openacs core, plus a set of packages. These are collectively packages together to form a distrubution of .LRN. F .LRN 2.0.0 sits on top of OpenACS 5.0.0. .LRN also uses an OpenACS install.xml file during installation; this file is distributed within the dotlrn package and must be moved. To get a development checkout of .LRN in the subdirectory dotlrn:
cvs -d :pserver:firstname.lastname@example.org:/cvsroot checkout -r oacs-5-4 acs-core
mv openacs-4 dotlrn
cvs -d :pserver:email@example.com:/cvsroot checkout -r oacs-5-4 dotlrn-all
mv dotlrn/install.xml ..
Once you have a checkout you can use some commands to track what has changed since you checked out your copy. cvs -n update does not change any files, but reports which changes have been updated or locally modified, or are not present in CVS.
To update your files, use cvs update. This will merge changes from the repository with your local files. It has no effect on the cvs.openacs.org repository.