Назад | Перейти на главную страницу

Перехватчики SVN trac после фиксации работают при использовании извлечения с реального пути, а не через символическую ссылку или перебазированный путь

Недавно я перенес репозитории svn нашей компании на новый сервер, и по большей части он работает нормально. Старый основной репозиторий находился в / var / svn (как и в файлах репо непосредственно в каталоге svn), с настройкой других репозиториев в / var / reponame, немного запутанная ситуация. Поэтому, когда я настраивал новый сервер, я использовал / srv / svn / reponame и создавал символические ссылки в старых местах. Все идет нормально.

Все работает нормально при выезде из svn+ssh://user@server/srv/svn/repo/ (то есть реальный путь), но, похоже, проблема с обработчиками после фиксации при проверке по символической ссылке (svn + ssh: // user @ server / var / svn / [...]). Например, если вы совершаете фиксацию с помощью svn ci -m "refs #100", предполагается обновить номер билета 100 в trac с комментарием фиксации, но этого не произойдет, если вы не извлечены из фактического пути.

Имя пользователя в обоих случаях одинаковое.

Я думал, что svnserve не соблюдает символическую ссылку должным образом, поэтому я попытался добавить command=/usr/bin/svnserve -r /srv/svn в строку в authorized_keys, как описано в http://svnbook.red-bean.com/en/1.5/svn.serverconfig.svnserve.html#svn.serverconfig.svnserve.sshtricks, и выезд из svn+ssh://user@server/reponame/branches/[...], однако результат точно такой же.

Содержимое ловушки после фиксации (/ srv / svn / reponame / hooks / post-commit) выглядит следующим образом (комментарии удалены, имена изменены):

REPOS="$1"
REV="$2"
LOG=`/usr/bin/svnlook log -r $REV $REPOS`
AUTHOR=`/usr/bin/svnlook author -r $REV $REPOS`
DIFF=`/usr/bin/svnlook diff -r $REV $REPOS`
TRAC_ENV='/srv/trac/sitename'
TRAC_URL='http://server.fqdn/'
/usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" "$REV" user@fqdn
/usr/share/subversion/hook-scripts/code_review_request.php "$REV" "$AUTHOR" "$LOG" "$DIFF"
/usr/local/bin/trac-admin "$TRAC_ENV" changeset added "$REPOS" "$REV"

Отправляются электронные письма с фиксацией и запросы на проверку кода, что означает выполнение сценария ловушки, но знает ли кто-нибудь, почему не работают вызовы trac-admin?

Я нашел решение.

Исправление состояло в том, чтобы изменить обработчик после фиксации и изменить переменную REPOS на фактический путь, а не анализировать аргумент командной строки ($ 1):

REPOS='/srv/svn/reponame'

Я предполагаю, что причина, по которой он не работает, заключается в том, что svn отправляет путь репо в качестве аргумента скрипту перехвата, но trac не знает о пути / var / svn - он знает только / srv / svn / reponame.