Вы можете написать свой хук, используя C или C ++, если хотите.Большинство людей используют Perl или Python.
Главное, чтобы в вашем скрипте хука использовалось svnlook
, а не svn
.svnlook быстрее и безопаснее, чем svn
.На самом деле, в сценариях перед фиксацией вы должны использовать svnlook
, так как у вас нет ревизии репозитория.
Вот несколько вещей, о которых следует помнить о вашем post-commit
хуке:
- Вы не можете изменить ревизию и не пытаться зафиксировать изменения.Ваш пост-фиксационный хук в итоге вызовет сам себя.Если вы хотите, чтобы ваши разработчики следовали определенным параметрам, вам нужен хук
pre-commit
, который не срабатывает, если разработчики делают это неправильно. - Когда Subversion вызывает ваш хук
post-commit
, PATH
Переменная среды была удалена.Если вам нужен доступ к другой команде или файлу, вам придется указать полный путь самостоятельно. - Subversion передаст вам определенные параметры из командной строки .Не фактическая командная строка, но это означает, что вы можете найти эти параметры в
ARGV
.Вам будут переданы два параметра: - Путь к хранилищу на сервере (для команды
svnlook
). - Ревизия хранилища.
Все остальное, что вы должны вывести, хотя svnlook
(который вы можете запустить с помощью команды system
. Однако, поскольку вы на самом деле пишете вещи на C и C ++, вы можете использовать встроенный Subversion API ).
Еще одна возможность: использовать систему непрерывной сборки, такую как Jenkins , чтобы сделать грязную работу за вас.Возможно, вам будет проще работать через Jenkins, а не беспокоиться о том, как ловушка после фиксации может выполнить эту задачу.Одним из преимуществ Jenkins является то, что, когда что-то идет не так, вы не отправляете обратно ошибочные сообщения после фиксации пользователю (который, вероятно, не виноват).Вместо этого вы можете получить полный журнал того, что произошло, и предупредить человека, который действительно может решить проблему.
Вот образец одного , который я написал, который написан на Perl.Не знаю, принесет ли это вам пользу.