Хвост предварительной фиксации SVN для отклонения файлов Python с непоследовательным использованием вкладок - PullRequest
4 голосов
/ 26 февраля 2010

Интерпретатор Python может быть запущен с -tt, чтобы вызвать исключение TabError, если интерпретируемый файл имеет непоследовательное использование табуляции.

Я пытаюсь написать хук перед фиксацией для SVN, который отклоняет файлы, которые вызывают это исключение. Я могу передать файл в python -tt, но моя проблема в том, что файл также выполняется, помимо проверки. Есть ли способ сказать Python "просто проанализируйте файл, не запускайте его"? Или, может быть, какой-то другой подход будет лучше для достижения того, что я хочу.

Ответы [ 2 ]

6 голосов
/ 26 февраля 2010

Вы можете сделать это с помощью модуля py_compile:

$ python -tt -c "import py_compile; py_compile.compile('test.py', doraise=True)"

doraise=True вызовет исключение и вернется с ненулевым кодом выхода, который вы можете легко протестировать в ловушке перед фиксацией.

2 голосов
/ 26 февраля 2010

Предпочтительное использование табуляции в Python - это вообще не использование табуляции (используйте четыре пробела для отступа). Если это ваш стиль кодирования, то проблема может быть сведена к проверке наличия каких-либо вкладок в коде. И это легко сделать с помощью простого регулярного выражения, даже с помощью «grep», поэтому даже запускать интерпретатор не нужно.

Способ py_compile имеет и другое преимущество: он также проверяет синтаксис кода Python, что может быть желательно (хотя и требует немного вычислительной мощности сервера SVN).

...