ノード: The verifymsg And rcsinfo Files, 次: The taginfo File, 前: The commitinfo And loginfo And rcsinfo Files, 上: The CVSROOT/ Administrative Directory
ログメッセージがある一定の標準に従っているかどうか自動的に検証して、
従っていなければコミットを中止するようなプログラムが欲しいこともある
と思います。これは、verifymsg
を使えば実現できます。
補助に rcsinfo
も使うかもしれません。
verifymsg ファイルは例によって正規表現とプログラムを結び付ける ものです。プログラムは標準入力からログメッセージを受け取って、そのロ グメッセージがある基準に沿っているかどうかチェックして、ゼロまたはノン ゼロの終了コードで終了します。ノンゼロで終了した場合はそのコミットは 失敗します。
一方、rcsinfo の左側はいつもの正規表現ですが、右側はプログラムではな くてテンプレートファイルを指定します。テンプレートファイルというのは このようなものです
Condition: Fix: Comments:
こんな感じの、有効なログメッセージの形式を満たすために記入する必要の あるフィールドの集合です。開発者みんなが -m オプションを使ってコミッ トする場合にはあまり有用ではありませんが、多くはそうではないでしょう。 -m で指定するかわりに
floss$ cvs commit
を実行して、CVS が自動的にテキストエディタ(EDITOR 環境変数で指定して あるやつです)を起動するのを待って、そこにログメッセージを記入し、セー ブして終了します。そのあと、CVS はコミット処理を続けます。
このシナリオに沿う場合、rcsinfo テンプレートはユーザがタイプする前に
エディタ中に挿入されますので、記入すべきフィールドが表示されます。
ユーザがコミットした時点で verifymsg
中で指定された適切なプロ
グラムが起動されます。ログメッセージがフォーマットに沿っているかチェッ
クし、結果が終了コードに反映されます(ゼロの場合成功)。
検証プログラムに便利なように、verifymsg
のプログラムの最後の
引数として、テンプレートへのパスが rcsinfo ファイルから追加されます。
なので、お望みならテンプレートをもとに検証処理ができます。
リモートマシンへ作業コピーをチェックアウトした場合には、対応する rcsinfo テンプレートファイルもクライアントに送信されます(作業コピー の CVS/ サブディレクトリに保存されます)。しかしこれは、チェックアウ トより後にサーバ上の rcsinfo ファイルが変更された場合、クライアント 側からはその変更が再度チェックアウトしない限りわからないということに なるので注意して下さい(update しただけではダメなんです)。
また、verifymsg ファイルでは ALL キーワードがサポートされていないこ とに注意して下さい(DEFAULT はサポートされているのですが)。デフォルト の検証スクリプトを、サブディレクトリ向けのスクリプトでオーバライドし やすくなっているのです。