[目次へ][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】キーワードの置換方法
| 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