[ ESO ]

ALMA Software Engineering

ALMA SW Engineering

System Snapshot




CMM to CVS Transition Support

We support transitioning from CMM to CVS provided that the following conditions are met:
  • The CVS repository is installed on a centralized CVS server.
  • A pkgin compliant integration (BUILD) module exists, listing all the modules in the project. External modules which are not listed in the integration module will not be converted.
  • No module whose last revision starts with 0 will be converted.
  • Project responsible will specify which releases have to be clearly identified with CVS tags by supplying a list of Integration Module versions and the corresponding logical names (tags).
The results will be a collection of modules located under the specified directories whose history is the same as of CMM but whose baselines can only be identified by means of CVS tags.

Support can be given for proper handling of binary files (which usually create problems across OS boundaries) and applying project specific QA procedures.

CVS User's Guide (PDF) Fogel's book.

Tricks, Bugs, Gotchas of CVS

Compared to CMM, CVS offers a considerable amount of freedom, and freedom never comes without complexity.

To the newcomer, the amount of options which each CVS command accepts is confusing. One way out of this situation is quickly identifying some basic commands and tricks which make your life easier. This collection is by no means exhaustive, but is a good start.

For brief info on CVS branches, click here.

For an introduction on Emacs CVS mode click here.


  • To request a CVS login (not ALMA), send an e-mail to < alma-sw-semgr@eso.org > containing your encrypted desired password.
    To obtain that, type:
    perl -e 'print crypt( "yourpassword", "b6"), "\n";'
    Note: if your password contains a $ (dollar sign), it will have to be entered with a backslash.


  • The diff command between HEAD and a BRANCH only works reliably if seen from the HEAD perspective
  • CVS seems not to cope well with 0.* delta numbers.
  • The only way to add directories recursively in CVS is using the import command, but that feature does not work when used in :pserver: mode.


  • Timestamps of files extracted from CVS:
    • cvs checkout
      gets files with the date of commit
    • cvs update
      get files with the date of NOW
    This should be considered when extracting source code from the repository into an already built system, because the Makefile will react according to the timestamp.
  • There seem to be compatibility issues between CVS revision 1.10 and 1.11.1
  • The checkout command (alias co or get) can only be carried out from the top of the path relative to $CVSROOT.
  • cvs behaviour is different if you use cvs export -rTAG module or cvs export -r TAG module
  • Use cvs checkout -c to get a list of the modules in the repository, provided that someone is maintaining it
  • One command of frequent usage is: cvs -n -q upd which produces a list of files with a one letter prefix in the form:
    M= modified, U=updated, R=removed, A=added, C=conflicts

    This is the central command which you would want to execute prior to archival/tagging just to verify that the relationship between the archive and your current working space is the one you expect.
  • CVS has two levels of verbosity: cvs -q (somehow quiet) and -Q (really quiet), followed by the specific command
  • To get a list of options for a specific CVS command, you can use : cvs --help command
  • To start practicing with CVS it may be useful to supply the global options -n and -t, which respectively force CVS not to carry out any modification (but only print reports) and to trace program execution (useful when using some CVS commands for the first time).
  • To schedule a file for deletion and remove the file from the filesystem use cvs remove -f file
  • Most CVS commands take as an argument either a file or a directory, in the latter case they recurse down the filesystem. To avoid this behaviour type for instance: cvs update -l (does not update the subdirectories...)
  • cvs history -e | grep file to get the history logs for the file for all types of operations carried out on the file (commit, checkout, removal, addition, etc.) by the currently logged in user.
  • how to undo a cvs remove ?
    Need to login into the server and move things from the Attic back to the repository.
  • Binary Files: recovery from mistaken archival as Text files

    1. From unix: cvs admin -kb filename
    2. Copy over the working, old, undamaged file
    3. From Windows with WinCVS
      Commit checking option "archive also if not modified" This seems to result in the CVS command:
    4. cvs commit -f -m "......"
Useful links:

 [ESO IT Project Web Site]  [IT Project]  [ESO]  [Index]  [Search]  [Help]  [News]