Wir haben eine Staging-Version unserer Webanwendung (im Grunde eine Subversion-Arbeitskopie, an der niemand arbeitet), die in "/apps/software" liegt. Jeder Entwickler hat seine eigene Arbeitskopie in "~/apps/software". Ich möchte ein einfaches Post-Commit-Hook-Skript verwenden, um die Staging-Kopie jedes Mal zu aktualisieren, wenn ein Entwickler eine Änderung am Repository vornimmt.
Klingt einfach, oder? Nun, ich habe meinen Kopf schon länger gegen eine Ziegelwand geschlagen, als ich sollte. Das Hook-Skript (mit dem Namen 'post-commit', zu finden in /svn/software/hooks, permissions=777, user:group=apache:dev) sieht wie folgt aus (ignorieren Sie die auskommentierten Teile vorerst):
#!/bin/sh
/usr/bin/svn update /apps/software >> /var/log/svn/software.log
# REPOS="$1"
# REV="$2"
# AUTHOR=`/usr/bin/svnlook author -r "$REV" "$REPOS"`
# LOG=`/usr/bin/svnlook log -r "$REV" "$REPOS"`
# EMAIL="test@example.com"
# echo "Commit log message as follows:-
#
# \"${LOG}\"
#
# The staging version has automatically been updated.
#
# See http://trac/projects/software/changeset/${REV} for more details." | /bin/mail -s "SVN : software : revision ${REV} committed by ${AUTHOR}" ${EMAIL}
Das war's. Die Protokolldatei hat dieselben Berechtigungen und Benutzer:Gruppen wie das Post-Commit-Skript, und ich habe sogar der Staging-Kopie dieselben Benutzer:Gruppen und Berechtigungen gegeben. Der Apache selbst (wir verwenden die Apache-Subversion-Erweiterung) läuft ebenfalls unter apache:dev. Ich weiß, dass der Hook ausgeführt wird, denn das, was über dem Senden einer E-Mail auskommentiert ist, funktioniert einwandfrei - nur der Update-Befehl nicht.
Ich kann das Post-Commit-Hook-Skript auch ohne Umgebungsvariablen ausführen:
$ env - /svn/software/hooks/post-commit /svn/software <changeset>
und es läuft gut und führt das 'svn update' ohne Probleme aus. Ich habe sogar versucht, das ">>" aus der Protokolldatei zu entfernen, aber das macht keinen Unterschied.
Jede Hilfe in dieser Sache wäre sehr willkommen...