דָּוִדdavidov777 (daviddavidov777) wrote,
דָּוִדdavidov777
daviddavidov777

Жулики и воры и губернаторы.

ubversion, как и многие другие системы контроля версий, позволяет выполнять произвольные пользовательские команды в заданные фазы обработки коммита. В частности, в Subversion имеется триггер (hook) pre-commit, который запускается непосредственно перед тем как коммит окончательно попадёт в репозиторий. По сути, это просто одноимённый shell-скрипт который Subversion рассчитывает найти в директории hooks/ репозитория. В качестве одного из своих аргументов данный скрипт получает идентификатор текущей транзакции. По этому идентификатору скрипт может полностью проанализировать текущий коммит: какие файлы или директории были добавлены, удалены, изменены, получить новый контент файлов, diff изменений и т.д. Для этой цели можно воспользоваться утилитой svnlook либо модулем SVN::Look.

Если pre-commit hook вернёт 0, то коммит будет благополучно сохранён, а если нет — то вся транзакция будет отвергнута (т.е. все файлы, директории, изменения свойств). При этом вывод скрипта на STDERR будет перенаправлен svn-клиенту. Таким образом, вызывая Perl::Critic внутри pre-commit hook-а можно преградить коду с нарушениями дорогу в репозиторий.

От теории к практике

1. Загружаем и устанавливаем скрипт perlcritic-checker.pl

wget http://perlcritic-checker.googlecode.com/files/perlcritic-checker-1.2.6.tar.gz
tar -xzf perlcritic-checker-1.2.6.tar.gz
cd perlcritic-checker-1.2.6
perl ./Makefile.PL
make
make test
sudo make install

По-умолчанию, скрипт и документация будут установлены в /usr/local.

2. Создаём тестовый SVN-репозиторий

export SVN_REPO=/tmp/svn_repo
svnadmin create $SVN_REPO

3. Устанавливаем конфигурационные файлы

Во-первых, установим конфиг perlcritic-checker'а:

cat > $SVN_REPO/hooks/perlcritic-checker.conf<<'EOF'
#
# perlcritic-checker's config example
#
{
# Progressive mode: {0|1}. In progressive mode perlcritic-checker
# doesn't complain about existing violations but prevents
# introducing new ones. Nice feature for applying Perl::Critic
# to the existing projects gradually.
progressive_mode => 1,

# Emergency commits: {0|1}. There are situations when you *do* need
# to commit changes bypassing all checks (e.g. emergency bug fixes).
# This featue allows you bypass Perl::Critic using "magic" prefix in
# comment message, e.g.: svn ci -m "NO CRITIC: I am in hurry" FooBar.pm
allow_emergency_commits => 1,

# Magic prefix described above can be customized:
emergency_comment_prefix => 'NO CRITIC',

# Limit maximal number of reported violations. This parameter works
# differently in strict and progressive modes. In strict mode it
# will truncate long list of violations: only N most severe violations
# will be shown. In progressive mode such behaviour has no sense,
# that's why user will be asked to run perlcritic locally.
#
# In fact, this parameter is a workaround for a subtle bug in generic
# svn-client that happens when svn hook (i.e. perlcritic-checker.pl)
# outputs too much data: svn-client just reports "Connection closed
# unexpectedly". In order to reproduce this bug several additional
# conditions should be met:
# - repository access scheme: 'svn://' (svnserve daemon)
# - client and server on different machines
# - svn-client and -server are running on linux
#
# If you face the same problem, try to use the option below.
#max_violations => 50,

# SVN repository path -- to -- Perl::Critic's profile mapping.
#
# This feature allows you to apply different Perl::Critic's
# policies for different paths in the repository. For example,
# you can be very strict with brand-new projects, make an
# indulgence for some existing project and completely disable
# checking of auto-generated or third-party code.
#
# Each modified (added, updated, copied, moved) file name in the
# repository is matched against a sequence of patterns below.
# Keep in mind, *last* matching rule - wins.
#
# Profile paths can be either absolute or relative. In the later
# case they will be mapped under $REPOS/hooks/perlcritic.d directory.
profiles => [

# Apply very strict profile by default
{ pattern => qr{[.](pm|pl|t)$},
profile => 'perlcritic-brutal.conf',
},
],
}
EOF

В этой конфигурации сказано, что настройки Perl::Critic'a для всех *.pm, *.pl и *.t файлов необходимо брать из файла perlcritic-brutal.conf. Также мы включаем прогрессивный режим (читай ниже) и разрешаем экстренные коммиты, т.е. коммиты проверка которых не производится (NO CRITIC)
Недавно мне в интернете попалось очень интересное видео которое произвело на меня большое впечатление
вот ссылка для вас!

Заходите смотрите про губернаторов здесь!
Tags: Жулики и воры и губернаторы.
Subscribe

  • лего звездные войны

    Недавно в сети было мной обнаружено очень интересное предложение лего звездные войны и меня это реально заинтересовало.Я помню у меня в детстве были…

  • New age.................

    Заниматься еще больше торговлей!Понять куда пойдет тренд. Учиться , как можно больше задавать как можно больше вопросов.не терять время на всякую…

  • music

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments