2017-01-27 3 views
2

Я пытаюсь добавить привязку pre-commit к моему проекту, когда я запустил ./.git/hook/pre-commit, он дает правильный результат.
При совершении переменной OUTPUT всегда пусто.pre-commit hook не работает

#!/bin/bash 
OUTPUT=`git diff | flake8 --diff` 


if [ -z "${OUTPUT}" ] 
then 
     echo "================== You are awesome ====================" 
     echo "${OUTPUT}" 
     exit 1 
else 
     echo "" 
     echo "================== Your code stinks, Fix them ====================" 
     echo "" 
     echo "${OUTPUT}" 
     exit 1 
fi 
exit 1 

ответ

0

Крючки запускаются в иной среде. В частности, PATH не может быть настроен так, как будто у вас есть это для вашего пользователя. Попробуйте использовать весь путь к исполняемым файлам, которые вы называете git, и flake8 и посмотрите, работает ли он тогда.

0

git diff показывает неустановленные изменения, то есть изменения, которые будут не зайдите в фиксацию. В пределах крюка pre-commit выход будет пустым, если вы не выполняете частичную фиксацию.

Вместо этого: git diff --staged: оно показывает изменения, которые вы собираетесь совершить, и это часть, которую вы хотите проверить, используя flake8.

Вы можете попробовать запустить git status в пределах крюка и посмотреть разделы «Изменения должны быть сделаны:» и «Изменения не поставлены для фиксации:», чтобы понять, что я имею в виду.

Кроме того, один из ваших exit 1 должен быть exit 0 ;-).