ノード: Using Keyword Expansion, 次: Going Out On A Limb (How To Work With Branches And Survive), 前: Annotations And Branches, 上: Advanced CVS
keyword expansion
について少し書
いたことを思い出せると思います。RCS キーワードはドル記号でくくった特
殊な単語で、CVS はテキストファイル中にそれらがないか探し、リビジョン
管理情報に展開します。例えばファイルにこういう文字列があった場合
$Author$
そのファイルがあるリビジョンへアップデートされる時に、CVS はこれをそ のリビジョンをコミットした人のユーザ名に展開します:
$Author: jrandom $
CVS は展開後の形も認識しますので、展開された後も適切に更新されつづけ ます。
Although keywords don't actually offer any information that's not available by other means, they give people a convenient way to see revision control facts embedded in the text of the file itself, rather than by invoking some arcane CVS operation.
良く使われるほかのキーワードを紹介します:
$Date$ ==> 最終コミット日時。展開後 ==> $Date: 1999/07/26 06:39:46 $ $Id$ ==> ファイル名、リビジョン、日時、著者。展開後 ==> $Id: hello.c,v 1.11 1999/07/26 06:39:46 jrandom Exp $ $Revision$ ==> あなたの考えた通りです、展開後 ==> $Revision: 1.11 $ $Source$ ==> 対応するリポジトリファイルのパス。展開後 ==> $Source: /usr/local/newrepos/tossproj/hello.c,v $ $Log$ ==> そのファイルへのログメッセージを蓄積。展開後 ==> $Log: hello.c,v $ Revision 1.2 1999/07/26 06:47:52 jrandom ...and this is the second log message. Revision 1.1 1999/07/26 06:39:46 jrandom This is the first log message...
$Log$ キーワードはこの中では唯一、展開後複数行にわたります。他のもの と違い、以前の展開結果が今回の展開結果で置き換えられるのではなく、最 新の展開結果に挿入されます。キーワードの直後に、空行1行とともに挿入 されます(従って、過去の展開結果は下へ押しやられていきます)。
さらに、行頭と $Log の間にある文字列は展開のプレフィクスになります (ログメッセージをプログラム内コメントにするために利用されます)。例え ばファイルにこう書くと
// $Log$
最初のコミットで次のように展開されるでしょう:
// $Log: hello.c,v $ // Revision 1.14 1999/07/26 07:03:20 jrandom // this is the first log message... //
2度目のコミットではこうなります:
// $Log: hello.c,v $ // Revision 1.15 1999/07/26 07:04:40 jrandom // ...and this is the second log message... // // Revision 1.14 1999/07/26 07:03:20 jrandom // this is the first log message... //
以降も同じように:
// $Log: hello.c,v $ // Revision 1.16 1999/07/26 07:05:34 jrandom // ...and this is the third! // // Revision 1.15 1999/07/26 07:04:40 jrandom // ...and this is the second log message... // // Revision 1.14 1999/07/26 07:03:20 jrandom // this is the first log message... //
いつもいつもログ履歴全部をファイルに保存したりしたくはないとお思いで しょう。その場合、長くなったらいつでも古いほうを削除して下さい。 cvs log を実行するよりも便利ですし、みんながログをコンスタントに読んでい なくてはいけないようなプロジェクトにおいても役に立つでしょう。
ファイル中に $Revision$ を持たせ、それをプログラムのバージョン番号と して使用するのは、良く使われるテクニックです。このやり方はプロジェク トが本質的に1つのファイルで構成されているか、または頻繁にリリースさ れていて、リリースごとの更新が保証されているファイルが少なくとも一つ ある場合にうまくいきます。プログラムのコード中に値として RCS キーワー ドを使うこともできます:
VERSION = "$Revision: 1.114 $";
CVS はキーワードを他の場合と同じようにただ展開します; プログラミング 言語での意味を考慮したりはしませんし、文字列がダブルクオートで保護さ れていると仮定したりもしません。
キーワードの完全な一覧(あまり知られていないようなのがあといくつかあ るんです)は CVS Reference に書いてあります。