使用Trac和SVN发布提交挂钩

时间:2022-07-17 03:44:18

So I am having a few problems with settings this up. Let me explain.

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

I have three files in my d:\svn\hooks file (D:\ is not windows drive)

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

post-commit.bat
trac-post-commit-hook.cmd
trac-post-commit-hook

post-commit.bat trac-post-commit-hook.cmd trac-post-commit-hook

I have setup the post-commit.bat file in d:\svn\hooks file with the following

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

%~dp0\trac-post-commit-hook.cmd %1 %2

In my trac-post-commit-hook.cmd - I have

在我的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%" 

In my trac-post-commit-hook file - its just the standard script from http://trac.edgewall.org/browser/trunk/contrib/trac-post-commit-hook?rev=920

在我的trac-post-commit-hook文件中 - 它只是来自http://trac.edgewall.org/browser/trunk/contrib/trac-post-commit-hook?rev=920的标准脚本

== Problems ==

==问题==

When I run post-commit.bat in cmd prompt - it works fine - no errors are generated.

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

However, when I commit something in the SVN for a test ticket I created in Trac - #1 fixed. - nothing changes on Trac. Nothing updates at all.

但是,当我在SVN中提交我在Trac中创建的测试票时 - #1已修复。 - Trac没有任何变化。什么都没有更新。

When I change the 'trac-post-commit-hook' to 'trac-post-commit-hook.py' and run from d:\svn\hooks\python trac-post-commit-hook.py I get

当我将'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()

I am at a loss as to what is actually going wrong ? Can anyone provide any assistance ?

我不知道实际上出了什么问题?有人可以提供任何帮助吗?

2 个解决方案

#1


You might want to check this answer to see if it helps you solve your problem:

您可能想查看此答案,看看它是否可以帮助您解决问题:

If that doesn't help, you should try logging to a file. Since it works fine when you use SVN, but fails for Trac, it's probably some config error. Once you can actually view the error message, it will be easier to fix. For starters try changing to:

如果这没有帮助,您应该尝试登录到文件。由于它在使用SVN时工作正常,但对于Trac失败,可能是一些配置错误。一旦您可以实际查看错误消息,它将更容易修复。首先尝试更改为:

Python "%~dp0\trac-post-commit-hook" -p "%TRAC_ENV%" -r "%REV%" 2>&1 1>>c:\temp\trachook.log

in your cmd file. This should send both stdout and stderr messages to the \temp\trachook.log file.

在您的cmd文件中。这应该将stdout和stderr消息发送到\ temp \ trachook.log文件。

EDIT: Sorry, missed the error message you posted already. Looks like it's not getting the right options.project and it might be set to None when it should be set from TRAC_ENV from the -p option.

编辑:抱歉,错过了您已发布的错误消息。看起来它没有得到正确的options.project,当它应该从-p选项的TRAC_ENV设置时可能设置为None。

Are you sure you're running it with that option after you rename it to .py and run it? If so, try changing that file and logging the value of options.project after the arguments have been parsed. Try to track down why it's not being set.

将它重命名为.py并运行后,您确定使用该选项运行它吗?如果是这样,请尝试更改该文件并在解析参数后记录options.project的值。试着找出为什么没有设置它。

EDIT: By the way, the error line:

编辑:顺便说一句,错误行:

File "trac-post-commit-hook.py", line 104, in <module>
os.environ{'PYTHON_EGG_CACHE'] = os.path.join(options.project, '.egg-cache')

I don't see a reference to this in the link to the post-commit-hook. Did you add this? Or is the link wrong? Also, there's a syntax error in that line: the curly brace '{' should be a square brace '['. But I think the error actually happens before that, in the os.path.join (options.project is None). Try putting a line before that one:

我没有在post-commit-hook的链接中看到对此的引用。你添加了吗?或链接错误?此外,该行中存在语法错误:大括号'{'应该是方括号'['。但我认为错误实际发生在os.path.join之前(options.project是None)。尝试在那之前加一行:

print 'options.project is set to: ', options.project

and see what the output is.

并看看输出是什么。

#2


the hook script requires the parameters to be passed. To test by hand, you can run:

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

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

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

replace 1001 with a revision that contains a command, and the path with your trac environment. Run it while you are in the hooks directory.

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

Good luck!

#1


You might want to check this answer to see if it helps you solve your problem:

您可能想查看此答案,看看它是否可以帮助您解决问题:

If that doesn't help, you should try logging to a file. Since it works fine when you use SVN, but fails for Trac, it's probably some config error. Once you can actually view the error message, it will be easier to fix. For starters try changing to:

如果这没有帮助,您应该尝试登录到文件。由于它在使用SVN时工作正常,但对于Trac失败,可能是一些配置错误。一旦您可以实际查看错误消息,它将更容易修复。首先尝试更改为:

Python "%~dp0\trac-post-commit-hook" -p "%TRAC_ENV%" -r "%REV%" 2>&1 1>>c:\temp\trachook.log

in your cmd file. This should send both stdout and stderr messages to the \temp\trachook.log file.

在您的cmd文件中。这应该将stdout和stderr消息发送到\ temp \ trachook.log文件。

EDIT: Sorry, missed the error message you posted already. Looks like it's not getting the right options.project and it might be set to None when it should be set from TRAC_ENV from the -p option.

编辑:抱歉,错过了您已发布的错误消息。看起来它没有得到正确的options.project,当它应该从-p选项的TRAC_ENV设置时可能设置为None。

Are you sure you're running it with that option after you rename it to .py and run it? If so, try changing that file and logging the value of options.project after the arguments have been parsed. Try to track down why it's not being set.

将它重命名为.py并运行后,您确定使用该选项运行它吗?如果是这样,请尝试更改该文件并在解析参数后记录options.project的值。试着找出为什么没有设置它。

EDIT: By the way, the error line:

编辑:顺便说一句,错误行:

File "trac-post-commit-hook.py", line 104, in <module>
os.environ{'PYTHON_EGG_CACHE'] = os.path.join(options.project, '.egg-cache')

I don't see a reference to this in the link to the post-commit-hook. Did you add this? Or is the link wrong? Also, there's a syntax error in that line: the curly brace '{' should be a square brace '['. But I think the error actually happens before that, in the os.path.join (options.project is None). Try putting a line before that one:

我没有在post-commit-hook的链接中看到对此的引用。你添加了吗?或链接错误?此外,该行中存在语法错误:大括号'{'应该是方括号'['。但我认为错误实际发生在os.path.join之前(options.project是None)。尝试在那之前加一行:

print 'options.project is set to: ', options.project

and see what the output is.

并看看输出是什么。

#2


the hook script requires the parameters to be passed. To test by hand, you can run:

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

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

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

replace 1001 with a revision that contains a command, and the path with your trac environment. Run it while you are in the hooks directory.

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

Good luck!