Использование скрипта Python в качестве фильтра для git filter-branch - PullRequest
5 голосов
/ 14 марта 2012

Я пытаюсь переименовать некоторые коммиттеры в репозитории git, используя git filter-branch. Мне бы очень хотелось использовать более сложную логику, но я не совсем понимаю bash. (Работающий) скрипт, который я сейчас использую, выглядит следующим образом:

git filter-branch -f --tag-name-filter cat --env-filter '

cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"

if [ $cn = "ew" ]
then
    cn="Eric"
    cm="my.email@provider.com"
fi

export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
' -- --all

Могу ли я использовать скрипт Python в качестве аргумента --env-filter? Если так, как я могу получить доступ к $GIT_COMMITTER_NAME для чтения и записи?

Как бы я сделал эквивалент этой строки bash в файле Python?

1 Ответ

5 голосов
/ 14 марта 2012

В python вам нужно import os, после чего os.environ - это словарь с входящей средой в нем.Изменения os.environ экспортируются автоматически.Настоящая проблема здесь заключается в том, что фильтры git --filter- * запускаются, как говорится:

всегда оценивается в контексте оболочки с помощью команды eval (с заметным исключением из фильтра коммитов, длятехнические причины).

Таким образом, он фактически использует оболочку, и если у вас есть оболочка, вызывающая Python, вы попадаете в подпроцесс оболочки, и любые изменения, сделанные в процессе Python, не влияют на это.ракушка.Вам потребуется eval вывод скрипта Python:

eval `python foo.py`

, где foo.py выводит соответствующие команды export:

import os

def example():
    cn = os.environ['GIT_COMMITTER_NAME']
    cm = os.environ['GIT_COMMITTER_EMAIL']
    if cn == 'ew':
        cn = 'Eric'
        cm = 'my.email@provider.com'
    print ('export GIT_COMMITTER_NAME="%s"' % cn)
    print ('export GIT_COMMITTER_EMAIL="%s"' % cm)

example() # or if __name__ == '__main__', etc.

(все вышеперечисленное не проверено).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...