Once you have an IBuildDetail getting the associated changsets used to be accomplished with:
buildDetail.Information.GetNodesByType("AssociatedChangeset")
However, in TFS 2013 with Git that fails to return any changesets.
It's possible I haven't configured TFS correctly, but this is an out of the box installation, not an upgrade, so I'm guessing with the new git support the API has changed.
Any help (or links to useful documentation) would be greatly appreciated.
After a lot of fiddling around I finally found the solution. Changeset's have been renamed to Commit's for TFS 2013's git support. Consequently you need to ask for that data when you get build details like this:
var buildDetailSpec = _buildServer.CreateBuildDetailSpec(buildDefinitionUris);
buildDetailSpec.InformationTypes = new[] { "AssociatedCommit" };
Then you perform the query as usual:
var buildQueryResult = _buildServer.QueryBuilds(new [] { buildDetailSpec });
var buildDetail = buildQueryResult[0].Builds;
Then you retrieve the commit, not the changeset, like this:
var commits = buildDetail.Information.GetNodesByType("AssociatedCommit");
var author = commits.First().Fields["Author"];
var comments = commits.First().Fields["Message"];
Note that what was "Comment" has been renamed to "Message" and what was "CheckedInBy" has been renamed to "Author" (or maybe "Committer", they are always the same value for me).
For those interested in getting the current builds list of associated commits (after associate commits since last good build is called) the following code is helpful.
var envVar = context.GetExtension<IEnvironmentVariableExtension>();
var commits = envVar.GetEnvironmentVariable<IList<AssociatedCommit>>(context, WellKnownEnvironmentVariables.AssociatedCommits);
This is nicer than the marked answer for the current build as you get back the type safe object.
I'm not an expert of tfs, but I found these links, that maybe could be useful:
来源:https://stackoverflow.com/questions/23797568/how-to-retrieve-changesets-associated-with-a-build-in-tfs-2013-with-git