script post-commit svn passe de la ligne de commande, mais pas lors de la validation des fichiers) à svn

StackOverflow https://stackoverflow.com/questions/2555098

Question

I ont un crochet post-commit dans svn qui fonctionne très bien à partir de la ligne de commande lorsque je lance

env - ./foo.sh /path/to/svn/repos/ 12345

mais quand le script est appelé à partir svn il ne semble pas fonctionner.

Ce que je suis en train de faire est essentiellement la vérification des fichiers engagés et si un fichier particulier est modifié, je fais un svn export de celui-ci à un partage réseau. Fonctionne très bien à partir de la ligne de commande.

Le script post-commit est la suivante:

#!/bin/sh

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

CHANGED=`/usr/bin/svnlook changed -r "$REV" "$REPOS"`
SOURCE="svn+ssh://localhost/path/to/svn/repos/somefile.zip"
DEST="/mnt/build/somefile-r$REV.zip"

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
        `/usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST`
fi

exit 0

Y at-il un moyen de sortie des messages d'erreur dans un fichier lorsque le script est exécuté, ou plus précisément la ligne d'exportation svn (où je pense qu'il pourrait y avoir un problème)?

Était-ce utile?

La solution

La sortie standard d'un script crochet est mis au rebut, mais l'erreur standard retourne au client, au moins dans les versions récentes de Subversion. Je pensais qu'il avait été comme ça pendant un certain temps, mais le livre svn 1.4 dit que la sortie est mis au rebut, de sorte que vous voudrez peut-être vérifier que vous utilisez une version mise à jour du serveur - voir l'erreur standard cours d'eau est un bon moyen d'obtenir l'alerte précoce des types d'erreurs communes.

Pour envoyer la sortie d'une commande dans un fichier, et inclure la sortie d'erreur standard dans le fichier trop pour le garder en un seul endroit, faire

command >/path/to/logfile 2>&1

Utilisez >> plutôt que > à ajouter au fichier:

command >>/path/to/logfile 2>&1

Parce que la sortie d'erreur standard est envoyée au client svn, vous pouvez également transmettre les informations de la sortie standard de retour de cette façon, que ce soit pour une seule commande,

command 1>&2

ou pour le script entier, en mettant

exec 1>&2

en haut du script.

En bref, je ne vois un problème avec votre script: en supposant que les backquotes sur la ligne d'exportation svn ne sont pas un artefact du balisage, vous devez les supprimer. (Ils exécutera la commande d'exportation que vous avez écrit, puis prendre la sortie, et d'exécuter cette sortie comme une autre commande -. Presque certainement pas ce que vous aviez l'intention)

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
        /usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST 1>&2
fi

(je ne savais pas sur la syntaxe de test double-support carré bash, c'est une belle découverte pour moi!)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top