给定路径(在我的计算机上),如何测试该文件是否受版本控制(即Perforce库中存在副本)?我想在命令行测试一下。
答案 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结合使用,作为输出行中文件的基本名称。