从tfs changeset获取文件列表

时间:2012-02-16 12:48:08

标签: msbuild tfs2010 cruisecontrol.net

我需要从chageset获取已更改文件的列表,并排除所有其他垃圾。

我可以从命令tf changeset / i $(changesetnumber)获取此信息,但除了文件列表之外,我还有很多其他信息,我不需要这些信息用于我的目的。

或许有人可以告诉我如何从ccnet获取这个文件列表,这样我就可以通过属性将它发送到我的msbuild.proj文件。

2 个答案:

答案 0 :(得分:9)

您可以使用TFS API获取所需的信息。这是一些示例C#代码,它将选择所有已编辑,添加和删除的文件的文件名

Uri serverUri = new Uri("http://mytfsserver:8080/");
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(serverUri);
tpc.EnsureAuthenticated();
VersionControlServer vcs = tpc.GetService<VersionControlServer>();
var changeset = vcs.GetChangeset(changesetId);
var changedFiles = from change in changeset.Changes where
       (  (change.ChangeType & ChangeType.Edit) == ChangeType.Edit
       || (change.ChangeType & ChangeType.Add) == ChangeType.Add
       || (change.ChangeType & ChangeType.Delete) == ChangeType.Delete)
     select change.Item.ServerItem;

我担心我没有使用过cc.net,因此无法建议将其集成到ccnet中的最佳方法,但您可以将其编译成一个小实用程序或用脚本语言重写它(例如Powershell, IronPython的)

答案 1 :(得分:0)

您可以使用CCNET的Modification Writer Task。将它放到CCNET配置的<prebuild>部分,并在<msbuild>任务中处理生成的文件:

<Project DefaultTargets="Go" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Go">
    <XmlPeek
      XmlInputPath="$(CCNetArtifactDirectory)\modifications.xml"
      Query="/ArrayOfModification/Modification">
      <Output TaskParameter="Result" ItemName="Modifications" />
    </XmlPeek>
    <MSBuild
      Projects="$(MSBuildProjectFile)"
      Properties="Modification=%(Modifications.Identity)"
      Targets="MessageModificationPath">
    </MSBuild>
  </Target>
  <Target Name="MessageModificationPath">
    <XmlPeek
      XmlContent="$(Modification)"
      Query="/Modification/FolderName/text()">
      <Output TaskParameter="Result" PropertyName="FolderName" />
    </XmlPeek>
    <XmlPeek
      XmlContent="$(Modification)"
      Query="/Modification/FileName/text()">
      <Output TaskParameter="Result" PropertyName="FileName" />
    </XmlPeek>
    <Message Text="$(FolderName)$(FileName)" />
  </Target>
</Project>

注意:我在MSBuild方面并不是很有经验,因此非常感谢您提供有关如何以更优雅的方式解析XML输出的任何建议。

提示<XmlPeek>任务需要.NET 4.0 MSBuild。