Comment puis-je avoir un crochet post-commit qui est seulement appelé quand commits sont faits à COFFRE?

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

Question

J'ai un dépôt qui contient les répertoires suivants:

  • branches
  • Balises
  • trunk

Le répertoire trunk contient la ligne principale du développement. J'ai créé un script hook post-commit pour le dépôt qui met à jour une copie de travail (du tronc) lorsqu'un utilisateur engage de nouveau dans le référentiel.

Il ressemble à ceci:

/usr/bin/svn update /path/to/a/working/copy

Je viens de créer une branche du code que je suis sur le point de commencer des changements majeurs, mais remarqué que lorsque je commets mes changements sur la branche appelle le crochet post-commit et met à jour la copie de travail (copie du tronc) .

Est-il possible que je peux modifier soit mon script post-commit hook ou un paramètre que je peux faire qui ne met à jour la copie de travail si la validation a été faite dans le répertoire du tronc et non tout autre répertoire?

Était-ce utile?

La solution

Comme vous pouvez le voir dans cette documentation , les paramètres sont passés au script post-commit.

  

Le dépôt passe deux arguments à ce programme:. Le chemin du référentiel, et le nouveau numéro de révision qui a été créé

Le crochet post-commit pourrait être un programme de tout type:. Un script bash, un programme C, un script python ... Ce qui se passe est que le shell lance ce programme, avec les deux paramètres

Vous pouvez trouver une liste des scripts intéressants . serait cette script python , qui utilise le libs svn python.

S'il vous plaît noter que le chemin d'accès fourni n'est pas le même que le chemin vers le fichier que vous archivez (voir la réponse de Paul ). Mais en utilisant ces informations avec le revnum devrait vous aider à obtenir la liste des modifications, à partir de laquelle vous pouvez déterminer si les opérations ont été effectuées sur le tronc ou non.

Autres conseils

En plus de la réponse de Bishiboosh, il convient de noter que les crochets peuvent être tout programme . Autrement dit, si vous vouliez, vous pourriez écrire le programme en C. Les paramètres qui sont transmis sont décrits en la doc .

Pour un bon référentiel de scripts pour trouver l'inspiration de, consultez la page les outils de subversion Page . En général, si vous voulez faire un traitement conditionnel en fonction du contenu de la transaction, et vous le faites, puisque vous voulez seulement traiter si les fichiers sont dans le coffre, il sera plus facile à utiliser Python, car cela est livré avec un tas d'outils pour examiner les transactions. Ce script est un bon endroit pour commencer à chercher l'inspiration.

Notez que le chemin d'accès au paramètre, n'est pas le même que le chemin vers le fichier que vous réintégrez. Vous pourriez avoir plusieurs fichiers dans le checkin après tout ... Ce que vous passé est l'emplacement du dépôt, et la révision du changement. L'utilisation de ces deux éléments d'information, vous pouvez obtenir des informations sur le changement du référentiel, et utiliser ces informations pour décider d'effectuer une action ou non dans le crochet post-commit.

Voici un autre exemple (en Perl) qui vérifie explicitement le chemin des fichiers dans le checkin. Ceci est un script beaucoup plus compliqué, mais plus probablement les parties saillantes peut être arraché et réutilisée.

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