ノード:cvslock -- Lock Repositories For Atomicity, 次:Other Packages, 前:cvs2cl -- Generate GNU-Style ChangeLogs, 上:Third-Party Tools
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
でインストールされたマニュアルページです。)