【问题标题】:TFS API - Get merged changesetsTFS API - 获取合并的变更集
【发布时间】:2019-02-02 00:00:49
【问题描述】:

我有一个程序可以读取最新版本并从中获取所有变更集。然后可以确定我拥有的变更集是否实际上是一个合并,以及它来自哪里。

这是我所拥有的:

List<IChangesetSummary> changeSets = InformationNodeConverters.GetAssociatedChangesets(build);
IEnumerable<Changeset> changesetDetails = changeSets.Select(x => versionControlServer.GetChangeset(x.ChangesetId));

// Determine is the first changeset was a merge
changesetDetails.First().IsMerge // How to check is the changeset is part of a merge?

更新:

到目前为止,我已经更新了答案

foreach (var cs in changesetDetails)
{
    foreach (Change change in cs.Changes)
    {
        if ((change.ChangeType & ChangeType.Merge) == 0)
            continue;

        foreach(var m in change.MergeSources)

MergeSources 始终为空。

【问题讨论】:

    标签: c# tfs tfs-sdk


    【解决方案1】:

    改用VersionControlServer.GetChangesForChangeset 方法。最后一个参数表示要包含合并源信息。

    List<IChangesetSummary> changeSets = InformationNodeConverters.GetAssociatedChangesets(build);
    IEnumerable<Change> changes = changeSets.SelectMany(x => versionControlServer.GetChangesForChangeset(x.ChangesetId, false, Int32.MaxValue, null, null, true));
    
    foreach (Change change in changes)
    {
        if ((change.ChangeType & ChangeType.Merge) == 0) continue;                  
        foreach (var m in change.MergeSources)
        {
            // ...
        }
    }
    

    【讨论】:

    • 对我来说一些合并的CS没有包含在这个方法中,你知道可能是什么原因吗?
    【解决方案2】:

    您需要检查在Changeset 中生成的任何Changes 是否属于ChangeType Merge

    我不知道以下是否有效,但你明白了:

    changesetDetails.First().Changes.Any(c => (c.ChangeType & ChangeType.Merge) > 0)
    

    【讨论】:

    • 我确实看到了更改的类型。但是,当我尝试深入研究 MergeSource 时,它​​总是空的。我已经更新了我的问题。
    【解决方案3】:

    您需要查询文件以查看操作是否为“合并”。

    【讨论】:

    • 我已经更新了我的问题 - 我相信我从另一个答案中得到了正确的标志,但没有填充 MergeSources。
    【解决方案4】:

    使用接受includeDownloadInfo bool 参数的VersionControlServer.GetChangeset 的重载。将此参数设置为 true 将在返回的变更集中包含 MergeSources

    IEnumerable<Changeset> changesetDetails = changeSets.Select(x => versionControlServer.GetChangeset(x.ChangesetId, true, true));
    

    [https://msdn.microsoft.com/en-us/library/bb138628.aspx]

    【讨论】:

    • 这似乎没有任何区别。您包含的链接includeDownloadInfo 用于获取有关物理文件的信息;但无论如何,MergeSources 仍然为空
    • 我的错误,请稍后再回复。
    猜你喜欢
    • 1970-01-01
    • 2015-10-13
    • 2011-01-22
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多