Я хотел отредактировать комментарий журнала в обозревателе хранилища и получил сообщение об ошибке, что для хранилища нет ловушки pre-revprop-change. Помимо наличия страшного имени, что такое хук pre-revprop-change и как его создать?
169
Ответы:
По сути, это сценарий, который запускается до изменения неверсионного свойства в хранилище, чтобы вы могли более точно управлять тем, что происходит в вашем хранилище.
В дистрибутиве SVN есть шаблоны для различных ловушек, которые находятся в подкаталоге / hooks (* .tmpl, который вы должны редактировать и переименовывать в зависимости от вашей ОС, чтобы активировать).
источник
svnsync
зеркала, то скрипт по умолчанию нужно будет изменить, потому что он позволяет вносить изменения только в svn: log. Svnsync меняет больше, чем это, поэтому я просто вставляюexit 0
туда, чтобы разрешить все изменения свойств (так как это зеркало только для меня).pre-revprop-change
том же каталоге и сделайте его исполняемым для пользователя веб-сервера (в Linux).Для Windows вот ссылка на примерный пакетный файл, который позволяет вносить изменения только в сообщение журнала (но не в другие свойства):
http://ayria.livejournal.com/33438.html
В основном скопируйте приведенный ниже код в текстовый файл, назовите его
pre-revprop-change.bat
и сохраните в\hooks
подкаталоге своего репозитория.источник
Для Linux, чтобы разрешить издание комментария журнала,
pre-revprop-change.tmpl
вhooks
каталоге вашего хранилищаpre-revprop-change
www-data
)Отредактировано: (благодаря Линде)
0
для вида правок, которые вы хотите разрешить.источник
Здесь приведена ссылка на вопрос переполнения стека со многими распространенными хуками. Типы хуков Subversion , включая исходный
pre-revprop-change
хук для Windows, размещен здесь.Вы должны обратиться туда, поскольку они могут улучшиться с течением времени.
источник
Спасибо #patmortech
И я добавил ваш код, который «только тот же пользователь может изменить свой код».
источник
Имя сценария перехвата не так страшно, если вам удастся расшифровать его: это перехват изменения свойств перед ревизией . Короче говоря, цель
pre-revprop-change
хук-скрипта состоит в том, чтобы контролировать изменения неверсионных (ревизионных) свойств и отправлять уведомления (например, отправлять электронную почту при изменении свойства ревизии).В Subversion есть 2 типа свойств:
svn:needs-lock
иsvn:mime-type
), которые можно установить для файлов и каталогов,svn:log
иsvn:date
), которые устанавливаются в ревизиях репозитория .Версионные свойства имеют историю и могут управляться обычными пользователями, которые имеют доступ на чтение / запись к хранилищу. С другой стороны, неверсированные свойства не имеют никакой истории и служат главным образом для обслуживания. Например, если вы фиксируете ревизию, она сразу же получает
svn:date
время UTC вашего коммита,svn:author
ваше имя пользователя иsvn:log
сообщение журнала фиксации (если вы его указали).Как я уже указывал, цель
pre-revprop-change
хук-скрипта - контролировать изменения свойств ревизии. Вы не хотите, чтобы все, кто имеет доступ к репозиторию, могли изменять все свойства ревизии, поэтому изменение свойств ревизии по умолчанию запрещено. Чтобы позволить пользователям изменять свойства, вы должны создатьpre-revprop-change
хук.Самый простой крючок может содержать только одну строку:
exit 0
. Это позволит любому аутентифицированному пользователю изменять любое свойство ревизии, и его не следует использовать в реальной среде. В Windows вы можете использовать пакетный скрипт или скрипт на основе PowerShell для реализации некоторой логики вpre-revprop-change
ловушке.Этот скрипт PowerShell позволяет изменять
svn:log
только свойства и запрещает пустые сообщения журнала.Этот пакетный скрипт позволяет только пользователю "svnmgr" изменять свойства ревизии:
источник
Для пользователей ПК: расширение .bat у меня не работает при использовании на Windows Server. Я использовал VisualSvn, как предложил Django Reinhardt, и он создал хук с расширением .cmd.
источник
(Это решение, безусловно, имеет недостатки, так как ничего не проверено / запрещено. Но для моего случая - локального репо, которым пользуюсь только я - похоже, оно работает.)
источник