如何动态解析TF命令的输出

时间:2018-03-23 07:37:38

标签: tfs tfs2015 azure-pipelines azure-pipelines-build-task

我正在尝试使用TF命令执行条件签入(如下所示),

tf checkin /force /comment:"Some comment" /noprompt /override:"Check-in"

然而问题是当我的文件没有改变时,上面的命令抛出错误(有意义!)。所以我希望使用 folderdiff 命令运行某种条件检查,并在尝试登记之前解析输出。

tf folderdiff $/project/code d:/mycode /recursive /noprompt

此命令会抛出类似下面的内容,

摘要:2个文件夹,19个文件,0个源,0个目标,0个不同,0个有错误

问题是 - 我如何动态解析(检查是否有任何文件)并转入办理登机手续?

2 个答案:

答案 0 :(得分:0)

  

“命令提示符”窗口中显示的输出列出了所有文件   在以下五个部分的文件夹中:

     
      
  • 仅存在于服务器文件夹中的项目。
  •   
  • 仅存在于本地文件夹中的项目。
  •   
  • 内容不同的项目。
  •   
  • 具有相同内容的项目(必须使用/ view选项指定相同的参数)。
  •   
  • 概要
  •   

如果文件之间存在差异,您可以在Show Items That Have Different Contents部分看到它。

enter image description here

您的示例"摘要:2个文件夹,19个文件,0个源,0个目标,0个不同,0个有错误"表示服务器和本地文件夹之间没有区别。

答案 1 :(得分:0)

解决方法如下。
首先,我使用了标准的 folderdiff 命令,并将输出重定向到单独的文本文件。 然后我创建了一个powershell脚本,然后在文本文件中查找模式并且(如果找到模式)然后设置一个标志(在TFS中定义一个名为MyVar的自定义变量),

$data= (Get-Content -Path $someFilePath | where-Object {$_ -like '*Your string pattern....*'})

if (([string]::IsNullOrEmpty($data)))
{
    Write-Host "##vso[task.setvariable variable=MyVar]True"      
    Write-Verbose "No files modified, so no check-in."
} 

最后,使用此变量(MyVar)创建运行TF checkin命令的条件步骤。