2009-12-18 88 views
0

我想編寫一個在線SVN存儲庫瀏覽器。 我決定把它作爲一個Apache模塊來實現,並且圍繞着命令行客戶端(暫時)。 因爲我起步,我有以下代碼:在編寫Apache模塊時,popen(svn)失敗,終止狀態256

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的退出值。這在瀏覽器端是可見的。

回答

2

只是一個猜測:也許svn cat在URL上導致svn想提示輸入用戶名/密碼?

當您創建bash腳本時,是否將stderr重定向到stdout以嘗試捕獲任何錯誤消息?

+0

重定向stderr是一個好主意。當我將它打印到標準輸出時,我收到了關於驗證的警告,就像你所建議的那樣。謝謝! – 2009-12-18 15:10:17