2012-03-19 7 views
0

J'essaye d'écrire un script de hook post commit pour que svn exporte le référentiel vers le serveur de la fondation de l'équipe. (Donc quand vous validez un code, cette dernière version du code est copiée dans le repo de la fondation de l'équipe)comment écrire un script svn hook

Seule la langue que j'utilise est C++ et C et je n'ai jamais écrit un script. Quelqu'un peut-il me donner des instructions étape par étape pour cela? quelle langue utiliser, quoi lire etc ... avec un exemple de code possible?

Est-il possible d'écrire un script hook avec C++? ou devrais-je apprendre à utiliser python ou rubis etc ..

+1

Tout d'abord, [réponses sont déjà disponibles ici] (http://stackoverflow.com/questions/139315/can-i-run-a-script-when-i-commit-à-subversion). Deuxièmement: non. Il ne doit pas être un "script". Tout ce qui a un bit exécutable fonctionne. Vous pouvez aussi écrire vos hooks en C ou en C++. –

Répondre

5

Vous pouvez écrire votre hook en utilisant C ou C++ si vous le souhaitez. La plupart des gens utilisent Perl ou Python.

L'élément principal est que svnlook devrait être utilisé dans votre script de crochet et non svn. svnlook est plus rapide et plus sûr que svn. En fait, dans les scripts de pré-validation, vous devez utiliser svnlook car vous n'avez pas de révision de référentiel.

Voici quelques choses à garder à l'esprit au sujet de votre crochet post-commit:

  • Vous ne pouvez pas modifier une révision, et ne pas essayer de valider les modifications. Votre hook post-commit finira par se appeler. Si vous voulez que vos développeurs suivent certains paramètres, vous devez avoir un hook pre-commit qui échoue si les développeurs ne le font pas correctement.
  • Lorsque Subversion appelle votre hook post-commit, la variable d'environnement PATH a été supprimée. Si vous devez accéder à une autre commande ou un fichier, vous devrez fournir le chemin complet vous-même.
  • Subversion vous transmet certains paramètres de la ligne de commande . Pas une ligne de commande réelle, mais cela signifie que vous pouvez trouver ces paramètres dans ARGV. Deux paramètres vous seront transmis:
    1. Le chemin du référentiel sur le serveur (pour la commande svnlook).
    2. La révision du référentiel.

Tout ce que vous devez déduire si svnlook (que vous pouvez exécuter via la commande system. Cependant, vous pourriez être en mesure d'utiliser le construit puisque vous en train d'écrire les choses en C et C++ dans Subversion API).

Autre possibilité: Utilisez un système de construction continue tel que Jenkins pour effectuer le travail sale pour vous.Vous pourriez trouver plus facile de travailler avec Jenkins au lieu de vous inquiéter de savoir comment un hook post-commit pourrait accomplir cette tâche. L'un des avantages de Jenkins est que lorsque les choses tournent mal, vous ne renvoyez pas les messages post-commit qui ont échoué à l'utilisateur (qui n'est probablement pas en faute). Au lieu de cela, vous obtenez un journal complet de ce qui s'est passé et alertez la personne qui peut réellement résoudre le problème.

Voici un sample of one que j'ai écrit qui est en Perl. Je ne sais pas si ça te fera du bien.

+0

Nous envisageons d'utiliser Jenkins ou le serveur de base Team et si nous utilisons un serveur de fondation d'équipe, nous devons synchroniser svn et TFS, c'est pourquoi je suis à la recherche de hook post-commit. Existe-t-il un moyen d'utiliser la fonctionnalité de synchronisation pour le serveur de fondation d'équipe (svn - serveur de fondation d'équipe)? et Merci pour la réponse perspicace – kiki

+0

@kiki - En fait, vous pouvez utiliser Jenkins pour faire plus que des builds, et parfois même ne pas l'utiliser pour les builds. Je voulais simplement utiliser Jenkins dans ce cas juste pour faire votre synchronisation entre Subversion et TeamFoundation. –

1

Vous trouverez des instructions sur la façon de définir un crochet pre-commit ici: http://wordaligned.org/articles/a-subversion-pre-commit-hook

La création d'un post-commit est semblable à cette instruction . Une fois que vous avez copié le modèle post-commit dans un nouveau fichier, vous pouvez simplement ajouter une ligne pour appeler un programme que vous avez écrit en C++ et simplement passer les arguments à votre programme.

Cela dépend de ce que vous faites, mais la plupart du temps, il est plus rapide d'utiliser un langage de script comme shell-script ou python pour faire votre travail.

+0

Existe-t-il un hook post-commit existant qui exporte le résultat ailleurs ou copie les codes ailleurs (back up)? – kiki

+0

Oui, il existe un modèle dans les sources svn: http://svn.apache.org/repos/asf/continuum/trunk/continuum-release/src/test/scm/hooks/post-commit.tmpl Maintenant que vous avoir le référentiel et la révision, vous pouvez simplement appeler 'svn' pour obtenir toutes les informations dont vous avez besoin pour le commit. – devsnd

+0

Je suppose que j'ai besoin d'aide pour écrire un script. Y a-t-il une bonne ressource que je peux lire ou regarder? avec de petits exemples pour l'essayer et en avoir la sensation? – kiki

Questions connexes