エラーチェッカープログラムを実行し、問題が発生した場合にコミットを中止するSVNのプリコミットフックがあります。問題が発生した場合、stderr はコミットを開始したユーザーにリダイレクトされます。しかし、エラーチェッカーが実行されて問題が見つからなかったことがユーザーに通知されるように、問題が見つからなかったとしても、エラーチェッカープログラムからユーザー出力を送信したいと思います。SVN pre-commit フックでそれを行う方法は?
3 に答える
Subversion フックはその STDOUT を消費します。スクリプトが実行されると、STDOUT はありません。pre-commit スクリプトで STDOUT を別のプロセスに送信することさえできません。
ただし、pre-commit フック内では、STDOUT がまだ存在し、リダイレクトすることができます。たとえば、私のフックは、数行の Unix コマンド ライン ユーティリティで構成されるシェル スクリプトで構成されています。各コマンド ライン ユーティリティには STDIN と STDOUT があり、一方から他方へパイプできます。ただし、そのフック スクリプトの実行が終了すると、STDOUT はなくなります。
もう 1 つのことは、フック パラダイムを介して STDOUT と通信する方法がないことです。Subversion は、いかなる種類の通信リンクも提供しません。STDERR へのリンクがありますが、フック自体が失敗した場合のみです。これは pre-commit フックであるため、ユーザーにレポートを提供するためだけに、意図的にこのフックを失敗させたいとは思いません。
できることは、他の通知方法を使用することです。何人かは電子メールを提案しました。ポストコミット スクリプトを実行してレポートを生成し、ユーザーの電子メール アドレスに基づいてそのレポートを電子メールで送信できます。レポートが機能しなかったためにトランザクションが失敗することを望まないため、これをコミット前のトリガーとしては行いません。
一部の人々は、コミットを行ったユーザーを電子メール アドレスでマッピングし、そのユーザーに電子メールを送信できると提案しました。ユーザーは単にメールを無視するので、私はこれをしません。彼らはすでに、さまざまなプロセスから何百通とは言わないまでも、何十通という電子メールを受け取っています。
私がお勧めするのは、Hudson のような製品を使用して継続的なビルドを行い、このレポートを Hudson によって生成し、Hudson が生成するビルド ページに投稿することです。このようにして、開発者は戻ってレポートを調べることができます。実際、Hudson には、エラー チェックを行い、あらゆる種類の優れたレポートやグラフを生成するさまざまなプラグインが既にあります (通常は、findbugs などのプロジェクトと連携します)。
より興味深いプラグインの 1 つは、ビルドの成功、バグや警告の修正などに対してポイントを与えるゲームです。リーダー ボードが表示されるので、開発者は自分のスコアを他の開発者と比較できます。私は一度も使用したことがありませんが、Hudson ユーザー グループの何人かは、開発者は自分のスコアで非常に競争力を持っていると言っています。
私の場合、フックの進行状況を表示する簡単なC#Windowsフォームアプリケーションを作成しました。
何らかの形でユーザー名を電子メール アドレスにマップする必要があります。次に、出力をファイルに収集して、コミッターにメールで送信できます。