#python #git #githooks
#python #git #githooks
Вопрос:
Я хотел бы создать перехват предварительной фиксации git, который предотвращает раскомментированный pytest.set_trace()
or pdb.set_trace()
и другие .set_trace()
. Это потому, что я часто выполняю отладку из командной строки и иногда забываю, что я оставил инструкцию debug в коде. Используя перехват предварительной фиксации, я смогу избежать этого в будущем.
В блоге Keul есть решение для этого, но сеанс должен находиться в корневом каталоге репозитория git, чтобы он работал, иначе он будет жаловаться.
Я в основном хочу not
, чтобы эквивалент этого работал в grep
#(s )?.*.set_trace()
Спасибо
Ответ №1:
Правильное регулярное выражение ^s?[^#] .set_trace()
Объяснение:
^
начинается сs?
соответствует пробелу или более, или пробел отсутствует[^#]
соответствует любым символам, исключая#
.set_trace()
соответствует любой функции, заканчивающейся на.set_trace()
- мы можем быть более явными, включив только
pdb
orpytest
set_trace
s, но могут быть и другие пакеты, которые также имеютset_trace
- мы можем быть более явными, включив только
Пример кода python
import pdb
if __name__ == "__main__":
pdb.set_trace()
pytest.set_trace()
# pdb.set_trace()
# pytest.set_trace()
#pytest.set_trace()
# pdb.set_trace()
# somethingelse.set_trace()
Проверьте, используя ripgrep
$ rg '^s?[^#] .set_trace()'
main.py
4: pdb.set_trace()
5: pytest.set_trace()
Теперь мы можем использовать git-secrets
, который запускается при перехвате предварительной фиксации, и это помешает нам зафиксировать эту строку
$ git secrets --add '^s?[^#] .set_trace()'
$ git add main.py
$ git commit -m 'test'
main.py:4: pdb.set_trace()
main.py:5: pytest.set_trace()