#!/bin/sh # git update hook to check that pushed changes don't introduce new flake8 # errors # --- Command line refname="$1" oldrev="$2" newrev="$3" # --- Safety check if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "usage: $0 " >&2 exit 1 fi TMPDIR=`mktemp -d` TMPDIFF=`tempfile` [ $refname != "refs/heads/master" -a $refname != "refs/heads/stable" ] && exit 0 # select only changed python files which are not migrations changed=`git diff --name-only $oldrev $newrev | grep 'py$' | grep -v 'migrations/[0-9]'` if [ -z $changed ] ; then # Nothing to check. Note the exit is necessary -- we would not pass any # paths to git diff below and it would output the diff unfiltered. exit 0 fi git diff --unified=1 $oldrev $newrev -- $changed >${TMPDIFF} # there is no working tree in bare git repository, so we recreate it for flake8 git archive $newrev | tar -x -C ${TMPDIR} cd ${TMPDIR} # report only errors on lines in diff # (if threre was flake8 installed on atrey, we could just call flake8) /akce/MaM/WWW/mamweb-test/bin/flake8 --diff <${TMPDIFF} status=$? if [ $status != 0 ] ; then echo echo -n "Změny, které se snažíte pushnout, obsahují kód v pythonu " echo -n "nevyhovující flake8 (viz výše). Opravte je a zkuste to znovu. " echo -n "Nezapomeňte, že můžete editovat historii (git commit --amend, " echo -n "git rebase -i). Pokud byste chybu příště raději odhalili už při " echo "commitu, zkopírujte si pre-commit hook z _git_hooks do .git/hooks." echo fi rm -rf ${TMPDIR} rm -f ${TMPDIFF} exit $status