我正在尝试为perforce中保留的项目自动化一些构建。我想提取当前的更改列表编号作为标记构建版本的方法。
此命令:
p4 changes -s submitted ... | head -1
非常接近于我所需要的,除非我没有从perforce检出最新版本。上面的命令(似乎)显示所有更改列表,而不仅仅是我签出的更改列表。
有没有办法获取最近同步到更改列表的更改列表号?
注意:我来自更多的CVS / git背景,因此我的术语可能已关闭。
答案 0 :(得分:3)
尝试运行'p4 cstat ...'。这将告诉您,对于影响“...”中文件集的每个更改列表,您是否拥有该更改列表,需要它还是部分同步。
答案 1 :(得分:2)
我同意" p4 cstat"方法
我使用它像:p4 cstat | P4-version.awk 这是以下脚本:
#! /usr/bin/awk -f
# The input format is:
# ... change 654056
# ... status have|need|partial
# So what we do:
# find the first "need" or "partial"
# and we might add +N as the number of other changes we have
# Major is never 0. Hence End is set only once, to a non-zero.
# Note: it's assumed that 0 is not a valid P4 changelist.
# so 0+1-1 means: no entire changelist (i.e. the initial one)
# has been (entirely) synced.
# major is the last p4 CL processed
# end is the last CL, up to which _fully_ synced.
# plus/minus additional/missing CLs.
BEGIN {end=0; contiguous=1; plus=0; minus=0}
/^... change ([0-9])+/ {
change=$3;
};
# we have 2 states: 1/ until now all have -- contiguous=1
# 2/ already something not "have"
# (end=0) state 1
/^... status have/ {
if (!contiguous)
plus++;
else
end=change;
};
/^... status (partial|need)/ {
minus++;
if (contiguous) {
contiguous = 0;
};
}
END {
if (!contiguous)
printf "%d+%d-%d\n", end, plus, minus;
else
printf "%d\n", end;
}
答案 2 :(得分:2)
虽然我不确定它是否适用于这个问题但是我希望展示一个解决方案,让您获得最新的更改列表,直到您已同步的更改列表(即您可以在您的客户端上同步新的更改列表)一些较旧的,例如,如果您自己提交了更改而没有事先同步其他人提交的一些更改。)
使用以下命令列出未同步到客户端的所有更改:
p4 changes ..."#>have"
如果您提取该列表的最后一个更改列表并减去1,您将获得更改列表编号,并且您已同步所有内容而没有间隙:
echo $((`p4 changes ..."#>have" | tail -1 | awk '{print $2}'`-1))
答案 3 :(得分:1)
要在客户端上查找最新的更改列表,请使用以下命令:
p4 changes -m 1 @name_of_your_client_here
客户名称可以像标签一样。
答案 4 :(得分:0)
我认为以下内容可以满足您的需求:
p4 fstat -T headChange ... | cut -d' ' -f3 | sort -nr | head -1
p4 fstat
非常好用,它不仅需要一个过滤器(通过-F
选项),还需要一个字段选择参数(使用-T
选项)。
答案 5 :(得分:0)
你想要的是你文件的'haveRev':
rev = `p4 fstat -T haveRev <filename>|cut -d' ' -f3`
然后你可以像这样查找更改数字:
p4 filelog <filename>|grep $rev|cut -d' ' -f4
请注意,我使用了签出树的特定文件。