2015-09-12 2 views
1

Есть ли способ узнать, соответствует ли конкретная папка, отображаемая в существующей рабочей области tfs, local workspace or a server workspace?Как определить, является ли рабочее пространство TFS локальной или серверной рабочей областью

Меня больше интересует ответ с помощью команды tf.exe или powershell или даже api (но не с графическим интерфейсом!).

ответ

1

После долгого поиска (часы и часы в очень плохой документации msdn о команде tf.exe!), Я нашел способ получить информацию!

Сначала вы должны использовать команду tf.exe workfold c:\your\path, чтобы узнать, в какой рабочей области находится папка. Вывод команды что-то вроде этого:

================================================================ 
Workspace : NameOfYourWorkspace (John Doe) 
Collection: https://tfs.yourtfs.com/tfs/defaultcollection 
$/: C:\your\path 

Затем вы должны извлечь «рабочее пространство» (примечание: на самом деле мы не знаем, почему здесь команда tf.exe не выводим рабочую область в формат, понимаемый везде tf.exe команда т.е. «WorkspaceName; Владелец» и, следовательно, должны быть адаптированы) и данные «коллекции», чтобы использовать его в команде tf.exe workspaces /format:detailed, как это:

tf.exe" workspaces /format:detailed /collection:"https://tfs.yourtfs.com/tfs/defaultcollection" "NameOfYourWorkspace;John Doe" 

Вывод команды что-то вроде этого:

=============================================== 
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 
!

важные данные, которые я хочу здесь Location : Local (или Server)

Я написал немного Powershell скрипт, если он может быть мало пользы для кого-то, чтобы извлечь данные на выходе, чтобы использовать их:

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!!!" 
} 

Этот скрипт дает ответ только для текущей папки, но может быть легко адаптирован ...

Смежные вопросы