Mohamed Mahmoud (El-Geish)

That's me blogging about Microsoft Visual Studio Team Foundation Add to Windows Live Alerts

How to: Label items in a changeset using tf label?

We can specify the versionspec to tf label either by supplying the /v or /version argument (for example, /v:C1256), or by appending it to the itemspec (for example, foo.cs;C1256). Here's an example that attaches the "goodbuild" label to version 1256 of $/proj/foo.cs:

tf label goodbuild /v:1256 $/proj/foo.cs

What about labeling all items in a certain changeset? We need to get a list of these items first:

tf changeset 1256

But this will invoke the changeset dialog, so we have to use the /noprompt  or /i to get the output in the command prompt window:

tf changeset 1256 /i

The output includes extra info like changeset number, owner, date, comment, and check-in notes. To extract the lines of the Items section, which contains the itemspecs, pipe the output to the find command:

tf changeset 1256 /i | find "$/"

This should work just fine as long as "$/" doesn't show up else where, in a comment for instance. Apply more filters if necessary! The output should look like the following:

    add        $/proj/foo.cs
    edit       $/proj/fold/bar.cs
    ...

We still got the Change column to get rid of, this can be accomplished using the parsing keywords of the for command that we will use for iteration:

for /f "usebackq tokens=2 delims=$" %i in (`tf changeset 1256 /i ^| find "$/"`) do tf label goodbuild /v:1256 $%i

We used the for command to iterate, the /f option specifies file parsing, and the "usebackq" parsing keyword indicates that the input file is the output of the command in the back quoted string, which in this case is:

`tf changeset 1256 /i ^| find "$/"`

We added the caret "^" to escape piping "|", otherwise, we will get the following error message:

| was unexpected at this time.

The parsing keywords do a great job to parse each line; "token=2 delims=$" passes the 2nd token from each line to the for body, with tokens delimited by $. That's why we had to prepend the $ to the itemspec in the for body as we lost it while parsing:

tf label goodbuild /v:1256 $%i

We may use any of the ways we saw before to specify the versionspec, such as:

tf label goodbuild $%i;C1256

So, the command would look like the following:

for /f "usebackq tokens=2 delims=$" %i in (`tf changeset 1256 /i ^| find "$/"`) do tf label goodbuild $%i;C1256

Published Thursday, March 27, 2008 3:28 PM by mohamedg
Filed under: , ,

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

No Comments

Leave a Comment

(required) 
(optional)
(required) 
Submit

© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker