使用TFS API检测文件删除更改(自动,无VS交互)

时间:2014-07-26 11:53:18

标签: tfs2012 tfs-sdk tfs-power-tools

我在tfs工作区中有一个本地文件夹,并使用TFS-API。

每晚我都会删除此文件夹,并在该脚本之后将数据库删除为.sql文件。 如果现在添加或编辑了某些内容,则会找到更改并进入挂起的更改以进行签入。

问题是我如何使用TFS-API检测到文件丢失(故意,因为不再在数据库中,因为不再编写脚本)。 第一步很明显,删除空文件夹中的所有文件和脚本。

我在开头使用workspace.PendEdit,这使我能够覆盖外部文件。 完成数据库脚本编写后,我将执行workspace.PendEdit和workspace.PendAdd。

这可以按预期工作。但workspace.PendDelete找不到已删除的文件,因此无法将已删除的文章添加到待处理的更改中。

tfs的电动工具有一个值得称道的工具,它有一个在线标志,应该这样做,我想要的。

我的问题:我可以做什么,我用tfs-api描述了什么? 如果这不起作用,有任何人在这个在线旗帜下有效吗?


简单示例

我在本地文件夹中有两个文件:1.sql和2.sql 最初检查这两个文件。

我删除2.sql本地(不知道tfs) 我添加一个文件:3.sql 我编辑1. sql

现在,我使用workspace.PendEdit和工作空间PendAdd来检测已编辑和添加的文件。这些文件将被检测到正常。

问题在于:2.sql缺失的删除操作将无法检测到,因此无法在服务器上删除。

那么:如何在不知道tfs的情况下检测丢失的文件/本地删除的文件?

我希望这能澄清我的问题。

伪代码示例:

DeleteWorkspaceFolderContent(); // Because i do not delete but regenerate my Sql scripts.
GenerateSqlScriptsToWorkspaceFolder(); // .sql files are generated to the same folder, they were deleted before

//现在,在这一点上,我做了workspace.PendAdd(localPath, true);workspace.PendEdit(localPath, RecursionType.Full);,它就像一个sharm,所以新的.sql文件将被添加和编辑(真正改变的脚本)为&# 34;转换签"

//此时我认为workspace.PendDelete(new [] { localPath }, RecurstionType.Fulll);也是这样:看到文件在本地丢失,然后将这些文件挂起以便在服务器上删除。但这不会发生。没有添加待处理的更改。

var pendingChanges = workspace.GetPendingChanges(localPath, RecursionType.Full);

workspace.CheckIn(pendingChanges, "Per TFS-API, " + DateTime.Now.ToString());

1 个答案:

答案 0 :(得分:4)

您真正想要做的是使用本地工作区,让TFS为您处理此问题。它将检测文件的修改,添加和删除,并自动为您发送。

如果您想为此使用TFS API,那么您需要检查候选的待定更改" (TFS客户端已确定存在于磁盘上的那些),然后将它们提升为实际挂起的更改。例如:

PendingChange[] candidates;
workspace.GetPendingChangesWithCandidates(
    new ItemSpec[] { new ItemSpec(@"C:\Local\Path", RecursionType.Full) },
    false,
    out candidates);

foreach (PendingChange pc in candidates)
{
    if ((pc.ChangeType & ChangeType.Delete) == ChangeType.Delete)
    {
        workspace.PendDelete(pc.LocalItem);
    }
    else if ((pc.ChangeType & ChangeType.Add) == ChangeType.Add)
    {
        workspace.PendAdd(pc.LocalItem);
    }
    else
    {
        workspace.PendEdit(pc.LocalItem);
    }
}

PendingChange[] changes = workspace.GetPendingChanges();

/* Now you can review and CheckIn your changes. */

如果你不能这样做(因为你正在运行旧版本的TFS或Visual Studio,或者出于其他原因)那么你应该只使用TFS Power Tools并运行{{1 }}

如果真的,想要使用TFS API,那么您只需执行tfpt online命令所做的事情:

  1. 扫描整个本地工作文件夹映射
  2. 针对本地工作文件夹映射
  3. 运行tfpt online
  4. 对于本地项目中存在但服务器上不存在的任何文件,请添加
  5. 对于服务器项目中存在但本地文件系统上不存在的任何文件,请删除删除
  6. 对于任何其他项目,确定它是否可写。如果是这样,请进行编辑。 (注意,您可能希望检查文件的MD5哈希,以确定它是实际编辑还是仅标记为可写。)