Team Foundation Server 2008 SP1 Preview
The stream of new stuff coming out for VS/VSTS/TFS 2008 continues! – see my recent post on an update to the TFS Power Tools. It is time for me to tell you about what is coming in TFS 2008 SP1. The release of the Beta is very close (as always, don’t ask me for a date but if you want to play with it when it comes out, start figuring out how you are going to find the time :)).
TFS 2008 SP1 is going to be another fantastic release. In TFS 2005 SP1, we started the tradition of adding small, tactical features that address common customer requests or enable delivering new value out of band. In TFS 2008 SP1, that practice has gone into overdrive and we are delivering a ton of great new stuff for you. Keeping with the theory that an SP should always be better (more stable, faster, etc) than what came before it, we continue to focus on tactical “low risk” improvements that are primarily based on customer feedback. We leave the big game changing, major new scenario features for our major releases.
I’ve blogged a bit about what is coming in Rosario (our next major release); you can read some of our Rosario specs and you can check out our CTPs but that’s not the point of this blog post. I’m going to start blogging more about Rosario in the next couple of months. For now I have so much great stuff to tell you about TFS 2008 that I can’t imagine bothering you much with stuff that still a good ways down the road.
In addition to a long list of bug fixes (which I plan to publish when we get closer to SP1 release), there is an amazing list of new features. The new features in TFS 2008 SP1 include:
- Add to Source Control – The Add to Source Control dialogs have been improved to make them easier to use and more scalable. This include such simple things as adding a menu option to the context menu on the folder tree. Also, the add experience has been turned into a wizard with the first page allowing you to select what you want to add and the second page making it easy to review what you are adding and filter out things that don’t make sense (.pdb, .exe, etc.)
- Drag & Drop – We’ve added the ability to drag files/folders from Windows Explorer (and other file drop sources) into the Source Control Explorer to add them. This ties in well with the new Add to Source Control experience. We have not yet added the ability to drag from the Source Control Explorer yet but if that’s something you want, say so and we’ll see if we can get it in a future release.
- Version control of unbound files – One of my personal favorite new features… Have you ever noticed that if you start typing in a version controlled file that is in an open solution, it auto-checks out and lets you keep typing? If the file is not in a solution you get weird read-only behavior. No longer! We now treat all version controlled files equally whether they are in the open project/solution or not – providing auto checkout, diff, and all of the other version control behavior. This makes it so much easier to work with version control when files outside the solution get loaded.
- Simpler working folder mappings – I suspect you’ll know what I mean when I say the “Workspace” dialog is not one of the more easily understood parts of TFS. We have now added abilities to the Source Control Explorer so that you rarely have to look at it. You can now right click on folders in the Source Control Explorer and map working folders, cloak mapped folders or unmap working folders. This is an easier and faster way to change where source is stored on your local hard drive. To further simplify this, we have added a link to the path bar in the source control explorer to indicate that no mapping has been created for a folder and give you a 1 click way of setting it.
- Checkin date/time column – We’ve gotten quite a few requests for a check date/time column in the Source Control Explorer. The feedback has been heard and now you have it. Ultimately we’d like to make the whole columnar display configurable but alas… that’s for another day.
- Local Path is now a link – The Local Path header in Source Control Explorer is now a link that allows you to easily open Windows Explorer to the folder.
- Editable source location – The field that displays the server folder in the Source Control Explorer is now editable to make is easy to change to a new folder by just typing rather than navigating the tree view.
- Download files to a stream – If you build TFS extensions, this can be a handy addition. Instead of having download files to temp files and then read them back in and manage deleting the temp files, you can download directly in memory and process the contents. I’m expecting some cool new Power Tools later this summer that will take advantage of this new feature.
Work Item Tracking
- Ribbon support for Office 2007 – Instead of the uglier “add-in” experience that you now have with TFS 2008 & Office 2007, we now have clean and easy to use ribbon support for all relevant TFS operations.
- Easily email work items – We’ve added support to Team Explorer to make it very easy to email a work item or a list of work items. If you have Team System Web Access, these emails will contain links to it, giving recipients a great ability to explore related work items.
- Easily locate TFSBuild.proj file – We added a right click menu item on the build definition in Team Explorer to take you to the TFSBuild.proj file in the Source Control Explorer.
- Conditionalize builds on the trigger – We added the ability for a build script to detect how it was triggered so that you can have slightly different behaviors for CI, sheduled, manual, etc builds.
- Detect test result – Rather than just failing the build, you can now detect the results of tests and conditionalize the build script on it.
- Dynamically created properties – Dynamically created properties in the build can now be passed to solutions/projects.
- Reduce build log noise – Eliminate “noise” created by project to project references. Now you will only get 1 message about each.
- Query build definitions across Team Projects – Added an object model API for querying build definitions across Team Projects.
Visual SourceSafe migration tool (vssconverter.exe)
We have received a significant number of reports of problems trying to the the vssconverter to move from VSS to TFS. In TFS 2008 SP1, we invested very heavily in testing and bug fixing. In addition to the few high level things I’ve called out here, we fixed many dozens of bugs – many of which were reported by customers. We have also invested heavily in testing – collecting more than 20 customer VSS databases and making sure that the vssconverter handles them all seamlessly. I strongly recommend you use this new vssconverter over any previous version. I believe you will have a significantly better experience. If you still have problems, we most certainly want to know about them.
- Elimination of namespace conflicts – Properly convert files where a file was deleted and a different file was subsequently renamed to the same name (and some similar scenarios). This is the #1 most common issue that people have had with the current converter.
- Automatic solution rebinding – When converting a source tree, automatically change the binding in all solution and project files to bind to TFS rather than SourceSafe. This eliminates a time consuming post conversion manual process.
- Correction of timestamp issues – Many VSS databases contain timestamp inconsistencies (due to VSS using a client timestamp rather than a server one). The converter now adjusts for this problem rather than getting confused.
- Improved logging – The conversion logging messages are now more clear and provide more information necessary to diagnose what is wrong when the conversion process needs attention.
- SQL 2008 support – When we released TFS 2008, it was compatible with SQL 2008 builds that were available at that time. Unfortunately, in the interim, there have been changes to SQL 2008 that broke TFS. TFS 2008 SP1 includes the necessary changes to work with final SQL 2008 builds. There will be a few “special” steps for installing TFS 2008 SP1 with SQL 2008. Keep your eyes peeled for a newer post that gives the details of installing TFS 2008 SP1 with SQL 2008.
- Team System Web Access links – If you’ve ever clicked on the link next to a filename in a checkin notification mail, then you know the feeling of disappointment 🙂 Unfortunately it doesn’t give you the information you want. With TFS 2008 SP1, if you have Team System Web Access installed, those links are now alive. You can directly view the changes using the TSWA diff viewer. This isn’t the only place we’ve added the links – we’ve added TSWA links to many of the notification mails (work item changed, etc). Overall a much nicer experience for people who don’t live and die in Team Explorer.
- # of projects per sever – Constraints on the number of projects per server have been written about quite a bit. In TFS 2008 SP1, we have made some important improvements. To refresh your memory, the primary issue is that the size of the cache that the TFS client downloads is proportional to the number of projects on the server. This cache can get very large (10s of MBs) and slow things down to the point that usability is affected. The changes we have made for SP1 include:
- Only download metadata for projects a user has access to. By only granting access to the projects a user needs, it will dramatically reduce the size of the metadata they download.
- Implemented cache compaction to remove some stale data from the cache that is no longer used. We have seen 30% or better improvements from this in some circumstances.
- Improved the speed of the Connect To TFS experience when there are a large number of projects in the list. We saw about an 80X improvement on one of our internal servers.
- Create Team Projects with a script – This has been a popular request since we first released TFS 2005. Now you can do it. You still must have Team Explorer installed on any client you want to use to create Team Projects, however, it can be scripted. There is a new Visual Studio API (I’ll blog a sample in the near future) to do this or, even more easily, you can use a new command “tfpt createteamproject” in the March 2008 release of the TFS Power tools to do this easily from the command line or a batch file.
Performance & Scale
- Improved syncing identities from Active Directory – Our tests show syncing a group with 200,000 users dropped from 69 minutes to about 10 minutes. This can significantly reduce background overhead on a system with lots of users.
- Improved checkin concurrency – Checkins are globally serialized – meaning 2 checkins (overlapping or not) must be processed in order and the second must wait on the first to complete. In SP1, we were able to both improve the overall speed of checkin and reduce the blocking. The blocking period is now only about 1/3rd of the checkin time.
- tf branch /checkin – Creating new branches when they are large (ours are about 1,000,000 files) can be very time consuming. We have created an option for creating a branch that is much faster. tf branch /checkin creates the branch without first pending the changes and requiring a subsequent checkin operation. The result is about a 10X improvement in branch creation speed.
- Online index rebuilding – If you use SQL Enterprise with TFS, TFS will now rebuild indexes online allowing for less “downtime” for maintenance. If you use SQL Standard (which comes with TFS), then you will still get offline index rebuilding and your TFS server will not be responsive during weekly maintenance jobs. If your TFS database is small, it doesn’t really matter but as it gets into the terra-bytes, online index rebuilds become a must.
- Team build support for very large checkins – In TFS 2008 and previous versions, a very large checkin (hundreds of thousands of files) would trigger an out of memory error in TFS Build and prevent CI builds from triggering. The out of memory issue has been fixed in SP1 and all checkins should properly trigger builds.
- Faster security manager – We found an O(N^2) algorithm in the security manager for version control and have replaced it with an O(N) algorithm. It will help version control performance across the board. We found it on large Get operations (getting hundreds of thousands of files). The change reduced the security manager time from 5-6 minutes to a few seconds. The end result is that those gets were about twice as fast.
- tf get /remap – Kind of a complicated feature but dang handy if you need it. This is a new option on tf get that is intended to be used when you want to switch your workspace from one branch to another in the same code base. You first change the workspace mapping and then issue a tf get /remap. Because a large percentage of the files in two related branches are frequently identical, this command optimizes for that. Rather than downloading all the content, it will only download the things that are different between the two branches. I can reduce the get of a very large workspace from 10’s of minutes to a few seconds.
- Much, much more… – This is just a taste of the performance improvements we’ve made. As always, each release includes a roll up of performance improvements we’ve made for our own internal dogfooding of TFS. This release is no different. There are dozens of additional fixes that we’ve made to improve performance. If your installation is very large, you should notice nice responsiveness improvements across the board.
As you can see, we’ve packed a lot of value into this service pack. I hope all of this makes your days just a little bit better. As always, we’d love to hear your feedback. At this point, the service pack is just about done, so I can’t take a bunch of new feature requests and get them into this release but we can sure put them on the list for the next one. I’ll let you know as soon as the Beta is available and I’m eager to hear you feedback.