TFS:以编程方式检查本地Workspace和Repository是否同步

时间:2015-03-18 13:08:22

标签: c# tfs tfs2012

在我的部署工具中,我想以编程方式检查项目是否有可用于部署的更新。

该工具本身不应更新工作区,它只是警告用户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;
}

此函数始终返回true。我怀疑VersionControlServer.GetItems(...)总是从服务器检索Item,因此我的比较实际上比较了两个相同的列表。

有没有办法获得本地工作区Item?或者还有其他方法可以实现类似的东西吗?

1 个答案:

答案 0 :(得分:2)

我不建议您自己尝试计算它。执行此操作的最佳方法是运行tf get / preview。这将告诉您是否有任何事情要做,但实际上没有更新工作区。使用客户端OM,使用VersionSpec.Latest和GetOptions.Preview调用Get