Question

Quels sont communs et / ou utiles pre-commit crochets pour SVN?

Était-ce utile?

La solution

Nous avons un crochet après commit que les messages du message à un compte Twitter. Utilise twitsvn (disclaimer: Je suis un committer sur ce projet).

idiot? Peut-être ... mais il est avéré être un bon moyen pour nous de communiquer les allées et venues de notre dépôt à certains de nos membres de l'équipe contestée de contrôle de version. Une fois SVN a commencé à parler à eux via leur twitter client, il ne se sentait pas tellement comme une boîte noire.

Autres conseils

Qu'un utilisateur est effectivement entré dans un commentaire sur le message de commit, et qu'il contient un certain nombre de question particulière à suivre.

Vérification des chemins absolus dans différents fichiers texte (à savoir VRML, XML, etc.). La plupart du code check-in ne devrait jamais avoir des chemins absolus, mais certaines personnes et des outils insister sur la production de trucs codés en dur.

Je fais un mot compte sur envoyer des messages. Ils doivent être 5 mots ou plus. Cela a conduit à des insultes comiques contre moi ...

  • Vérifiez les onglets et rejeter la enregistrement.
  • Vérifiez que la ligne incohérente fins et rejeter l'enregistrement.
  • Vérifiez occurance de « CR: [Nom d'utilisateur] » et rejeter le check-in s'il n'y a pas revue de code.

Vous pouvez jeter un oeil à: http://svn.apache.org /repos/asf/subversion/branches/1.6.x/www/tools_contrib.html#hook_scripts (Cette page peut être dépassée de toute évidence, il est plus maintenu pour Subversion 1.7)

Ou directement à: https://svn.apache.org/repos/asf/subversion/trunk/ contrib /

J'aime utiliser des crochets svn à:

  • appliquer des points stricts de style de code
  • vérifier les erreurs de syntaxe évidente
  • Trac mots-clés sûrs spéciaux comme « Corrections » ou « Adresses » sont en fait précédant le numéro d'émission approprié

Je vérifie le type de fichier et assurez-vous que certains types interdits ne sont pas commis par accident (par exemple obj, pdb). Eh bien, pas depuis la première fois que quelqu'un vérifié dans 2 gig des fichiers temporaires générés par le compilateur: (

pour les fenêtres:


@echo off

svnlook log -t "%2" "%1" | c:\tools\grep -c "[a-zA-z0-9]" > nul
if %ERRORLEVEL% NEQ 1 goto DISALLOWED

echo Please enter a check-in comment 1>&2
exit 1


:DISALLOWED
svnlook changed -t %2 %1 > c:\temp\pre-commit.txt

findstr /G:"%1\hooks\ignore-matches.txt"  c:\temp\pre-commit.txt > c:\temp\precommit-bad.txt
if %ERRORLEVEL% NEQ 0 exit /b 0

echo disallowed file extension >> c:\temp\precommit-bad.txt
type c:\temp\precommit-bad.txt 1>&2
exit 1

J'utilise un crochet post-commit à réécrire la propriété auteur à un nom convivial de notre arbre ldap. (Authentification avec identifiant des employés)

Un grand engagement crochet nous avons à notre archive est de vérifier tous les .vcproj (ou .csproj) projets de studio visuels pour vous assurer que les répertoires de sortie ne sont pas modifiés à quoi que ce soit local (couramment utilisé pour le débogage).

Ces problèmes compileront correctement, mais encore briser la construction en raison de executables manquants.

Dans la société où je travaille actuellement, cette case est cochée:

  • Si les fichiers binaires ont l'attribut verrouillage des besoins ensemble;
  • Si les fichiers Java ont l'avis de copyright standard et si elle comprend l'année en cours;
  • Si le code est correctement formaté (nous utilisons Jalopy pour le code de mise en forme) - cela peut sembler idiot, mais il fait en fait des comparaisons de texte entre les différentes versions plus facile;
  • Si le code a un message de commit
  • Si la structure des répertoires est conforme à ce qui est défini (tous les projets doivent être dans un dossier SVN défini, et chaque projet doit avoir une balises, branche et le dossier du tronc);

Je suppose que c'est.

J'aime l'idée de vérifier si la validation est associée à un billet; il est en fait beaucoup de sens pour moi.

Certains préfèrent l'exécution d'un outil comme les peluches pour une langue donnée pour trouver des problèmes communs dans le code et / ou d'appliquer le style de codage. Cependant, dans une petite équipe qualifiée, je préfère laisser tous les commits de passer et traiter les problèmes possibles lors de l'intégration continue et / ou révision du code. Merci à ce commits sont plus rapides qui encourage les commits plus fréquentes, conduisant à une intégration plus facile.

J'utilise le Check- mime-type.pl crochet pre-commit pour vérifier que type MIME et options de fin de ligne sont définies sur les fichiers engagés. J'utilise la subversion de publier des fichiers pour être visibles sur un site Web en utilisant DAV, et tous les fichiers sans le type MIME ensemble être servis sous forme de fichiers texte (par exemple la source HTML s'affiche dans un navigateur au lieu du balisage rendu).

Insérer une note dans Mantis bugtracker avec les détails de Changelist sur la base du message de commit ayant 'numéro' ou similaire via RegEx.

Ce qu'il a un message de commit et il est! = Que « la correction des bugs ». Bon sang, ai-je déteste ces messages inutiles!

Nous utilisons un combo crochet pré-COMMIT et post-commit mettre à jour automatiquement bugzilla avec l'entrée associée du svn commit.

Nous utilisons une seconde (pre-commit) crochet pour veiller à ce que le svn approprié: eol-style et svn:. Propriétés mots-clés sont définies sur un fichier avant qu'il ne soit ajouté au repostitory

Nous avons un troisième (post-commit) crochet pour lancer une construction et envoyer les résultats si la construction est cassé, et d'informer tout le monde lorsque la construction a été à nouveau fixe.

Nous avons un quatrième (post-commit) crochet pour lancer la réplication svn, afin d'assurer que la réplication hors site est aussi à jour que possible.

Malheureusement, je ne peux pas poster la source à ceux-ci, mais, à l'exception de l'intégration Bugzilla, ils sont assez faciles à mettre en œuvre, et Scmbug .

J'utilise le script crochet suivant pour faire les fins de ligne sûr du code source et les autorisations de scripts shell sont corrects (il est frustrant quand quelqu'un vérifie dans les fenêtres quand tout semble ok et casse la construction unix).

#!/bin/bash

REPOS="$1"
TXN="$2"

# Exit on all errors.
set -e
SVNLOOK=svnlook
echo "`$SVNLOOK changed -t "$TXN" "$REPOS"`" | while read REPOS_PATH
do
  if [[ $REPOS_PATH =~ A[[:blank:]]{3}(.*)\.(sh|c|h|cpp) ]]
  then
    if [ ${#BASH_REMATCH[*]} -ge 2 ]
        then
    FILENAME=${BASH_REMATCH[1]}.${BASH_REMATCH[2]};

    # Make sure shell scripts are executable
    if [[ sh == ${BASH_REMATCH[2]} ]]
    then
        EX_VALUE="true"
            if [ -z "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:executable \"$FILENAME\" 2> /dev/null`" ]
            then
            ERROR=1;
                echo "svn ps svn:executable $EX_VALUE \"$FILENAME\"" >&2
        fi
        EOL_STYLE="LF"
    else
        EOL_STYLE="native"
    fi

    # Make sure every file has the right svn:eol-style property set
        if [ $EOL_STYLE != "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:eol-style \"$FILENAME\" 2> /dev/null`" ]
        then
        ERROR=1;
            echo "svn ps svn:eol-style $EOL_STYLE \"$FILENAME\"" >&2
    fi
    fi
  fi
  test -z $ERROR || (echo "Please execute above commands to correct svn property settings." >& 2; exit 1)
done

Que diriez-vous d'un crochet pour compiler le projet? par exemple. Exécuter tout faire. Cela garantit pas un contrôle dans le code qui ne compile pas! :)

Résolution manque de Externals de fichiers dans SVN 1.5 en utilisant PostUpdate et engager au préalable

Je jouis un crochet qui vérifie [Critique: xyz] note dans le message de commit, et rejette la commets

.

Je pense à écrire un pour vérifier années DOCTYPE sur les fichiers ASPX / html, juste pour vous assurer que tout le monde utilise le bon.

En outre, vous pouvez avoir un avant (ou après) engager crochet pousser une notification sur votre serveur CI comme décrit sur le blog Hudson

Je vérifie de collision de cas (fenêtres stupides) et aussi require-mergeinfo.pl pour faire en sorte que le client est d'au moins 1,5 - cette façon svn: mergeinfo sera toujours mis

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