You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@subversion.apache.org by Brendan Farr-Gaynor <br...@resolutionim.com> on 2009/12/15 00:33:40 UTC

Hooks

Hi All,

SVN newbie here. I'm wondering if there is anyone out there running  
running Subversion on OS X Server (10.6)? 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);
}

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

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?

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?

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?

Any help would be greatly appreciated!
--
Brendan Farr-Gaynor



Re: Hooks

Posted by Brendan Farr-Gaynor <br...@resolutionim.com>.
Ended up taking a different approach based on this tutorial. Works now.

http://peterstagg.com/2009/05/29/installing-subversion-on-os-x-leopard-server-as-a-revision-control-server-for-a-website-project/#comment-100

--
Brendan Farr-Gaynor


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

>
> On Dec 14, 2009, at 20:10, Brendan Farr-Gaynor wrote:
>
>> 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:
>
>
>> echo `date +"%Y%m%d-%H:%M:%S"` >> /var/log/svn_commit
>> /Library/WebServer/update_svn >> /var/log/svn_commit
>
> This sends the stdout of update_svn to the log, but discards its  
> stderr. You may want to capture its stderr as well; it may be  
> printing an error message.
>
>

Re: Hooks

Posted by Ryan Schmidt <su...@ryandesign.com>.
On Dec 14, 2009, at 20:10, Brendan Farr-Gaynor wrote:

> 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:


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

This sends the stdout of update_svn to the log, but discards its stderr. You may want to capture its stderr as well; it may be printing an error message.


Re: Hooks

Posted by Brendan Farr-Gaynor <br...@resolutionim.com>.
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?
>
>

Re: Hooks

Posted by Ryan Schmidt <su...@ryandesign.com>.
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?