TFS .NET 客户端库查找与合并相关的工作项
TFS .NET client libraries finding merge related work items
我想构建一个查询应用程序,它将查询 TFS 中的一个分支,并检索所有工作项并将其显示为 Master Detail 报告:
User Story:30669 [Closed] Ongoing Support and Maintenance
Task:31566 [Closed] Upgrade latest version of client libraries
Bug:30905 [Closed] Executing Error "The given Key was not present in the dictionary"
User Story:30351 [Closed] Add new Function
Task:28188 [Closed] Implement new Function
这会让我们很好地了解我们在给定分支上完成了哪些工作,以及如果我们选择构建,构建中将包含哪些内容。
所以目前我可以检索日期之间分支的所有工作项,不包括合并。我想包括合并,但我很难理解 TFS 客户端界面。
这是我目前的情况:BranchModel
、ChangesetModel
、UserStories
和TaskBugs
是类帮我安排WorkItem
输出报告的对象:
const String c_collectionUri = "http://tfsServer:81/tfs/ProjectCollection";
const String c_projectName = "Project";
using (TfsTeamProjectCollection tpc =
new TfsTeamProjectCollection(new Uri(c_collectionUri)))
{
VersionControlServer vcServer =
tpc.GetService<VersionControlServer>();
WorkItemStore workItemStore = tpc.GetService<WorkItemStore>();
// Fetch the branch history
var history = vcServer.QueryHistory(@"$/ProjectCollection/Project/Branch1/Source", RecursionType.Full)
.Where(h => h.CreationDate >= new DateTime(2018, 1, 1) && h.CreationDate <= new DateTime(2018, 1, 5));
BranchModel branch = new BranchModel("Branch1");
// Get the changesets, for from the fetched history
List<Changeset> changesets = new List<Changeset>();
foreach (Changeset changeset in history)
{
changesets.Add(changeset);
// TODO: Add code to get Changesets related to merge
}
// Get the WorkItems from Changesets Fetched
foreach (Changeset changeset in changesets)
{
ChangesetModel changesetModel = branch.AddChangeset(changeset);
foreach (WorkItem workItem in changeset.WorkItems)
{
// Fetch the UserStory for a Bug/Task
foreach (var linkedItem in workItem.Links)
{
RelatedLink relatedItem = linkedItem as RelatedLink;
WorkItem userStory = null;
if (relatedItem != null)
userStory = GetWorkItem(workItemStore, c_projectName, relatedItem.RelatedWorkItemId);
if (userStory != null)
{
var userStoryModel = branch.AddUserStory(userStory);
var taskBugModel = userStoryModel.Add(workItem);
}
}
}
}
// Finally print the report
Console.WriteLine();
Console.WriteLine("Related Work:");
Console.WriteLine("=".PadLeft(80, '='));
foreach (var userStory in branch.UserStories)
{
Console.WriteLine(userStory.Value.ToString());
foreach (var taskBug in userStory.Value.TaskBugs)
{
Console.WriteLine(taskBug.Value.ToString());
}
}
以及 GetWorkItem 的方法:
void WorkItem GetWorkItem(WorkItemStore workItemStore, string c_projectName, int workitemID)
{
return workItemStore.Projects[c_projectName].Store.GetWorkItem(workitemID);
}
我想知道,对于恰好是合并的 Changeset
,如何获取与该合并相关的相关工作项。
您无法直接从合并变更集中获取相关工作项。您需要获取合并历史记录(version from
、version to
),然后从 version from
和 version to
变更集中检索相关工作项。
您可以使用 VersionControlServer.GetChangesForChangeset
方法获取合并变更集的合并历史记录。然后从获取的历史变更集中获取工作项。
以下示例供您参考以获取合并变更集历史记录:
static void Main(string[] args)
{
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri("http://server:8080/tfs/DefaultCollection"));
new System.Net.NetworkCredential("username", "password");
tpc.EnsureAuthenticated();
VersionControlServer vcs = tpc.GetService<VersionControlServer>();
int cid = 376;
//List<IChangesetSummary> changeSets = InformationNodeConverters.GetAssociatedChangesets(build);
IEnumerable<Change> changes = vcs.GetChangesForChangeset(cid, false, Int32.MaxValue, null, null, true);
foreach (Change change in changes)
{
if ((change.ChangeType & ChangeType.Merge) == 0) continue;
foreach (var m in change.MergeSources)
{
Console.WriteLine("{0} {1} {2} {3}", change.Item.ChangesetId, m.ServerItem, m.VersionFrom, m.VersionTo);
}
}
Console.ReadLine();
}
我想构建一个查询应用程序,它将查询 TFS 中的一个分支,并检索所有工作项并将其显示为 Master Detail 报告:
User Story:30669 [Closed] Ongoing Support and Maintenance
Task:31566 [Closed] Upgrade latest version of client libraries
Bug:30905 [Closed] Executing Error "The given Key was not present in the dictionary"
User Story:30351 [Closed] Add new Function
Task:28188 [Closed] Implement new Function
这会让我们很好地了解我们在给定分支上完成了哪些工作,以及如果我们选择构建,构建中将包含哪些内容。
所以目前我可以检索日期之间分支的所有工作项,不包括合并。我想包括合并,但我很难理解 TFS 客户端界面。
这是我目前的情况:BranchModel
、ChangesetModel
、UserStories
和TaskBugs
是类帮我安排WorkItem
输出报告的对象:
const String c_collectionUri = "http://tfsServer:81/tfs/ProjectCollection";
const String c_projectName = "Project";
using (TfsTeamProjectCollection tpc =
new TfsTeamProjectCollection(new Uri(c_collectionUri)))
{
VersionControlServer vcServer =
tpc.GetService<VersionControlServer>();
WorkItemStore workItemStore = tpc.GetService<WorkItemStore>();
// Fetch the branch history
var history = vcServer.QueryHistory(@"$/ProjectCollection/Project/Branch1/Source", RecursionType.Full)
.Where(h => h.CreationDate >= new DateTime(2018, 1, 1) && h.CreationDate <= new DateTime(2018, 1, 5));
BranchModel branch = new BranchModel("Branch1");
// Get the changesets, for from the fetched history
List<Changeset> changesets = new List<Changeset>();
foreach (Changeset changeset in history)
{
changesets.Add(changeset);
// TODO: Add code to get Changesets related to merge
}
// Get the WorkItems from Changesets Fetched
foreach (Changeset changeset in changesets)
{
ChangesetModel changesetModel = branch.AddChangeset(changeset);
foreach (WorkItem workItem in changeset.WorkItems)
{
// Fetch the UserStory for a Bug/Task
foreach (var linkedItem in workItem.Links)
{
RelatedLink relatedItem = linkedItem as RelatedLink;
WorkItem userStory = null;
if (relatedItem != null)
userStory = GetWorkItem(workItemStore, c_projectName, relatedItem.RelatedWorkItemId);
if (userStory != null)
{
var userStoryModel = branch.AddUserStory(userStory);
var taskBugModel = userStoryModel.Add(workItem);
}
}
}
}
// Finally print the report
Console.WriteLine();
Console.WriteLine("Related Work:");
Console.WriteLine("=".PadLeft(80, '='));
foreach (var userStory in branch.UserStories)
{
Console.WriteLine(userStory.Value.ToString());
foreach (var taskBug in userStory.Value.TaskBugs)
{
Console.WriteLine(taskBug.Value.ToString());
}
}
以及 GetWorkItem 的方法:
void WorkItem GetWorkItem(WorkItemStore workItemStore, string c_projectName, int workitemID)
{
return workItemStore.Projects[c_projectName].Store.GetWorkItem(workitemID);
}
我想知道,对于恰好是合并的 Changeset
,如何获取与该合并相关的相关工作项。
您无法直接从合并变更集中获取相关工作项。您需要获取合并历史记录(version from
、version to
),然后从 version from
和 version to
变更集中检索相关工作项。
您可以使用 VersionControlServer.GetChangesForChangeset
方法获取合并变更集的合并历史记录。然后从获取的历史变更集中获取工作项。
以下示例供您参考以获取合并变更集历史记录:
static void Main(string[] args)
{
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri("http://server:8080/tfs/DefaultCollection"));
new System.Net.NetworkCredential("username", "password");
tpc.EnsureAuthenticated();
VersionControlServer vcs = tpc.GetService<VersionControlServer>();
int cid = 376;
//List<IChangesetSummary> changeSets = InformationNodeConverters.GetAssociatedChangesets(build);
IEnumerable<Change> changes = vcs.GetChangesForChangeset(cid, false, Int32.MaxValue, null, null, true);
foreach (Change change in changes)
{
if ((change.ChangeType & ChangeType.Merge) == 0) continue;
foreach (var m in change.MergeSources)
{
Console.WriteLine("{0} {1} {2} {3}", change.Item.ChangesetId, m.ServerItem, m.VersionFrom, m.VersionTo);
}
}
Console.ReadLine();
}