Getting the Builds Associated with a Changeset Number
In the Orcas release we allow you to Query for builds (and build definitions) through the object model. However, the number of things you can filter the query on is somewhat limited.
One of the things that I find that I need to query builds for is the Changeset that they are associated with. Here's the scenario: I checked in a fix sometime in the past that fixed a bug, but my test team says that the bug is still broken in the latest build. I would like to see which build included my fix. Well, it's easy enough for me to look at the bug in TFS and see which changeset is associated with the fix, but I can't easily see which build contained that changeset. So, I need to query the Build Server to get my answer. Unfortunately, the object model does not easily allow me to query on builds by the associated changeset numbers, so, I wrote a PowerShell script.
The basic idea is that we need to Query for all Builds for a team project, look at each one's associated changesets, and return a list of only those that are associated with the changeset number we care about.
Here's the code:
$serverName = "https://server:8080"
$teamproject = "projectname"
$changesetId = 123
$buildserver = Get-BuildServer($servername)
$spec = $buildserver.CreateBuildDetailSpec()
$spec.DefinitionPath = "\" + $teamproject + "\**"
$spec.BuildNumber = "*"
$spec.QueryOptions = "None"
$spec.InformationTypes = "AssociatedChangeset"
$queryResult = $buildserver.QueryBuilds($spec)
$queryResult.Builds | foreach-object {
$build = $_
$associatedChangesetNodes = $build.Information.Nodes
if ($associatedChangesetNodes)
{
$changesets = [int[]]@($associatedChangesetNodes | foreach-object { $_.Fields["ChangesetId"] })
if ($changesets -contains $changesetId)
{
add-member -in $build noteproperty "AssociatedChangesets" $changesets -passthru
}
}
}
This script and other useful Build related PowerShell scripts are attached to my script post.
I called this script Get-BuildsForChangeset.ps1 and allowed the server name, team project and changeset number to be passed in. Here is an example of the call and the output:
> Get-BuildsForChangeset 'https://jpricket-test:8080' 'jpricket-032707-2' 6 AssociatedChangesets : {6} BuildServer : Microsoft.TeamFoundation.Build.Client.BuildServer BuildAgent : BuildDefinition : BuildFinished : True BuildNumber : Nightly_20070329.2 CompilationStatus : Succeeded ConfigurationFolderPath : $/jpricket-032707-2/TeamBuildTypes/Nightly DropLocation : \\jpricket-test\drops\Nightly_20070329.2 FinishTime : 3/29/2007 1:32:15 PM Information : Microsoft.TeamFoundation.Build.Client.BuildInformation LogLocation : \\jpricket-test\drops\Nightly_20070329.2\BuildLog.txt Quality : Status : Succeeded TestStatus : Succeeded Uri : vstfs:///Build/Build/9 BuildDefinitionUri : vstfs:///Build/Definition/1 CommandLineArguments : StartTime : 3/29/2007 1:31:48 PM BuildAgentUri : vstfs:///Build/Agent/1 ConfigurationFolderUri : vstfs:///VersionControl/VersionedItem... ConfigurationFolderGetTime : 3/29/2007 1:31:48 PM SourceGetVersion : C6 RequestedFor : NORTHAMERICA\jpricket RequestedBy : NORTHAMERICA\jpricket LastChangedOn : 3/29/2007 1:32:14 PM LastChangedBy : REDMOND\bissvc KeepForever : False LabelName : Nightly_20070329.2@$/jpricket-032707-2
Comments
- Anonymous
April 02, 2007
Martin Hinshelwood on TFS Admin Tool 1.2 Gotcha. Adam Singer on Can you direct me to Directory Services?...