TFS API - 获取合并的变更集

时间:2015-03-25 08:30:27

标签: c# tfs tfs-sdk

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

以下是我所拥有的:

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总是空的。

4 个答案:

答案 0 :(得分:7)

请改用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)
    {
        // ...
    }
}

答案 1 :(得分:2)

您需要检查Changes内的任何Changeset是否属于ChangeType Merge

我不知道以下是否有效,但您明白了这一点:

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

答案 2 :(得分:0)

如果操作是“合并”,您需要查询文件。

答案 3 :(得分:0)

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

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

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