views:

1070

answers:

3

In Team Foundation Server, I know that you can use the "Annotate" feature to see who last edited each line in a particular file (equivalent to "Blame" in CVS). What I'd like to do is akin to running Annotate on every file in a project, and get a summary report of all the developers who have edited a file in the project, and how many lines of code they currently "own" in that project.

Aside from systematically running Annotate of each file, I can't see a way to do this. Any ideas that would make this process faster?

PS - I'm doing to this to see how much of a consultant's code still remains in a particular (rather large) project, not to keep tabs on my developers, in case you're worried about my motivation :)

+7  A: 

It's easy enough to use the "tf.exe history" command recursively across a directory of files in TFS. This will tell you who changed what files.

However what you're after is a little bit more than this - you want to know if the latest versions of any files have lines written by a particular user.

The Team Foundation Power Tools ship with a command-line version of annotate called "tfpt.exe annotate". This has a /noprompt option to direct the output to the console, but it only outputs the changeset id - not the user name.

You can use my tool tfsblame.exe to output the usernames: http://ozgrant.com/2006/07/11/tfsblameexe-who-wrote-that-line-of-code/

Then you could use something like this to run it across all files: C:\Code\Project1> for /R %a in (*) DO tfsblame.exe /server:yourserver "%a" >> output.txt

Or you could use the TFS VersionControl object model to write a tool that does exactly what you need.

Grant Holliday
This seems close to what I'd like to do, though I'll still have to do the aggregating myself. I'll probably use this code as a springboard to write my own tool, actually, since I doubt this is the last time I'll have to do this.
rwmnau
A: 

If you install the TFS Power tools (at least for VS2005); it's called annotate.

It might be part of VS2008...

Mitch Wheat