Question:
Is there a way to find out if a specific folder mapped in an existing tfs workspace is a local workspace or a server workspace?
I’m mostly interested by an answer using the tf.exe
command or powershell
or even api (but not with the GUI!).
Answer:
After a long search (hours and hours in the very bad msdn documentation about the tf.exe
command!), I have found the way to get the information!
First you have to use the tf.exe workfold c:\your\path
command to find out in which workspace the folder is. The command output something like that:
1 2 3 4 5 |
================================================================ Workspace : NameOfYourWorkspace (John Doe) Collection: https://tfs.yourtfs.com/tfs/defaultcollection $/: C:\your\path |
Then you have to extract the ‘workspace’ (note: we really don’t know why here the tf.exe
command don’t output the workspace in the format accepted everywhere by the tf.exe
command i.e. “WorkspaceName;Owner” and consequently should be adapted!) and ‘collection’ data to use it in the tf.exe workspaces /format:detailed
command, like that:
1 2 |
tf.exe" workspaces /format:detailed /collection:"https://tfs.yourtfs.com/tfs/defaultcollection" "NameOfYourWorkspace;John Doe" |
The command output something like that:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
=============================================== Workspace : NameOfYourWorkspace Owner : John Doe Computer : YOU_COMPUTER Comment : Collection : yourtfs.com\DefaultCollection Permissions: Private Location : Local File Time : Current Working folders: $/: C:\your\path |
The important data that I want here is Location : Local
(or Server
)
I have written a little powershell script, if it could be of little use for someone to extract the data in the output to use them:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
function ExtractData($text, $key) { $pattern = "^$key *: *(.+)$" $filteredText= $text | Select-String $key $found = $filteredText -match $pattern if ($found) { return $matches[1] } exit 1 } $currentWorkspaceData = (& "$env:VS120COMNTOOLS..\IDE\tf.exe" workfold .) $workspace = ExtractData $currentWorkspaceData "Workspace" $found = $workspace -match "^(.+) \((.+)\)$" if (!$found) { exit 1 } $workspace = $matches[1] + ";" + $matches[2] $collection = ExtractData $currentWorkspaceData "Collection" $location=(ExtractData (& "$env:VS120COMNTOOLS..\IDE\tf.exe" workspaces /format:detailed /collection:$collection $workspace) "Location") $localServer = $location -eq "Local" if($localServer) { Write-Host "Local!!!" } else { Write-Host "Server!!!" } |
This script give the answer only for the current folder but could be easily adapted…