2015-03-13 61 views
1

我已经在本地机器上安装并设置了VisualSVN Server v3.2.2(Windows 7 Professional - 64bit),并且我编写了Perl中的post-commit hook基本上应该在每次提交事件时向某个服务器发送一个HTTP POST请求。 我已经通过CMD测试我的Perl脚本,我得到有效的响应,但是当我使用TortoiseSVN客户端提交的东西我得到的错误VisualSVN服务器无法识别提交后钩子中的Perl

Error post-commit hook failed (exit code 1) with output: 
'perl' is not recognized as an internal or external command, 
operable program or batch file. 

这里是我的perl脚本:

$svnlook = '"C:\Program Files\VisualSVN Server\bin\svnlook.exe"'; 

$repos = $ARGV[0]; 
$txn = $ARGV[1]; 

print STDOUT "message sent " . $repos . " " . $txn; 

use LWP::UserAgent; 
my $ua = LWP::UserAgent->new; 
my $server_endpoint = "http://jsonplaceholder.typicode.com/posts"; 

# set custom HTTP request header fields 
my $req = HTTP::Request->new(POST => $server_endpoint); 
$req->header('content-type' => 'application/json'); 

# add POST data to HTTP request body 
my $post_data = '{ "repos":"' . $repos . '", "txn":"' . $txn . '"}'; 
$req->content($post_data); 

my $resp = $ua->request($req); 
if ($resp->is_success) { 
    my $message = $resp->decoded_content; 
    print "Received reply: $message\n"; 
} 
else { 
    print "HTTP POST error code: ", $resp->code, "\n"; 
    print "HTTP POST error message: ", $resp->message, "\n"; 
} 


exit(0); 

和我的文章 - 提交批处理文件:

perl myhook.pl %1 %2 

我试图重新启动svn服务器和我的机器,但没有运气。 此外,当我在cmd中输入path我看到的Perl在我的道路C:\Perl64\bin

也许我的这种做法挂钩是不正确或东西...任何人都可以用这一个帮助?

感谢

回答

4

PATH不是在其下VisualSVN服务器上运行的用户帐户具有相同的PATH

无论您使用的是什么SVN服务器和操作系统,始终指定钩子脚本中所有项目的完整绝对路径。

C:\Perl64\bin\perl myhook.pl %1 %2 
+0

感谢响应速度快,但现在我得到其他奇怪的错误: 错误:post-commit钩子失败(退出代码2)输出:无法打开Perl脚本“myhook.pl”:没有这样的文件或目录 当myhook.pl与post-commit.cmd位于同一文件夹 – 2015-03-13 11:16:00

+0

就像我说的,你需要指定所有项目的**完整路径**。我不知道'myhook.pl'的路径,所以我不能把它放在我的帖子中。 – alroc 2015-03-13 11:22:23

+0

哦,是的,所有的项目...对不仔细阅读。 – 2015-03-13 11:25:25

相关问题