ノード: cvslock -- Lock Repositories For Atomicity, 次: , 前: cvs2cl -- Generate GNU-Style ChangeLogs, 上: Third-Party Tools



cvslock - Lock Repositories For Atomicity

Depends on: C compiler for installation; nothing for runtime

URL: ftp://riemann.iam.uni-bonn.de/pub/users/roessler/cvslock/

このプログラムは CVS リポジトリをロックします(読みか書きかのいずれか)。 CVS にもロックを遵守させるため、CVS と同じやりかたでロックを行います。 このツールは例えば、リポジトリ全体のコピーを取る必要がある時に、コミッ トや他の人のロックファイルを受け付けたくないような場合に役立ちます。

cvslock のディストリビューションパッケージは非常によくできているので、 通常の GNU のインストール手続きに従ってインストールできます。インス トールセッションのログを示します:

     floss$ zcat cvslock-0.1.tar.gz | tar xvf -
     cvslock-0.1/
     cvslock-0.1/Makefile.in
     cvslock-0.1/README
     cvslock-0.1/COPYING
     cvslock-0.1/Makefile.am
     cvslock-0.1/acconfig.h
     cvslock-0.1/aclocal.m4
     cvslock-0.1/config.h.in
     cvslock-0.1/configure
     cvslock-0.1/configure.in
     cvslock-0.1/install-sh
     cvslock-0.1/missing
     cvslock-0.1/mkinstalldirs
     cvslock-0.1/stamp-h.in
     cvslock-0.1/cvslock.c
     cvslock-0.1/cvslock.1
     cvslock-0.1/snprintf.c
     cvslock-0.1/cvslssh
     cvslock-0.1/VERSION
     floss$ cd cvslock-0.1
     floss$ ./configure
      ...
     floss$ make
     gcc -DHAVE_CONFIG_H -I. -I. -I.   -g -O2 -c cvslock.c
     gcc -g -O2  -o cvslock  cvslock.o
     floss$ make install
      ...
     floss$
     

(make install のところでは root になる必要があることに注意して下さい)

さてこれで cvslock は /usr/local/bin/cvslock としてインストールされ ました。起動する際には通常の CVS と同様、 -d か $CVSROOT 環境変数で リポジトリを指定できます。そのディレクトリ及びその下のサブディレクト リすべてがロックされます。この例ではサブディレクトリはありませんので、 ロックファイルは1つだけ作成されます:

     floss$ ls /usr/local/newrepos/myproj/b-subdir/
     random.c,v
     floss$ cvslock -d /usr/local/newrepos  myproj/b-subdir
     floss$ ls /usr/local/newrepos/myproj/b-subdir/
     #cvs.rfl.cvslock.floss.27378  random.c,v
     floss$ cvslock -u -p 27378 -d /usr/local/newrepos  myproj/b-subdir
     floss$ ls /usr/local/newrepos/myproj/b-subdir/
     random.c,v
     floss$
     

ロックのクリア時(-u は unlock という意味です)、-p 27378 を指定する必要があったことに注意して下さい。cvslock はロック ファイルの名前を作るときに Unix のプロセス ID を使用して、ロックがユ ニークであることを保証しているからです。たとえロックインスタンスが1 つしかなくても、アンロックの際にはどのインスタンスを削除するか指定し て下さい。-p フラグでどれが前のインスタンスかを指定し、あとでクリア できるようにします(-p フラグは -u つきでも -u なしでも指定できます)。

ちょっとリポジトリ内でファイルシステムを直接いじる作業をしたいなと思 う場合は、-s オプションを指定して cvslock に新しいシェルをさせること ができます。現在のシェル内の $SHELL 環境変数で、どのシェルを 起動するかが決まります:

     floss$ cvslock -s -d /usr/local/newrepos myproj
     

シェルを抜けるまでロックがかかったままになり、そのロックは抜けたとき に自動的に削除されます。 -c オプションで、リポジトリをロックしてコマン ドを実行することもできます。-s と同様に、コマンドを開始する前にロッ クがかかり、コマンドが終了したら削除されます。以下の例では、全てのロッ クファイル一覧を表示する間だけ、リポジトリがロックされます。

     floss$ cvslock -c 'find . -name "*cvslock*" ' -d /usr/local/newrepos myproj
     cvslock: '/usr/local/newrepos/myproj' locked successfully.
     cvslock: Starting 'find . -name "*cvslock*" -print'...
     ./a-subdir/subsubdir/#cvs.rfl.cvslock.floss.27452
     ./a-subdir/#cvs.rfl.cvslock.floss.27452
     ./b-subdir/#cvs.rfl.cvslock.floss.27452
     ./#cvs.rfl.cvslock.floss.27452
     floss$ find /usr/local/newrepos/myproj -name "*cvslock*" -print
     floss$
     

コマンド(-c オプションの引数)は、指定したリポジトリディレクトリを輪ー キングディレクトリとして実行されます。

デフォルトでは読みのロックを生成します。書きのロックを指定したい場合 には -W オプションを使って下さい。(-R で読みのロックを指定できますが、 デフォルトですからね。) 終わったら必ず全ロックを削除して、他のユーザ の CVS プロセスを必要もないのに待たせたりしないで下さい。

cvslock はリポジトリのあるマシン上で実行しなければならないことに注意 して下さい。リモートリポジトリは指定できません。(詳細については man cvslock を実行してください、これは make install でインストールされたマニュアルページです。)