TFS:以编程方式检查本地工作区和存储库是否同步
TFS: Programmatically check if local Workspace and Repository are in sync
在我的部署工具中,我想以编程方式检查是否有可用于应部署在某处的项目的更新。
该工具不应自行更新工作区,它只是警告用户 TFS 存储库中有可用的新版本。
我尝试了以下原型函数无济于事:
public static bool AreWorkspaceAndRepositoryInSync()
{
const string tfsUrl = "http://mytfs:8080/tfs/MyCollection";
const string tfsPath = @"$/Main/MyProject";
const string wsPath = @"C:\DEV\MyProject";
var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsUrl));
var vcs = projectCollection.GetService<VersionControlServer>();
var workspaceItems = vcs.GetItems(wsPath, RecursionType.Full);
var repositoryItems = vcs.GetItems(tfsPath, VersionSpec.Latest, RecursionType.Full);
var wsNewest = workspaceItems.Items.Max(i => i.CheckinDate);
var repoNewest = repositoryItems.Items.Max(i => i.CheckinDate);
if (wsNewest != repoNewest)
return false;
return true;
}
这个函数总是returnstrue
。我怀疑 VersionControlServer.GetItems(...)
总是从服务器检索 Item
s,因此我的比较实际上是比较两个相同的列表。
有没有办法获取本地工作区Item
?或者有没有其他方法可以达到类似的效果?
我不建议尝试自己计算。最好的方法是 运行 tf get /preview。这将告诉您是否有任何事情要做但实际上不会更新工作区。使用客户端 OM,用 VersionSpec.Latest 和 GetOptions.Preview 调用 Get。
在我的部署工具中,我想以编程方式检查是否有可用于应部署在某处的项目的更新。
该工具不应自行更新工作区,它只是警告用户 TFS 存储库中有可用的新版本。
我尝试了以下原型函数无济于事:
public static bool AreWorkspaceAndRepositoryInSync()
{
const string tfsUrl = "http://mytfs:8080/tfs/MyCollection";
const string tfsPath = @"$/Main/MyProject";
const string wsPath = @"C:\DEV\MyProject";
var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsUrl));
var vcs = projectCollection.GetService<VersionControlServer>();
var workspaceItems = vcs.GetItems(wsPath, RecursionType.Full);
var repositoryItems = vcs.GetItems(tfsPath, VersionSpec.Latest, RecursionType.Full);
var wsNewest = workspaceItems.Items.Max(i => i.CheckinDate);
var repoNewest = repositoryItems.Items.Max(i => i.CheckinDate);
if (wsNewest != repoNewest)
return false;
return true;
}
这个函数总是returnstrue
。我怀疑 VersionControlServer.GetItems(...)
总是从服务器检索 Item
s,因此我的比较实际上是比较两个相同的列表。
有没有办法获取本地工作区Item
?或者有没有其他方法可以达到类似的效果?
我不建议尝试自己计算。最好的方法是 运行 tf get /preview。这将告诉您是否有任何事情要做但实际上不会更新工作区。使用客户端 OM,用 VersionSpec.Latest 和 GetOptions.Preview 调用 Get。