TFVC api:如何获取文件属性(“可执行文件”和“符号链接”)

Posted

技术标签:

【中文标题】TFVC api:如何获取文件属性(“可执行文件”和“符号链接”)【英文标题】:TFVC api: how to get the file properties ('executable' and 'symlink') 【发布时间】:2021-01-10 03:20:09 【问题描述】:

我在 TFVC 版本控制中有一些可执行文件和其他符号链接。

当您查看 UI 中的变更集时,我们可以看到该文件具有一个属性:

当使用 TFVC API callVersionControl.QueryHistory() 和 nuget 包Microsoft.TeamFoundationServer.Client 时,我还可以看到与添加文件对应的更改有一个属性:

我的问题是使用 TFVC Api,我不知道如何获取此更改的属性。

我想找到一种方法来了解包含在变更集中的这种“属性”变更类型的类型。尤其是如何知道这个“属性”是“可执行”属性还是“符号链接”属性。

TFVC 似乎知道文件是符号链接,因为它显示的图标有点不同(注意箭头):

检索到的对象类型:

变更集:Microsoft.TeamFoundation.VersionControl.Client.Changeset 更改:Microsoft.TeamFoundation.VersionControl.Client.Change 文件/项目:Microsoft.TeamFoundation.VersionControl.Client.Item(包含名为 AttributesPropertiesPropertyValues 的集合,可能包含数据但为空)

Internet 或 MSDN 文档在这里没有帮助:(

注意:目标是添加对git-tfs的支持

【问题讨论】:

【参考方案1】:

您可以在 Libray Microsoft.VisualStudio.Services.Client 中查看 TfvcItem 类。 TfvcItem 对象具有IsSymbolicLink 属性来确定该项目是否是符号链接。

你可以使用TfvcHttpClient对象方法获取ChangeSets,然后 获取 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().Result;
      
 foreach (var changeset in changesets)
 
       var changesetRes =  tfvcClient.GetChangesetChangesAsync(changeset.ChangesetId).Result;
            
       foreach (var change in changesetRes) 
       
          var item = (TfvcItem)change.Item;
       
  

参见下面的 TfvcItem 对象:

【讨论】:

对于符号链接,ItemType 仍然是 File。谢谢。我会去TfvcItem看看。您知道如何检索“可执行”标志吗? 布尔值IsSymbolicLink 似乎总是false。所以这个解决方案不起作用:(但我会尝试其他一些电话,看看我是否可以填充它...... 好的。我可以在调用GetItemsAsync() 时填充IsSymbolicLink 属性。所以没关系。但是对于“可执行”标志,你有什么想法吗? ContentMetadata 对象的ContentMetadata 属性中查看项目的extension 怎么样。 ContentMetadata 这似乎很有趣,所以我已经看过它但总是null :(【参考方案2】:

“Team Explorer Everywhere”以某种方式创建了一个 KVP,其密钥名为 Microsoft.TeamFoundation.VersionControl.Executable,我猜是 ContentMetadata,它显然是 NULL - 应该在 API 中的哪里获取这些数据?

【讨论】:

我没有足够的声望添加到上一组 cmets。

以上是关于TFVC api:如何获取文件属性(“可执行文件”和“符号链接”)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用C#(Visual Studio)从TFS(Team Foundation Server)获取/复制文件

如何取消ubuntu可执行文件属性

获取“驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置”虽然设置正确的路径

如何设置文件属性 7zS.sfx 自解压可执行文件

如何以编程方式将 Google Sheet 脚本发布/部署为 API 可执行文件?

无法通过REST API为punlisherId = tfs和eventId tfvc.checkin创建VSTS webhook订阅