[英]Get name of "Team project" from changeset object?
我编写了一个服务,用于获取 TFS 上所有集合中的所有变更集。
我可以从变更集对象动态获取任何变更集的集合名称,但是我在尝试查找变更集所在的团队项目名称时遇到问题。
我可以以某种方式找到变更集所属的团队项目名称吗?
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);
}
}
正如@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;
}
由于变更集可能一次应用于多个项目,因此您需要查看变更集中发生更改的每个项目并查看它与哪个项目相关联。
在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>.+?)\\/
确保您在正则表达式匹配中访问“项目”组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.