我已经编写了一项服务,可以获取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);
}
}
答案 0 :(得分: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;
}
答案 1 :(得分:0)
由于变更集可能同时应用于多个项目,因此您需要查看变更集中已更改的每个项目,并查看与之关联的项目。
在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.
}
}
如果您需要一些正则表达式来查找项目名称,请尝试以下操作:^\$\/(?<Project>.+?)\/
确保您访问&#39;项目&#39;正则表达式中的小组。