TFS API - 检查所有文件,无论状态如何

时间:2014-01-16 15:37:34

标签: c# tfs

我正在开发一个项目来扩展我部门的TFS功能。基本上我们有两个存储库(团队项目集合),一个开发一个和一个生产一个。我们的开发人员使用开发项目,生产项目是我们想要存储代码副本的地方。我做了一些研究,似乎这是一个经常被要求,从未提出过请求,所以我决定写一个定制的应用程序。

在我的应用程序中,代码(以及其他内容)执行以下操作

  • 检查开发资料库中是否有关于相关项目的检查
  • 是否在未创建或依赖现有Workspace映射的情况下访问客户端计算机上的目录
  • 在生产存储库上创建链接到先前创建的本地目录的临时工作区映射
  • 在生产
  • 中查找本地目录与签入代码之间的待定更改
  • 检查更改

现在一切正常 - 无论如何,第一次,因为所有文件都标记为Add并因此成功签入。然而,随后的时间它不能正常工作,因为它只找到已更改的文件。我意识到这是设计的,但我想要做的是建立代码的基线 - 每个基线(变更集)包含项目中的所有文件,无论它们是否已经改变。例如,如果项目中有52个文件,那么当我点击获取此版本时,我希望下载52个文件。

我意识到TFS正在按照设计执行,但我想知道无论如何我都可以强迫它做我想做的事情。作为参考,我的签到代码如下:

// create a workspace on my production server
wSpace = vcsProdServer.CreateWorkspace(cWsMapping);
wSpace.Map(pProjectName, combinedPath);
wSpace.Get();

string files = pProjectName + "/*";
int pendingAdd = wSpace.PendAdd(files, true);
int pendingEdit = wSpace.PendEdit(files, RecursionType.Full);

// get the pending changes
PendingChange[] changes = wSpace.GetPendingChanges();

// check in the changes
wSpace.CheckIn(changes, string.Format(checkinMessage, pProjectName, DateTime.Now));

pProjectName是指TFS中的项目(例如$ / MyProject),combinedPath是下载最新版本代码的本地路径。

1 个答案:

答案 0 :(得分:0)

是的,我认为如果有人有兴趣,我已经修好了。问题是因为我在每个进程结束时删除了wSpace,这意味着编辑或删除的文件没有被提取。它不是我完成它的理想解决方案,但似乎有效。

工作区的更新代码为:

// create a workspace on my production server
try
{
    wSpace = vcsProdServer.GetWorkspace(cWsMapping, vcsProdServer.AuthorizedUser);
}
catch
{
    wSpace = vcsProdServer.CreateWorkspace(cWsMapping);
    wSpace.Map(pProjectName, combinedPath);
}
wSpace.Get();

现在,当我获取应用于变更集的标签时,我得到了所有记录。