Как запустить скрипт python virtualenv в качестве git pre-commit hook
Это мой сценарий предварительной фиксации:
#!/bin/bash
for f in .git/hooks/pre-commit.d/*; do
if [ -x "$f" ]; then
if ! "$f"; then
echo "DID NOT COMMIT YOUR CHANGES!";
exit 1
fi
fi
done
Одним из исполняемых файлов в pre-commit.d является скрипт на python (pre-commit-pylint.py), который начинается с:
#!/usr/bin/env python
import pylint
Пилинт установлен на моем virtualenv. Моя проблема в том, что git выполняет pre-commit preeding /usr/libexec/git-core:/usr/bin
в $PATH
, так что даже если мой virtualenv активирован pre-commit.d/pre-commit-pylint.py
скрипт работает с системой /usr/bin/python
(вместо того, чтобы работать с питоном virtualenv).
Я хочу иметь хуки, совместимые с разработчиками, которые не используют virtualenv. Есть ли способ прозрачно запустить мой скрипт на python с помощью virtualenv (т. Е. Оставаться совместимым с разработчиками, использующими свой системный python)?
2 ответа
Вы можете проверить в своем скрипте предварительной фиксации переменную $VIRTUAL_ENV и добавить ее к $PATH соответственно:
#!/bin/bash
if [ -n $VIRTUAL_ENV ]; then
PATH=$VIRTUAL_ENV/bin:$PATH
fi
for f in .git/hooks/pre-commit.d/*; do
if [ -x "$f" ]; then
if ! "$f"; then
echo "DID NOT COMMIT YOUR CHANGES!";
exit 1
fi
fi
done
То, что я в конечном итоге сделал: .git
структура файла:
.git/hooks/pre-commit
.git/hooks/pre-commit-main.py
.git / Крючки / предварительная фиксация:
#!/usr/bin/env bash
export PATH="$THE_GOOD_PATH"
python "$GIT_DIR/hooks/pre-commit-main.py"
.git / Крючки / pre-commit-main.py:
#!/usr/bin/env python
import sys
print sys.version_info
Затем, когда вы звоните git commit
, удостоверься что THE_GOOD_PATH
, определено:
export THE_GOOD_PATH="$PATH"
git commit
Вы также можете экспортировать THE_GOOD_PATH="$PATH"
от твоего .profile
или верхний уровень вашего приложения и символическую ссылку все хуки в один файл.
Преимущество этого метода в том, что он не зависит от виртуальности: он также работает с Ruby RVM rbenv.
Я написал разработчикам Git по адресу: http://permalink.gmane.org/gmane.comp.version-control.git/258454 просьбой покинуть наш PATH
один, но первоначальный ответ был WONTFIX.