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.
First question -- the post you reference (not yours), mentions issuing the comment "#1 fixed.", which I think will fail. If you're using that syntax as well, have you tried "Fixed #1.", which is the correct order for the regex which parses comments?
If it's not that simple, I've got no direct experience with the default script -- I use the one associated with the Timing and Estimation plugin -- but, I'd start by swiping some code from the T&E plugin:
logfile = "/var/trac/commithook.log"
LOG = False
if LOG:
f = open (logfile,"w")
f.write("Begin Log\n")
f.close()
def log (s, *params):
f = open (logfile,"a")
f.write(s % params)
f.write("\n")
f.close()
else:
def log (s, *params):
pass
with appropriate modifications for your environment; then insert some logging.
The only problem I've ever run into was an update to the T&E script which lost case-insensitivity, long ago resolved. That doesn't look like an issue with the base script, though.
Best Answer
Check the execute bit on the post commit hook. Verify that the hook is named as specified by svn. (Read the section on hooks in the svn book.)