I was asked by a colleague to provide a list of all files that were changed under a particular iteration. Rather than delving into the data, I made a couple of API calls to TFS to output a text file with the list.
This is probably not the most efficient method and it is hard coded, but it does output the goods:
Dim tfs As New TeamFoundationServer("http://testtfs01:8080")
Dim store As WorkItemStore = tfs.GetService(GetType(WorkItemStore))
Dim version As VersionControlServer = tfs.GetService(GetType(VersionControlServer))
' Query for work items
Dim query As String = "SELECT [System.Id], [System.Title] " _
& "FROM WorkItems " _
& "WHERE [System.TeamProject] = @Project " _
& "AND [System.IterationPath] UNDER @IterationPath " _
& "ORDER BY [System.Id]"
Dim paramiters As New Hashtable
paramiters.Add("Project", "TestProject1")
paramiters.Add("IterationPath", "TestProject1TestIteration1")
Dim y As WorkItemCollection = store.Query(query, paramiters)
Console.WriteLine(String.Format("Found {0} work items", y.Count))
' Query work items for attachments
Dim wiats = From wi As WorkItem In y, l As Link In wi.Links Where l.BaseType = BaseLinkType.ExternalLink Select l, wi
Console.WriteLine(String.Format("Loading {0} changesets...", wiats.Count))
Dim ChangeSets As New List(Of Changeset)
If Not wiats Is Nothing Then
Dim els = From i In wiats Where LinkingUtilities.DecodeUri(CType(i.l, ExternalLink).LinkedArtifactUri).ArtifactType = "Changeset"
For Each i In wiats
Dim el As ExternalLink = CType(i.l, ExternalLink)
Dim artifact As ArtifactId = LinkingUtilities.DecodeUri(el.LinkedArtifactUri)
If artifact.ArtifactType = "Changeset" Then
Dim cs As Changeset = version.ArtifactProvider.GetChangeset(New Uri(el.LinkedArtifactUri))
ChangeSets.Add(cs)
End If
Next
' ------------------------------
Console.WriteLine(String.Format("{0} changesets loaded", ChangeSets.Count))
Dim files = From f In ChangeSets, c In f.Changes Select c.Item Distinct
Using x = System.IO.File.CreateText("c:Tempfiles.txt")
For Each f In files
x.WriteLine(f.ServerItem)
Next
End Using
End If
If Debugger.IsAttached Then
Console.ReadKey()
End If
As you can see I have very bad naming and layout, but this is a one time use version of the code, so quick and dirty. If I am asked to do this again I would create a proper command line utility, or even a WPF interface to display the data prettily.
Technorati Tags: ALM WIT TFS Custom TFBS Version Control WPF TFS
If you've made it this far, it's worth connecting with our principal consultant and coach, Martin Hinshelwood, for a 30-minute 'ask me anything' call.
We partner with businesses across diverse industries, including finance, insurance, healthcare, pharmaceuticals, technology, engineering, transportation, hospitality, entertainment, legal, government, and military sectors.
NIT A/S