type_manager

Program for managing contents of element versions

APPLICABILITY

ClearCase (data structure)

SYNOPSIS

DESCRIPTION

A type manager is a suite of programs that manipulates files with a particular data format; different type managers process files with different formats. A directory type manager provides programs that compare and/or merge versions of directory elements. ClearCase provides several type managers.

Several ClearCase version-control commands for file elements are implemented in two phases:

  1. Updating of the VOB database. This phase is independent of the element's data format, and is handled directly by cleartool.
  2. Manipulation of the element's data. In this phase, the data format is extremely significant, and so is handled by a particular type manager. ClearCase invokes the type manager as a separate program, rather than as a subroutine. This provides flexibility and openness, allowing users to integrate their own data-manipulation routines with ClearCase.

For example, checking in a text_file element involves:

For a different type of element-for example, a bitmap file-the delta is computed differently, or not at all, and so requires a different type manager.

TYPE MANAGERS

These are the ClearCase type managers:


Type Manager

Function

whole_copy


Stores any data. Stores a whole copy of each version in a separate data container file.


z_whole_copy


Stores any data. Stores each version in a separate, compressed data container file using the gzip compression program.

Note that compressed files generally take more time to check in (because they must be compressed), and reconstruct when first accessed (first cleartext fetch).


text_file_delta


Stores text files only (including those with multibyte text characters). Stores all versions in a single structured data container file. Uses incremental file differences to reconstruct individual versions on the fly.


z_text_file_delta


Stores text files only. Stores all versions in a single structured data container file, in compressed format using both the gzip compression program and deltas.


binary_delta


Stores any data. Stores each branch's versions in a separate, structured compressed data container file using gzip. Uses incremental file differences to reconstruct individual versions on the fly. Version deltas are determined by comparing files on a per-byte basis.


_html


Stores HTML source. Stores information and reconstructs versions in the same way as the text_file_delta manager from which it is derived. Has its own compare, xcompare, merge and xmerge methods.


_ms_word


Stores Microsoft Word documents. Stores information and reconstructs versions in the same way as the z_whole_copy manager from which it is derived. On Windows, has its own xcompare and xmerge methods.


_rose


Stores Rational Rose artifacts. Stores information and reconstructs versions in the same way as the text_file_delta manager from which it is derived. On Windows, has its own compare, xcompare, merge, and xmerge methods for which it invokes a tool specialized for Rose files.


_xml


Stores XML source. Stores information and reconstructs versions in the same way as the text_file_delta manager from which it is derived. On Windows, has its own compare, xcompare, merge, and xmerge methods for which it invokes a tool specialized for XML files.


directory


Not involved in storing/retrieving directory versions, which reside in the VOB database, not in a source storage pool. This type manager compares and merges versions of the same directory element.

USING A TYPE MANAGER

To have a particular file element use a particular type manager, you must establish two connections:

type manager <---- element type <---- file element

  1. Make sure the VOB has an element type that is associated with the desired type manager. Use the lstype command to identify an existing element type. Alternatively, use the mkeltype -manager command to create a new element type that is associated with the desired type manager.
  2. Create the file element, specifying the element type with the -eltype option. If the file element already exists, use the chtype command to change its element type.

You can automate the assignment of the new element type to newly created elements using the ClearCase file-typing facility, driven by .magic files. See the cc.magic reference page for details.

TYPE MANAGER STRUCTURE

A type manager uses different methods to manipulate ClearCase data. Each method is carried out by a shell script, an executable, or a subroutine inside an executable. Methods are invoked at the appropriate time by a ClearCase version-control command.

A type manager can include these methods:

create_element

Invoked by mkelem to create an element's initial data container.

create_branch

Invoked by mkbranch to create a branch in an element's version tree.

create_version

Invoked by checkin to store a new version of an element.

annotate

Invoked by annotate to produce an annotated listing of a version's contents.

construct_version

Invoked by a view's view_server process when a file element is opened, from versions stored in delta or compressed format. This method constructs a readable, cleartext copy of a particular version.

After the cleartext version is constructed, its line terminators may be adjusted by the view_server, according to the view's text mode. See Text Files, Cleartext, and a View's Text Mode in the mkeltype reference page, and also mkview.

get_cont_info

Invoked by checkvob to determine the contents of a container. This method must be implemented to enable checkvob to fix container problems for the type manager.

delete_branches_versions

Invoked by rmver and rmbranch to delete versions of an element.

compare, xcompare

Invoked by diff to run a file-comparison program that is specific to the element's data format.

merge, xmerge

Invoked by merge to run a file-merge program that is specific to the element's data format.

A type manager need not implement every method. For example, a type manager for bitmap graphics images may omit the merge method, because the operation doesn't make sense for that file format. In this case, the command cleartool merge produces an error when invoked on an element that uses this type manager.

The Type Manager Map File

The map file, located in the ccase-home-dir\lib\mgrs directory, associates type manager methods with the programs that carry them out. A map file entry has three fields: type manager, method, and program. Below are some example entries from the map file:

Type Manager Method Implementing Program

text_file_delta

construct_version

..\..\bin\tfdmgr.exe

text_file_delta

compare

..\..\bin\cleardiff.exe

z_whole_copy

create_branch

..\..\bin\zmgr.exe

_rose

xmerge

HKEY_LOCAL_MACHINE\SOFTWARE\
Rational Software\Rose\AddIns\
Rose Model Integrator\Install Path

When a type manager is invoked by a ClearCase command, it scans through the map file, finds the matching type manager and method in the first and second fields, then runs the program specified in the third field. Note that the entry in the third field must be either a pathname relative to ccase-home-dir\lib\mgrs; for example, ..\..\bin\cleardiff.exe, a Windows Registry key under HKEY_LOCAL_MACHINE that points to an absolute pathname, or an absolute pathname.

Data Containers

Type managers process data containers, each of which stores the actual data for one or more versions of some element. (Although growth may cause a container to split, versions never span container boundaries.) All data containers are standard Windows files, and are stored in the VOB's source pools, which are standard Windows directories. Only type managers deal with data containers directly; users always manipulate data using the names of elements.

Performing the data manipulation for a version-control operation involves several programs. For example, when ClearCase creates a new version of an element:

  1. ClearCase generates the pathname (within a source pool) for a new data container.
  2. On the VOB host (where the VOB storage area resides), a vob_server process creates an empty file at that pathname.
  3. On the client host (where the user is working), the type manager fills the new data container with the data for the new version. (If the type manager implements deltas, it writes the data for one or more other versions to the new container, too.)
  4. The vob_server changes the access mode of the new data container, making it unwritable.
  5. The db_server updates the VOB database to reference the new container.
  6. Using the MGR_DELETE_KEEP_JUST_NEW exit status returned by the type manager, the vob_server deletes the old data container.

NOTE: Even with a type manager that implements deltas, a new data container is created each time a new version is created. In this case, the old container (which may have stored 27 versions) is replaced by the new container (which stores 28 versions). A type manager must never write to an old container or delete a old container (it usually does not have rights to do so).

Source Pool Data Container Names

A container leaf name includes a type manager ID to aid checkvob in salvaging nonreferenced containers. Here is the format of a source pool data container name (in s\sdft, for example): .\nn\nn\type-mgr-id-orig-oid-str-xx

type-mrg-id is a one-, two-, or three-character string. One-character values correspond to the predefined ClearCase type managers. Two-digit values correspond to type managers with names that begin with underscore (_), and three-digit values are computed by hashing user-defined type manager names.

NOTE: Names of user-defined type managers must not begin with underscore.

FILES

ccase-home-dir\lib\mgrs\map

SEE ALSO

mkelem, mkeltype, cc.magic, gzip



Feedback on the documentation in this site? We welcome any comments!
Copyright © 1999 by Rational Software Corporation. All rights reserved.