[英]How to get a list of files from TFS modified on a certain date in the specified workspace?
我必须创建一个在指定日期修改(签出或签入)的文件列表。
我有用户名和他们的工作区名称作为我的函数的参数。
有什么建议么?
我想你想组合使用VersionControlServer.QueryHistory来确定特定日期文件的变化,并结合VersionControlServer.QueryWorkspaces来获取工作空间,以提取你想要查询的工作文件夹映射。递归历史。
我很确定你无法分辨出特定变更集来自哪个工作区,而没有使用自定义签入策略做一些时髦的事情,以便首先将这些信息放入变更集中。 也就是说,我不知道一种方法可以告诉两个变化,而不是同一个开发人员碰巧在两个不同的工作空间上更改它们。 那么可能更容易的是找出是否可以删除工作空间要求,只需使用一次QueryHistory调用,在特定日期返回特定用户的文件更改?
这就是我最终做的事情(我只留下了与问题相关的代码):
感谢Martin的指示!
void GetPastTFSChangesByDate()
{
using (TfsTeamProjectCollection tfsServer = new TfsTeamProjectCollection(_tfsServerUri))
{
tfsServer.Authenticate();
if (tfsServer != null)
{
VersionControlServer vcServer = tfsServer.GetService(typeof (VersionControlServer)) as VersionControlServer;
if (vcServer != null)
{
var usersWorkspaces = vcServer.QueryWorkspaces(null, vcServer.AuthorizedUser, Environment.MachineName).ToList();
List<ChangedTFSItem> foundPastChanges = null;
if (_isSearchForPastChangesOn)
{
var allPastChangesets = vcServer.QueryHistory(@"C:\TFS",
VersionSpec.Latest,
0,
RecursionType.Full,
Environment.UserName,
null,
null,
3000,
true,
false).Cast<Changeset>()
.Where(x => x.Committer.Contains(Environment.UserName));
_foundPastChanges = allPastChangesets
.SelectMany(x => x.Changes)
.Where(x => x.Item.CheckinDate.Date == _searchDate.Date) // Check-in date filter.
.DistinctBy(x => x.Item.ServerItem, x => x.Item.ServerItem.GetHashCode())
.Select(x => new ChangedTFSItem()
{
FileName = "Uknown",
LocalItem = "Uknown",
ServerItem = x.Item.ServerItem,
ChangeTypeName = "",
ChangeDate = x.Item.CheckinDate.ToString(),
Workspace = "Uknown"
}).ToList();
//Matching those foundPastChanges to the workspace corresponding file locations.
if (usersWorkspaces.Any())
{
foreach (var item in foundPastChanges)
{
usersWorkspaces.ForEach(ws =>
{
item.LocalItem = ws.GetLocalItemForServerItem(item.ServerItem);
item.Workspace = ws.Name;
});
item.FileName = Path.GetFileName(item.ServerItem);
}
}
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.