0

TFS 2013 で、ユーザーがコード レビューなしでコードをチェックインするように制限するカスタム チェックイン ポリシーを作成できることはわかっています。

私たちの会社では、特定のファイル (データベースの更新) が TFS にチェックされるものを開発しなければならないという開発者向けの要件があり、その後、コード レビューのために上級開発者のセットに電子メール通知が送信されます。また、電子メール通知では、最後にコード レビューが実行されたのはいつ、誰によって行われたかを示す必要があります。

この問題を解決する方法についてのアイデア。過去に、チェックイン前にファイルの有効性をチェックするポリシーを作成しました。そのために PolicyBase と Evaluate メソッドを使用しました。チェックインが成功したら、どのクラス/メソッドをトラップしてコードを配置できるか混乱しています。

ファイルの有効性について記述したコード以外にコードはありません。チェックイン後のポリシーに関する役立つ投稿が見つかりませんでした。または、これはサーバー自体で構成できますか?

4

1 に答える 1

0

Checkin ポリシーの代わりに、CheckInEvent をリッスンするリスナーを作成できます。イベントがトリガーされたら、通知を送信します。これらのサーバー側プラグインはISubscriber インターフェースを実装しています。このブログ記事を参照して、それらを作成およびデバッグする方法を参照してください。

このブログのコードは、チェックイン イベントに応答するコードのサンプル実装を示しています。参照できます。

namespace Sample.SourceControl.Server.PlugIns
{
    public class CodeCheckInEventHandler : ISubscriber
    {
        public string Name
        {
            get { return "CodeCheckInEventHandler"; }
        }

        public SubscriberPriority Priority
        {
            get { return SubscriberPriority.Normal; }
        }

        public EventNotificationStatus ProcessEvent(TeamFoundationRequestContext requestContext, NotificationType notificationType, object notificationEventArgs, out int statusCode, out string statusMessage, out Microsoft.TeamFoundation.Common.ExceptionPropertyCollection properties)
        {
            statusCode = 0;
            properties = null;
            statusMessage = String.Empty;
            try
            {
                if (notificationType == NotificationType.Notification && notificationEventArgs is WorkItemChangedEvent)
                {
                    CheckinNotification ev = notificationEventArgs as CheckinNotification;
                    TeamFoundationApplication.Log(string.Format("New Changeset was checked in by {0}. ID: {1}, comments: {2}", ev.ChangesetOwnerName, ev.Changeset, ev.Comment), 123, System.Diagnostics.EventLogEntryType.Information);
                }
            }
            catch (Exception ex)
            {
                TeamFoundationApplication.LogException("Sample.SourceControl.Server.PlugIns.CodeCheckInEventHandler encountered an exception", ex);
            }
            return EventNotificationStatus.ActionPermitted;
        }

        public Type[] SubscribedTypes()
        {
            return new Type[1] { typeof(CheckinNotification) };
        }
    }
}
于 2015-12-22T09:30:37.897 に答える