Не интегрированные списки изменений между двумя ветвями - PullRequest
0 голосов
/ 30 августа 2010

когда я использую следующую команду в командной строке, она дает список неинтегрированных списков изменений.

p4 interchanges -t $branch1 @$date1, @$date2 $branch2 > changes.txt

Но когда я использую эту команду в скрипте Perl, как показано ниже, она не выдает:

$cmd = system ("p4 interchanges -t $branch1 @$date1, @$date2 $branch2 > changes.txt");

Выходное сообщение в командной строке является ошибкой, приведенной ниже:

branch1, - all revision(s) already integrated.

Проблема из-за запятой, используемой между date1 и date2? Как использовать эту команду в скрипте Perl?

Ответы [ 2 ]

7 голосов
/ 30 августа 2010

Вот почему так важно включить прагмы strict и warnings. Строка "@ $ date1" не означает, что вы думаете. Он пытается разыменовать $data1 как массив. Поскольку strict не включен, он обрабатывает содержимое $date1 как символическую ссылку. Если бы вы включили strict, вы бы увидели сообщение об ошибке вроде:

Can't use string ("2010-08-30") as an ARRAY ref while "strict refs" in use at script.pl line 10.

Вы, вероятно, должны сказать это вместо:

system "p4 interchanges -t $branch1\@$date1,\@$date2 $branch2 > changes.txt";
if ($?) {
    die "saw exit code: ", $? >> 8;
}

У вас также может быть проблема, если вы ожидаете, что $branch1, $date1 и т. Д. Будут переменными оболочки вместо переменных Perl. В этом случае вы должны сказать:

system "p4 interchanges -t $ENV{branch1}\@$ENV{date1},\@$ENV{date2} $ENV{branch2} > changes.txt";
if ($?) {
    die "saw exit code: ", $? >> 8;
}
0 голосов
/ 31 августа 2010

Если вы собираетесь делать Perce с Perl, попробуйте P4Perl , который включает в себя Perforce в нативном Perl API.system() вызов может быть реализован следующим образом:

use P4;
my $p4 = new P4;
$p4->SetClient( $clientname );
$p4->SetPort ( $p4port );
$p4->SetPassword( $p4password );
$p4->Connect() or die( "Failed to connect to Perforce Server" );

my $c = $p4->Run( "interchanges", "-t", $branch1, "@".$date1, "@".$date2, $branch2 );

$c будет содержать ссылку на массив с каждым из неинтегрированных списков изменений.

...