views:

3051

answers:

2

Hi Guys,

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)

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

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

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

@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

== Problems ==

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

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.

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

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 ?

+1  A: 

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:

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.

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.

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.

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:

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

and see what the output is.

ars
hey thanks for the response - I did this but nothing appears in the .log file. Any ideas why I would be getting the error in PYTHON_EGG_CACHE etc ?
Just updated the answer; please see that. Also try logging output from the commit file.
ars
would it have something to do with the #!/usr/bin/env python - since my python and trac install (per code block above) are in non-standard directories ?
Unlikely since you're on windows that line is ignored as a comment. Presumably, it picks up python.exe from the PYTHON_PATH variable you set in the cmd file. Is that right: does python.exe exist under PYTHON_PATH?
ars
thanks again for replying :) yeah - i checked the above directories again and they are definitively correct. i just thought it would work.when i run the post-commit.bat - it runs and then d:\SVN\hooks> appears. No errors - when just run python trac-post-commit-hook.py - it get the error above ?
Added another edit to the answer; these comment boxes are too small. :)
ars
OK, if it works as expected when you run the cmd/bat file, then that's fine. You should expect errors just running the .py file, because it needs the .cmd file to set all the environment variables, etc. The question now is: why it doesn't work from trac. For that, you can only log messages to track down the problem.
ars
thanks again - ill keep trying :)
btw - this is the standard file aparently that is supposed to be used - the trac-post-commit-hook.py is the file provided by trac
http://svn.edgewall.com/repos/trac/trunk/contrib/trac-post-commit-hook
A: 

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

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.

Good luck!