Проверка синтаксиса PHP-файлов в Bazaar

Главные вкладки

Аватар пользователя axel axel 20 декабря 2007 в 16:46

PHP позволяет проверять скрипты на корректность синтаксиса при помощи php -l <filename> - это удобно использовать при разработке. Некоторые IDE для PHP имеют такую функцию (либо позволяют определить макрос/скрипт для такой проверки при сохранении). Я для своего кода использую Bazaar и в ней определил плагин, который реализует такую проверку перед commit. Если проверка на к.л. файле не прошла, то плагин сообщит имя файла и выйдет из bzr не сделав 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:

from bzrlib import branch
import os, sys

def php_pre_commit_hook(*args):
    print
    for kind in (args[6].added, args[6].modified):
        for fobj in filter(lambda Secret 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.

Комментарии

Аватар пользователя bialix bialix (не проверено) 3 января 2008 в 14:12

делать выход по sys.exit очень неправильно. не надо так делать. для bzr нужно сгенерировать какое-нибудь исключение, которое будет использоваться для вывода сообщения об ошибке.

Приглашаю в дискуссионную группу ru_bzr, где можно задать каверзные вопросы и про написание плагинов для bzr в том числе.

Smile

Аватар пользователя axel axel 3 января 2008 в 14:55

стопудов неправильно Smile ага, исключение это логичный вариант, так и перепишу, спасибо. а где группа-то?

Аватар пользователя bialix bialix (не проверено) 9 марта 2008 в 12:01

Да собственно группа на гугле: http://groups.google.com/group/ru_bzr

На основе твоего наброска я в эти выходные написал хук для проверки концовок строк. Ветка лежит здесь: http://bazaar.launchpad.net/~bialix/+junk/checkeol