Как я могу запустить скрипт virtualenv python в качестве крючка предварительной фиксации git
это мой сценарий предварительной фиксации:
#!/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
pylint установлен на моем virtualenv. Моя проблема в том, что git запускает pre-commit prepending /usr/libexec/git-core:/usr/bin
to $PATH
, поэтому, даже если мой virtualenv активирован pre-commit.d/pre-commit-pylint.py
скрипт работает с системой /usr/bin/python
(вместо работы с virtualenv python).
Я хочу иметь крючки, которые совместимость для разработчиков, которые не используют 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 / hooks / предварительная фиксация:
#!/usr/bin/env bash
export PATH="$THE_GOOD_PATH"
python "$GIT_DIR/hooks/pre-commit-main.py"
.git/hooks/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
или верхний уровень вашего приложения и символическая ссылка все крючки к одному файл.
этот метод имеет преимущество быть virtualenv agnostic: он также работает с Ruby RVM rbenv.
Я написал разработчикам Git по адресу:http://permalink.gmane.org/gmane.comp.version-control.git/258454 просить их покинуть наши PATH
один, но первоначальный ответ был WONTFIX.