2012-01-27 1 views
6

Это моя предварительно совершить сценарий:Как я могу запустить virtualenv питон скрипт как мерзавец перед фиксацией ловушкой

#!/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 

Один из исполняемых файлов в предварительно commit.d является питон скрипт (пред- commit-pylint.py), который начинается с:

#!/usr/bin/env python 
import pylint 

pylint установлен на моем виртуальном пространстве. Моя проблема заключается в том, что git запускает pre-commit preending /usr/libexec/git-core:/usr/bin до $PATH, поэтому даже если мой virtualenv активирован, скрипт pre-commit.d/pre-commit-pylint.py работает с системой /usr/bin/python (вместо работы с виртуальным python).

Я хочу иметь крючки, которые совместимы для разработчиков, которые не используют virtualenv. Есть ли способ запустить мой скрипт python с помощью virtualenv прозрачно (т. Е. Оставаться совместимым с разработчиками, использующими свой системный python)?

+0

Вы когда-нибудь находили способ предотвратить использование Git от '/ usr/bin' до $ PATH крючка? Просто столкнулся с этим сам. – joemaller

+0

нет, я этого не сделал. Я работал над своей проблемой с ответом Роба. –

+0

для Ruby's rbenv: https://github.com/sstephenson/rbenv/issues/374 –

ответ

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 
0

То, что я в конечном итоге делает это: .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.

 Смежные вопросы

  • Нет связанных вопросов^_^