Welcome to MSDN Blogs Sign in | Join | Help

BUGBUG: poor title

Richard Berg's look at source control and life
PowerShell example: adding items from a changeset to a label

A recent request: "I want to be able to add a label to all files that were modified/added/whatever as part of a changeset."  Sounds like a job for PowerShell!

function label-changeset (
      [string] $serverName
      [string] $labelName
      [int] $changeset = $(throw 'Usage: label-changeset <server> <labelName> <changeset>') )
{
      # get TFS object
      $tfs = get-tfs $serverName

      # set label info
      $label = new-object $tfs.versioncontrollabel ($tfs.vcs, $labelName, $null, $null, "example label")
      
      # build up list of items
      $labelItemSpecs = @()
      $tfs.vcs.GetChangeset($changeset).Changes | foreach
            $itemSpec = new-object $tfs.itemspec ($_.Item.ServerItem, $tfs.recursiontype::none)
            $changesetSpec = new-object $tfs.changesetversionspec ($changeset)
            $labelItemSpecs += new-object $tfs.labelitemspec ($itemSpec, $changesetSpec, $False);
       

      # construct the label
      $tfs.vcs.CreateLabel($label, $labelItemSpecs, $tfs.LabelChildOption::Replace)
}

Note the similarity to James' CreateLabel example.  The only difference is that we iterate over the items returned by GetChangeset() instead of taking the items as parameters.  And since this is PowerShell, not only does our function create the label on the server, it also returns an honest-to-god Label object you can pipe to other commands.

RICBERG470> label-changeset http://jpresto-test:8080 myLabel 10

Label     Scope    Status
-----     -----    ------
myLabel   $/r      Created

Cool!  Note: this requires my modified get-tfs cmdlet.

Posted: Wednesday, February 21, 2007 11:03 PM by Richard Berg
Filed under: ,
New Comments to this post are disabled
Page view tracker