You can write your hook using C or C++ if you like. Most people use Perl or Python.
The main thing is that svnlook
should be used in your hook script and not svn
. svnlook is faster and safer than svn
. In fact, in pre-commit scripts, you have to use svnlook
since you don't have a repository revision.
Here are some things to keep in mind about your post-commit
hook:
- You cannot change a revision, and don't try to commit changes. Your post-commit hook will end up calling itself. If you want your developers to follow certain parameters, you need to have a
pre-commit
hook that fails if the developers don't do it right.
- When Subversion calls your
post-commit
hook, the PATH
environment variable has been deleted. If you need to access another command or a file, you'll have to provide the full path yourself.
- Subversion will pass you certain parameters from the command line. Not an actual command line, but it means you can find these parameters in
ARGV
. Two parameters will be passed to you:
- The repository path on the server (for the
svnlook
command).
- The revision of the repository.
Everything else you must deduce though svnlook
(which you can run via the system
command. However, since you're actually writing things in C and C++, you might be able to use the built in Subversion API).
Another possibility: Use a continuous build system like Jenkins to do the dirty work for you. You might find it easier to work through Jenkins instead of worrying how a post-commit hook might accomplish this task. One of the advantages of Jenkins is that when things go wrong, you're not sending back failed post-commit messages to the user (who is probably not at fault). Instead, you cat get a complete log of what happened, and alert the person who can actually fix the issue.
Here's a sample of one I wrote which is in Perl. Don't know if it'll do you any good.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…