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

Perforce 性能:如何查找更改列表的原始编号,perforce,p4v,changelist,Perforce,P4v,Changelist,在perforce中,更改列表在提交时重新编号。例如,在创建变更列表时,其编号为777,但在提交变更列表时,其重新编号为790 我的问题是,如果我知道旧的CL编号777,我如何获得新的CL编号(790),反之亦然?我能想到的唯一方法是将原始变更列表编号添加到变更列表描述字段中。首先,您需要一个脚本来存储原始变更列表编号: #!/bin/env perl $id = $ARGV[0]; open (CHANGE_IN, "p4 change -o $id|"); open (CHANGE_OUT,

在perforce中,更改列表在提交时重新编号。例如,在创建变更列表时,其编号为777,但在提交变更列表时,其重新编号为790


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

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

#!/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);

除非你像Tim建议的那样做,否则旧的变更列表编号将在提交时丢失

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

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

d:\sandbox>p4提交-c 24510
提交更改24510。
正在锁定1个文件。。。
编辑//depot/testfile.txt#2
Change 24510更名为Change 24512并已提交。
d:\sandbox>p4-ztagchanges-m1//depot/testfile.txt
... 更改24512
... 时间1294249178
... 用户测试.user
... client-test.user
... 提交的状态
... 旧币24510
... 描述

Perforce的2012.1版在p4 descripe中引入了-O(大写字母oh)参数,允许您根据变更列表的原始编号(在被p4 submit重新编号之前)查询变更列表

我觉得这很有帮助,因为我经常发现自己在提交变更集之前会记录变更集,然后忘记在提交时记录变更集的重新编号

因此,如果我有一张关于12300变更的便条,我现在可以通过键入以下内容来查看它所指的内容:

p4 describe -s -O 12300
请你告诉我:

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描述$ORIG | sed-e的/^\.\。oldChange/;t-ok;d、 :-“好的”

e、 g

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

或者,如果您想查找多个数字,这将在每一行上输出一个
new-old
的映射(可能对“join”命令有用)。如果没有旧的提交,那么它将重新发出新的提交

p4-ztag描述782546 782547…|sed-e'${x;p};s/^\.\。更改/;t-keep;b-下一步;:-保持x、 //PGGs/\n/;x;d、 :-下一个s/^\.\。oldChange/;t-ok;d、 :-好啊Hx;s/*\n/;x;d、 "


我试图避免在sed中使用GNU扩展。

如果使用P4 Python模块,可能会更优雅一些

i、 e


干杯

您能解释一下这样做的理由吗?我们有一个代码审查应用程序,它显示了更改的第一个CL。然而,这些更改是随新的CL#一起提交的,因此在稍后查看代码评审条目时,很难判断更改实际上是作为哪个CL提交的。有意义吗?什么工具可以做到这一点,所以我可以知道如何避免它?我认为最好在变更列表描述中包含代码评审的详细信息。我的团队也想做同样的事情,现在有解决方案吗?
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
> p4 -ztag describe -s 12345 | grep oldChange
... oldChange 12300
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.