svn hook для генерации файла из зафиксированных файлов

У меня есть хранилище SVN, которое имеет

trunk/file1.txt
trunk/file2.txt
trunk/fileR.txt

На сервере у меня есть рабочая копия оформления ствола (/var/www/trunk) принадлежит пользователю www-data,

fileR.txt доступно только для всех, кроме пользователя www-data (доступ ограничен authz или же svnlook author). fileR.txt должны быть получены путем объединения file1.txt а также file2.txt: cat file1.txt file2.txt > fileR.txt

То, что я хочу, это чтобы каждый раз, когда есть коммит trunk/file1.txt или же trunk/file2.txtдолжен быть запущен скрипт, который обновляет рабочую копию на сервере, объединяет файлы и фиксирует новую fileR.txt в хранилище.

Я имел в виду ловушку пост-фиксации, которая выполняет все вышеперечисленное, но я не уверен, сможет ли SVN обрабатывать новый коммит и до тех пор, пока предыдущий коммит не будет завершен.

Пример: Итак, commit1 с изменениями в file1.txt приходит, запускается ловушка перед фиксацией (если есть), транзакция фиксируется в базе данных, а затем запускается ловушка после фиксации. Хук post-commit фактически создает commit2, который необходимо завершить, прежде чем хук post-commit из commit1 действительно завершит работу.

Способна ли SVN сделать это? Если нет, какие другие инструменты / рабочие процессы вы предлагаете?

Спасибо

1 ответ

Решение

Допустим, вы делаете хук после фиксации, чтобы делать то, что вы хотите...

  1. Я фиксирую изменение в file1.txt.
  2. Хук Post-commit забирает изменения и создает новый файл fileR.txt
  3. Изменение после фиксации фиксирует это изменение, которое вызывает срабатывание вашего крючка перед фиксацией.
  4. И вы вернулись к шагу № 1

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

И, пока ваш хук post-commit делает все это, вы, пользователи, должны ждать завершения хука post-commit.

Плюс, если я сделаю коммит, моя рабочая копия устарела. Теперь я должен зафиксировать, а затем сделать обновление, потому что сервер сделал фиксацию.

Я надеюсь, что убедил вас, что это не очень хорошая идея. Это возможно, но это, конечно, не рекомендуется. На самом деле, если бы я видел, как инженер-строитель сделал что-то подобное, я бы их уволил.


Я предлагаю вам взглянуть на Дженкинс. Jenkins - это сервер непрерывной сборки. Что вы можете сделать, это попросить Дженкинса создать файл fileR.txt для вас каждый раз, когда выполняется коммит. Этот файл можно легко загрузить с сервера Jenkins и сделать его общедоступным. Вы также можете взять файл file.txt и создать PDF-файл для людей, пока он у вас.

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

Другие вопросы по тегам