2009-12-18 9 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-work-copy» успешно выполнен. Однако я бы хотел иметь дело с возможными удаленными хранилищами для гибкости.

Есть ли у вас какие-либо предложения?

Редактировать: Коды выхода должны находиться в диапазоне 0-255. Этого, очевидно, нет. Что это говорит мне?

Редактировать 2: В качестве тестового примера я создал сценарий bash, который будет запускать требуемую команду SVN, а затем напечатать его возвращаемое значение. Ожидаемое поведение SVN не встречалось, и сценарий печатал «1» в качестве значения выхода для SVN. Это было видно в конце браузера.

ответ

2

Просто догадаться: возможно, svn cat по URL-адресу вызывает svn, чтобы запросить имя пользователя/пароль?

Когда вы создали скрипт bash, вы перенаправили stderr на stdout, чтобы попытаться поймать любые сообщения об ошибках?

+0

перенаправление stderr - отличная идея. когда я напечатал его на stdout, я получил предупреждение об аутентификации, как и вы. Благодаря! –