UCM version v5_1

UCM Introduction

Author: Peter Kasper

Contents:
Concepts: The basic components of code management.
Documentation Conventions: Conventions and definitions.
See the Table of Contents for more information.

As the HEP community moves rapidly away from VAX's in favor of various UNIX platforms, it has become desirable to find a UNIX based code management system to replace existing systems which depend on CMS. This document describes a set of tools from which replacement systems can be built.

The package is available from the Fermilab Computing Division through their product distribution system, UPD. The product name is ucm. It assumes the following RCS commands are available on the system :- co, ci, rlog, and rcs. It is currently installed on fnalu and can be accessed by typing "setup ucm".

UCM version v5_1

Concepts

A simple code management system can be loosely divided into the following components:-

Source Management (UVM)

The source consists of any files from which the program executables, parameter files, and documentation files will be built. The source files will change as the software package is developed. Source management involves the creation of a source repository and an access interface which tracks changes to the source and provides information about those changes. On VAX/VMS systems this task was performed by CMS. The component of UCM which replaces CMS is called UVM which is a layer over RCS.

UVM organizes source files into "elements" within UVM "libraries". Each element contains one or more "revisions" representing the changes made to the element. Each revision is assigned a revision number which can be "tagged" with a symbolic revision name. A single revision can contain several tags but a single tag can only be applied to one revision per element. Revision tags are equivalent to "classes" in CMS and are generally used to identify different release versions of the software package. The elements within a library can be organized into UVM "groups". This is like placing files into subdirectories but is more flexible in that a single element can be placed in more than one group.

Dependency and Flavor Management (KPP)

Problems can occur if, for instance, the same code is intended to run on different machine platforms or operating systems. This will often require slightly different versions of the code. Rather than maintaining two separate versions of the source it is more convenient to able to flag the platform dependent parts of the code and run it through a precompiler which will use the flags to produce a compiler-ready output appropriate to a specified platform. The C PreProcessor is designed to do this for C source code, however, not all compilers have preprocessors and one can also imagine situations where the same sort of functionality may be useful in other source types (e.g. documentation or parameter files).

The KPP part of UCM is a generic text preprocessor which provides the more basic functions of CPP (such as conditional text and file inclusion) but because it is language insensitive, it can be safely used in a much broader context.

Update Management (UVMBLD)

Update management in UNIX is elegantly solved using one the various "make" utilities. However, maintaining the "Makefiles" used to drive the updates can be a problem for large software projects. UVMBLD is a component of UCM designed to simplify this process. It has a built-in knowledge of UVM and KPP protocols which enable it create Makefiles containing all the appropriate include-file dependencies and revision specifications.

Distribution Systems (UVMHTML)

Software distribution is not addressed by UCM as there are a number of appropriate systems available in the UNIX world. However, the UVMHTML component of UCM can be loosely categorized under this heading. In that it provides a way of monitoring the contents of UVM libraries with a WWW browser. The web-pages created by UVMHTML enable a web user to not only view the contents of a UVM library but also to access much the library developement information provided by UVM.

UCM version v5_1

Documentation Conventions

The following conventions and definitions will be assumed in the command specifications throughout this document:-
bold text
User supplied variables (case sensitive).
[ ... ]
Optional parameters
Va*lue
Case insensitive argument which can be abbreviated to the set of values to the left of the asterisk.
UVM library
A UVM library is a UNIX directory which contains a sub-directory /UVM. The UVM sub-directory contains, at minimum, a transaction log for the library called UVM/HISTORY.
UVM element
A UVM element is an RCS version file located in the UVM library's top level directory. A UVM element is specified by a library name and a file name. For example, the element library/file would consist of a file library/file,v. Note that the characters ",v" are appended to the RCS file names but not to the working versions extracted from the library.
UVM group
A group of UVM elements which can be referenced by the group name. The list of elements comprising a group is maintained in the file UVM/group.GRP.
Revision number
Element revisions are numbered according to the RCS conventions.