Within the Visual Studio Source Control Explorer, there are a number of options available for getting files out of TFS. Often times, developers just want to get the latest code to work with. But in some scenarios, developers need to get source files based on alternate criteria, such as by a specific date or label. TFS provides a handful of options for selecting source files easily within the “Get Specific Version” dialog.
This works really well within Visual Studio, but how can you do this programmatically? As it turns out, the Workspace.Get() method has an overloaded method that takes a VersionSpec argument. Notice that VersionSpec is actually a base class. and that there are several inherited classes that can be used to specify the changeset type, including:
- ChangesetVersionSpec
- DateVersionSpec
- LabelVersionSpec
- LatestVersionSpec (equivalent to VersionSpec.Latest)
- WorkspaceVersionSpec
For example, if you wanted to perform a GET on a specific changeset, you would simply pass an instance of ChangesetVersionSpec:
'connect to source control and get reference to existing workspace Dim server As TfsTeamProjectCollection = _ TfsTeamProjectCollectionFactory.GetTeamProjectCollection("http://myTfsServer:8080") Dim vcs As VersionControlServer = _ server.GetService(Of VersionControlServer)() Dim ws As Workspace = vcs.GetWorkspace("MyExistingWorkspace", My.User.Name) 'Perform a GET on Changeset 100 Dim version As New ChangesetVersionSpec(100) ws.Get(version, GetOptions.GetAll)
Performing a GET based on a pre-defined label works in much the same way (just replace the ChangesetVersionSpec object with a LabelVersionSpec object):
'connect to source control and get reference to existing workspace ' (same as above)... 'Perform a GET on items defined by label "My Label" Dim version As New LabelVersionSpec("My Label") ws.Get(version, GetOptions.GetAll)
Updated 2/28/2012: Revised code sample for TFS 2010 API.
What references are required for this API to work properly? I am rewriting this API for a C# project, and I’m having difficulty finding and using the right assemblies for this to function.
Thank you,
Joseph