tags:

views:

590

answers:

2

I would like to see all files that are locked. so far, I've only found to use tf.exe status and look for anything with '!' because they are not reported as "lock, edit" as they are in the UI. Any ideas? thanks.

+1  A: 

I don't think this is possible using tf.exe or even tfpt.exe (The Power Tool command line). You'll need to look through the pending changesets for changes that are locks. You could do this in powershell using the Power Tool commandlets or you could do it using the following bit of .NET code that exercises the TFS API:

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace TfsApiExample
{
  class Program
  {
    static void Main(string[] args)
    {
      GetLockedFiles("http://tfsserver:8080","$/TeamProject");
    }

    private static void GetLockedFiles(string serverUrl, string serverPath)
    {
      TeamFoundationServer tfs = new TeamFoundationServer(serverUrl);
      VersionControlServer vcServer = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));

      // Search for pending sets for all users in all 
      // workspaces under the passed path.
      PendingSet[] pendingSets = vcServer.QueryPendingSets(
          new string[] { serverPath }, 
          RecursionType.Full, 
          null, 
          null);

      Console.WriteLine(
          "Found {0} pending sets under {1}. Searching for Locks...",
          pendingSets.Length, 
          serverPath);

      foreach (PendingSet changeset in pendingSets)
      {
        foreach(PendingChange change in changeset.PendingChanges)
        {
          if (change.IsLock)
          {
            // We have a lock, display details about it.
            Console.WriteLine(
                "{0} : Locked for {1} by {2}",
                change.ServerItem, 
                change.LockLevelName, 
                changeset.OwnerName);
          }
        }
      }

    }
  }
}
Martin Woodward
+2  A: 

If you have the power tools installed, it's a one-liner:

tfstatus . -r -user * | % { $_.pendingchanges } | ? { $_.islock } | select -unique serveritem

If you prefer GUIs to scripts, try TFS Sidekicks.

Richard Berg
This looks great. I just installed the power tools the other day but I didnt know it had power shell commandlets. Do you know where I can find documentation on these guys? Also, how to I set it up so powershell can find the dlls?
TheSean
There should be documentation included in the help file. Also within powershell via the 'help' command. The snap-in and aliases will load automatically if you run the "powershell console" link on the start menu. Or you can copy the settings from the install directory into your $profile. Read my blog for details: http://richardberg.net/blog
Richard Berg
Couldn't figure out how to do this in TFS Sidekicks. Guess I'll try the power tools.
Patrick Szalapski
I had a problem that the TFS Powertools Console didn't know where the TFS server was. The easiest way to tell it is to have the console's shortcut "start in" the root of my local working copy; that way, it automatically detects the TFS server. However, I ran into a problem that the pathname in the shortcut was too long for Windows GUI to handle! I had to uninstall TFS powertools and reinstall them into a shorter path; then, the shortcut GUI would allow me to edit the "start in" directory. I started the console and the above command worked.
Patrick Szalapski