包装機能を用いれば、ファイルを CVS に取り込む/取り出す際に、 適切な方法で変換するように設定することができます。 ただし CVS のクライアント/サーバでは ほぼ全ての包装機能が利用できません。
管理用ファイル `cvswrappers' には、 ファイル名に合致する正規表現と、 そのファイルに対して実行されるスクリプトが記述されます。 個々のファイルやディレクトリに対して、二つのスクリプトが記述できます。 各々リポジトリに格納する前 (`-t' フラグが付けられます) と、 リポジトリから取り出すとき (`-f' フラグが付けられます) に 実行するものです。
また `cvswrappers' には、ファイルを更新するときの
マージ方針について記述するオプション `-m' があります。
MERGE
は CVS が通常用いる方法を意味し、
ファイルをマージしようとします (これはバイナリ・ファイルには不適切です)。
COPY
は、cvs update
を実行したとき、
単にファイルを上書きすることを意味し、
必要な変更を取り入れるために CVS 以外の機構が要求されます。
包装オプション `-m' は更新時のマージ方針にのみ影響し、
ファイルの格納方法には影響しません。
バイナリ・ファイルの詳細は 「17 バイナリ・ファイルの扱い」 参照。
管理用ファイル `cvswrappers' の基本的な書式:
正規表現 [オプション 値][オプション 値]... 利用できるオプションを以下に挙げます。 -f 格納時のフィルタ 値: フィルタのパス -t 取得時のフィルタ 値: フィルタのパス -m マージ方針 値: MERGE か COPY -k キーワード展開 値: 置換モード 値は以下のように単引用符で囲みます。
*.nib -f 'unwrap %s' -t 'wrap %s %s' -m 'COPY' *.c -t 'indent %s %s'
`cvswrappers' の上側の例では、
`.nib' で終わる全てのファイル/ディレクトリを、
リポジトリに格納する前に `wrap' プログラムで
整形することが記述されています。
リポジトリから取り出す際には `unwrap' プログラムが用いられます。
またファイルを更新する際には (マージせずに)
COPY
する方針を採ることが記述されています。
下側の例では、`.c' で終わるファイル全てを、 リポジトリに格納する前に `indent' で整形することが記述されています。 前の例とは異なり、リポジトリから取り出す際には整形されません。
`-t' に記述されるフィルタには二つの引数が与えられます。 最初は整形されるファイル/ディレクトリで、 次には整形された結果が出力されるファイルのパス名です。
`-f' に記述されるフィルタには、 整形されるファイル名が引数として与えられます。 整形された結果は、作業ディレクトリにファイルとして置かれます。
次の例では、`.exe' で終わるファイルをバイナリとして扱いながら、 ディレクトリを取り入れます:
cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag