Post Commit Hook с Trac и SVN
Поэтому у меня возникли некоторые проблемы с настройками. Позволь мне объяснить.
У меня есть три файла в моем файле d:\svn\hooks (D:\ не диск Windows)
после commit.bat
ПРОФ-пост фиксации-hook.cmd
ПРОФ-пост фиксации крюк
Я установил файл post-commit.bat в файле d:\svn\hooks со следующим
%~dp0\trac-post-commit-hook.cmd %1 %2
В моем trac-post-commit-hook.cmd - у меня есть
@ECHO OFF
::
:: Trac post-commit-hook script for Windows
::
:: Contributed by markus, modified by cboos.
:: Usage:
::
:: 1) Insert the following line in your post-commit.bat script
::
:: call %~dp0\trac-post-commit-hook.cmd %1 %2
::
:: 2) Check the 'Modify paths' section below, be sure to set at least TRAC_ENV
:: ----------------------------------------------------------
:: Modify paths here:
:: -- this one *must* be set
SET TRAC_ENV=D:\trac\project
:: -- set if Python is not in the system path
SET PYTHON_PATH=D:\trac\Python25
:: -- set to the folder containing trac/ if installed in a non-standard location
SET TRAC_PATH=D:\trac\Python25\Lib\site-packages\trac
:: ----------------------------------------------------------
:: Do not execute hook if trac environment does not exist
IF NOT EXIST %TRAC_ENV% GOTO :EOF
set PATH=%PYTHON_PATH%;%PATH%
set PYTHONPATH=%TRAC_PATH%;%PYTHONPATH%
SET REV=%2
Python "%~dp0\trac-post-commit-hook" -p "%TRAC_ENV%" -r "%REV%"
В моем файле trac-post-commit-hook - это просто стандартный скрипт http://trac.edgewall.org/browser/trunk/contrib/trac-post-commit-hook?rev=920
== Проблемы ==
Когда я запускаю post-commit.bat в командной строке cmd - все работает нормально - ошибок не возникает.
Однако, когда я фиксирую что-то в SVN для тестового билета, который я создал в Trac - #1 исправляется. - ничего не меняется на Trac. Ничего не обновляет вообще.
Когда я меняю 'trac-post-commit-hook' на 'trac-post-commit-hook.py' и запускаю из d:\svn\hooks\python trac-post-commit-hook.py, я получаю
File "trac-post-commit-hook.py", line 104, in <module>
os.environ{'PYTHON_EGG_CACHE'] = os.path.join(options.project, '.egg-cache')
File "D:\trac\Python25\lib\ntpath.py", line 90, in join
assert len(path) > 0
TypeError: object of type 'NoneType' has no len()
Я в растерянности относительно того, что на самом деле идет не так? Кто-нибудь может оказать какую-либо помощь?
2 ответа
Возможно, вы захотите проверить этот ответ, чтобы увидеть, поможет ли он решить вашу проблему:
Если это не поможет, попробуйте войти в файл. Так как он работает нормально, когда вы используете SVN, но не работает для Trac, возможно, это какая-то ошибка конфигурации. Как только вы действительно сможете просмотреть сообщение об ошибке, его будет легче исправить. Для начала попробуйте изменить на:
Python "%~dp0\trac-post-commit-hook" -p "%TRAC_ENV%" -r "%REV%" 2>&1 1>>c:\temp\trachook.log
в вашем файле cmd. Это должно отправить и stdout, и stderr сообщения в файл \ temp \ trachook.log.
РЕДАКТИРОВАТЬ: Извините, пропустил сообщение об ошибке вы уже опубликовали. Похоже, он не получает право options.project
и он может быть установлен в None, когда он должен быть установлен из TRAC_ENV
от -p
вариант.
Вы уверены, что запускаете его с этой опцией после того, как переименуете его в.py и запустите? Если это так, попробуйте изменить этот файл и записать значение options.project
после того, как аргументы были проанализированы. Попробуйте отследить, почему он не установлен.
РЕДАКТИРОВАТЬ: Кстати, строка ошибки:
File "trac-post-commit-hook.py", line 104, in <module>
os.environ{'PYTHON_EGG_CACHE'] = os.path.join(options.project, '.egg-cache')
Я не вижу ссылки на это в ссылке на post-commit-hook. Вы добавили это? Или ссылка неправильная? Кроме того, в этой строке есть синтаксическая ошибка: фигурная скобка '{' должна быть квадратной скобкой '['. Но я думаю, что ошибка на самом деле происходит до этого, в os.path.join (options.project - None). Попробуйте поставить строку перед этим:
print 'options.project is set to: ', options.project
и посмотреть, что на выходе.
Скрипт хука требует передачи параметров. Чтобы проверить вручную, вы можете запустить:
trac-post-commit-hook -p / path / to / environment -r 1001
замените 1001 ревизией, содержащей команду, и путь к вашей среде trac. Запустите его, пока вы находитесь в каталоге hooks.
Удачи!