TFS API - Get merged changesets

2019-06-28 02:55发布

I have a program that reads the lastest build and gets all the changesets from it. It is then possible to determine if the changset that I have it actually a merge, and where it was from.

Here's what I have:

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?

UPDATE:

Following the answers so far I have updated

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

        foreach(var m in change.MergeSources)

But MergeSources is always empty.

标签: c# tfs tfs-sdk
4条回答
欢心
2楼-- · 2019-06-28 03:06

You would need to interrogate the files am see if the operation was "merge".

查看更多
疯言疯语
3楼-- · 2019-06-28 03:13

Use the VersionControlServer.GetChangesForChangeset method instead. The last parameter indicates that merge source information should be included.

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)
    {
        // ...
    }
}
查看更多
Emotional °昔
4楼-- · 2019-06-28 03:16

You need to check whether any of the Changes made inside a Changeset is of the ChangeType Merge.

I don't know if the following works, but you get the idea:

changesetDetails.First().Changes.Any(c => (c.ChangeType & ChangeType.Merge) > 0)
查看更多
神经病院院长
5楼-- · 2019-06-28 03:20

Use the overload of VersionControlServer.GetChangeset that accepts the includeDownloadInfo bool parameter. Setting this parameter to true will include the MergeSources in the returned changesets.

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

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

查看更多
登录 后发表回答