编写Apache模块时,popen(svn)失败,终止状态为256

时间:2009-12-18 06:46:48

标签: svn apache2 popen

我想写一个在线SVN存储库浏览器。 我决定将它作为Apache模块实现,围绕命令行客户端(暂时)。 在我开始使用时,我有以下代码:

FILE *f;
f = popen("/usr/local/bin/svn cat http://myrepo/svn/shell.c", "r");
char buf[1025];

if (f) {
  ap_rputs("open ok\n", r);
}
else {
  ap_rputs("not open ok\n", r);
}

while (fgets(buf, 1024, f) != NULL) {
  ap_rprintf(r,"%s<br />", buf );
}

ap_rprintf(r, "return: %d\n", pclose(f));

此命令失败,终止状态为256.这对应于什么错误?我一直无法找到这份文件。

成功打印出诸如“cat somefile”之类的简单调用。实际上,调用“svn info path-to-a-working-copy”是成功的。但是,我想处理可能的远程存储库以获得灵活性。

你有什么建议吗?

编辑: 退出代码应该在0-255范围内。这显然没有。这告诉我什么?

EDIT2: 作为测试用例,我创建了一个bash脚本,它将运行所需的SVN命令,然后打印其返回值。未遇到预期的SVN行为,脚本打印“1”作为SVN的退出值。这在浏览器端可见。

1 个答案:

答案 0 :(得分:2)

只是一个猜测:URL上的svn cat可能导致svn想要提示用户名/密码?

当您创建bash脚本时,是否将stderr重定向到stdout以尝试捕获任何错误消息?