У меня есть набор серверных хуков 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 хранится на сервере, а не на клиенте. Можно было бы добавить этот файл в исходный коммит, но я никогда не видел, чтобы кто-нибудь объяснял, как это сделать.