Next: Intro administrative files, Previous: Repository storage, Up: Repository
しばしば表面に現れてくるかもしれない cvs の内部についての話をして
いる間に、cvs が作業ディレクトリの CVS ディレクトリに何を
入れるかも話した方が良いでしょう。リポジトリと同様に、cvs がこの
情報を扱い、普通は cvs のコマンドを通してだけそれを使用します。で
も、ときにはそれを覗くのも良いでしょうし、グラフィカル・ユーザ・インター
フェース の jCVS
や emacs のための VC
パッケージなどの他
のプログラムがそれを見る必要があるかもしれません。そのようなプログラム
は、上で書いたプログラムやコマンド行 cvs クライアントの将来のバー
ジョンを含む、そのファイルを使う他のプログラムと協調して動作しようと望
むなら、この節の推奨規格に従う必要があります。
CVS ディレクトリには複数のファイルがあります。このディレクトリ を読むプログラムは、将来の拡張の余地を残すために、ディレクトリには存在 するけれどここで説明されていないファイルは静かに無視するのが望ましいで す。
ファイルは使用しているシステムのテキストファイルの習慣に従って保存され ます。これはテキストファイルの保管の習慣が違うシステム間では作業ディレ クトリは可搬性が無いということです。これは意図的になされていて、おそら く CVS で管理されているファイル自体がそのようなシステム間では可搬性が ないであろう、という理由に基づいています。
cvs -d :local:/usr/local/cvsroot checkout yoyodyne/tc
Root は以下のようになり
:local:/usr/local/cvsroot
Repository は
/usr/local/cvsroot/yoyodyne/tc
か
yoyodyne/tc
のどちらかになります。
特定の作業ディレクトリがリポジトリのディレクトリに対応しなければ、 Repository は CVSROOT/Emptydir になっているはずです。
最初の文字が ‘/’ であれば、様式は:
/name/revision/timestamp[+conflict]/options/tagdate
で、‘[’ と ‘]’ は登録の一部ではありませんが、その代わりに ‘+’ と衝突の印は省略任意であることを示しています。name はディ レクトリ中のファイルの名前です。revision は作業中のファイルの元 のリビジョンで、‘0’ の場合は追加されたファイル、‘-’ の後にリ ビジョンは削除されたファイルです。timestamp は cvs がファイ ルを作成したときのタイムスタンプです。タイムスタンプがファイルの実際の 修正時刻と違えば、ファイルは修正されたということです。それは ISO C astime() 関数で使われる様式で保存されます (例えば、‘Sun Apr 7 01:29:26 1996’)。ファイルが常に修正されていると見なされるように、例え ば、‘Result of merge’ のようにその様式とは違う文字列を書くかもし れません。これは特別な場合ではありません。ファイルが修正されたかどうか を調べるために、プログラムはファイルのタイムスタンプを単純に timestamp と文字列比較をするべきです。衝突があれば、 conflict は、ファイルが衝突の印とともに書き込まれた後でファイル の修正時刻に設定することができます (see Conflicts example)。 もし conflict がその後も実際の修正時刻と同じであるなら、ユーザは明か に衝突を解消していません。options は貼り付けられたオプションを保 持しています (例えば、バイナリ・ファイルのための ‘-kbd’)。 tagdate は ‘T’ の後にタグ名が続いているか、日付 (date) の ‘D’ で、貼り付けられたタグか日付がつづいているかのどちらかを保持 しています。timestamp が単独のタイムスタンプではなく、スペースで 分離されたタイムスタンプの対であるなら、cvs 1.5 より前のバージョ ンの cvs を扱っているということに注意してください (ここでは説明さ れていません)。
CVS/Entries のタイムスタンプの標準時 (ローカルもしくは共通時) はオペレー ティングシステムがファイル自身のタイムスタンプとして保存するものと同じ である必要があります。例えば、Unix ではファイルのタイムスタンプは共通 時刻 (UT) ですので、CVS/Entries のタイムスタンプもそうなっているべきで す。vms ではファイルのタイムスタンプはローカル時刻なので、 vms 上の cvs はローカル時刻を使うべきです。この規則は、標準 時が変わったためだけでファイルが修正されたようにならないためです (例え ば、サマータイムになったり、それが終わったときなどです)。
Entries の行の最初の文字が ‘D’ であると、それはサブディレ クトリを現しています。行が ‘D’ だけのときは、 Entries ファ イルを書いたプログラムはサブディレクトリを記録したということを現します (ですから、そのような行があって、他に ‘D’ で始まる行がなければ、 サブディレクトリがないことがわかります)。そうでなければ、行は次のよう になっています:
D/name/filler1/filler2/filler3/filler4
ここで name はサブディレクトリの名前であり、将来の拡張のために、
全ての filler 部分は暗黙の内に無視されるべきです。Entries
を修正するプログラムはこれらの部分を保存するのが望まれています。
ファイル Entries 中の行はどんな順番でも構いません。
読み込みではなく、書き込みをしているプログラムは、もし望むならば Entries.Log ファイルを安全に無視することもできます。
update
コマンドを ‘-d’ オプションとともに使っ
てください。そうすれば、追加のファイルを取得して、
Entries.Static を消去します。
edit
や
unedit
のため) を保存します。書式はまだここでは説明されていませ
ん。
edit
コマンドはファイルの元のコピーを
Base ディレクトリに保存します。これで、サーバと通信できないとき
でさえ unedit
コマンドが実行できるようになります。
Bname/rev/expansion
で、expansion は将来の拡張のために、無視されるべきものです。