MIT Information Systems

Macintosh Development

[Home] [About Us] [People] [Information Systems]
[Kerberos for Macintosh] [Applications] [Miscellaneous Documentation]

Understanding MacCVS

MacCVS commands and features

by Miro Jurisic

MacCVS: a wrapper around CVS

MacCVS is a port of UNIX CVS client. In its heart lies a command-line driven engine, subject to all restrictions that a command-line interface brings.

Executing a CVS command from MacCVS menus creates an approrpiate command-line (the exact way this is done depends on your preferences) and executes it. You also have full access to the command line; if there is a command you want to execute that doesn't have a menu equivalent, you can always type the command on the command line and it will be directly passed to the underlying CVS engine.

UNIX CVS assumes that all CVS operations are to be performed in the current directory. The CVS engine in MacCVS makes the same assumption; because of this, each CVS command will prompt you to select the folder in which the command should be executed.

Some commands may ask for additional information, such as a log message, or a module name for import.

Special features of MacCVS

MacCVS provides some features not present in standard UNIX CVS clients. Most of those features are Macintosh-specific, and very convinient in Macintosh development. They deserve special attention because some of them have significant impact on the way MacCVS operates.

MacCVS preferences

CVS root

The setting of CVS root is passed directly to the CVS engine as the parameter to the global -d option. The exact impact this has on behavior of MacCVS follows the same rules UNIX CVS follows when using CVSROOT environment variable, or global -d option.

Specifically, commands that require your CVSROOT to be set correctly are import and checkout. Other commands will obtain their information from your working files. Because of this, you do not have to change the setting of your CVS root when you switch between working on files from different repositories, but you do need to change it when you want to use checkout or import.

To determine the setting for your CVS root, have a look at the list of our repositories.

Checkout read-only

This option, if set, will cause MacCVS to lock working files when it creates them (either with chekout or update). Otherwise, the files will not be locked. This option corresponds to the global CVS option -w (if it is off) or -r (if it is on).

The recommended setting for this option is on, to ensure that you don't modify your files haphazardly.

Prune (remove) empty directories

If this option is turned on, MacCVS will remove empty folders encountered during an update, and it won't create them during a checkout. Otherwise, empty folders will be created and kept. This option corresponds to the global CVS option -p.

This option should be turned on, because there are some empty folders in our repositories that need to be created among your working files. However, since this can create some unnecessary clutter (because empty folders that are not needed will never be deleted), I hope to deal with this soon.

Enable TCP/IP compression

Turning this option on enables gzip compression of data send to the CVS server. This does not affect how data is stored on your disk, nor how it is stored in the repository; it only affects network traffic. The corresponding command-line option is -z9.

You should turn this option on if you are on a slow connection.


You should set this option to the authentication method you want to use.

The setting should be Kerberos ("kserver") if you are using the MIT CVS server.

Adding files control

This option enables warnings MacCVS issues when you attempt to add a text file as a binary file or vice versa.

This option should be on, since it can catch errors that can remain unnoticed for a while otherwise.

Text files translation

This option allows you to specify character set translation applied to text files on their way to the server and from it.

The setting for this option should be "no ISO-8859 translation". If you set this option incorrectly, you may get strange and hard-to-find problems, such as all your high-bit characters being changed around.

Text files: use Internet Config.

If enabled, this option will cause MacCVS to use Internet Config file mappings when creating text files. The recommended setting for this option is on; see the section about using Internet Config with MacCVS for details.

File types and creators

When files are added to a repository, they are marked as text or binary files. When creating working files, MacCVS honors their state, and attempts to create the files with an appropriate file type and creator.

When storing a file into the repository, MacCVS will store the file in one of three ways:

Specially treated bianry files are GIF files (type 'GIFf'), JPEG files (type 'JPEG'), CodeWarrior IDE 2.0 and later projects (type 'MMcp') and MS Word files (type 'WDBN'). All other binary files are either binhexed (if they have a resource fork), or treated as plain binary files.

Remember that regardless of the way MacCVS treats your files, it is still your responsibility to make sure they are added to the repository as binary if appropriate. If you do not do this, you will wind up with text files whose contents are contents of your binary files. Most applications will not open those files correctly.

Files not marked as binary will be created in one of two ways:

Files marked as binary can be also be created in two ways:

Clearly, in order for MacCVS to work correctly, you need to configure your InternetConfig file mappings properly. A utility called Glacier has been written to assist you with this; please refer to Glacier documentation for details.

MacCVS commands

Once you understand the function of MacCVS preferences and the handling of file types and creators, you can easily understand how each MacCVS command works.

Output of MacCVS commands is displayed as text in a console output window. Most of MacCVS commands directly correspond to CVS command lines; a few have special meanings.

CVS commands

CVS Commands are spread across three menus: Cvs Main, Cvs Files, and Cvs Folders menu. All commands in Cvs Files menu apply to one or more files. The commands in Cvs Folders menu apply to a single folder. Cvs Main menu contains the most commonly used CVS commands (some of which apply to folders, but are not in Cvs Folders menu).

Each CVS command executes a command line in the CVS engine, possibly with some additional options (as specified by the preferences).

Update a folder...

The update command recursively updates a folder. It invokes the CVS update command:

cvs update <folder>

Commit a folder...

The commit command recursively commits all files in a folder, with a specified log message, by invoking the CVS commit command:

cvs commit -m "<message>" <folder>

Checkout module...

This command checks out the specified module into the specified folder. It executes the CVS checkout command:

cvs checkout <module>

Import module...

The import command imports a folder into the specified repository location, with a log message. It calls the CVS import command:

cvs import -m "<message>" <repository location> TATA TOTO

The default vendor and release tags are TATA and TOTO; if you want to specify your own tags you need to run import from the command line.

Update files...

This command asks for the list of files to be updated. It executes the cvs update command:

cvs update <list of files>

Commit files...

This command asks for the list of files to be committed and a log message. It executes the cvs commit command:

cvs commit -m "<message" <list of files>

Diff files...

The diff command asks for the list of files to be diffed and prints the diffs in the console output window. The CVS command executed is diff:

cvs diff <list of files>

Log files...

The log command performs the CVS log command on the selected list of files. The logs are displayed in the console window:

cvs log <list of files>

Add files...

This command schedules the selected files for addition to the repository as text files. (To add binary files, you need to use the "Add binary files..." command.) The CVS command executed is add:

cvs add <list of files>

Add binary files...

This command schedules the selected files for addition to the repository as binary files. (To add text files, you need to use the "Add files..." command.) The CVS command executed is add:

cvs add -kb <list of files>

Remove files...

The remove command schedules the selected files for removal from the repository. The CVS command executed is remove. This command will move the selected files to the trash before calling CVS remove:

cvs remove <list of files>

Status files...

The status commands prints the status of selected files to the console output window. The CVS command executed is status:

cvs status <list of files>

Add a folder...

This command adds a folder to the repository. It executes the CVS add command:

cvs add <folder>

Diff a folder...

This command diffs (recursively) all files in a folder and outputs the diffs to the console output window. The CVS command it executes is diff:

cvs diff <folder>

Special commands

Command line...

This command brings up the command line dialog, in which you can type a full CVS command line and select a folder for its executing. The command line is passed to the CVS engine unmodified (your settings for "Prune empty directories", "Checkout read-only", "Enable TCP/IP compression", and "More quiet" will not affect the command line).

Pre-import stats...

The pre-import stats command scans the selected folder and reports all files that might cause problems if you were to import that folder into the repository. Possible problems are:

After all warnings, pre-import stats reports all extensions used for text and binary files in the selected folder.

Questions or comments? Send mail to
Last updated on $Date: 2003/11/18 21:58:29 $
Last modified by $Author: smcguire $