[目次へ][5章へ][5.2へ][6章へ] 最終更新:$Date: 2002/08/16 16:48:23 $

終了。


■■5.3 RCSキーワードを活用しよう
■■■5.3.1 RCSキーワードって何?
■■■5.3.2 文字列を置換して欲しくないんだけど
■■■5.3.3 まとめ


■■5.3 RCSキーワードを活用しよう

■■■5.3.1 RCSキーワードって何?

CVSはある特定の文字列がファイルに含まれていると、checkoutやupdateなど作業コピーを取り出す際に、その文字列をルールに従って置き換えます。これは、元々はCVSの基になったRCSが提供していた機能ですので、その特定の文字列のことをRCSキーワードと呼んでいます。

RCSキーワードは、【表5.3.1】のように11個あります。

【表5.3.1】
RCSキーワード キーワードの意味
$Name$ Stickyタグの名前
$Author$ コミットした人
$Date$ コミットした日付
$Revision$ リビジョン
$RCSfile$ ,vのついたファイル(RCSファイル)名
$Source$ ソースファイル名(絶対パス)
$Log$ ログメッセージ
$State$ 状態
$Locker$ ロックをかけている人がいればその人
$Id$ 上の組合せ($RCSfile$ $Revision$ $Date$ $Author$ [$Locker$])
$Header$ 上の組合せ

ちょっと、ファイルを作って試してみましょう。図4.51のようなファイルを用意します。名前は、rcskeytest.txtです。

【図5.3.1】rcskeytest.txtの中身
▼
$Name$はStickyタグの名前。
$Author$はコミットした人。
$Date$はコミットした日付。
$Revision$はリビジョン。
$RCSfile$は,vのついたファイル(RCSファイル)名。
$Source$はソースファイル名(絶対パス)
$Log$はログメッセージ。
$State$は状態。
$Locker$はロックをかけている人がいればその人。
$Id$は上の組合せ。
$Header$は上の組合せ。
▲

これを登録してみます。いつものようにaddコマンドとcommitコマンドを実行して登録します【図5.3.2】。

【図5.3.2】rcskeytest.txtを登録する
▼
% cvs add -m "RCS Keywords Test File" rcskeytest.txt
cvs add: scheduling file `rcskeytest.txt' for addition
cvs add: use 'cvs commit' to add this file permanently
% cvs commit -m "RCS Keywords Test" rcskeytest.txt
cvs commit -m "RCS Keywords Test" rcskeytest.txt
RCS file: /home/cvsroot/cvstest/rcskeytest.txt,v
done
Checking in rcskeytest.txt;
/home/cvsroot/cvstest/rcskeytest.txt,v  <--  rcskeytest.txt
initial revision: 1.1
done
▲

ファイルはどんな風になったでしょうか。【図5.3.3】のようになっているはずです。

【図5.3.3】登録後の中身
▼
$Name:  $はStickyタグの名前。
$Author: mika $はコミットした人。
$Date: 2002/09/05 07:42:58 $はコミットした日付。
$Revision: 1.1 $はリビジョン。
$RCSfile: rcskeytest.txt,v $は,vのついたファイル(RCSファイル)名。
$Source: /home/cvsroot/cvstest/rcskeytest.txt,v $はソースファイル名(絶対パス)
$Log: rcskeytest.txt,v $
Revision 1.1  2002/09/05 07:42:58  mika
RCS Keywords Test

Revision 1.1  2002/09/05 07:40:20  mika
RCS Keywords Test File
はログメッセージ。
$State: Exp $は状態。
$Locker:  $はロックをかけている人がいればその人。
$Id: rcskeytest.txt,v 1.1 2002/09/05 07:42:58 mika Exp $は上の組合せ。
$Header: /home/cvsroot/cvstest/rcskeytest.txt,v 1.1 2002/09/05 07:42:58 mika Exp $は上の組合せ。
▲

このうち、よく使われるのは$Id$です。ソースコードファイルの先頭にコメントとして埋め込まれたり、バージョン文字列として埋め込まれたりします。自分の目的に合わせて利用してみてください。

■■■5.3.2 文字列を置換して欲しくないんだけど

ファイルに埋め込まれたRCSキーワードを置換したくない場合があります。例えば、バイナリファイルや、本書の原稿のようなファイルがこれに該当します。RCSキーワードを置換しないためには、addコマンドでファイルを追加するときにRCSキーワードの置換方法についてのフラグを-kオプションで設定します。うっかり、addするときに指定し忘れた場合には、後でadminコマンドを使って変更することもできます。なお、バイナリファイルについては3.7項で説明しました、ここで紹介する方法と同様の処理をおこなっています。

指定できる置換方法とその意味を【表5.3.2】に示します。おおまかにいうと、バイナリモード以外は、キーワードに置き換えるkと値に置き換えるvとその組み合わせkvです。kvlはキーワードと値だけでなくロックもかけるのですが、あまり使いません。oは一つ前に戻すということのようです。詳細については付属マニュアルの「キーワード置換(Keyword substitution)」の中の「置換モード(Substitution modes)」の項を見てください。

【表5.3.2】キーワードの置換方法 kvl
b binaryバイナリファイル
k keywordキーワードのみ
o old前の状態に
v value値のみ
kv keyword+valueキーワードと値(標準)
keyword+value+lockキーワードと値とロック

では、RCSキーワードを展開したくなければ、addコマンドに-kkをつければよいのでしょうか?

先ほど登録したファイルと同じものを、rcskeytest2.txtという名前で作成して、それを-kkで登録してみましょう【図5.3.4】。

【図5.3.4】rcskeytest2.txtを登録する
▼
% cvs add -kk -m "RCS Keyword Test 2" rcskeytest2.txt
cvs add: scheduling file `rcskeytest2.txt' for addition
cvs add: use 'cvs commit' to add this file permanently
% cvs commit -m "RCS Keyword Test 2" rcskeytest2.txt
RCS file: /home/cvsroot/cvstest/rcskeytest2.txt,v
done
Checking in rcskeytest2.txt;
/home/cvsroot/cvstest/rcskeytest2.txt,v  <--  rcskeytest2.txt
initial revision: 1.1
done
▲

ここで、rcskeytest2.txtを覗いてみると、なんでか$Log$だけは置換されてしまいます【図5.3.5】。残念ですが、$Log$も置換しないようにするためには、b(binary)を指定するしかないようです。

【図5.3.5】なぜ、$Log$だけ置換されるのだろう…
▼
$Name$はStickyタグの名前。
$Author$はコミットした人。
$Date$はコミットした日付。
$Revision$はリビジョン。
$RCSfile$は,vのついたファイル(RCSファイル)名。
$Source$はソースファイル名(絶対パス)
$Log$
Revision 1.1  2002/09/05 07:50:23  mika
RCS Keyword Test 2
はログメッセージ。
$State$は状態。
$Locker$はロックをかけている人がいればその人。
$Id$は上の組合せ。
$Header$は上の組合せ。
▲

置換モードは、addとadminの他にcheckout、diff、export、rdiff、updateコマンドでも指定することができます。addとadminがリポジトリの,vファイル(RCSファイル)の中に置換モードを設定するのと違って、これらはコマンド実行時の置換モードや作業コピーでの置換モードを設定します。たとえば、checkoutやupdateでファイル毎に置換モード設定をすると、CVS/Entriesの行の最後から2番目のフィールドにモードが設定されるようになります。

rcskeytest.txtファイルは何も指定せずに登録してますが、これをupdateコマンドで-kbでバイナリモードとして設定してみたときの、CVS/Entriesでの当該ファイルについての情報の変化を【図5.3.6】に示します。

【図5.3.6】CVS/Entriesの変化
▼
% grep fish2.jpg CVS/Entries
/rcskeytest.txt/1.1/Thu Sep  5 07:52:32 2002//
% cvs update -kb rcskeytest.txt
U rcskeytest.txt
% grep rcskeytest.txt CVS/Entries
/rcskeytest.txt/1.1/Thu Sep  5 07:52:32 2002/-kb/
▲

adminコマンドでの置換モードの変更は、3.7節で説明していますので、そちらを見てください。

---

※以下削除。

■■■5.3.3 まとめ
●あるファイル(targetfile)内で置換キーワードを使用するには

	targetfileに置換キーワードを埋め込む


●あるファイル(targetfile)にある置換モード(mode)を指定して登録するには

	作業コピー内に入る
	↓
	cvs add -kmode targetfile


●あるファイル(targetfile)について作業コピー内だけ置換モードをmodeに変更するには

	作業コピー内に入る
	↓
	cvs update -kmode targetfile