Paul Michaels
Paul Michaels

Reputation: 16705

TFS API - Get merged changesets

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.

Upvotes: 5

Views: 3253

Answers (4)

Chrono
Chrono

Reputation: 1473

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)

Upvotes: 2

Andy Lamb
Andy Lamb

Reputation: 2304

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

Upvotes: 8

Andy Lamb
Andy Lamb

Reputation: 2304

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 ]

Upvotes: 0

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

Upvotes: 0

Related Questions