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

时间:2010-12-22 03:24:35

标签: perforce p4v changelist

在perforce中,更改列表会在提交时重新编号。因此对于例如创建更改列表时,它将编号为777,但在提交更改列表时,它将重新编号为790.

我的问题是,如果我知道旧的CL编号777,我该如何获得新的CL编号(790),反之亦然?

6 个答案:

答案 0 :(得分:5)

我能想到的唯一方法是将原始更改列表编号添加为更改列表描述字段的一部分。首先,您需要一个脚本来存储原始更改列表编号:

#!/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%

答案 1 :(得分:5)

如果确实想要原始更改列表编号,可以从Perforce中检索,而无需在说明中嵌入原始更改列表编号。您可以使用-ztag命令行选项来获取它。你只能通过'更改'命令(据我所知)来实现它:

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

正如所指出的,它可能没那么有用。但是,我确实想要注意到它可以实现它。

答案 2 :(得分:4)

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

答案 3 :(得分:1)

添加到Eric Miller的回复中,因为我无法评论(不够点):

只发出1个数字

p4 -ztag describe $ORIG | sed -e 's/^\.\.\. oldChange //;t-ok;d;:-ok'

e.g。

OLD=$(p4 -ztag describe $ORIG | sed -e 's/^\.\.\. oldChange //;t-ok;d;:-ok')

或者如果你想查找很多数字,这将在每一行输出new old的地图(可能对&#34; join&#34;命令有用)。如果没有旧提交,则重新发出新提交。

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。

答案 4 :(得分:0)

除非你做某事,比如蒂姆建议旧的变更清单编号将在提交时丢失。

在您实际提交之前,更改列表编号只是暂时的。因此,如果您创建一个新的更改列表(777说),然后决定删除它,您创建的下一个更改列表将是778。

答案 5 :(得分:0)

如果使用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.

欢呼