SVN Импорт после фиксации

У меня есть набор серверных хуков Pre- и Post-Commit, которые упростят отслеживание изменений для нас (VisualSVN на сервере Windows, если это имеет значение):

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

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

Моя проблема заключается в пост-фиксации: кажется, что выполнение импорта (позже замененного svnmucc put) не работает, пока активна предыдущая фиксация (пользовательская фиксация, по-видимому, не завершается полностью до завершения этого скрипта). Таким образом, скрипт застревает здесь, без подробностей об ошибке или сообщении, и не выполняет пост-фиксацию.

Это проблемная строка (если я удалю Echo, фиксация остановится):

Echo svnmucc put %LineName% %Address% -F comment%TXN%.txt --non-interactive --no-auth-cache>Command.txt

Это результат в файле Command.txt, который успешно запускается, если его инициировать впоследствии:

svnmucc put Test2.exp https://10.49.1.52/svn/PlcLibraries/TestFolder/Lib/Test2.exp -F comment79-6m.txt --non-interactive --no-auth-cache

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

Поэтому у меня вопрос: есть ли способ заставить эту работу работать? Для нас наилучшим сценарием было бы то, что SVN каким-то образом управляет этим после успешной фиксации, но кажется, что запуск любого скрипта в Post-Commit заставляет SVN-клиент ждать завершения этих скриптов перед полным завершением.

Еще одна причина, по которой сценарии фиксации на стороне сервера были бы предпочтительнее, заключается в том, что вся операция экспорта в читаемый формат выполняется на сервере. Таким образом, файл .exp хранится на сервере, а не на клиенте. Можно было бы добавить этот файл в исходный коммит, но я никогда не видел, чтобы кто-нибудь объяснял, как это сделать.


person Jabbl    schedule 12.09.2018    source источник


Ответы (1)


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

...

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

...

Я предполагаю, что ваш скрипт-перехватчик запускает svn import или другую операцию, которая должна сделать новую фиксацию. Эта операция снова запустит ваши перехватчики фиксации, что приведет к возникновению цикла.

Поэтому у меня вопрос: есть ли способ заставить эту работу работать? Для нас наилучшим сценарием было бы то, что SVN каким-то образом управляет этим после успешной фиксации, но кажется, что запуск любого скрипта в Post-Commit заставляет SVN-клиент ждать завершения этих скриптов перед полным завершением.

Какой SVN-клиент используют ваши пользователи? Это TortoiseSVN? Используют ли они какие-нибудь другие клиенты?

Я спрашиваю о TortoiseSVN, потому что он поддерживает клиентские сценарии ловушек, и возможно, что выполнение этого экспорта / преобразования в формат *.exp было бы лучше выполнять на стороне клиента.

Не стесняйтесь расширять свой вопрос более подробной информацией - дополнительная информация поможет лучше понять ваш случай и требования.

person bahrep    schedule 14.09.2018
comment
Да, все наши клиенты будут использовать TortoiseSVN, но я не знаю способа удаленно установить клиентские скрипты? Отредактируем вопрос с более подробной информацией - person Jabbl; 17.09.2018