[英]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.