Question

Je veux courir JSLint avant un engagement soit dans une mise en pension Mercurial ou Git est fait.

Je veux cela comme une étape automatique qui est mis en place au lieu de compter sur le développeur (me principalement) ne pas oublier de courir JSLint avant la main. Je lance normalement JSLint tout en développant, mais que vous voulez un contrat sur les fichiers JS qu'ils passent JSLint avant d'être engagé à la mise en pension.

Pour Mercurial, ce précise la syntaxe engager au préalable, mais les seules variables qui semblent être disponibles sont les ID Parent1 et parent2 changeset impliqués dans la validation. Ce que je veux vraiment sont une liste de noms de fichiers qui sont impliqués dans la validation, afin que je puisse ensuite choisir le fichier .js et exécutez JSLint sur eux.

problème similaire GIT, les informations par défaut disponible dans le cadre du script semble engager au préalable limitée.

Ce qui pourrait fonctionner appelle le statut de hg / git status dans le cadre du script engager au préalable, analyser cette sortie pour trouver les fichiers JS faire alors le travail de cette façon. J'espérais quelque chose plus facile si, et je ne suis pas sûr si vous appelez le statut dans le cadre d'un crochet reflètent les informations engager au préalable correcte. Par exemple, dans Git si les fichiers et n'a pas encore été ajoutés, mais le git commit -a utilise, ne les fichiers apparaissent dans la bonne section de la sortie d'état git comme lors de l'archivage défini?

Mise à jour : Je viens de faire marcher quelque chose, il est visible ici: http: // github.com/jrburke/dvcs_jslint/

Était-ce utile?

La solution

Pour git, il y a des exemples dans le .git / répertoire crochets. Si vous avez juste besoin les noms de fichiers pour JSLint, vous pouvez utiliser git diff --name-only, qui dans mon exemple liste les noms des fichiers qui diffèrent de la HEAD actuelle.

Autres conseils

Ce qui suit est une variante de la solution @ Git de Bitbieger qui fonctionne avec Node.js et une copie locale de noeud-JSLint (vous devez npm install jslint dans votre répertoire de référentiel racine).

En outre le script:

  • Exécute JSLint sur tous les fichiers .html et .json ainsi que .js
  • ne fonctionne que sur les fichiers JSLint qui ont été ajoutés, copiés ou modifiés. Cela empêche JSLint de erroring sur les fichiers qui ont été renommés ou supprimés.
  • Répétitions toute erreur de JSLint pour l'utilisateur de voir
  • Utilise les options de JSLint de --indent 4 --white true pour assurer la cohérence du code source

Pour que cela fonctionne copier ce qui suit pour .git/hooks/pre-commit et ne pas oublier de chmod +x .git/hooks/pre-commit

# Pre-commit hook passing files through jslint
#
# This ensures that all js, html and json files are valid and conform
# to expectations.

ROOT_DIR=$(git rev-parse --show-toplevel)
JSLINT="${ROOT_DIR}/node_modules/.bin/jslint --indent 4 --white true"

for file in $(git diff-index --name-only --diff-filter=ACM --cached HEAD -- | grep -P '\.((js)|(html)|(json))$'); do
    if node $JSLINT $file 2>&1 | grep 'No errors found' ; then
        echo "jslint passed ${file}"
        exit 0
    else
        node $JSLINT $file
        exit 1
    fi  
done

JSLint avec SpiderMonkey

for js in $(git diff-index --name-only --cached HEAD -- | grep '\.js$'); do
    if jslint.sh $js 2>&1 | grep 'Lint at line' ; then
        echo $js
        exit 1
    else
        echo "js files validated"
        exit 0
    fi  
done
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top