ノード: What Watches Look Like In The Repository, 前: Reminding People To Use Watches, 上: Watches (CVS As Telephone)
ブラックボックスと要らぬ神秘を打ち消すため、リポジトリ中で監視機構が どう実装されているかちょっと覗いてみることにしましょう。でも pretty ではないので、ほんとにちょっと覗くだけですよ。
監視するよう設定すると
floss$ pwd /home/jrandom/myproj floss$ cvs watch add hello.c floss$ cvs watchers hello.c jrandom edit unedit commit floss$
CVS は適切なリポジトリのサブディレクトリ中のある特殊なファイル
CVS/fileattr
にそれを記録します:
floss$ cd /usr/local/newrepos floss$ ls CVSROOT/ myproj/ floss$ cd myproj floss$ ls CVS/ a-subdir/ foo.gif,v README.txt,v b-subdir/ hello.c,v floss$ cd CVS floss$ ls fileattr floss$ cat fileattr Fhello.c _watchers=jrandom>edit+unedit+commit floss$
リポジトリに中の CVS サブディレクトリに fileattr が保存されるからと
いって、リポジトリが作業コピーになったわけではありません。単に、
CVS
という名前が既に作業コピー中で図書管理用に予約されているの
で、リポジトリ中にその名前のサブディレクトリを作るようなプロジェクト
は存在しないというのを確信できるから、という理由によります。
fileattr
の形式をきちんと説明したりはしません。コマンドごとに
そのファイルが変わるのを見るだけで理解できると思います。
floss$ cvs watch add hello.c floss$ cat /usr/local/newrepos/myproj/CVS/fileattr Fhello.c _watchers=jrandom>edit+unedit+commit floss$ cvs watch add README.txt floss$ cat /usr/local/newrepos/myproj/CVS/fileattr Fhello.c _watchers=jrandom>edit+unedit+commit FREADME.txt _watchers=jrandom>edit+unedit+commit floss$ cvs watch on hello.c floss$ cat /usr/local/newrepos/myproj/CVS/fileattr Fhello.c _watchers=jrandom>edit+unedit+commit;_watched= FREADME.txt _watchers=jrandom>edit+unedit+commit floss$ cvs watch remove hello.c floss$ cat /usr/local/newrepos/myproj/CVS/fileattr Fhello.c _watched= FREADME.txt _watchers=jrandom>edit+unedit+commit floss$ cvs watch off hello.c floss$ cat /usr/local/newrepos/myproj/CVS/fileattr FREADME.txt _watchers=jrandom>edit+unedit+commit floss$
fileattr 中のレコードを編集してみたりしましょう。qsmith が自分自身を 編集者として登録したときに起こることを見てみます:
paste$ cvs edit hello.c floss$ cat /usr/local/newrepos/myproj/CVS/fileattr Fhello.c _watched=;_editors=qsmith>Tue Jul 20 04:53:23 1999 GMT+floss\ +/home/qsmith/myproj;_watchers=qsmith>tedit+tunedit+tcommit FREADME.txt _watchers=jrandom>edit+unedit+commit
そのディレクトリのファイル全部に監視者も編集者もいなくなると、CVS は fileattr ファイルも CVS サブディレクトリも削除してしまうことに注 意して下さい:
paste$ cvs unedit floss$ cvs watch off floss$ cvs watch remove floss$ cat /usr/local/newrepos/myproj/CVS/fileattr cat: /usr/local/newrepos/myproj/CVS/fileattr: No such file or directory floss$
こうやってちょっと見てみるとおわかりの通り、fileattr のフォーマット の解釈の詳細は CVS に任せておいたほうがよいです。
そのフォーマットについて理解するのは、舞台裏でなにが起こっているのか 知って満足するというのを置いておくとすると、CVS の監視機構の拡張を書 くとか、そのへんをデバッグするとかが主な理由だと思います。普通はリポ ジトリの中に CVS/ サブディレクトリができたからといってびっくりしない 程度で十分です。CVS/ サブディレクトリは CVS にとって、監視者リストの ようなメタ情報を安全に保存しておける唯一の場所なのです。