2010-08-30 79 views
0

当我在命令行中使用以下命令时,它给出了非集成更改列表的列表。两个分支之间的非集成更改列表

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脚本中使用此命令?

+0

c'wiki由于害怕被低估? – Zaid 2010-08-30 13:24:53

+0

@Zaid:自我实现的预言。 – Ether 2010-08-30 16:23:19

回答

7

这就是为什么打开strictwarnings编译指示非常重要。字符串“@ $ 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等。是shell变量而不是Perl变量。在这种情况下,你应该说:

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

如果你打算做了很多的Perforce的用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将包含与每个未整合的变更列表的数组引用。

相关问题