Как я могу получить хук post-commit, который вызывается только когда коммиты сделаны в TRUNK? - PullRequest
5 голосов
/ 27 января 2010

У меня есть хранилище со следующими каталогами:

  • филиалы
  • метка
  • багажник

Магистральная директория содержит основную линию разработки. Я создал скрипт перехвата пост-фиксации для хранилища, который обновляет рабочую копию (транка), когда пользователь фиксирует обратно в хранилище.

Это выглядит примерно так:

/usr/bin/svn update /path/to/a/working/copy

Я только что создал ветку кода, поскольку собираюсь начать некоторые важные изменения, но заметил, что когда я фиксирую свои изменения в ветке, он вызывает ловушку post-commit и обновляет рабочую копию (копию транка) .

Есть ли способ, которым я могу изменить либо свой скрипт ловушки после фиксации, либо настройку, которую я могу сделать, которая будет обновлять рабочую копию только в том случае, если фиксация была сделана в транковом каталоге, а не в любом другом каталоге?

Ответы [ 2 ]

4 голосов
/ 27 января 2010

Как вы можете видеть в этой документации , параметры передаются в сценарий пост-фиксации.

Хранилище передает этой программе два аргумента: путь к хранилищу и новый номер ревизии, который был создан.

Хук после фиксации может быть любой программой любого типа: bash-скрипт, C-программа, python-скрипт ... Что происходит, когда оболочка запускает эту программу с двумя параметрами.

Список интересных скриптов вы можете найти здесь . Хорошим началом будет этот скрипт на python , который использует Python SVN libs.

Обратите внимание, что указанный путь не совпадает с путем к файлу, который вы проверяете (см. Ответ Павла ). Но использование этой информации с revnum должно помочь вам получить список изменений, из которого вы можете определить, были ли выполнены операции на соединительной линии или нет.

2 голосов
/ 27 января 2010

В дополнение к ответу от Bishiboosh стоит отметить, что хуки могут быть любой программой. То есть, если вы хотите, вы можете написать программу на C. Передаваемые параметры описаны в документе .

Чтобы получить хорошее хранилище сценариев для вдохновения, взгляните на страницу инструментов Subversion . В общем, если вы хотите выполнить некоторую условную обработку, основанную на содержимом транзакции, и вы это делаете, поскольку вы хотите обрабатывать только файлы, находящиеся в транке, тогда будет проще использовать Python, поскольку это идет с куча инструментов для изучения транзакций. Этот сценарий - хорошее место для начала вдохновения.

Обратите внимание, что путь к параметру не совпадает с путем к файлу, который вы проверяете. В конце концов, вы можете иметь несколько файлов при регистрации ... То, что вы передаете, это местоположение хранилища, и пересмотр изменений. Используя эти две части информации, вы можете получить информацию об изменении из репозитория и использовать эту информацию, чтобы решить, выполнять ли действие или нет в хуке после фиксации.

Вот другой пример (в Perl), который явно проверяет путь к файлам при регистрации. Это гораздо более сложный сценарий, но, скорее всего, существенные части могут быть извлечены и использованы повторно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...