perforce チェンジリストはサブミット時に再番号付けされます。たとえば、チェンジリストが作成されたときは 777 という番号が付けられますが、チェンジリストが送信されると番号が付け直されて 790 になります。
私の質問は、古い CL 番号 777 を知っている場合、またはその逆の場合、新しい CL 番号 (790) を取得するにはどうすればよいですか?
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 では、p4 describe に -O (capital oh) 引数が導入されました。これにより、(p4 submit によって再番号付けされる前に) 元の番号で変更リストをクエリできます。
変更セットを送信する前にメモを取り、送信時に番号が付け直されたことを忘れてしまうことがよくあるので、これは非常に役に立ちます。
したがって、変更 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;'
sed に GNU 拡張機能を使用しないようにしました。
Tim が示唆するようなことをしない限り、送信時に古い変更リスト番号は失われます。
変更リスト番号は、実際に送信するまでの一時的なものです。したがって、新しい変更リスト (たとえば 777) を作成してから削除すると、次に作成する変更リストは 778 になります。