Перехватчик Subversion после фиксации для обновления `` промежуточной '' версии не работает

У нас есть промежуточная версия нашего веб-приложения (по сути, это рабочая копия подрывной деятельности, над которой никто не работает), которая находится в '/ apps / software'. У каждого разработчика есть собственная рабочая копия в ~ / apps / software. Я хотел бы использовать простой сценарий ловушки после фиксации, чтобы обновлять промежуточную копию каждый раз, когда разработчик фиксирует изменение в репозитории.

Звучит просто, правда? Ну, я бился головой о кирпичную стену из-за этого дольше, чем следовало. Скрипт перехвата (называемый 'post-commit', расположенный в / svn / software / hooks, permissions = 777, user: group = apache: dev) выглядит следующим образом (пока игнорируйте закомментированные биты):

#!/bin/sh

/usr/bin/svn update /apps/software >> /var/log/svn/software.log

# REPOS="$1"
# REV="$2"
# AUTHOR=`/usr/bin/svnlook author -r "$REV" "$REPOS"`
# LOG=`/usr/bin/svnlook log -r "$REV" "$REPOS"`
# EMAIL="[email protected]"

# echo "Commit log message as follows:-
#
# \"${LOG}\"
#
# The staging version has automatically been updated.
#
# See http://trac/projects/software/changeset/${REV} for more details." | /bin/mail -s "SVN : software : revision ${REV} committed by ${AUTHOR}" ${EMAIL}

Вот и все. Файл журнала имеет те же права доступа и группу пользователей, что и сценарий после фиксации, и я даже предоставил промежуточной копии те же группы пользователей и разрешения. Сам Apache (мы используем расширение apache subversion) также работает под apache: dev. Я знаю, что перехватчик выполняется, потому что материал, который прокомментирован выше при отправке электронного письма, работает нормально - это просто команда обновления, которой нет.

Я также могу выполнить сценарий ловушки после фиксации без переменных среды, используя:

$ env - /svn/software/hooks/post-commit /svn/software <changeset>

и он работает нормально, без проблем с выполнением svn update. Я даже попытался удалить ">>" из файла журнала, но это не имеет значения.

Любая помощь по этому поводу будет очень признательна ...


person Dan Herd    schedule 11.09.2009    source источник
comment
Не то чтобы это как-то связано с вашей проблемой, но ваш shebang говорит sh, а тег в вашем вопросе говорит bash.   -  person Dennis Williamson    schedule 11.09.2009
comment
Хорошо, я выбрал более широкий тег «оболочки».   -  person Dan Herd    schedule 11.09.2009


Ответы (1)


Здесь вы отправляете только стандартный вывод в журнал, а не вывод ошибок:

/usr/bin/svn update /apps/software >> /var/log/svn/software.log

Вместо этого сделайте это, чтобы увидеть, что идет не так:

/usr/bin/svn update /apps/software >> /var/log/svn/software.log 2>&1
person Wim Coenen    schedule 11.09.2009
comment
Это очень помогло - тысяча благодарностей! В файле журнала подробно описывается возникшая у меня проблема: Ошибка при проверке сертификата сервера для ‹server›: - Сертификат выпущен не доверенным центром. Используйте отпечаток пальца для подтверждения сертификата вручную! (R) выбросить, принять (t) временно или принять (p) постоянно? svn: запрос PROPFIND завершился неудачно на '/ live' svn: PROPFIND of '/ live': Ошибка проверки сертификата сервера: эмитент не является доверенным (‹server›) Итак, в основном мы используем SSL с самосертификацией, и мне нужен какой-то способ принятия его навсегда. Любые идеи? - person Dan Herd; 11.09.2009
comment
Ах, это описано в книге SVN здесь: svnbook.red-bean.com/en/1.5/ - person Wim Coenen; 11.09.2009
comment
упомянутый там servers файл можно найти в ~/.subversion/ и описан здесь: svnbook.red-bean.com/en/1.5/ - person Wim Coenen; 11.09.2009