Как я могу создать перехват после фиксации, который вызывается только тогда, когда фиксации выполняются в TRUNK?

StackOverflow https://stackoverflow.com/questions/2146374

Вопрос

У меня есть репозиторий, который содержит следующие каталоги:

  • ветви
  • Теги
  • багажник

Магистральный каталог содержит основную линию разработки.Я создал скрипт перехвата после фиксации для репозитория, который обновляет рабочую копию (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), который явно проверяет путь к файлам при проверке.Это гораздо более сложный сценарий, но, скорее всего, основные части могут быть вырваны и использованы повторно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top