ノード: Using Watches In Development, 次: , 前: Enabling Watches In The Repository, 上: Watches (CVS As Telephone)



Using Watches In Development

開発者はまず、作業コピーをチェックアウトして、次にプロジェクト中の1ファ イルの監視者リストに自分を加えます:

     floss$ whoami
     jrandom
     floss$ cvs -q co myproj
     U myproj/README.txt
     U myproj/foo.gif
     U myproj/hello.c
     U myproj/a-subdir/whatever.c
     U myproj/a-subdir/subsubdir/fish.c
     U myproj/b-subdir/random.c
     floss$ cd myproj
     floss$ cvs watch add hello.c
     floss$
     

最後のコマンド cvs watch add hello.c で、誰かが hello.c で作業しはじめた ら jrandom に通知するよう CVS に対し指示します(つまり、 jrandom を hello.c の監視リストに加えます)。あるファイルが編集され次第 CVS が通知を 送るするためには、編集しようとするユーザがそのファイルに対してまず cvs edit を実行する必要があります。CVS にとって、編集が始まったことを知る方 法は他にありません。チェックアウトが済んだら通常 CVS は次のアップデート かコミットまで起動されることはありませんから、そのときにはもうそのファイ ルは編集されているかもしれません:

     paste$ whoami
     qsmith
     paste$ cvs -q co myproj
     U myproj/README.txt
     U myproj/foo.gif
     U myproj/hello.c
     U myproj/a-subdir/whatever.c
     U myproj/a-subdir/subsubdir/fish.c
     U myproj/b-subdir/random.c
     paste$ cd myproj
     paste$ cvs edit hello.c
     paste$ emacs hello.c
     ...
     

qsmith が cvs edit hello.c を実行したとき、CVS は hello.c の監視リストを 見て jrandom がその中にいることを知り、jrandom に対して qsmith がそのファ イルを編集しはじめたことをメールを送って知らせます。メールは qsmith から 来たようなかたちになります:

     From: qsmith
     Subject: CVS notification
     To: jrandom
     Date: Sat, 17 Jul 1999 22:14:43 -0500
     
     myproj hello.c
     --
     Triggered edit watch on /usr/local/newrepos/myproj
     By qsmith
     
     加えて、qsmith (またはどの人でも) が hello.c の新しいリビジョンをコミッ
     トするたびに、jrandom はメールを受けとります:
     
     myproj hello.c
     --
     Triggered commit watch on /usr/local/newrepos/myproj
     By qsmith
     

これらのメールを受けとったら、jrandom は hello.c をアップデートして qsmith が何をしたか見てみたいでしょうし、qsmith にそのファイルをいじった 理由をきくためにメールするでしょう。qsmith は cvs edit を実行するのを忘 れないように強制はされなかったことに注意してください。おそらく、自分が何 をしようとするかを jrandom に知ってもらいたかったから実行したのです(どち らにしろ、cvs edit するのを忘れていたとしても、コミットすれば通知が起こ ります)。cvs edit を使うのは、あるファイルをいじりはじめる前にそのファイ ルを監視している人たちにそれを知らせるのが目的です。監視している人たちが、 コンフリクトが起こるかもしれないと思った場合には連絡できますから、時間を 無駄にせずに済むでしょう。

あるファイルに対し cvs edit を実行した人は全てそのファイルの監視リストに 加えて欲しいと思っている(少なくとも一時的に、誰か他の人がそのファイルを 編集しはじめた場合とかには)、と CVS は仮定します。qsmith が cvs edit を 実行した場合、彼は hello.c の監視者になります。彼と jrandom は第三者が cvs edit を実行した場合(あるいはコミットした場合)、通知を受けとります。

しかし、CVS はそのファイルを編集中の人は編集している間だけ監視者リストに 居たいだろうと仮定します。そのようなユーザは編集が済んだら監視者リストか らはずされます。そのファイルをずっと監視したい場合は cvs watch add を実 行する必要があります。また、デフォルトでコミット時には編集が終わったと仮 定します(とりあえず次回までは)。

あるファイルに対し cvs edit を走らせただけで監視者リストに入っ た人は、一時監視者(temporary watcher)と呼ばれ、変更をコミットし次 第監視者リストからはずされます。そのファイルを再度編集したい場合は、 cvs edit を再実行する必要があります。

変更作業が終わるまで何回コミットする必要があるかということは CVS にはわ かりませんので、最初のコミットで編集が終わると仮定する以外に良い方法はあ りません。この仮定は1回限り(one-off)の変更の場合、つまりファイルの 1個所だけ直してコミットするなら、うまくいきます。ちょっと長いあいだ編集 して何度かコミットするような場合は、自分を恒久的に監視リストに加えたほう がよいでしょう:

     paste$ cvs watch add hello.c
     paste$ cvs edit hello.c
     paste$ emacs hello.c
     ...
     paste$ cvs commit -m "print hello in Sanskrit"
     

watch add したので、qsmith はコミット後も hello.c を監視したままになりま す。(ところで、qsmith は自分が編集したことについては通知されません、他の 人にだけ通知が行きます。CVS はかしこいので、誰かがやったことをその人自身 宛に通知したりしないのです)