テクニカルノート028  


トリガ
PERFORCE でのトリガの使用

このテクニカルノートでは、トリガの動作方法を簡単に説明し、よくみられる用法上の問題点を示します。トリガに関する詳細な説明は、『PERFORCE システム管理者ガイド』にあります。

PERFORCE トリガは「スーパーユーザ」定義の規則で、特定のクライアント操作が実行されるたびに、それに特化したスクリプトを起動します。トリガは以下の2つの種類に分けられます。

チェンジリスト・サブミット・トリガ
仕様トリガ


チェンジリスト・サブミット・トリガはさらに、サブミット・トリガ、コンテンツ・トリガ、コミット・トリガ に識別されます。チェンジリスト・サブミット・トリガは、主に以下のような場合に使用されます。

バグ番号が必須、などの条件でチェンジの説明にあるテキストを検証する場合
関連するファイルを一緒にサブミットする必要がある場合
チェンジリストのサブミット成功後にビルド処理を開始する場合
特定のブランチに対するすべてのサブミットにより、少なくとも1つのジョブが解決されるようにする場合


仕様トリガも、セーブ・トリガ、アウト・トリガ、イン・トリガ、デリート・トリガとして識別することができます。仕様トリガの使用に適した処理の例は以下のとおりです。

仕様を検証する場合
PERFORCE 仕様のカスタマイズ版を作成する場合
仕様が変更または削除されることを他のユーザに通知する場合



トリガのデバッグの基本手順

最初にトリガ・スクリプトがPERFORCE のコンテキスト外で正しく動作することを確認します。この手順は必須です。

トリガ・スクリプトが PERFORCE の外部で稼動しているが、PERFORCE トリガとして呼び出されると失敗する場合、次のことをチェックしてください。

"p4 triggers" フォームにおいて、

トリガ・スクリプトへのフルパス名が指定されていますか?
呼び出し元プログラム(例えば perl.exe)へのフルパス名が指定されますか?
トリガ・フォームには、同じ名前の2つのトリガがありますか?


トリガ・スクリプトにおいて、
  • 環境変数は正しいですか?


    トリガ・スクリプトでは通常、すべての PERFORCE コマンドに対する PERFORCE ユーザ、クライアント仕様、およびパスワードを指定する必要があります。




    Windows NT/2000 のサービスのための特別な注意点

    Windows サービスとして PERFORCE を起動する場合、デフォルトでは PERFORCEはネットワーク・ドライブへのアクセス権限を持っていない LocalSystemユーザとして実行されることに注意してください。作成したトリガがネットワーク・ドライブへのアクセス権限を必要とする場合、ネットワーク権限を持つユー ザとして PERFORCE サービスを起動してください。そうしなければ、そのようなトリガは失敗します。




    エラー出力を生成する

    トリガ・スクリプト・コマンドが失敗すると、そのコマンドの標準出力(エラー出力ではない)がトリガ失敗のエラーメッセージのテキストとして使用されます。

    ただし、失敗したコマンドのすべてがエラーメッセージを生成するわけではありません。トリガが失敗した場合にデフォルトのエラー出力を表示する場合、コマ ンド失敗時にエラーメッセージが発行されないか、標準出力(STDOUT)にメッセージが書き出されません。ユーザが情報を得られるようにするには、トリ ガ・スクリプト自身が STDOUT にエラーを書き出さなければなりません。エラー出力をキャプチャするには、偽のコマンドを実行して強制的に「失敗」の終了コードを得る必要がある可能性があります。

    以下に簡単なトリガの例を示します。このトリガは常に成功するため、このトリガからの出力は表示されません。
    triggerTest sumbit //depot/... "@echo Always succeeds."


    ここで、いくつかのコマンドをバッチファイルに入れて、失敗トリガがどのように出力を生成するか調べましょう。 以下のトリガを使用します。
    triggerTest2 submit //depot/... "d:\perforce\triggers\fail.bat"


    "fail.bat" の内容は以下のとおりです。
    @echo off
    boguscommand


    このトリガが起動すると、以下のような出力が表示されます。
    Change 1850 created with 1 open file(s).
    Submitting change 1850.
    Locking 1 files ...
    Submit validation failed -- fix problems then use 'p4 submit -c 1850'.
    Submit check 'triggerTest2' failed: エラーメッセージなし


    ユーザにエラーメッセージを表示するには、失敗したコマンドを実行する前に、STDOUT に書き込む必要があります。 例:
    @echo off
    echo このトリガは常に失敗します!
    boguscommand


    こうすると、変更した "fail.bat" スクリプトによりユーザにエラーメッセージが表示されます。
    Change 1851 created with 1 open file(s).
    Submitting change 1851.
    Locking 1 files ...
    Submit validation failed -- fix problems then use 'p4 submit -c 1851'.
    Submit check 'triggerTest2' failed: このトリガは常に失敗します!



    戻る