目前已检出perforce中的目录/文件版本

时间:2011-04-04 02:05:14

标签: scripting automation perforce

我正在尝试为perforce中保留的项目自动化一些构建。我想提取当前的更改列表编号作为标记构建版本的方法。

此命令:

p4 changes -s submitted  ...  | head -1

非常接近于我所需要的,除非我没有从perforce检出最新版本。上面的命令(似乎)显示所有更改列表,而不仅仅是我签出的更改列表。

有没有办法获取最近同步到更改列表的更改列表号?

注意:我来自更多的CVS / git背景,因此我的术语可能已关闭。

6 个答案:

答案 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

请注意,我使用了签出树的特定文件。