【问题标题】:Get name of "Team project" from changeset object?从变更集对象中获取“团队项目”的名称?
【发布时间】:2017-06-28 21:18:04
【问题描述】:

我编写了一个服务,它可以抓取我的 TFS 上所有集合中的所有变更集。

我可以从 changeset object 动态获取任何变更集的集合名称,但我在尝试查找变更集所在的团队项目名称时遇到了麻烦。

我能以某种方式找到变更集所属的团队项目名称吗?

    foreach (Changeset cs in allChangeSets)
    {
           if (cs.Comment != null && ChangeSetFinderMVC.Utils.TFSUtil.Contains(cs.Comment, id))
           {
                  var cso = new ChangeSetObj();
                  cso.ChangesetId = cs.ChangesetId;
                  cso.CheckinNote = cs.CheckinNote;
                  cso.Comment = cs.Comment;
                  cso.Committer = cs.Committer;
                  cso.CommitterDisplayName = cs.CommitterDisplayName;
                  cso.Collection = cs.VersionControlServer.TeamProjectCollection.Name;
                  cso.TeamProject = "????";

                  changeSetList.Add(cso);

           }
    }

【问题讨论】:

标签: c# tfs tfs-2015


【解决方案1】:

正如@Toomaja 所说,我们可以有许多与单个变更集相关的 TeamProject。他的解决方案建议您始终知道您在寻找什么 TeamProjects。即使您事先知道 TeamProjects,使用正则表达式来执行可用方法已经完成的事情也会降低您的代码生命周期并将您的解决方案保留到特定的 TeamProjects。我建议您使用以下更改的服务器路径获取唯一的 TeamProjects:

private IEnumerable<string> _GetUniqueTeamProjects(Changeset changeset)
    {
        //We can have many changes in files in differentes TeamProjects within the same changeset
        HashSet<string> teamProjects = new HashSet<string>();

        foreach (var ch in changeset.Changes)
        {
            //Get TeamProject using available repository access and change paths on server side.
            var tp = ch.Item.VersionControlServer.GetTeamProjectForServerPath(ch.Item.ServerItem);
            //Let the HashTable handle the unique value
            teamProjects.Add(tp.Name);
        }

        return teamProjects;
    }

【讨论】:

  • 如果您真正解释代码中发生的什么以及为什么有效,那么您可能会为这个答案和未来的答案获得更多代表。 StackOverflow 并不是一个问答网站,答案的可重用性很重要。解释你的答案可能会帮助未来遇到类似问题的读者,或者如果他们能看到实际发生的事情,它可能会教他们某些技巧。
  • 感谢您的帮助!
【解决方案2】:

由于一个变更集可能会同时应用于多个项目,因此您需要查看变更集中发生更改的每个项目,并查看它与哪个项目相关联。

Changeset 中,您可以访问每个更改项的 TFS 路径并查看其服务器路径。

foreach (Changeset changeSet in changeSets)
{
    foreach (Change change in changeSet.Changes)
    {
        string tfsDir = change.Item.ServerItem;
        // Example: "$/ProjectName/SomeFolders/SomeFile.cs"
        // More logic to handle this string goes here.
    }
}

如果你需要一些正则表达式来查找项目名称,试试这个:^\$\/(?&lt;Project&gt;.+?)\/

确保您在正则表达式匹配中访问“项目”组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 2015-07-12
    • 2013-05-30
    • 1970-01-01
    • 2014-08-20
    • 2017-08-15
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多