3

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

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

4

6 回答 6

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%
于 2010-12-22T09:36:01.570 回答
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

正如所指出的,它可能没有那么有用。但是,我确实想指出,有可能做到这一点。

于 2011-01-05T17:43:47.547 回答
4

Perforce 2012.1 版向 p4 describe 引入了 -O(大写 oh)参数,它允许您按原始编号(在被 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
于 2013-10-09T17:31:51.667 回答
1

添加到 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;'

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

于 2015-05-15T13:37:03.807 回答
0

除非您执行 Tim 建议的操作,否则旧的更改列表编号将在提交时丢失。

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

于 2010-12-22T10:08:35.887 回答
0

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

IE

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.

干杯

于 2018-10-22T09:47:07.140 回答