Holding the complete set of source file versions of a software project in a consistent state is one of the most difficult tasks in software engineering, especially when many people in distributed locations are working - if need be - even on the same source file ([Wink88][Roch75][Loug93][Lonc94][Hala94][Fasc89]). However, no separate tool was developed under VISTA to support code version management. The publicly available CVS (Concurrent Versions System) ([Grun92]) provides all required features, and support for driving CVS was added to VMAKE.
CVS manages a complete project source tree by holding a consistent current copy plus a revision history in a so-called repository . Programmers working on the project can check out individual files, parts of or the whole project tree, work on their private copy and commit individually changed files back to the repository. CVS checks for conflicts in file modifications (if two or more persons edited the same file), and even tries to resolve those conflicts by merging different versions of a file. CVS uses RCS (Revision Control System, [Tich85]) to process individual files, and imposes its own control structure on directories in the repository and the programmer's private copies.
The VISTA build and distribution mechanism is shown in Fig. 5.1. Note that the global design loop (this is called integration test in [Broo82]) is actively supported through automated test of the most recent versions on all available architectures, where possible errors during the build process are automatically mailed back to the individual engineer (determined through the RCS identifier contained in every VISTA source file) causing the error. This automated test partly includes run-time testing of the built components of the system through special test cases also maintained by CVS and executed via VMAKE. A certain (presumably stable) status of the software project can be ``frozen'' by tagging all the files with a revision tag (i.e. for release versions), and this process is automated by VMAKE. It is even possible for VMAKE to build incremental patches for incremental upgrading to newer project versions, and applying them automatically to older project versions.
Figure 5.1: The VISTA software distribution mechanism