如何测试repo中路径中的文件是否存在?

时间:2013-10-29 15:47:16

标签: perforce

给定路径(在我的计算机上),如何测试该文件是否受版本控制(即Perforce库中存在副本)?我想在命令行测试一下。

3 个答案:

答案 0 :(得分:6)

检查p4 help files。简而言之,您运行p4 files <your path here>,它将为您提供该文件的库路径。如果它不在仓库中,你将得到“没有这样的文件”。

答案 1 :(得分:1)

对于脚本来说,p4 files FILE是不够的,因为在没有这样的文件时,它不会更改退出代码。

相反,您可以将其传递给grep,后者会查找perforce路径的一对引号斜线:

# silently true when the file exists or false when it does not.
p4_exists() { 
  p4 files -e "$1" 2>/dev/null |grep -q ^//
}

如果想要可见的输出,可以摆脱2>/dev/null和grep的-q

p4 files version 2012.1(例如p4 files version 2011.1)之前,它不支持-e。您必须在上面的grep之前添加|grep -v ' - delete [^-]*$'

  

⚠ 警告:将来的p4版本可能会更改格式并破坏这种逻辑。

答案 2 :(得分:0)

与Adam Katz的解决方案类似,除了更可能由p4的未来版本支持之外,您可以将global option -s传递给每一行“在其前面加上一个描述性字段”。这是“文本”,“信息”,“错误”或“退出”之一,后跟冒号(和空格)。这是为了简化脚本编写。

对于传递到p4 -s files命令的所有文件,您应该每个文件返回一行。如果该文件存在于软件仓库中,则该行以info:开头,而如果该文件不存在于软件仓库中,则该行以error:开头。例如:

info: //depot/<depot-path-to-file>
error: <local-path-to-file>

因此,从本质上讲,状态行与退出代码等效,但基于每个文件。单独的退出代码并不能很好地处理传入的任意数量的文件。

请注意,如果存在其他错误(例如,连接错误),则仍然会输出错误行。因此,如果您真的想使处理过程更健壮,则可以将其与Adam Katz的建议或grep结合使用,作为输出行中文件的基本名称。