From 7fbc935d1cf7cc81d57601bdf5e446333f95a8c6 Mon Sep 17 00:00:00 2001 From: Ken Struys Date: Fri, 14 Mar 2014 00:30:11 -0700 Subject: [PATCH] added node hooks setup and jshint --- .pre-commit-config.yaml | 8 +++++++ pre_commit/languages/helpers.py | 6 ++++++ pre_commit/languages/node.py | 37 +++++++++++++++++++++++++++++++-- pre_commit/languages/python.py | 6 ++---- 4 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 pre_commit/languages/helpers.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 02c07989..1fc358a5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,3 +6,11 @@ - id: pyflakes files: '*.py' + +- + repo: git@github.com:pre-commit/jshint + sha: 191734354d1191e3771c004c3e905a94728d0349 + hooks: + - + id: jshint + files: '*.js' \ No newline at end of file diff --git a/pre_commit/languages/helpers.py b/pre_commit/languages/helpers.py new file mode 100644 index 00000000..8397e9a8 --- /dev/null +++ b/pre_commit/languages/helpers.py @@ -0,0 +1,6 @@ + +def run_hook(env, hook, file_args): + return env.run( + ' '.join([hook['entry']] + hook.get('args', []) + list(file_args)), + retcode=None, + ) \ No newline at end of file diff --git a/pre_commit/languages/node.py b/pre_commit/languages/node.py index e2e40da4..9f15f43f 100644 --- a/pre_commit/languages/node.py +++ b/pre_commit/languages/node.py @@ -1,7 +1,40 @@ +import contextlib +from plumbum import local +from plumbum.machines.session import ShellSession +from pre_commit.languages import helpers + +from pre_commit.languages import python + +NODE_ENV = 'node_env' + +@contextlib.contextmanager +def in_env(): + with ShellSession(local['bash'].popen()) as env: + env.run('. {0}/bin/activate'.format(NODE_ENV)) + yield env + def install_environment(): - raise NotImplementedError + assert local.path('package.json').exists() + + if local.path('node_env').exists(): + return + + # Install a virtualenv + local['virtualenv'][python.PY_ENV]() + + with python.in_env() as python_env: + python_env.run('pip install nodeenv') + + print "Creating nodeenv" + local['nodeenv'][NODE_ENV]() + print "Done nodeenv" + + with in_env() as node_env: + node_env.run('npm install -g') def run_hook(hook, file_args): - raise NotImplementedError \ No newline at end of file + with python.in_env(): + with in_env() as node_env: + return helpers.run_hook(node_env, hook, file_args) \ No newline at end of file diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py index 77819d1f..9626f108 100644 --- a/pre_commit/languages/python.py +++ b/pre_commit/languages/python.py @@ -2,6 +2,7 @@ import contextlib from plumbum import local from plumbum.machines.session import ShellSession +from pre_commit.languages import helpers PY_ENV = 'py_env' @@ -30,7 +31,4 @@ def install_environment(): def run_hook(hook, file_args): with in_env() as env: # TODO: batch filenames - return env.run( - ' '.join([hook['entry']] + hook.get('args', []) + list(file_args)), - retcode=None, - ) \ No newline at end of file + return helpers.run_hook(env, hook, file_args) \ No newline at end of file