如何查询TFS-VersioncontrolServer以进行项目移动

时间:2013-10-29 09:16:11

标签: c# tfs tfs2012

假设我有一个Item-Id或ServerItem(路径)。 我需要知道,这个项目已被移动

当前和旧位置。 如何使用Serverside上的给定信息来解决这个问题?

当您显示项目的历史记录时,Visual Studio可以显示所有位置。

我尝试了versioncontrol.QueryHistory,但这只返回当前itemid的历史记录。移动文件确实会更改itemid,但我不知道如何获取不同的ID。

查询合并似乎也无效。

让我说我查询 ItemId 1234 ,我希望结果是这样的:

 - ItemId 1789 ServerItem $/somwhere/path1/hadTobeRenamedAsWell.cs  //newest

 - ItemId 1234 ServerItem $/somwhere/path2/item.cs

 - ItemId 1200 ServerItem $/somwhere/path3/item.cs

 - ItemId 1001 ServerItem $/somwhere/path4/item.cs // oldest

如果这在服务器端无效,请在客户端上进行吗?

这是我用来获取物品的方法

private static TeamFoundationDataReader queryVersionControl(
                TeamFoundationRequestContext requestContext, 
                TeamFoundationVersionControlService versionConrol, 
                IEnumerable<string> items, 
                string workspaceName, 
                string workspaceOwnername)
{
    return versionConrol.QueryItems(requestContext,
                                    workspaceName,
                                    workspaceOwnername,
                                    items.Select(i => new ItemSpec(i, RecursionType.None)).ToArray(), 
                                    new LatestVersionSpec(),
                                    DeletedState.Any,
                                    ItemType.File,
                                    false,
                                    0);
}

1 个答案:

答案 0 :(得分:3)

如果您提供文件的当前路径,这是一个应该返回您要查找的结果的简单方法。

    /// <summary>
    /// Writes out the history of changes to a file.
    /// </summary>
    /// <param name="path">The path to a file similar to $/FabrikamFiber/Main/FabrikamFiber.CallCenter/FabrikamFiber.CallCenter.sln</param>
    private static void _GetHistory(string path)
    {
        using (TeamProjectPicker tpp = new TeamProjectPicker(TeamProjectPickerMode.SingleProject, false, new UICredentialsProvider()))
        {
            if (tpp.ShowDialog() == DialogResult.OK)
            {
                TfsTeamProjectCollection projectCollection = tpp.SelectedTeamProjectCollection;
                VersionControlServer server = projectCollection.GetService<VersionControlServer>();
                Item item = server.GetItem(path);

                int changeId = item.DeletionId != 0 ? item.ChangesetId - 1 : item.ChangesetId;
                ChangesetVersionSpec versionCurrent = new ChangesetVersionSpec(changeId);
                ChangesetVersionSpec versionFrom = new ChangesetVersionSpec(1);

                IEnumerable changesets = server.QueryHistory(path, versionCurrent, 0, RecursionType.None, null, versionFrom, LatestVersionSpec.Latest, int.MaxValue, true, false);

                foreach(Changeset changeset in changesets)
                {
                    Item info = changeset.Changes[0].Item;
                    Console.WriteLine(string.Format("ItemId {0} ServerItem {1}", info.ItemId, info.ServerItem));                        
                }                    
            }
        }
    }