Pregunta

Quiero correr JSLint antes de una confirmación, ya sea en un repo Mercurial o Git está hecho.

Quiero esto como un paso automático que se instala en lugar de confiar en el desarrollador (sobre todo yo) recordando a ejecutar JSLint de antemano. Normalmente me quedo JSLint mientras que el desarrollo, pero desea especificar un contrato de archivos JS que pasen JSLint antes de ser comprometido con el repositorio.

En Mercurial, este página explica la sintaxis precommit, pero las únicas variables que parecen estar disponibles son los ID Parent1 y del conjunto de cambios parent2 involucrados en la confirmación. Lo que realmente quiero es una lista de los nombres de los archivos que están involucrados con la confirmación, por lo que a continuación, puede elegir el archivo .js y ejecutar JSLint sobre ellos.

problema similar para el GIT , la información por defecto disponible como parte del guión parece precommit limitado.

Lo que puede funcionar está llamando estado hg / git status como parte de la secuencia de comandos precommit, procesarla y salida para encontrar archivos JS y luego hacer el trabajo de esa manera. Me esperaba algo más fácil sin embargo, y no estoy seguro de si el estado llamando como parte de un gancho precommit reflejar la información correcta. Por ejemplo, en Git si los cambios de archivos no se han añadido todavía, pero el git commit -a utiliza, haría con los archivos aparecen en la sección correcta de la salida de git status como parte de la confirmación set?

Actualizar : tengo algo de trabajo, se puede ver aquí: http: // github.com/jrburke/dvcs_jslint/

¿Fue útil?

Solución

Para Git, hay ejemplos en el directorio .git / ganchos. Si sólo necesita los nombres de archivo para JSLint, podría utilizar git diff --name-only, que en mi ejemplo, se establecerá una lista de los nombres de los archivos que difieren de la HEAD actual.

Otros consejos

La siguiente es una variación de Git @ solución de Bitbieger que funciona con Node.js y una copia local de nodo-JSLint (es decir, que necesita para npm install jslint en el directorio raíz del repositorio).

Además, la secuencia de comandos:

  • Ejecuta JSLint sobre todos los archivos .html y .json, así como .js
  • Sólo se ejecuta JSLint sobre los archivos que se han añadido, copiados y modificados. Esto evita JSLint de erroring en los archivos que han cambiado de nombre o eliminado.
  • Reproduce cualquier error JSLint para que el usuario vea
  • Utiliza las opciones --indent 4 --white true JSLint para garantizar la coherencia código fuente

Para conseguir que funcione copiar el siguiente a .git/hooks/pre-commit y no se olvide 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 con 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top