从 tfs 变更集中获取文件列表

发布于 2025-01-06 00:31:56 字数 205 浏览 0 评论 0原文

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

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

或者也许有人可以告诉我如何从 ccnet 获取此文件列表,以便我可以通过属性将其发送到我的 msbuild.proj 文件。

I need to get a list of changed files from chageset only and exclude all other junk.

I can get this information from the command tf changeset /i $(changesetnumber) but besides of List of files i have a lot of other information which I dont need for my purposes.

Or maybe someone can tell how to get this list of files from ccnet so I can send it to my msbuild.proj file via property.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜夜流光相皎洁 2025-01-13 00:31:56

您可以使用 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)重写它

You could use the TFS API to get the information you want. Here's some example C# code that will select the file names of all edited, added and deleted files

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;

I'm afraid I haven't used cc.net so can't advise on the best way to integrate this into ccnet, but you could compile it into a small utility or rewrite it in a scripting language (e.g. Powershell, IronPython)

苏大泽ㄣ 2025-01-13 00:31:56

您可以使用 CCNET 的修改编写器任务。将其放入 CCNET 配置的

部分,并在 任务中处理生成的文件:

<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 输出的任何建议。

提示 任务需要 .NET 4.0 MSBuild。

You could use CCNET's Modification Writer Task. Put it to your CCNET configuration's <prebuild> section and process the generated file in your <msbuild> task:

<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>

Note: I'm not really experienced in MSBuild so any advice on how to parse the XML output in a more elegant way is highly appreciated.

Hint: <XmlPeek> task requires .NET 4.0 MSBuild.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文