使用Trac和SVN发布提交挂钩

时间:2009-07-11 05:17:05

标签: svn trac post-commit

所以我设置这个问题有些问题。让我解释一下。

我的d:\ svn \ hooks文件中有三个文件(D:\不是Windows驱动器)

后commit.bat
TRAC - 后提交,hook.cmd
TRAC-提交后钩

我在d:\ svn \ hooks文件中设置了post-commit.bat文件,其中包含以下内容

%~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的标准脚本

==问题==

当我在cmd提示符下运行post-commit.bat时 - 它运行正常 - 不会产生错误。

然而,当我在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 个答案:

答案 0 :(得分: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,当它应该从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

看看输出是什么。

答案 1 :(得分:0)

钩子脚本需要传递参数。要手动测试,您可以运行:

trac-post-commit-hook -p / path / to / environment -r 1001

将1001替换为包含命令的修订版,以及包含trac环境的路径。在钩子目录中运行它。

祝你好运!