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 ответ
Допустим, вы делаете хук после фиксации, чтобы делать то, что вы хотите...
- Я фиксирую изменение в file1.txt.
- Хук Post-commit забирает изменения и создает новый файл fileR.txt
- Изменение после фиксации фиксирует это изменение, которое вызывает срабатывание вашего крючка перед фиксацией.
- И вы вернулись к шагу № 1
Также существует проблема создания рабочей копии на вашем сервере, где может работать ваш хук post commit. Когда кто-то делает коммит, вам придется либо обновить или даже извлечь рабочую копию на вашем сервере, согласовать изменения, а затем сделать новый коммит, не применяя хук фиксации. Помните, что люди могут создавать ветви, поэтому вам может потребоваться несколько рабочих копий.
И, пока ваш хук post-commit делает все это, вы, пользователи, должны ждать завершения хука post-commit.
Плюс, если я сделаю коммит, моя рабочая копия устарела. Теперь я должен зафиксировать, а затем сделать обновление, потому что сервер сделал фиксацию.
Я надеюсь, что убедил вас, что это не очень хорошая идея. Это возможно, но это, конечно, не рекомендуется. На самом деле, если бы я видел, как инженер-строитель сделал что-то подобное, я бы их уволил.
Я предлагаю вам взглянуть на Дженкинс. Jenkins - это сервер непрерывной сборки. Что вы можете сделать, это попросить Дженкинса создать файл fileR.txt для вас каждый раз, когда выполняется коммит. Этот файл можно легко загрузить с сервера Jenkins и сделать его общедоступным. Вы также можете взять файл file.txt и создать PDF-файл для людей, пока он у вас.
Таким образом, ваш объединенный файл все еще доступен и может быть загружен другими процессами, но это не заставит ваш хук после фиксации запустить еще один раунд хуков. И fileR.txt доступен только для чтения всем, кто имеет доступ к этой конкретной работе Jenkins.