Можно ли создать плагин для поставщика MSSCCI для TFS2013, чтобы перехватывать событие Evaluate() и возвращать PolicyFailure[] при регистрации в TFS?

Мы разработали специальный плагин политики регистрации, который перехватывает события регистрации в TFS 2013 на клиенте. Это используется для оценки определенных статусов рабочего процесса и создания значимого комментария для регистрации. Для этих задач рабочий элемент, выбранный / связанный пользователем для регистрации, проверяется на достоверность, а значения из рабочего элемента используются для создания комментария. Это прекрасно работает в области Visual Studio. До недавнего времени все проверки TFS выполнялись через Visual Studio 2013. К нам присоединилась новая команда, которая использует XPA Magic. Стандартный редактор XPA, кажется, использует 32-битный поставщик MSSCCI для TFS 2013 для выполнения проверок и проверок TFS. При проверке кода с помощью редактора XPA используется следующий диалог, чтобы позволить пользователю выбрать / связать свой рабочий элемент и добавить комментарии.

К сожалению, при регистрации через этот диалог, функциональность больше не работает. Я отладил проект плагина, и при проверке OUT по этому маршруту вызывается функция Evaluate(), которая предоставляет Microsoft.VisualStudio.TeamFoundation.VersionControl.PendingChanges.PendingChangesModelVS . Однако при проверке IN функция Evaluate() НЕ вызывается.

Можно ли концептуально отловить события регистрации и достичь тех же (или похожих) результатов, что и при регистрации через Visual Studio?

На клиентских компьютерах Visual Studio Premium 2013 работает под управлением Windows 7, подключаясь к серверу приложений TFS 2013.Update3.

-

-

Привет, Эдвард,

Я не совсем уверен, что правильно истолковываю ваш ответ, но здесь говорится:-)

Идея состоит в том, чтобы создать комментарий, содержащий подробности из соответствующего рабочего элемента (например, номер WI, описание и некоторую другую пользовательскую информацию) во время регистрации. После проверки в файле (ах) комментарий созданного набора изменений будет содержать некоторую полезную информацию. Комментарий (строки) генерируется при регистрации и затем устанавливается в следующем свойстве: PendingCheckin.PendingChanges.Comment = newCheckinComment;

Полное пространство имен: {Microsoft.VisualStudio.TeamFoundation.VersionControl.PendingChanges.PendingChangesModelVS}.PendingCheckin.PendingChanges.Comment

Таким образом, мы должны нажать здесь комментарий во время регистрации. При регистрации мы также знаем наверняка, что существует по крайней мере один WI, связанный с тем, где данные могут быть извлечены, поскольку это принудительно применяется.

В отладке я вижу следующие события, которые запускаются каждый раз, когда предпринимаются эти действия:

  • Обновление в Team Explorer. (PendingCheckin.Policies.EvaluationState = Неоценено)
  • Оформление заказа через контекстное меню " Team Foundation Server" в проводнике Windows. (PendingCheckin.Policies.EvaluationState = Неоценено)

  • При регистрации в Visual Studio (PendingCheckin.Policies.EvaluationState = Evaluated)

Видя, что мы заинтересованы только в действии регистрации, код отвечает только на: PendingCheckin.Policies.EvaluationState = Evaluated

    public override PolicyFailure[] Evaluate()
    {
        PolicyFailure[] failures = null;

        if (PendingCheckin.Policies.EvaluationState == PolicyEvaluationState.Evaluated)
        {
     InitConfiguration();
            failures = CheckWorkitemStatus();
            if (Util.ArePolicyFailuresOk(failures))
                failures = ComposeCheckinComment();
            if (Util.ArePolicyFailuresOk(failures)) //The setting of the comment -> PendingCheckin.PendingChanges.Comment = newCheckinComment , happen in this function.
                failures = CheckFilesToCheckin();
        }
        return failures;
    }

Таким образом, как вы можете видеть, проблема возникает в том, что регистрация через контекстное меню " Team Foundation Server" в проводнике Windows никогда не достигает функции Evaluate(), но извлечение из того же контекстного меню делает… Надеюсь, что это делает смысл!

0 ответов

Другие вопросы по тегам