Cvs allows you to automatically merge in the changes we make to Allegro aserve to a copy of the source you may have modified. This is much easier and less error prone than trying to see what we've changed by comparing source distributions and then merging in the changes yourself. A copy of the cvs document in pdf format is here. On our server we are using 1.10.7 of cvs, so you'll want to make sure your cvs client is compatible with that version.

To access our repository via cvs here are the parameters you'll need:

CVSROOT | :pserver:cvspublic@cvspublic.franz.com:/cvs-public
password | cvspublic

If you use the -d parameter as shown below you won't need to set the CVSROOT environment variable.

Here is a sample session where you check out aserve for the first time. First you have to save the password for the account on your machine, and you do that using the cvs login command:

    % cvs -d :pserver:cvspublic@cvspublic.franz.com:/cvs-public login
    (Logging in to cvspublic@cvspublic.franz.com)
    CVS password: cvspublic

Next you check out the source code:

    % cvs -d :pserver:cvspublic@cvspublic.franz.com:/cvs-public checkout aserve
    cvs server: Updating aserve
    U aserve/ChangeLog
    U aserve/authorize.cl
    U aserve/client.cl
    U aserve/decode.cl
    U aserve/license-lgpl.txt
    U aserve/load.cl
    U aserve/loadonly.cl
    U aserve/log.cl
    U aserve/macs.cl
    U aserve/main.cl
    U aserve/parse.cl
    U aserve/publish.cl
    U aserve/readme.txt
    U aserve/source-readme.txt
    cvs server: Updating aserve/doc
    U aserve/doc/aserve.html
    U aserve/doc/notes-neo.n
    U aserve/doc/rfc2396.txt
    U aserve/doc/tutorial.html
    cvs server: Updating aserve/examples
    U aserve/examples/examples.cl
    U aserve/examples/foo.txt
    U aserve/examples/fresh.jpg
    U aserve/examples/aservelogo.gif
    U aserve/examples/prfile9.jpg
    U aserve/examples/tutorial.cl
    cvs server: Updating aserve/htmlgen
    U aserve/htmlgen/htmlgen.cl
    U aserve/htmlgen/htmlgen.html
    U aserve/htmlgen/test.cl
    %

Now you can read aserve/source-readme.txt and learn how to build aserve.

To see how cvs can help you, suppose you edit aserve/examples/examples.cl and add a new page to be published. You can ask cvs to tell you what you've changed since you last retrieved the source from our repository:

    % cd aserve

    % cvs diff
    cvs server: Diffing .
    cvs server: Diffing doc
    cvs server: Diffing examples
    Index: examples/examples.cl
    ===================================================================
    RCS file: /cvs-public/aserve/examples/examples.cl,v
    retrieving revision 1.2
    diff -r1.2 examples.cl
    369a370,378
    >
    > (publish :path "/hiworld"
    > :     content-type "text/html"
    >      :function
    >      #'(lambda (req ent)
    >              (with-http-response (req ent)
    >                 (with-http-body (req ent)
    >                  "hi world"))))
    >
    cvs server: Diffing htmlgen
    %

You would now like to retrieve the latest version of the source from our repository and merge our changes into your changes. This is done with one command: executed from the aserve directory created in the cvs checkout command:

    % cvs update -d
    cvs server: Updating .
    P client.cl
    cvs server: Updating doc
    cvs server: Updating examples
    M examples/examples.cl
    cvs server: Updating htmlgen
    %

The response from the command is terse. In this case the P before client.cl says that there were changes to that file in the repository that have now been patched into your copy of the source. The M before examples/examples.cl says that you have local modifications to this file. If you see a file name preceded by U (as they were in the cvs update command earlier), it means that this a new file that was downloaded in full. What you must look for is the response C which said that the updating process found conflicts that it couldn't resolve because both we and you modified the same lines in the file. In this case you must edit the file and look for the lines surrounded by <<<<<<<<<<, ========= and >>>>>>>>>> and remove the markers and resolve the conflict

We've just mentioned a few of the features of cvs, you are advised to read the cvs manual to get the maximum benefit from it.