Domanda

Voglio correre JSLint prima di un commit in sia un repo Mercurial o Git è fatto.

Voglio che questo come passo automatico che è impostato, invece di basarsi sul sviluppatore (soprattutto me) ricordando di eseguire JSLint prima mano. Normalmente io eseguo JSLint durante lo sviluppo, ma voglio specificare un contratto file JS che passano JSLint prima di essere impegnato nella repo.

Per Mercurial, questo pagina enuncia la sintassi precommit, ma le uniche variabili che sembrano essere a disposizione sono gli ID parent1 e parent2 changeset coinvolte nel commettere. Quello che voglio davvero è un elenco di nomi di file che sono coinvolti con il commit, in modo che possa poi scegliere il file .js e correre JSLint su di loro.

problema simile per GIT , le informazioni di default disponibile come parte dello script precommit sembra limitata.

Ciò che potrebbe funzionare sta chiamando hg status / git status come parte dello script precommit, analizzare che l'uscita di trovare file JS poi fare il lavoro in questo modo. Speravo in qualcosa di più facile, però, e non sono sicuro se chiamate lo stato come parte di un gancio precommit riflettere le informazioni corrette. Per esempio in Git se i cambiamenti file non sono stati ancora aggiunti, ma il git commit -a utilizza, farebbe con i file visualizzati nella sezione corretta dell'output git status come facenti parte del commit set?

Aggiorna : ho qualcosa di lavoro, è visibile qui: http: // github.com/jrburke/dvcs_jslint/

È stato utile?

Soluzione

Per git, ci sono esempi nella directory .git / ganci. Se avete solo bisogno i nomi dei file per JSLint, è possibile utilizzare git diff --name-only, che nel mio esempio vengono elencati i nomi dei file che differiscono dal HEAD corrente.

Altri suggerimenti

La seguente è una variante della soluzione @ Git di Bitbieger che funziona con Node.js e una copia locale di nodo-JSLint (cioè è necessario npm install jslint nella directory repository root).

Inoltre lo script:

  • Esegue JSLint su tutti i file .html e .json così come js
  • Solo corre JSLint sui file che sono stati aggiunti, copiati o modificati. Questo impedisce JSLint da erroring sui file che sono stati rinominati o cancellati.
  • Replica eventuali errori JSLint per l'utente per vedere
  • Utilizza le opzioni --indent 4 --white true JSLint per garantire la coerenza del codice sorgente

Per farlo funzionare copiare il testo seguente .git/hooks/pre-commit e non dimenticate di 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top