„Pre Commit Hook“ - „JSLint“ „Mercurial“ ir „Git“

Noriu paleisti „JSLint“ prieš įsipareigojant „Mercurial“ arba „Git“ saugykloje.

Noriu, kad tai būtų automatinis žingsnis, kuris buvo sukonfigūruotas, o ne pasikliauti kūrėju (dažniausiai man), nepamirštant anksčiau paleisti „JSLint“. Paprastai JSLint paleidžiu kūrimo metu, bet noriu nurodyti JS failų, kuriuos jie persiunčia į JSLint, sutartį, kol jie bus prijungti prie repo.

„Mercurial“ šiame puslapyje aprašoma pirminė sintaksė, tačiau vieninteliai rodomi kintamieji yra identifikatoriai, tėvų1 ir tėvų2 pakeitimai, susiję su įvykiu. Aš tikrai noriu, kad šis failų pavadinimų, susijusių su įsipareigojimu, sąrašas, todėl galiu pasirinkti .js failą ir paleisti jslint per juos.

Panaši problema, susijusi su GIT , numatytoji informacija, kurią galima gauti kaip iš anksto parengtą scenarijų, atrodo ribota.

Kas galėtų būti susijusi su hg statuso / git būsenos skambučiu kaip išankstinio scenarijaus dalimi, analizuoti šią išvestį, kad rastumėte JS failus, tada atlikite šį darbą. Aš tikėjausi, kad kažką lengviau, ir aš nesu įsitikinęs, ar skambučio būsena kaip kablio išankstinio priskyrimo dalis atspindi teisingą informaciją. Pavyzdžiui, jei „Git“ pakeitimų failai dar neįtraukti, bet „Git“ įsipareigoja naudoti -a, ar failai bus rodomi teisingame „Git“ būsenos išvesties skyriuje kaip įsipareigojimo rinkinio dalis?

Atnaujinimas : kažkas veikia man, tai galima pamatyti čia: http://github.com/jrburke/dvcs_jslint/

17
03 дек. nustatė jrburke 03 dec. 2009-12-03 07:41 '09, 7:41 val. 2009-12-03 07:41
@ 3 atsakymai

Git atveju yra .git / hooks katalogo pavyzdžiai. Jei jums reikia tik „JSLint“ failų pavadinimų, galite naudoti tik „ git diff --name-only , kuris mano pavyzdyje parodys failų pavadinimus, kurie skiriasi nuo dabartinio HEAD .

2
03 дек. Atsakymą pateikė Mike Ashley 03 dec. 2009-12-03 13:26 '09 13:26 pm 2009-12-03 13:26

Toliau pateikiamas sprendimas „@Bitbieger Git“ sprendimui, kuris veikia su „ Node.js“ ir vietine „ node-jslint“ kopija (t. Y. Jums reikia „ npm install jslint “ šaknų saugyklos kataloge).

Neprivalomas scenarijus:

  • Veikia jslint ant visų .html ir .json failų, taip pat .js
  • Jis veikia tik jslint failuose, kurie buvo pridėti, kopijuoti ar modifikuoti. Tai neleidžia jslint klaidų failams, kurie buvo pervardyti arba ištrinti.
  • Pakartoja bet kokias vartotojo peržiūros klaidas.
  • Naudoja „ --indent 4 --white true jslint“ parinktis, kad užtikrintų šaltinio kodo nuoseklumą

Jei norite, kad jis veiktų, nukopijuokite šiuos .git/hooks/pre-commit į .git/hooks/pre-commit ir nepamirškite 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> | grep 'No errors found' ; then echo "jslint passed ${file}" exit 0 else node $JSLINT $file exit 1 fi done 
11
12 сент. Atsakymą pateikė Homme Zwaagstra . 2011-09-12 12:45 '11, 12:45 PM 2011-09-12 12:45

JSLint su „SpiderMonkey“

 for js in $(git diff-index --name-only --cached HEAD -- | grep '\.js$'); do if jslint.sh $js 2> | grep 'Lint at line' ; then echo $js exit 1 else echo "js files validated" exit 0 fi done 
1
06 дек. Atsakymas pateikiamas Bitbieger 06 dec. 2009-12-06 14:15 '09, 14:15, 2009-12-06 14:15

Kiti klausimai apie žymas „ arba „ Klauskite“