TFVC api: как получить свойства файла (‘исполняемый файл’ и ‘символическая ссылка’)

#api #tfs #tfvc #tfs-sdk

#API #tfs #tfvc #tfs-sdk

Вопрос:

У меня в системе управления версиями TFVC некоторые файлы являются исполняемыми, а другие — символическими ссылками.

Когда вы смотрите на наборы изменений в пользовательском интерфейсе, мы видим, что у файла есть свойство: скрипт с исполняемым свойством

При использовании вызова API TFVC VersionControl.QueryHistory() с пакетом nuget Microsoft.TeamFoundationServer.Client я также мог видеть, что изменение, соответствующее добавлению файла, имеет свойство:

файл со свойством из API

Моя проблема в том, что, используя TFVC Api, я не знаю, как получить свойства этого изменения.

Я хочу найти способ узнать, каков тип этого типа изменения «свойства», который включен в набор изменений. Особенно, как узнать, является ли это «свойство» свойством «исполняемый файл» или «символическая ссылка».

TFVC, похоже, знает, что файл является символической ссылкой, потому что он отображает немного другой значок (обратите внимание на стрелку):

значок символической ссылки

Тип извлекаемого объекта:

  • набор изменений: Microsoft.TeamFoundation.VersionControl.Client.Changeset
  • изменить: Microsoft.TeamFoundation.VersionControl.Client.Change
  • файл / элемент: Microsoft.TeamFoundation.VersionControl.Client.Item (содержащий названные коллекции Attributes Properties или PropertyValues , возможно, может содержать данные, но они пусты)

Документация по Интернету или MSDN здесь не поможет: (

Примечание: Цель состоит в том, чтобы добавить поддержку в git-tfs

Ответ №1:

Вы можете проверить класс TfvcItem в Libray Microsoft.VisualStudio.Услуги.Клиент. Объект TfvcItem имеет IsSymbolicLink свойство определять, является ли элемент символической ссылкой или нет.

Вы можете получить наборы изменений, используя метод объекта TfvcHttpClient, а затем получить объект TfvcItem. Смотрите пример ниже:

  string tfsurl= "http://instance/tfs/DefaultCollection";
 string Project = "project";
 
 NetworkCredential netCred = new NetworkCredential("username", @"password", "domain");
            
 Microsoft.VisualStudio.Services.Common.WindowsCredential winCred = new Microsoft.VisualStudio.Services.Common.WindowsCredential(netCred);
     
 VssConnection _connection = new VssConnection(new Uri(tfsurl), winCred);

 TfvcHttpClient tfvcClient = _connection.GetClient<TfvcHttpClient>(); 

 var changesets = tfvcClient.GetChangesetsAsync().Resu<
      
 foreach (var changeset in changesets)
 {
       var changesetRes =  tfvcClient.GetChangesetChangesAsync(changeset.ChangesetId).Resu<
            
       foreach (var change in changesetRes) 
       {
          var item = (TfvcItem)change.Item;
       }
  }
  

Смотрите ниже объект TfvcItem :

введите описание изображения здесь

Комментарии:

1. Для символической ItemType ссылки все еще File есть . Спасибо. Я посмотрю TfvcItem . У вас есть идея о том, как получить флаг «исполняемый файл»?

2. Кажется, что логическое IsSymbolicLink значение всегда false . Итак, это решение не работает: ( Но я попробую несколько других вызовов, чтобы узнать, смогу ли я его заполнить…

3. ОК. Я могу IsSymbolicLink заполнить свойство при вызове GetItemsAsync() . Так что все в порядке. Но для флага «исполняемый файл» у вас есть идея?

4. Как насчет просмотра элемента extension в ContentMetadata свойстве TfvcItem объекта.

5. ContentMetadata что кажется интересным, так что я уже смотрел на это, но всегда null : (

Ответ №2:

«Team Explorer Everywhere» каким-то образом создает KVP с ключом, названным Microsoft.TeamFoundation.VersionControl.Executable , как я предполагаю ContentMetadata , ключом, который, по-видимому, равен НУЛЮ — где эти данные должны быть извлечены в API?

Комментарии:

1. У меня не было достаточной репутации, чтобы добавить к предыдущему набору комментариев.