Как я могу создать перехват после фиксации, который вызывается только тогда, когда фиксации выполняются в TRUNK?
-
23-09-2019 - |
Вопрос
У меня есть репозиторий, который содержит следующие каталоги:
- ветви
- Теги
- багажник
Магистральный каталог содержит основную линию разработки.Я создал скрипт перехвата после фиксации для репозитория, который обновляет рабочую копию (trunk), когда пользователь совершает возврат в репозиторий.
Это выглядит примерно так:
/usr/bin/svn update /path/to/a/working/copy
Я только что создал ветвь кода, поскольку собираюсь начать некоторые серьезные изменения, но заметил, что когда я фиксирую свои изменения в branch, он вызывает перехват после фиксации и обновляет рабочую копию (copy of trunk).
Есть ли способ, которым я могу изменить либо мой сценарий перехвата после фиксации, либо настройку, которую я могу создать, чтобы обновлять рабочую копию только в том случае, если фиксация была сделана в магистральном каталоге, а не в каком-либо другом каталоге?
Решение
Как вы можете видеть в эта документация, параметры передаются скрипту после фиксации.
Репозиторий передает этой программе два аргумента:путь к репозиторию и номер новой редакции, которая была создана.
Перехват после фиксации может быть любой программой любого типа :скрипт на bash, программа на C, скрипт на python...Что происходит, так это то, что оболочка запускает эту программу с двумя параметрами.
Вы можете найти список интересных скриптов здесь.Хорошим началом было бы этот скрипт на python, который использует библиотеки python svn.
Пожалуйста, обратите внимание, что указанный путь не совпадает с путем к файлу, который вы регистрируете (см. Ответ Павла).Но использование этой информации с revnum должно помочь вам получить список изменений, из которого вы можете определить, были ли выполнены операции на магистрали или нет.
Другие советы
В дополнение к ответ от Bishiboosh, стоит отметить , что крючки могут быть Любой программа.То есть, если бы вы захотели, вы могли бы написать программу на C
.Параметры , которые передаются, описаны в документе.
Для получения хорошего хранилища сценариев, из которого можно черпать вдохновение, взгляните на страница инструментов subversion.В общем, если вы хотите выполнить некоторую условную обработку на основе содержимого транзакции, а вы это делаете, поскольку вы хотите обрабатывать, только если файлы находятся в trunk, то проще всего будет использовать Python, поскольку он поставляется с кучей инструментов для проверки транзакций. Этот скрипт это хорошее место, чтобы начать искать вдохновение.
Обратите внимание, что путь к параметру не совпадает с путем к файлу, который вы возвращаете.В конце концов, у вас может быть несколько файлов при проверке… Вам передается местоположение репозитория и редакция изменения.Используя эти две части информации, вы можете получить информацию об изменении из репозитория и использовать эту информацию, чтобы решить, выполнять действие или нет в перехватчике после фиксации.
Вот другой пример (на Perl), который явно проверяет путь к файлам при проверке.Это гораздо более сложный сценарий, но, скорее всего, основные части могут быть вырваны и использованы повторно.