PHP позволяет проверять скрипты на корректность синтаксиса при помощи php -l <filename>
- это удобно использовать при разработке. Некоторые IDE для PHP имеют такую функцию (либо позволяют определить макрос/скрипт для такой проверки при сохранении). Я для своего кода использую Bazaar и в ней определил плагин, который реализует такую проверку перед commit. Если проверка на к.л. файле не прошла, то плагин сообщит имя файла и выйдет из bzr не сделав commit.
Committing revision 1 to "/home/axel/test/".
[================================== ] Running pre_commit hooks [PHP syntax check pre-commit hook] - Stage 3/5
PHP syntax error in bad.php
Код плагина надо положить в .bazaar/plugins/php_check/__init__.py:
import os, sys
def php_pre_commit_hook(*args):
print
for kind in (args[6].added, args[6].modified):
for fobj in filter(lambda x[2] == 'file', kind): # walk TreeDelta
if fobj[0][-4:] == '.php':
status = os.system('php -l %s >/dev/null' % fobj[0])
if status:
print "PHP syntax error in %s" % fobj[0]
sys.exit(-1)
branch.Branch.hooks.install_hook('pre_commit', php_pre_commit_hook)
branch.Branch.hooks.name_hook(php_pre_commit_hook, 'PHP syntax check')
!!! Сильно подозреваю, что не есть правильно делать выход по exit, а надо возвращать какое-то значение в bzr, сообщающее об успехе или провале сделанной проверки. Но пока не нашёл этого в документации. Вообще эта пробная версия на скорую руку не отличается оптимальностью, просто для демонстрации возможностей bzr.
Комментарии
Это та система, которую планируется использовать для разработки на друпал.ру?
Один из кандидатов.
делать выход по sys.exit очень неправильно. не надо так делать. для bzr нужно сгенерировать какое-нибудь исключение, которое будет использоваться для вывода сообщения об ошибке.
Приглашаю в дискуссионную группу ru_bzr, где можно задать каверзные вопросы и про написание плагинов для bzr в том числе.
стопудов неправильно ага, исключение это логичный вариант, так и перепишу, спасибо. а где группа-то?
Да собственно группа на гугле: http://groups.google.com/group/ru_bzr
На основе твоего наброска я в эти выходные написал хук для проверки концовок строк. Ветка лежит здесь: http://bazaar.launchpad.net/~bialix/+junk/checkeol