我想列出已对某些软件仓库路径进行更改的更改
p4 changes //depot/path/blah/...
不会正确地限制对给定的软件仓库路径上发生的更改,但实际上会列出在视图路径等于的工作空间上所做的更改,或者该路径的超集,无论是否有任何实际更改的文件位于感兴趣的路径中。
e.g。在包含这些路径之一的视图的工作空间中所做的更改:
//depot/path/blah/...
//depot/path/...
//depot/...
(可能还要求在其中一条路径上提交文件,我还没有测试过额外的要求)
在// depot / ...上创建一个视图可能很愚蠢,但是如果有人这样做了,那么他们对// depot / OTHER-PATH / ...的更改将由
提取p4 changes //depot/path/blah/...
如何将p4更改限制为实际将文件提交到指定路径的更改?
我可以读取p4更改的整个输出并运行: p4文件@ = $ {change} | grep' ^(...)' where ...是一个正则表达式,用于匹配我传递给p4的所有库路径更改,以检测是否有任何文件实际位于相关的库路径中
但是必须仔细检查所有输出似乎非常昂贵,肯定perforce可以过滤或检查p4变化的输出吗?
感兴趣的是完整的BASH代码段,$ @是一个库路径列表(但没有对$ @进行适当的输入完整性检查):
ifs_join() { echo "$*" ; }
p4 changes -s submitted -i "$@" |
while read _1 change _rest ; do
p4 files @=$change 2>&- |
egrep "^($(IFS='|' ifs_join "${@%%...}"))" >/dev/null && echo "$_1 $change $_rest"
done