So I think I'm a little bit closer, I had to checkout the repository manually through the terminal to the web root, now when I manually run my script I see that it indeed updates the web root, however the hook doesn't seem to run when I change and update a file, I modified it to add a line to a log:

#!/bin/sh

# POST-COMMIT HOOK
#
# The post-commit hook is invoked after a commit.  Subversion runs
# this hook by invoking a program (script, executable, binary, etc.)
# named 'post-commit' (for which this file is a template) with the
# following ordered arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] REV          (the number of the revision just committed)
#
# The default working directory for the invocation is undefined, so
# the program should set one explicitly if it cares.
#
# Because the commit has already completed and cannot be undone,
# the exit code of the hook program is ignored.  The hook program
# can use the 'svnlook' utility to help it examine the
# newly-committed tree.
#
# On a Unix system, the normal procedure is to have 'post-commit'
# invoke other programs to do the real work, though it may do the
# work itself too.
#
# Note that 'post-commit' must be executable by the user(s) who will
# invoke it (typically the user httpd runs as), and that user must
# have filesystem-level permission to access the repository.
#
# On a Windows system, you should name the hook program
# 'post-commit.bat' or 'post-commit.exe',
# but the basic idea is the same.
#
# The hook program typically does not inherit the environment of
# its parent process.  For example, a common problem is for the
# PATH environment variable to not be set to its usual value, so
# that subprograms fail to launch unless invoked via absolute path.
# If you're having unexpected problems with a hook program, the
# culprit may be unusual (or missing) environment variables.
#
# Here is an example hook script, for a Unix /bin/sh interpreter.
# For more examples and pre-written hooks, see those in
# the Subversion repository at
# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/


#REPOS="$1"
#REV="$2"

#mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf

echo `date +"%Y%m%d-%H:%M:%S"` >> /var/log/svn_commit
/Library/WebServer/update_svn >> /var/log/svn_commit

--
Brendan Farr-Gaynor


On 2009-12-14, at 8:57 PM, Ryan Schmidt wrote:


On Dec 14, 2009, at 18:33, Brendan Farr-Gaynor wrote:

SVN newbie here. I'm wondering if there is anyone out there running running Subversion on OS X Server (10.6)?

Most assuredly.


I'm trying to use Subversion as a team web development solution and need to have committed files moved to our central apache web root for web browsing. I see this is a popular thing that people are looking for, but I'm having trouble getting my hook scripts to run and I'm sure it's got to be a permissions issue or something.

Based on some tutorials I've found in different places I've done the following:

I created a C program in XCode similar to this (update_svn):

#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
execl("/usr/bin/svn", "svn", "update", "--username",
"YOURSVNUSER", "--password", "YOURSVNPASSWD",
"/Library/WebServer/", (const char *) NULL);
return(EXIT_FAILURE);
}

I have no reason to believe it won't work, but why a C program, out of curiosity? Wouldn't a 1-line shell script have done the trick? That's what I've used in the past.


Created a post-commit script in my /hooks directory that has this:

#/bin/sh
/Library/WebServer/update_svn

Then modified the permissions as such:

$ chown www /Library/WebServer/update_svn
$ chmod +s /Library/WebServer/update_svn

$ chmod +s /myrepo/project/hooks/post-commit

Why +s? I wouldn't expect you to need that. What you do need is +x. Have you added that already?


However, it doesn't seem to run (files aren't moved) and I'm perplexed as to how to debug this, is there a log file somewhere? I'm not seeing anything in /var/log/ for svn?

There is no log. Write one yourself if you want one, e.g.

$ cat post-commit
#/bin/sh
/Library/WebServer/update_svn 2>>/var/log/update_svn.log


Does the above look right? Am I missing something? Has anyone out there had to do this on an OS X server that could provide some guidance?

There should be nothing particularly unique about Mac OS X in this regard; it should function just like any other UNIX-like OS.


I tried running the file from the shell as root (update_svn binary) and it reports that it 'Skipped: /Library/WebServer/' what does that mean?

It means it doesn't think /Library/WebServer is a working copy. Is it?



Reply via email to