У нас есть промежуточная версия нашего веб-приложения (это в основном рабочая копия 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="test@example.com"
# 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}
Вот и все. Файл журнала имеет те же разрешения и user: group, что и скрипт post-commit, и я даже дал промежуточную копию тому же пользователю: group и permissions. Сам Apache (мы используем расширение Apache Subversion) также работает под Apache: Dev. Я знаю, что ловушка выполняется, потому что материал, который закомментирован выше при отправке электронного письма, работает нормально - это просто команда обновления, которой нет.
Я также могу выполнить скрипт перехвата после фиксации без переменных окружения, используя:
$ env - /svn/software/hooks/post-commit /svn/software <changeset>
и работает нормально, без проблем выполняется обновление svn. Я даже пытался удалить '>>' для файла журнала, но это не имеет значения.
Любая помощь по этому вопросу была бы очень признательна ...