From ccfdbf040fb0d251127fb6d71029e882708be391 Mon Sep 17 00:00:00 2001 From: squidfunk Date: Thu, 6 Oct 2016 15:14:03 +0200 Subject: [PATCH] Introduced pre-commit hook for linting --- .githooks/pre-commit/lint.sh | 70 ++++++++++++++++++++++++++++++++++++ CHANGELOG | 1 + Gulpfile.babel.js | 10 +++++- package.json | 6 ++-- 4 files changed, 84 insertions(+), 3 deletions(-) create mode 100755 .githooks/pre-commit/lint.sh diff --git a/.githooks/pre-commit/lint.sh b/.githooks/pre-commit/lint.sh new file mode 100755 index 000000000..cd9c7825d --- /dev/null +++ b/.githooks/pre-commit/lint.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +# Copyright (c) 2016 Martin Donath + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +# Checking if all changes are added to the index +CWD_CLEAN="$(git diff-index HEAD --)" + +# This variables stores the state of the stash. +# 0 = not restored yet. +# 1 = stash was already reset +STASH_POPPED=0 + +# Pop the stash in case of trap +function cleanup { + if test -n "$CWD_CLEAN"; then + if test "$STASH_POPPED" != 1 ; then + # Pop the changes (= stash) back to the work space + git stash pop -q + fi + fi + exit +} + +# Register signal handler +trap cleanup SIGHUP SIGINT SIGTERM + +# Stash all changes that were not added to the commit +if test -n "$CWD_CLEAN"; then + git stash -q --keep-index --include-untracked +fi + +# Run the check and print indicator +echo "Hook[pre-commit]: Running linter..." +STD_OUT=$(npm run pre-commit --silent) + +# Grab exit code of check +HAD_ERROR=$? + +# Pop the changes (= stash) back to the work space +if test -n "$CWD_CLEAN"; then + git stash pop -q + STASH_POPPED=1 +fi + +# In case of error, print output of check +if test "$HAD_ERROR" != 0 ; then + echo ${STD_OUT} + exit 1 +fi + +# Reset indicator and exit +exit 0 diff --git a/CHANGELOG b/CHANGELOG index ac85a5cf1..d60445740 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -11,6 +11,7 @@ mkdocs-material-1.0.0-rc.1 (2016-XX-XX) * Introduced ESLint and SassLint for code style checks * Introduced more accurate Material Design colors and shadows * Introduced modular scales for harmonic font sizing + * Introduced pre-commit hook for linting * Rewrite of CSS using the BEM methodology and SassDoc guidelines * Rewrite of JavaScript using ES6 and Babel as a transpiler * Rewrite of Admonition, Permalinks and Codehilite integration diff --git a/Gulpfile.babel.js b/Gulpfile.babel.js index 993778c7d..b6ca93f98 100755 --- a/Gulpfile.babel.js +++ b/Gulpfile.babel.js @@ -90,7 +90,7 @@ gulp.src = (...glob) => { * Helper function to load a task */ const load = task => { - return require(`./tasks/${task}.js`)(gulp, config, args) + return require(`./tasks/${task}`)(gulp, config, args) } /* ---------------------------------------------------------------------------- @@ -218,6 +218,14 @@ gulp.task("assets:clean", [ "assets:stylesheets:clean" ]) +/* + * Lint sources + */ +gulp.task("assets:lint", [ + "assets:javascripts:lint", + "assets:stylesheets:lint" +]) + /* ---------------------------------------------------------------------------- * Views * ------------------------------------------------------------------------- */ diff --git a/package.json b/package.json index 2bb801e86..d85eff354 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,10 @@ "license": "MIT", "main": "Gulpfile.js", "scripts": { - "start": "./node_modules/.bin/gulp watch --mkdocs --no-lint --no-revision", "build": "./node_modules/.bin/gulp build --clean", - "clean": "./node_modules/.bin/gulp clean" + "clean": "./node_modules/.bin/gulp clean", + "start": "./node_modules/.bin/gulp watch --mkdocs --no-lint --no-revision", + "pre-commit": "./node_modules/.bin/gulp assets:lint" }, "repository": { "type": "git", @@ -36,6 +37,7 @@ "css-mqpacker": "^4.0.0", "del": "^2.2.0", "eslint": "^3.6.1", + "git-hooks": "^1.1.6", "gulp": "^3.9.1", "gulp-changed": "^1.3.2", "gulp-concat": "^2.6.0",