Frage

Ich möchte JSLint vor dem Fest in laufen entweder ein Mercurial oder Git Repo durchgeführt wird.

Ich möchte dies als ein automatischer Schritt, anstatt sich auf den Entwickler eingerichtet ist (vor allem mir) erinnern JSLint vor Hand zu laufen. Ich normalerweise JSLint laufen, während der Entwicklung, sondern wollen einen Vertrag über JS-Dateien angeben, die sie JSLint vergehen, bis zu dem Repo begangen werden.

Für Mercurial, diese Seite precommit Syntax formuliert, aber die einzigen Variablen, die verfügbar zu sein scheinen, sind die parent1 und parent2 changeset IDs in den beteiligten zu begehen. Was ich wirklich will, ist eine Liste von Dateinamen, die mit der Commit beteiligt sind, so dass ich dann die JS-Datei auswählen und ausführen JSLint über sie.

ähnliche Ausgabe für GIT , die Standard-Informationen als Teil des precommit Skript scheint begrenzt.

Was funktionieren könnte ist hg Status / git Status als Teil des precommit Skript aufrufen, analysieren, die Ausgabedateien JS dann zu finden, die Arbeit auf diese Weise. Ich hatte gehofft, für etwas einfacher aber, und ich bin nicht sicher, ob Status Aufruf als Teil eines precommit Haken die richtigen Informationen zu reflektieren. Zum Beispiel in Git, wenn die Änderungen von Dateien noch nicht hinzugefügt worden, aber die git commit -a verwendet, würden die Dateien im richtigen Abschnitt des git Statusausgang zeigen sich als Teil des Satzes commit zu sein?

Aktualisieren : Ich habe etwas Arbeits bekam, ist es hier zu sehen: http: // github.com/jrburke/dvcs_jslint/

War es hilfreich?

Lösung

Für git gibt es Beispiele in dem .git / Haken-Verzeichnis. Wenn Sie nur die Dateinamen für JSLint benötigen, könnten Sie git diff --name-only verwenden, was in meinem Beispiel werden die Namen der Dateien aufgelistet, die von der aktuellen HEAD abweichen.

Andere Tipps

Das folgende ist eine Variation von @ Bitbieger Git-Lösung, die mit Node.js und einer lokalen Kopie von node-JSLint (dh Sie in Ihrem root-Repository-Verzeichnis npm install jslint benötigen).

Zusätzlich das Skript:

  • Führt JSLint über alle .html und .json Dateien sowie js
  • läuft nur JSLint über Dateien, die hinzugefügt, kopiert oder verändert wurden. Dies verhindert, dass JSLint von erroring auf Dateien, die umbenannt oder gelöscht wurden.
  • Repliziert alle JSLint Fehler für den Benutzer sehen
  • Verwendet die --indent 4 --white true JSLint Optionen Quellcode Konsistenz
  • , um sicherzustellen,

Um es folgendes zu arbeiten kopieren .git/hooks/pre-commit und vergessen Sie nicht 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 mit Spider

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top