私は、PolicyBase
(MSDN How To: Create Custom Check-in Policies in Visual Studio Team Foundationのように)拡張するクラスを書くことによって、TFSのカスタムチェックインポリシーを作成しました。オーバーライドされたEvaluate()
メソッドは、私のロジックを持っています。カスタムチェックインポリシーがいつ評価されるのかを制御するにはどうすればよいですか?
Evaluate()
は、ユーザーがTFSの[チェックイン]ボタンをクリックしたときに呼び出されます。これは、私が望むように素晴らしいものです。
- Visual Studioが起動され、これが既にアクティブなタブである場合
- ユーザーが初めて保留中の変更]タブに移動します(または:
しかし、また、ときに呼び出される
Evaluate()
のように思えますVSが起動されたとき)AND - ユーザーには[保留中の変更]タブの項目があります。
評価が呼び出されるシナリオを確認するにはどうすればよいですか?ユーザーが明示的にTFS内のチェックインボタンをクリックしたときに呼び出されるのは評価のみです。
私が使用している実際の評価方法は非常に複雑であるが、私はまだ同じ問題展示何かにそれを単純化してきました:チェックの星がある場合は、上記のコードでは
public override PolicyFailure[] Evaluate()
{
List<PolicyFailure> policyFailures = new List<PolicyFailure>();
if (_isPolicyEnabled)
{
if (PendingCheckin.PendingChanges.Comment.Contains("*"))
{
string msg = "Star in comment";
MessageBox.Show(msg);
policyFailures.Add(new PolicyFailure(msg, this));
}
}
return policyFailures.ToArray();
}
をあなたが再オープンすると、[ペンディングの変更]タブにナビゲートするとすぐにMessageBoxがスローされます。
私の状況でチェックインポリシーが使用されているのは、別のシステムのアイテムへの参照のユーザーのコメントをチェックすることです。それらが存在しない場合、フィルタリングされ選択されたアイテムのリストをユーザに示す対話型ダイアログを投げる。これらは、チェックインのコメントに挿入されます。 Evaluate()
には、どのシナリオで呼び出されるのかを知る方法はありますか?私は、チェックインによってトリガーされたもの以外のすべての呼び出しの下でダイアログをスローするのを避けることができました。
あなたにいくつかのコードを教えてもらえますか? afaik Evaluate()は、あなたが言及したすべての時間に呼び出されるべきではありません: "チェックインフレームワークは、ユーザーが[Policies]ボタンをクリックするか、チェックインまたはシェルフ操作を試みるときにこのメソッドを実行します。 - http://msdn.microsoft.com/en-us/magazine/cc163320.aspx – Feroc
@Feroc:その記事は評価メカニズムについて少し曖昧です。チェックインまたはシェルフの前に評価が常に呼び出され、チェックインポリシーのチャネルが表示されますが、他の時間に呼び出されて内部状態を最新の状態に保つこともできます。 –
@エドワードトムソン:うーん...私は以前にこのような行動を覚えていないことがあります。それとも私の例では問題ではなかったので、気づかなかっただけかもしれません。 – Feroc