Можно ли создать плагин для поставщика 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(), но извлечение из того же контекстного меню делает… Надеюсь, что это делает смысл!