#!/usr/bin/env bash # Enable this pre-commit hook by running 'make installhooks' set -euo pipefail git-staged-files() { git diff --cached -C -C -z --name-only --diff-filter=ACMRTUXB "$@" } git-is-staged() { local diff=0 git-staged-files --quiet "$@" 2> /dev/null || diff=$? [[ diff -eq 1 ]] || return 1 } map() { IFS= read -rd $'\0' "$@"; } compress-png() { git-staged-files \*.png|while map file; do echo "Compressing $file" optipng -q -o7 "$file" && advpng -z -4 "$file" && advdef -z -4 "$file" | grep Output git add "$file" done } compress-svg() { git-staged-files \*.svg|while map file; do make nodecheck echo "Compressing $file" node_modules/.bin/svgo --config=.svgo.yml "$file" git add "$file" done } test-whitespace() { git diff --cached --check; } test-js() { local err=0 make eslint || err+=1 if git-is-staged \*.js; then make qunit || err+=1 fi return $err } test-php() { local err=0 if git-is-staged \*.php; then make phplint || err+=1 fi # todo: where is result set? if git-is-staged 'includes/skins/*.php'; then make validatehtml > $result || err+=1 fi return $err } main() { local err=0 compress-png compress-svg test-whitespace || err+=1 test-js || err+=1 test-php || err+=1 return $err } main "$@"