Perforce:如何查找更改列表的原始编号

在perforce中,变更列表会在提交时重新编号。因此对于例如当创建更改列表时,它将编号为777,但在提交更改列表时,它将重新编号为790。 我的问题是如果我知道旧的CL编号777,如何获得新的CL编号(790),反之亦然?     
已邀请:
如果您确实需要原始更改列表编号,可以从Perforce中检索,而无需在说明中嵌入原始更改列表编号。您可以使用-ztag命令行选项来获取它。而且你只能通过'changes'命令(据我所知)得到它:
d:sandbox>p4 submit -c 24510
Submitting change 24510.
Locking 1 files ...
edit //depot/testfile.txt#2
Change 24510 renamed change 24512 and submitted.

d:sandbox>p4 -ztag changes -m1 //depot/testfile.txt
... change 24512
... time 1294249178
... user test.user
... client client-test.user
... status submitted
... oldChange 24510
... desc <enter description here>
<saved
正如所指出的那样,它可能没那么有用。但是,我确实想要注意到它可以实现它。     
我能想到的唯一方法是将原始更改列表编号添加为更改列表描述字段的一部分。首先,您需要一个脚本来存储原始更改列表编号:
#!/bin/env perl
$id = $ARGV[0];
open (CHANGE_IN, "p4 change -o $id|");
open (CHANGE_OUT, "|p4 change -i $id");
while (<CHANGE_IN>)
{
    if (/^Description:/ and not /ORIGID/)
    {
        s/(^Description:)(.*)$/$1 ORIGID $id. $2/;
    }
    print CHANGE_OUT $_;
}
close (CHANGE_IN);
close (CHANGE_OUT);
将此设置保存为Perforce服务器上的origid.pl并设置可执行位。然后用
p4 triggers
设置一个触发器。
Triggers:
    add_origid change-submit //depot/... /usr/bin/origid.pl %change%
    
Perforce版本2012.1将-O(大写哦)参数引入p4 describe,它允许您按原始编号查询更改列表(在通过p4提交重新编号之前)。 我发现这非常有用,因为我经常发现自己在提交之前记录了变更集,然后忘记记录在提交时重新编号的内容。 因此,如果我有一个关于更改12300的说明,我现在可以通过键入以下内容来查看它所指的内容:
p4 describe -s -O 12300
并让Perforce告诉我:
Change 12345 by me@myhost on 2013/10/31 00:00:00

    Fix that thing I wrote that note about

Affected files ...

    ... //Proj/MAIN/foo.c
前面提到的ztag方法可用于查找提交的更改的旧更改列表编号:
> p4 -ztag describe -s 12345 | grep oldChange
... oldChange 12300
    
添加到Eric Miller的回复中,因为我无法评论(不够点): 只发出1个数字
p4 -ztag describe $ORIG | sed -e 's/^... oldChange //;t-ok;d;:-ok'
例如
OLD=$(p4 -ztag describe $ORIG | sed -e 's/^... oldChange //;t-ok;d;:-ok')
或者如果你想查找很多数字,这将在每一行输出一个
new old
的地图(对于“join”命令可能很有用)。如果没有旧提交,则它会重新发出新提交。
p4 -ztag describe 782546 782547 ... | sed -e '${x;p};s/^... change //;t-keep;b-next;:-keep;x;/./p;g;G;s/n/ /;x;d;:-next;s/^... oldChange //;t-ok;d;:-ok;H;x;s/ .*n/ /;x;d;'
我试图避免使用GNU扩展来sed。     
除非你做的事情像蒂姆建议旧的变更清单编号将在提交时丢失。 在您实际提交之前,更改列表编号只是临时的。因此,如果您创建一个新的更改列表(777说),然后决定删除它,您创建的下一个更改列表将是778。     
如果使用P4 Python模块,它可以更优雅一些。 即
import P4
p4 = P4.P4()
p4.connect() # having a valid p4 workspace/connection is on you :)

c = p4.run_describe('969696') # describe a Submitted, renumbered changelist, i.e. 969696

old_pending_cl_number = c['oldChange'] # print out prior/pending CL# if this exists.
干杯     

要回复问题请先登录注册