我们开发了一个自定义签入策略插件,可将签入事件捕获到客户端上的 TFS 2013。这用于评估某些工作流状态并为签入生成有意义的注释。对于这些任务,检查用户为签入而选择/关联的工作项的有效性,并使用来自工作项的值来生成评论。这在 Visual Studio 领域中完美运行。直到最近,所有对 TFS 的签入都是通过 Visual Studio 2013 完成的。一个新团队加入了我们,他们使用了 XPA Magic。标准的 XPA 编辑器似乎利用 TFS 2013 的 32 位 MSSCCI 提供程序在 TFS 上执行签出和签入。通过 XPA 编辑器签入代码时,以下对话框用于允许用户选择/关联他的工作项并添加注释。
不幸的是,通过此对话框签入时,该功能不再起作用。我已经调试了插件项目,并且在通过此路线检查 OUT 时,会调用 Evaluate() 函数并公开 Microsoft.VisualStudio.TeamFoundation.VersionControl.PendingChanges.PendingChangesModelVS 。但是,在检查 IN 时,不会调用 Evaluate() 函数。
在概念上是否也可以捕获签入事件并获得与通过 Visual Studio 签入时相同(或相似)的结果?
客户端计算机在连接到 TFS 2013.Update3 应用程序服务器的 Windows 7 上运行 Visual Studio Premium 2013。
-
-
嘿,爱德华,
我不完全确定我是否正确解释了您的回复,但这里是:-)
这个想法是在签入时构建一个包含相关工作项的详细信息(如 WI 编号、描述和一些其他自定义信息)的注释。签入文件后,创建的更改集的注释将包含一些有用的信息。注释(字符串)在签入时生成,然后设置在以下属性中:PendingCheckin.PendingChanges.Comment = newCheckinComment;
全名空间:{Microsoft.VisualStudio.TeamFoundation.VersionControl.PendingChanges.PendingChangesModelVS}.PendingCheckin.PendingChanges.Comment
因此,我们需要在签入操作期间将评论推送到此处。在签入时,我们还确定至少有一个 WI 相关联,可以从中提取数据,因为这是强制执行的。
在调试中,每次执行这些操作时都会触发以下事件:
- 在团队资源管理器中进行刷新。(PendingCheckin.Policies.EvaluationState = 未评估)
通过 Windows 资源管理器中的上下文菜单“Team Foundation Server”进行结帐。(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;
}
因此,您可以看到问题出现了,即通过 Windows 资源管理器中的上下文菜单“Team Foundation Server”签入,永远不会到达 Evaluate() 函数,但从同一个上下文菜单中签出确实......希望它使感觉!